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).