Você está na página 1de 1

1,

Klassen können auf folgende weise miteinander in beziehung stehen:


-Komposition/Aggregation: (in UML durch leere bzw. volle diamanten dargestellt)i
mmer dann, wenn mehrere objekte einer Klasse in einer instanzvariablen vorkommen
.
in java, würde man dies zb. durch instanzvariablen, die objekte anderer klassen si
nd bzw. enthalten implementieren (listen, arrays etc. von objekten)
-Vererbung/Interfaceimplementierung: (in UML durch ein auf der spitze stehendes
dreieck dargestellt). in java geschieht dies durch "extends" bzw. "implements",
und bedeutet,
dass eine klasse alle attribute und methoden der oberklasse erbt, und diese gege
benenfalls erweitern oder ersetzten kann.
2,
Abstrakte Klassen kommen genau dann zum einsatz, wenn nur objekte der unterklass
en, aber keine objekte der abstrakten klasse gewünscht werden.
zb. klasse dish: es gibt kein "allgemeines dish", weil man nicht einfach nur ein
"essen" kochen kann - man kocht entweder eine suppe, oder nudeln etc.
abstrakte klassen dienen zur gliederung und zur vererbung von methoden, die die
subklassen gemein haben.
3,
Aggreggation und Komposition beschreiben beide beziehungen zwischen klassen, bei
denen eine klasse objekte der anderen klasse enthält.
im falle der komposition ist diese beziehung so stark, dass objekte der enthalte
nen klasse nicht sinnvoll alleine existieren können.
beispiele für "reine aggregation":
Pizza und Topping - ein topping kann auch existieren, ohne auf einer pizza zu se
in.
Fotoalbum und Foto - ein Foto kann man auch herausnehmen, und alleine betrachten
, ganz ohne album. es hört dadurch nicht auf zu existieren.
beispiel für "aggregation":
Text und Absatz: wenn der text verschwindet, so auch alle absätze, die in dem text
geschrieben wurden.
4,
Das Factory-Pattern ermöglicht die erzeugung eines objektes durch aufruf einer met
hode(die der factory), statt durch direkten aufruf eines konstruktors.
Der Vorteil dabei ist, dass aufrufende klassen von konkreten "produkt-klassen" e
ntkoppelt werden, und sich somit keine "gedanken" mehr über namen, konstruktoren,
etc.
der produkt-klassen machen müssen.
beispiel:
Betrachten wir eine programm, welches lebewesen simuliert.
angenommen, es gibt eine "lebewesen-factory", so würde die erzeugung eines hunde-o
bjektes folgendermaßen aussehen:
lebewesen x = factory.createanimal("Hund");
dadurch braucht man sich keine gedanken machen, wie die klasse "hund" konkret ve
rwaltet wird, oder ob sie überhaupt "hund" (oder dog?) heißt (es könnte auch säugetier s
ein!)
ohne factory:
hund x = new dog();
- dies hat den nachteil, dass man gewisse dinge über die klasse wissen muss (zb. i
hren namen).

Você também pode gostar