![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Hi 2 Themen die mir auf dem Herzen liegen: Packages und Interfaces. Packages ist mir im Grund klar, allerdings hab ich nur begrenzt eine Vorstellung, wie ich das ganze auch wirklich effektiv nutzen kann bzw sollte. Ein Package dient ja als zusammenschluß mehrerer Klassen, die thematisch zusammenarbeiten, aber nicht mittels Vererbung etc in direkter Verbindung stehen. Doch kann mir mal jemand ein Beispiel sagen und kurz begründen, wo mehrere Pakete sinn machen? Vielleicht fällt dann der Groschen. Interfaces sind mir von ihrer Erstellung her klar, allerdings hab ich keinen Schimmer von deren Nutzen. Dienen sie der Schnittstellendefinition für spätere Erweiterungen der Programme? Beispiel wäre auch hier schön. Da ich nicht faul bin was das lesen angeht, nehm ich auch einfache Posts mit nem Link dankbar an. Allerdings nicht das Javabuch, da sind mir die Erklärungen nicht aussagekräftig genug. Ich kann mit denen nichts anfangen.
__________________ I did it my way - Senseless-Blog Geändert von WarrenFaith (24.02.2006 um 11:40 Uhr) |
| | |
| | Nach oben #2 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.129
|
Packages ermöglichen es dir, mehrere Klassen mit dem gleichen Namen zu definieren (solange das nicht im gleichen Package geschieht). Es gibt z.B. eine Klasse "ArrayList" im Package "java.util". In PHP könntest du deshalb keine andere Klasse mit dem Namen ArrayList mehr definieren. In Java steckst du sie in ein anderes Package und gut ist. Das Package-Konzept ist, naiv ausgedrückt, eine Erweiterung des Namespace-Konzeptes. Wofür Interfaces gut sind, wirst du lernen, wenn du sie mal brauchst. Bis dahin: Interfaces and Packages, aus dem Java-Tutorial. |
| | |
| | Nach oben #3 |
| Sesselkleber Registriert seit: 17.01.2005
Beiträge: 581
| Packages Dann schau mal hier in die Insel. Packages sind auch dann hilfreich für Fremdbibliotheken. Stell dir vor du schreibst ein Programm mit einer Klasse "Data". Der Name wird sicherlich häufig verwendet, was passiert also wenn du eine fremde Bibliothek verwenden möchtest, die auch eine Klasse "Data" hat? Wie soll das Programm wissen welche von beiden es benutzen soll? Daher gilt es als grundlegender Fehler seine Klassen gar nicht in Paketen abzulegen, zumindest ein "Grundpaket" sollte bestehen um Konflikten mit Bibliotheken aus dem Weg zu gehen. Normalerweise verwendet man seine Domain mit dem suffix voran also sein Paket und dann ein Unterpaket für Gruppe oder Projekt. Schreibe ich also einen Code für das Forum müßte ich das folgende Paket verwenden: net.developersguide.xxx Da die Domain einzigartig ist brauche ich mir keine Gedanken machen, dass es zu Konflikten kommt, es sei denn jemand hält sich nicht an die "Regeln". Übrigens gehen keine "-" in den Pakaten, womit der developers-guide eigentlich nicht konform ist. Gruß Sparrow |
| | |
| | Nach oben #4 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
hm ok Packages hab ich nun verstanden. zu interfaces: ich hab grade das 3. mal Interfaces im Javabuch gelesen und versteh das jetzt so, dass ein Interface eine Art Mehrfachvererbung simuliert. Da in einem Interface aber nur die Methoden beschrieben werden, versteh ich nur bedingt den Sinn. Denn wenn ich diese Methode nur rein namentlich Erbe, diese aber "überladen" muss, dann kann ich sie doch auch gleich in der eigentlichen Klasse ohne Interface definieren/verwenden. Oder sind die durchs Interface definierten und in der Klasse dann überladenen funktionen auf die nächsten Klassen nicht vererbbar? Sprich Klasse A mit Interface Z hat Methode 1 bekommen und Klasse B erbt von A, hat aber nicht Interface Z implementiert und daher auch Methode 1 nicht?
__________________ I did it my way - Senseless-Blog Geändert von WarrenFaith (24.02.2006 um 12:04 Uhr) |
| | |
| | Nach oben #5 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.129
|
Natürlich hat Klasse B die Methode 1, wenn es von A erbt... Das Problem mit Interfaces ist ganz einfach: Ich kann dir jetzt hier nen dutzend Beispiele geben, warum Interfaces total genial sind, nur müsste ich dafür stundenlang tippen und sämtliche Grundlagen der Objekt-Orientierten-Programmierung rauskramen - Polymorphie z.B. Wie gesagt: Sobald es dazu kommt, dass Interfaces nützlich für dich werden könnten, wirst du sie verstehen. |
| | |
| | Nach oben #6 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Hm ok, dann werd ichs ja hoffentlich bei Zeiten mitkriegen Danke für die Antworten.
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #7 |
| Sesselkleber Registriert seit: 17.01.2005
Beiträge: 581
|
Nur als kleiner Ansatzpunkt und nur so rein theoretisch. Angenommen eine deiner Klassen implementiert das Interface KeyListener. Dieser Listener möchte verschiedene Methoden dieser Klasse aufrufen wenn eine Taste gedrückt wird. Unter anderem keyPressed(KeyEvent) und keyTyped(KeyEvent). Das Interface KeyListener zwingt dich durch seine implementierung diese Methoden anzulegen sonst läßt sich der Code nicht kompilieren. Ansonsten würde er die Methoden entsprechend nicht finden und es würde einen Fehler geben weil er versucht Methoden anzuspringen die nicht da sind. Gruß Sparrow |
| | |
| | Nach oben #8 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Also kann ein Interface durch den Zwang, die beschriebenen Methoden auch umzusetzen, zur Komplettierung dienen. Interessant und nicht schlecht.
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #9 |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
|
ein weiterer vorteil ist, das man mehere verschiedene klassen unter dem aspekt ihrer gleichen eigenschaften betrachten und verwenden kann. als gutes beispiel kann man hier z.b. listen verwenden. wie du vieleicht schon herausgefunden hast gibt es in java mehrer verschiedene typen von listen. ArrayList und LinkedList, die nach aussen hin die gleiche funktionalität bieten aber innen anders aufgebaut sind. bei der verwendung von listen ist es aber ziemlich egal, ob die elemente jetzt nun in einem array oder in einer in einer kette aufbewahrt werden, deswegen betrachten wir sie aus unter gesichtspunk ihrer gemeinsammen eigenschaften. nähmlich dem interface List. nehmen wir mal an du willst eine debug funktion für listen schreiben, ohne interfaces müsstest du also für jeden listentyp eine methode implementieren. Code: public class ListDebug {
public static void dumpList(ArrayList list){
...
}
public static void dumpList(LinkedList list){
...
}
}
Code: public class ListDebug {
public static void dumpList(List list){
...
}
}
diese implmentiert nun das interface list und kann somit ohne veränderungen an der debug klasse von ihr behandelt werden. natürlich könnte man das auch mit einer Basisklasse erledigen, aber das führ zu problemen wenn eine liste von einer anderen klasse als der listen basisklasse erben soll, da in java keine mehrfachvererbung möglich ist. |
| | |
| | Nach oben #10 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
*grübel* Das Interface dient als eine Art Klasse und bietet mir daher einen Datentyp List an, daher muss ich nur eine Methode schreiben.... mja klingt logisch und vor allem sehr sinnvoll. Ich glaub ich komm der Sache näher. Danke!
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #13 | |
| Sesselkleber Registriert seit: 17.01.2005
Beiträge: 581
| Zitat:
Die Funktion (also den Inhalt der Methode) bestimmst du selber. Daher ist es egal wieviele von den implementierten Interfaces die gleiche Methode benötigen. Gruß Sparrow | |
| | |
| | Nach oben #14 |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
|
das gibt keine probleme, ausser der return wert unterscheidet sich Code: interface A {
public int getX();
}
interface B {
public double getX();
}
class AB implements A,B{
//hier gibts probleme
}
der compiler spuckt folgende meldung aus Code: interfacetest.AB cannot implement getX() in interfacetest.B; attempting to use incompatible return type Code: interface A {
public int getX();
}
interface B {
public int getX();
}
class AB implements A,B{
//kein thema
}
|
| | |
| | Nach oben #15 |
| Erfahrener Benutzer Registriert seit: 23.11.2005 Ort: Stadtallendorf
Beiträge: 139
|
Nun eine Frage von mir Woher weiß die Klasse AB welche getX() Methode sie aufrufen soll, wenn sogar die return typen gleich sind. Ein Überladen der Methode ist in dem Fall ja nicht möglich, oder wie wird das gehandhabt???
__________________ Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. |
| | |
| | Nach oben #18 |
| Erfahrener Benutzer Registriert seit: 23.11.2005 Ort: Stadtallendorf
Beiträge: 139
|
Ja das ist mir klar, aber wenn es 2 identische Methoden in einer Klasse gibt, dann muss doch die Klasse irgendwie entscheiden welche der beiden Methoden sie aufrufen soll. Der Inhalt der Methode ist doch beim Aufruf irrelevant. Oder wird das beim aufrufen entschieden? Z.B. java Code:
__________________ Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. Geändert von karahead (25.02.2006 um 15:12 Uhr) |
| | |
| | Nach oben #19 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.129
| java Code:
Oder anders: Da beide Interfaces eine Methode mit der gleichen Signatur vorschreiben, wird immer genau die selbe Methode aufgerufen... |
| | |
| | Nach oben #20 |
| Erfahrener Benutzer Registriert seit: 23.11.2005 Ort: Stadtallendorf
Beiträge: 139
|
Ahhh, nun hab ich's. Ich hab den Wald vor lauter Bäumen nicht gesehen Jetzt versteh ich auch warum der return-type gleich sein muss. thx @all
__________________ Die Menschen wünschen sich Unsterblichkeit, aber wissen nichts anzufangen an einem verregneten Sonntag Nachmittag. |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Packages und Strukturen im Eclipse | WarrenFaith | Eclipse | 14 | 12.03.2007 10:00 |
| Fluent Interfaces | robo47 | PHP-Programmierung | 0 | 29.12.2006 11:54 |
| alle Klassen eines Packages ermitteln | ehli75 | Allgemeine Java-Programmierung | 3 | 16.12.2005 13:30 |
| Implementierung des Comparable Interfaces | ibs | Allgemeine Java-Programmierung | 5 | 23.11.2005 18:05 |
| packages benutzen | los_flammos | Allgemeine Java-Programmierung | 8 | 15.03.2005 14:49 |