We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

08.3 Composite-Pattern

00:00

Formal Metadata

Title
08.3 Composite-Pattern
Title of Series
Number of Parts
54
Author
License
CC Attribution - NonCommercial - ShareAlike 3.0 Germany:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language
Producer

Content Metadata

Subject Area
Genre
RobotFunction (mathematics)OpenOffice.orgLattice (order)Graphics softwareProgrammer (hardware)Konstruktion <Mathematik>Computer animation
Lattice (order)Program codeCodeComputer animation
Class diagramOpenOffice.orgSocial classRamificationComponent-based software engineeringComputer scienceGraph theoryRectangleQuicksortProgram codeCodeEllipseDiagramProgram flowchart
Component-based software engineeringInstanz <Informatik>Function (mathematics)Social classComputer animation
Engineering drawingDiagram
Derived set (mathematics)RectangleSocial classComputer animation
CladeFunction (mathematics)Component-based software engineeringEngineering drawingDiagramSource codeComputer animation
Engineering drawingDiagram
Function (mathematics)Component-based software engineeringGraphics softwareSocial classImplementationSoftwareData modelComputer animation
Pattern languageComputer animationEngineering drawing
Graphics softwareComputer animation
Transcript: German(auto-generated)
das nächste pattern was ich zeigen will ist composite verbundstoff wäre das auf deutsch also das verbunden ist der verband der verbund das kennen sie aus zeichentrogramm ich habe jetzt hier einfach mal open office im press aufgemacht ich baue mehr objekte der jetzt zum beispiel den kann ich für sich
verschieben den kann ich für sich drehen die ellipse kann ich für sich verschieben kann ich für sich drehen die freihandlinie kann ich für sich verschieben und so weiter sie können die aber auch zusammenfassen zu einer gruppe
okay zusammenfassen zu einer gruppe und dann haben sie die insgesamt auf einen schlag das verhält sich insgesamt wie ein einzelnes ich kann die insgesamt verschieben ich kann sie insgesamt drehen die gruppe verhält sich wie die einzelne elemende das ist eine ganz typische funktion
in zeichenprogrammen dass ich gruppieren kann und war natürlich keine zeichenprogramme hier entwickeln denken sie an virtuelle kraftwerke sie können diverse kraftwerke zusammenbinden in ein kompositum ein virtuelles kraftwerk und das soll sich wieder verhalten wie ein kraftwerk dann haben sie ein dummes beispiel
aus den regenerativen energie dass man ähnliche konstruktionen da braucht dass sich eine eins verbund so verhalten soll wie ein einzelnes ding das pattern dafür nennt sich entsprechend komposit verbund verband
für den nummer drei den text schreibe ich nummer drei ich mal erst noch was auf für nummer zwei also der program code kommt hier in nummer drei ich mir erst noch mal auf wie das abstrakt aussieht für die nummer zwei
logisch soll das so sein es gibt so ein verbund ein komposit und dieser verbund enthält Einzelteile die heißen dann nachher lief
wird gleich klar warum die lief heißen blatt der verbund kann aber auch wieder ein verbund enthalten das ist erlaubt an der stelle wenn ich sachen zusammenfassen dass ich auch zusammengefasst die sachen noch mal zusammenfassen und da können vielleicht auch wieder weitere einzelteile drin sein
vielleicht sogar wieder ein komposit aber ich will es nicht übertreiben ich mache jetzt mal lauter lief sind das wäre nachher so eine logische struktur dahinter drei sachen gruppiert zu einem komposit und dieses komposit gruppiert mit zwei weiteren sachen zu einem weiteren komposit dann haben wir auch sofort die
Sprachregelung hier komposit der verbund klar bei mehrere sachen drinnen hängen die Einzelteile heißen liebst weil das hier aussieht wie ein baum wenn sie sich ein letztes semester erinnern ein baum in der informatik oder ein baum in der grafentheorie
der sei ja immer gerne falsch rum aus der wächst ja immer gerne mit der wurzel von oben nach unten das hier wäre die wurzel und die Letzten hier die keine weiteren verzweigungen mehr haben das waren die blätter wie beim baum hier hängen die blätter an den letzten verzweigungen und deshalb heißt das hier lief die einzelteile heißen deshalb liefst weil es ab da keine weiteren
verzweigungen gibt daher die bezeichnung das ist eine ein versuch diese logische struktur darzustellen das ist kein vererbungsdiagramm vorsicht
Kein klassendiagramm was schreibe ich in kein vererbungsdiagramm schreibe ich in kein vererbungsdiagramm nicht durcheinander bringen Es erbt nicht lief von composite das ist nicht gemeint es gibt so eine art kind
mutterverhältnis Aber auf andere weise nicht bei der vererbung hier das hier geht es nicht um vererbung sondern vielmehr enthält ein composite eine sammlung von liefs und wenn man will noch eine sammlung von composites und dieses composites kann wieder weitere liefs oder sogar weitere composites enthalten also kein vererbungsdiagramm hier die vererbung selbst
Ich habe so noch platz in nummer zwei die vererbung selbst sieht etwas anders aus als klassendiagramm aufgemalt das sieht deutlich einfacher aus Ich habe das lief des einzelteils zum beispiel in den open office ellipse oder ein rechteck
Was auch immer ich ein einzelteil haben mag also auch typischerweise diverse sorten von liefs und dann habe ich ein composite
eine zusammensetzung und beides das erbt von component Deshalb ist es dann austauschbar eine komponente beides ist eine komponenten beides ist eine komponente Component in der form
So sieht dann das klassendiagramm aus also hier Vorsicht das ist die logische struktur wer jetzt wen enthält Und das ist die klassensstruktur ich möchte Komponenten haben die austauschbar Einzelteile sind oder
zusammensetzungen sind und diese zusammensetzungen Können dann wieder sachen von derselben sort enthalten das ist der trick diese composites können wieder sachen von derselben sort enthalten die liefs sind atomare einzelteile das kann man jetzt in diesem klassendiagramm noch weiter führen das fände ich ein bisschen
Hard für den anfang ich hoffe das ist klarer wenn ich es hinschreibe in program code wie das gemeint ist Also das wird jetzt nummer drei ich möchte dass die einzelteile und diese gruppen
Eine gemeinsame mutterklasse haben component ist die also muss ich die hinschreiben
Und diese mutterklasse soll die üblichen funktionen haben zum beispiel zum verschieben zum drehen wenn es jetzt um zeichenobjekte geht wenn es um virtuelle kraftwerke geht werden wahrscheinlich irgendwelche Energiekontingente buchen an der stelle aber damit es leichter zu verstehen ist lasse ich jetzt mal das bei der idee der zeichen funktionen da habe ich vielleicht so was wie
public wollte bewegen einfach das jeweilige teil Y vielleicht habe ich eine rotationsfunktion Funktionen um die farbe zu ändern und so weiter und so weiter stünde da alles drin schreibe ich da alles nicht rein alle gemeinsamen funktionen alles was die
Einzelteile können dass jedes einzelteil kann aber was auch diese zusammensetzung können denn beide erben von component Was werde ich sinnvollerweise Mit dieser klasse component machen das schreibe ich da noch zu Die her sollte unbedingt abstrakt sein dass ich niemals
dass ich niemals ein instans bauen kann denn Das was ich im wahren leben habe sind entweder die einzelteile oder die gruppen aber diese abstrakte geschichte component die gibt es ja nicht wirklich Insofern wäre es sinnvoll zu sagen die soll abstrakt sein Es soll nicht wirklich eine instanz davon gebaut werden können dann geht garantiert was schief wenn man das versucht
Wenn das abstrakt ist ist das schöne mache ich das hier einfach auch abstrakt und sage ok die kindklassen soll nicht drum kümmern Wie denn diese bewegung und das drehen und das einfärben und was auch immer stattzufinden hat Das ist die mutterklasse sie sehen das ja gewaltig eine zeile
Jetzt könnte man wenn man bei dem bei der analogie von den zeichenfunktionen bleibt würde man sagen ich möchte ein Einzelteil haben zum beispiel ein rekt engel das wäre ein beispiel für ein lief ich möchte eine Funktion haben die mir
Eine klasse haben die recht echte darstellt die ist natürlich dann abgeleitet von den component das war ja der sinn der geschichte und Müsste diese abstrakte methode implementieren
Overeight So sehe das aus ich glaube dass jetzt ich lasse mal so stehen oder Ich nehme das hier mit der exception mal raus platz zu sparen Da müsste jetzt Irgendwas nennenswertes passieren genauso würde ich ableiten eine libse und text und freihandlinie und so weiter das wären alles die liefs
die einzelteile Und jetzt kommt die zweite ableitung die zweite große andere ableitung wenn ich das bild angucken dass wir das composite dieser Uppsala nicht da der verbund
Ich leite obendrein nicht aus sondern klasse ich leite obendrein diesen verbund composite ebenfalls von component Der soll natürlich auch Dann diese bewegungsfunktionen haben und drehfunktion und einfacher funktion was man auch noch hat also auch die überschreiben
Aber es kommt noch was hinzu das wesentliche an diesem Composite ist dass er eine sammlung enthalten muss wie kann ich das jetzt formulieren
Also das composite so eine gruppe soll wissen wer dabei ist und das ist wirklich zwei minuten Sehen sie das muss ja dann ganz blöd einfach eine liste von component sein in dieser form component nenne ich die dann einfach
So vielleicht schreibe ich sofort da die neue liste hin so dass die auch erzeugt wird so sehe das aus dieses composite um die gruppierung der verbund Hat nicht nur die üblichen funktionen sondern es merkt sich auch wer enthalten ist und wer kann enthalten sein
alles mögliche component ist ja die mutterklasse Für die mutterklasse für die einzelteile wie für gruppen wenn sie sagen composite merkt sich eine liste an components kann in der liste sowieso können der liste sowohl einzelteile auftauchen
Einzelteile auch tauchen wie auch zusammensetzungen wenn ich mir eine liste von component merke so spielt das plötzlich mit der Polymorphie zusammen diese liste hier kann kreuz und quer alles mögliche enthalten und dann wird man typischerweise noch solche funktionen haben dass man neue elemente einhängt das passt dann zu dem was sie
gesagt hat mit mit der maus auswählen und so weiter ich würde an den koordinaten feststellen wer denn dazugehört Und im endeffekt würde dann so eine funktion aufgerufen werden wie public void et füge ein neues eine neue komponente was dann wieder ein einzelteil sein kann oder
so eine zusammensetzung component das ist schwierig so füge eine neue komponente hinzu die methode würde dann aufgerufen wahrscheinlich gibt es auch eine methode um eine komponente wieder rauszuholen Und der nimmt einfach components und hängt Components und hängt hinten an dieser liste die neu übergebende
Komponente das als beispiel was man da jetzt so drinnen hätte natürlich bräuchte man x andere funktionen um das korrekt zu machen also noch mal im überblick Die frage ist wie kann man sowas realisieren
Einzelteile Einzelteile verhalten sich haben bestimmtes verhalten drehen farbe einstellen verschieben Und eine gruppe von einzelteilen soll dieselbe verhalten haben eine gruppe soll für ein einzelteil stehen können
Da soll es keinen gravierenden unterschied geben zwischen einzelteilen und gruppen die lösung dafür ist dieses composite pattern sind wie abstrakt diese lösung dann einfach ist das sind jetzt drei klassen die passend zusammen spielen und der job für
Wie baue ich jetzt die details zusammen haben die details sind dann im allgemeinen relativ einfach wenn man mal die idee gekriegt hat auch an dieser stelle brauche ich dieses pattern Dann führen sie die lücken ein und das ist mehr oder minder fertig Grundgedanke damit die Einzelteile sich verhalten können wie die gruppen oder besser die gruppen sich verhalten können wie die einzelteile
Beide erben von einer gemeinsamen mutterklasse und alles was sie gemeinsam können ist in dieser Mutterklasse drin hier habe ich jetzt nur diese eine methode man kann sie verschieben Das ist jetzt zum beispiel für ein blatt so ein einzelteil Es implementiert denn eben die entsprechenden methoden und fertig die gruppe der verbund hier composite
Ist eine nummer komplizierte er muss auch die entsprechenden Methoden implementieren dass er dasselbe kann wie die Einzelteile aber obendrein muss er merken sich merken was denn seine Einzelteile sind dieses ding ist ja eine sammlung von
Einzelteilen und das dümmste wäre das jetzt mit einer liste zu machen und dann braucht man natürlich noch extra methoden die diese liste verwalten wer soll Jetzt dazu wer soll wieder raus vielleicht kann ich noch fragen wie viel insgesamt drin sind und so weiter das ist das composite pattern wenn sie mich fragen kommt das deutlich häufiger vor als das singleton pattern aber ich hoffe sie verstehen warum ich mit dem singleton angefangen habe
Das hier können sie auf einem bildschirm sehen ist eine klasse das hier sind mindestens drei klassen Und passt definitiv nicht mehr auf einen bildschirm das ist eher so das übliche kaliber von patterns dieses composite dass so zwei drei klassen zusammen spielen und dann auch jeweils zwei drei methoden
darin rumfliegen um ein relativ allgemein gegebenes problem und übliches problem auf allen zu lösen auf bewährte weise zu lösen das hier ist das was dann typischerweise im hintergrund läuft wenn sie ein zeichenprogramm haben oder irgendeine andere software in der einzelteile
und gruppen dasselbe können nächstes mal erkläre ich dann state und model view controller