Interface zwischen 2 Programmierern

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Moin,

ich hab gerade gelesen, dass ein Interface hilfreich sein kann, wenn 2 oder mehrere Programmierer an einem Programm arbeiten.
diese 2 Programmierer machen sich Methoden aus und schreiben diese in ein Interface, danach kann jeder gegen das Interface programmieren,

so ganz kann das aber nicht stimmen:

angenommen ein Programmierer schreibt eine Verwaltung und der andere die Objekte, welche Verwaltet werden sollen

Verwaltung <-> Personen, Tiere

dann machen sich diese beiden ein Interface "Lebewesen" aus und der der die Verwaltung programmiert, programmiert gegen "Lebewesen", und der der die Klassen Personen und Menschen programmiert, programmiert ebenfalls gegen "Lebewesen".

Was ich jetzt nicht ganz verstehe ist, das der Programmierer, welcher die Verwaltung programmiert, ja auch was von den Klassen Personen und Tieren wissen muss, um diese zu instanzieren.

Was ist dann also der Vorteil eines Interfaces, außer das man die Personen und die Tiere in einer Collection "Lebewesen" verwalten kann.

Beste Grüße,
 

diggaa1984

Top Contributor
wenn er sie instanziiert muss er wissen welche Lebewesen es gibt, korrekt, aber mehr auch nicht. Alles andere (Methodenaufrufe, etc.) wird über das Interface geregelt, das heisst er kann Personen wie Tiere über die selben Methodensignaturen bearbeiten und muss dazu nur wissen das es Lebewesen sind, und nicht ob da grad ne Person oder ein Tier vor ihm steht:

Code:
ArrayList<Lebewesen> lwl = new ArrayList<Lebewesen>();

lwl.add(new Person());
lwl.add(new Tier());

for (Lebewesen lw: lwl) {
   lw.setIrgendwas("Foo");
}

so in der Art ^^
 
S

SlaterB

Gast
Instanziieren ist immer der Feind aller Interface,
aber alles andere funktioniert

das Interface beschreibt, welche Methoden angeboten werden, vielleicht sowas wie gibAlter, gib Platzbedarf, gibPreis, gibHaltbarkeit usw,
nun kannst du in der Verwaltung die kompliziertesten Algorithmen nur Unternehmensoptimierung schreiben und dabei tausende Male gibPreis usw. aufrufen, ohne dass es entsprechende Klassen überhaupt geben muss,

das ganze ist natürlich nur ein theoretisches Gebilde, könntest es höchstens mit einer Dummy-Implementierung testen,
mit einer Methode
getPreis() {
return 5;
}

-------

die einzelnen Lebewesen oder vielleicht nur die genau eine implementierende Klasse können währendessen in aller Ruhe separat entwickelt werden,
mit tausenden Zeilen Quellcode zur sehr komplizierten Berechnung des Preises usw.
 
B

ben200xx

Gast
Hi,

der Verwalter muss nichts von Personen und Tieren wissen, da er ja nur mit dem Interface arbeitet.
D.h. das Inferface Lebewesen definiert z.B. die Methoden Atmen, Fortpflanzen.
Also Arbeitet der Verwalter nur mit den Methoden. Dass es sich z.B. um eine Klasse Person die Lebewesen implementiert und zusätzlich noch die Methode Sprechen implementiert, interessiert die Verwaltung nicht, da diese Methode nicht zum Interface Lebewesen gehört.
 
S

Spacerat

Gast
Relativ simpel: Die Aussage, das Der Programmierer der Verwaltung Kenntnis von den finalen Klassen (hier Personen und Tiere) des Interfaces (hier Lebewesen) haben muss, ist schlicht weg falsch. Die Verwaltung (ObjectStore) nimmt halt nur solche Objekte auf, die das Interface implementieren. Mal ein Beispiel mit einer typisierten ArrayList als Verwaltung. Dann sollte es Klar werden.
Code:
// das Interface
interface Lebewesen
{
    // Methoden deklarieren...
}

// Der Objekt-Programmierer
class Person implements Lebewesen
{
    // Methoden von Lebewesen implementieren
}

class Tier implements Lebewesen
{
    // Methoden von Lebewesen implementieren
}

Person friedl = new Person();
Tier kimba = new Tier();

// Die Verwaltung:
ArrayList<Lebewesen> store = new ArrayList<Lebewesen>();

store.add(kimba);
store.add(friedl);

mfg Spacerat

@Edit: Man seid ihr schnell... oder ich zu langsam... :-(
 

e9926044

Bekanntes Mitglied
aber so wie ich das verstehe, steht

Code:
Person friedl = new Person();
Tier kimba = new Tier();

in der Klasse Verwaltung und deshalb muss der Programmierer, der die Verwaltung programmiert,
Kenntnis über die konkreten Klassen haben muss,

lg
 

Wildcard

Top Contributor
e9926044 hat gesagt.:
in der Klasse Verwaltung und deshalb meine ich auch, dass der Programmierer, der die Verwaltung programmiert,
Kenntnis über die konkreten Klassen haben muss,
Hängt davon ab was alles Teil dieser Verwaltung ist. Grob gesagt, der Autor der ArrayList kennt nicht alle Objekte die ich darin ablege.
 
S

Spacerat

Gast
e9926044 hat gesagt.:
aber so wie ich das verstehe, steht

Code:
Person friedl = new Person();
Tier kimba = new Tier();

in der Klasse Verwaltung und deshalb muss der Programmierer, der die Verwaltung programmiert,
Kenntnis über die konkreten Klassen haben muss,

lg
... und genau das ist ein Irrtum...

mfg Spacerat
 

diggaa1984

Top Contributor
ich glaube das Wort Kenntnis wird hier überbewertet :D

Wenn ich Instanzen erstellen will, welche Personen oder Tiere sind, dann muss ich, egal wo ich diese Instanzen definiere, die nötigen Klassen kennen. "Kennen" im Sinne von "wissen wie sie heissen und wovon sie erben, oder was sie implementieren", mehr ist nicht notwendig. Kenntnis bezüglich Implementierung der vom Interface vorgeschriebenen Methoden ist nirgends notwendig, wenn ich gegen ein Interface programmiere (eventuell Angaben über Datenstrukturen, welche zur Realisierung des Problems genutzt wurden .. Bsp ArrayList vs. LinkedList oder so).
 

didjitalist

Bekanntes Mitglied
der ansatz ist eigentlich schon nicht mehr ganz korrekt. wenn der entwickler der verwaltung nicht bloß "Lebewesen", sondern auch "Hund" und "Katze" kennen muss, dann braucht man auch "Hund" und "Katze" als interface.

wenn er sich solche dinger auch noch erzeugen können soll, dann kann er ein weiteres interface nehmen, welches entsprechende "Lebewesen" erzeugen kann.

die notwendige infrastruktur müsste also ungefähr so aussehen
Code:
interface Lebewesen
{
   int anzahlBeine();
}

interface Hund extends Lebewesen
{
  void machWau();
}

interface Katze extends Lebewesen
{
  void machMiau();
}

interface Zeuger
{
  Hund zeugeHund();
  Katze zeugeKatze();
}
 

slawaweis

Bekanntes Mitglied
Gast hat gesagt.:
Was ist dann also der Vorteil eines Interfaces, außer das man die Personen und die Tiere in einer Collection "Lebewesen" verwalten kann.
der Vorteil eines Interfaces in diesem Fall ist die Abstraktion der Funktionen/Eigenschaften einer Klasse (oder der Aufgabe, falls die finale Lösung aus mehreren Klassen besteht). Die konkrete Klasse muss dabei nicht mal existieren oder es gibt mehrere equivalente Implementierungen.

Interfaces sind ein gutes Mittel um die Arbeit im Team gut zu verteilen. Doch dazu gehört normalerweise mehr. Erst mal muss man gute Interfaces erstellen, damit später weniger nachgebessert werden muss. Auch sollte man klären, wie man später die Erweiterung des Interfaces organisiert. Da gibt es die Möglichkeit einfach das Interface zu erweitern und dann sollen alle ihre Programmteile aktualisieren oder man bedient sich der unschönen Lösung mit "interface Lebewesen2 extends Lebewesen".

Zweitens sollte man klären, wie die einzelnen Programmteile bis zu der Verschmelzung getestet werden. Wenn für die Tests keine Instanzen einer konkreten Implementierung benötigt werden, dann hat man im Grunde auch keine Probleme. Wenn man jedoch an lebendigen Objekten testen will, muss man in der Designphase mit den Interfaces auch gleich die Dummy Klassen vereinbaren, also z.B. "LebewesenDummy". Diese enthalten die minimalste Lösung zu einem Interface in Form einer instanzierbaren Klasse.

Drittens, erstellt sich jede Teilgruppe im Team Factory-Methoden (nach dem Factory-Pattern), um die Testobjekte auf einfache Art zu bekommen. Das wäre z.B. so was:

Code:
public class LebewesenFactory
{
 public static Lebewesen createLebewesen()
  {
  return new LebewesenDummy();
  }

 public static Lebewesen createLebewesen(Object param1, Object param2, Object param3)
  {
  Lebewesen l = new LebewesenDummy();
  l.setParam1(param1);
  l.setParam2(param2);
  l.setParam3(param3);
  return l;
  }

 public static Lebewesen createLebewesen(String type)
  {
  if(type.equals("Tier"))
    return new LebewesenDummy("Tier");
  else if(type.equals("Mensch"))
    return new LebewesenDummy("Mensch");
  else
    return new LebewesenDummy("Alien");
  }
}

// ...

ArrayList<Lebewesen> list = new ArrayList<Lebewesen>();

list.add(LebewesenFactory.createLebewesen());
list.add(LebewesenFactory.createLebewesen(1, 2, 3));
list.add(LebewesenFactory.createLebewesen("Tier"));
list.add(LebewesenFactory.createLebewesen("Mensch"));
list.add(LebewesenFactory.createLebewesen("C# Programmierer"));

Jetzt kann man sich ganz bequem Testobjekte mit LebewesenFactory.createLebewesen(...) erstellen. Wenn dann die richtige Implementierung von Lebewesen zu Verfügung steht, müssen nur die Methoden in der LebewesenFactory verändert werden und es kann sofort getestet werden. Weiterhin hat die Factory den Vorteil, dass man so auf einfache Weise mehrere Implementierungen von Lebewesen austesten kann, falls z.B. 2 verschiedene Teilgruppen an verschiedenen Umsetzungen gearbeitet haben oder es inzwischen eine Version 2 gibt.

Falls dann irgendwann mal alles gründlich ausgetestet ist und die LebewesenFactory nicht mehr gebracht wird, kann man über Refactoring oder einfach Find/Replace die Factory Aufrufe in direkte Instanziierungen umwandeln. Allerdings, falls man das Factory-Pattern mal gründlich verstanden hat, arbeitet man eher damit, als mit "new" :D

Slawa
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Interface, aber die Methoden bleiben teilweise gleich Allgemeine Java-Themen 35
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
OnDemand Interface imlementieren Allgemeine Java-Themen 4
Buroto Interface Allgemeine Java-Themen 2
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B JaxB und @XmlIDREF mit Interface Allgemeine Java-Themen 1
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
Kirby.exe Autocloseable Interface Allgemeine Java-Themen 2
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
S Interface, generischer Datentyp, Exception? Allgemeine Java-Themen 3
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
mrBrown Namensfindung Fluent-Interface Allgemeine Java-Themen 0
J Logik in Interface Allgemeine Java-Themen 2
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
B eigenes Consumer Interface Allgemeine Java-Themen 0
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
N GUI Interface, swing Allgemeine Java-Themen 7
Thallius Konzeptproblem User-Interface Allgemeine Java-Themen 5
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
N Problem mit Generics und Interface Allgemeine Java-Themen 4
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
M Interface einer Library implementieren Allgemeine Java-Themen 3
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
J Interface Serializable Methodensignatur Allgemeine Java-Themen 2
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
F Interface IInterface oder Interface? Allgemeine Java-Themen 3
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
T Interface Probleme Allgemeine Java-Themen 8
M Queues und Queue Interface Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
W Java Native Interface und "mp3player" Allgemeine Java-Themen 3
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
pg1337 Interface-Frage Allgemeine Java-Themen 24
S Interface Welchen Interface Stil favorisiert ihr? (usability) Allgemeine Java-Themen 17
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
K Interface Interface comparable machen Allgemeine Java-Themen 9
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Trick für Compilerfehler bei fehlendem Interface Allgemeine Java-Themen 12
X Interface - Klasse einladen Allgemeine Java-Themen 6
G Interface -> InterfaceImplementierung Allgemeine Java-Themen 3
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
R Interface instanzieren Allgemeine Java-Themen 8
B Frage zu Interface und List Allgemeine Java-Themen 4
KrokoDiehl JNI: native im Interface Allgemeine Java-Themen 4
S normale vererbung als interface Allgemeine Java-Themen 2
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
S interface verbung problem Allgemeine Java-Themen 9
S problem programm mit interface: Allgemeine Java-Themen 3
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Interface und von Thread ableiten Allgemeine Java-Themen 6
R Interface Serializable technische Begrenzung Allgemeine Java-Themen 2
T Interface-Referenz Allgemeine Java-Themen 2
L interface abstrakte klasse Allgemeine Java-Themen 21
S Interface Geschäftslokik & GUI Allgemeine Java-Themen 6
C Schnittstellen(interface) Allgemeine Java-Themen 9
N List<? implements "Interface"> geht nicht Allgemeine Java-Themen 13
D javadoc interface + implementation + @overrides Allgemeine Java-Themen 16
G Interface oder abstrakte Klasse Allgemeine Java-Themen 4
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
G class, interface, or enum exp? Allgemeine Java-Themen 2
S Interface Klasse überladen. Allgemeine Java-Themen 2
K Inneres Interface äußere Klasse Allgemeine Java-Themen 7
T Frage zu interface und "guter Programmierstil" Allgemeine Java-Themen 4
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
S Frage zu Interface Allgemeine Java-Themen 7
J Objektorientiert - Interface & Klassen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
T "Programming against the interface" sinnvoll? Allgemeine Java-Themen 18
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
A Was ist der genau Sinn eines Interface? Allgemeine Java-Themen 13
E Oberbergriff für class und interface Allgemeine Java-Themen 20
D QuickSort, Interface Allgemeine Java-Themen 2
R Interface für Arithmethik? Allgemeine Java-Themen 3
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12
L Interface Frage! Allgemeine Java-Themen 25
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
F Ein interface und private Methoden? Allgemeine Java-Themen 13
G nichtabstrakte Funktion zu einer Interface hinzufügen Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben