Portal > Foren > Java > Allgemeine Java-Programmierung > Begriffshilfe Packages und Interfaces
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 24.02.2006, 11:29 Nach oben    #1
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard Begriffshilfe Packages und Interfaces

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)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 11:45 Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.129
Standard

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.
pago ist gerade online  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 11:48 Nach oben    #3
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 581
Standard

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
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 11:55 Nach oben    #4
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

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)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 12:31 Nach oben    #5
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.129
Standard

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.
pago ist gerade online  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 12:59 Nach oben    #6
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

Hm ok, dann werd ichs ja hoffentlich bei Zeiten mitkriegen

Danke für die Antworten.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 13:02 Nach oben    #7
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 581
Standard

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
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 13:09 Nach oben    #8
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

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
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 13:25 Nach oben    #9
Erfahrener Benutzer
 
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
Standard

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){
  ...
 }
}
aber da jede liste das interface List implementiert kannst du dir die arbeit sparen und musst nur eine funktion implementieren
Code:
 public class ListDebug {
 public static void dumpList(List list){
  ...
 }
}
jetzt kannst du z.B. eine neue liste schreieben z.B. DatabaseTableList,
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.
beny_mcde ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 13:30 Nach oben    #10
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

*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
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 14:01 Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
Standard

schritt für schritt zur erleuchtung...
beny_mcde ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 14:23 Nach oben    #12
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 427
Standard

da hätte ich auch mal ne frage, was ist, wenn ich ein meine klasse von 2 Interfaces erben lasse, die beide die methode public String getName() oder void setX() hat??
Xean ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 14:34 Nach oben    #13
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 581
Standard

Zitat:
Zitat von Xean
da hätte ich auch mal ne frage, was ist, wenn ich ein meine klasse von 2 Interfaces erben lasse, die beide die methode public String getName() oder void setX() hat??
Ein Interface zwingt dich nur dazu die Methoden anzulegen.
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
sparrow ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 14:35 Nach oben    #14
Erfahrener Benutzer
 
Registriert seit: 28.08.2004
Ort: konstanz am bodensee
Beiträge: 190
Standard

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
 }
sind nicht kompatibel zueinander
der compiler spuckt folgende meldung aus
Code:
interfacetest.AB cannot implement getX() in interfacetest.B; attempting to use incompatible return type
aber
Code:
 interface A {
  public int getX();
 }
 interface B {
  public int getX();
 }
 class AB implements A,B{
  //kein thema
 }
funtzt ohne probleme
beny_mcde ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 21:18 Nach oben    #15
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

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.
karahead ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.02.2006, 22:01 Nach oben    #16
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Das Interface legt nur fest, wie die Klasse auszusehen hat. Der Inhalt der Methoden wird von dir selbst bestimmt.
Lars ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2006, 00:46 Nach oben    #17
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 427
Standard

mit einem interface gibst du nur die methoden-namen vor. deshalb hat keine methode in einem interface ein body.
Xean ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2006, 15:10 Nach oben    #18
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

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:
  1. B bclass = new AB();
  2. bclass.getX();
__________________
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)
karahead ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2006, 15:15 Nach oben    #19
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.129
Standard

java Code:
  1. public class AB implements A,B {
  2.     public int getX() {
  3.         return 1;
  4.     }
  5.    
  6.     public static void main(String args[]) {
  7.         AB ab = new AB();
  8.         int x;
  9.         x = ((A)ab).getX(); // 1
  10.         x = ((B)ab).getX(); // 1
  11.         x = ab.getX(); // 1
  12.     }
  13. }

Oder anders: Da beide Interfaces eine Methode mit der gleichen Signatur vorschreiben, wird immer genau die selbe Methode aufgerufen...
pago ist gerade online  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.02.2006, 14:14 Nach oben    #20
Erfahrener Benutzer
 
Benutzerbild von karahead
 
Registriert seit: 23.11.2005
Ort: Stadtallendorf
Beiträge: 139
Standard

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.
karahead ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ä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


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45