Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Web Analytics
Cookie Policy Terms and Conditions Prototyp (Entwurfsmuster) - Wikipedia

Prototyp (Entwurfsmuster)

aus Wikipedia, der freien Enzyklopädie

Ein Prototyp (engl. Prototype) ist ein Entwurfsmuster (design pattern) aus dem Bereich der Softwareentwicklung und gehört zur Kategorie der Erzeugungsmuster (Creational Patterns). Neue Instanzen werden aufgrund prototypischer Instanzen ("Vorlagen") erzeugt. Dabei wird die Vorlage kopiert und an neue Bedürfnisse angepasst. Das Muster ist eines der sogenannten GoF-Muster (Gang of Four, siehe Viererbande).

Inhaltsverzeichnis


[Bearbeiten] Verwendung

Ein Prototyp findet Anwendung, wenn

  • die Erzeugung weiterer Instanzen einer Klasse teuer ist und sich die Objekte ähneln,
  • die zu instanziierenden Klassen erst zur Laufzeit bekannt sind,
  • eine Hierarchie von Fabriken parallel zu einer Hierarchie von Produkten vermieden werden soll oder
  • wenn die Objekte einer Klasse nur wenige Zustandskombinationen einnehmen können; oder
  • wenn die Bearbeitung von Vorlagen sehr ähnlich oder gleich der von Objekten ist.

[Bearbeiten] UML-Diagramm

Bild:Prototyp.png

[Bearbeiten] Akteure

  • Prototyp
    • definiert eine Schnittstelle zur Kopie eines Objektes
  • KonkreterPrototyp
    • kopiert sich selbst durch Implementation der Schnittstelle. Man unterscheidet als Extremfälle zwischen flacher Kopie (Shallow Cloning) und tiefer Kopie (Deep Cloning); ersteres lässt Verweise auf andere Objekte stehen, zweiteres kopiert auch die referenzierten Objekte. I. d. R. wird eine tiefe Kopie eines Prototyps hergestellt (außer für nicht-modifizierbare Objekte), die genauen Details müssen aber von Fall zu Fall geklärt werden.
  • Klient
    • erzeugt neue Objekte als Kopie bestehender Objekte
    • modifiziert neue Objekte

Anmerkung: Die Verwendung einer clone()-Methode ist nicht gleichbedeutend mit der Anwendung eines Prototyp-Musters. Im Prototyp-Muster wird konzeptuell zwischen den Prototypen und den (Nutz-)Objekten unterschieden, es dient also nicht jedes Objekt (einer Klassenhierarchie) als Prototyp. Daher soll beim Kopieren des Prototyps zum Zwecke der Objekterzeugung auch zumindest das "Status=Prototyp"-Flag (o.ä.) verändert werden, und daher gilt nicht mehr, dass der Prototyp gleich dem erzeugten Objekt ist. Sinnvollerweise wird dafür eine eigene Instantiate-Methode oder eine Clone-Methode mit Parameter verwendet.

[Bearbeiten] Vorteile

  • Komplexe Objekte lassen sich schneller erzeugen.
  • Neue Unterklassen können zur Laufzeit eingebunden werden.
  • Neue Objekte können durch Variation der Struktur spezifiziert werden.
  • Es gibt keine Erzeuger-Klassenhierarchie parallel zur Klassenhierarchie der Produkte.

[Bearbeiten] Nachteile

  • Die Erstellung einer Kopie eines Objektes kann aufwendig sein.
  • Jede Unterklasse muss Kopie-Operation implementieren.
  • Eventuelle Initialisierungen des kopierten Objekts müssen zusätzlich erfolgen.

[Bearbeiten] Verwendung in der Analyse

In der Dokumentenverarbeitung (z.B. Microsoft Office, Open Office) ist das Prototyp-Muster Standard: Die Vorlagen werden mit denselben Tools wie die eigentlichen Dokumente bearbeitet; zum Erstellen eines Dokuments wird eine Vorlage kopiert und dann weiterbearbeitet. Oft gibt es eine Standard-Vorlage (z.B. "Normal.dot"), die als minimaler Prototyp für Objekte oder andere Vorlagen dienen kann.

[Bearbeiten] Beispiel

  • Sowohl im JDK als auch in .Net wird das Prototyp-Muster nicht explizit verwendet; nur bei der Klasse javax.swing.text.EditorKit ist angeführt, dass neue Instanzen durch Klonen einer anderen Instanz erzeugt werden sollen. Viele Methoden im JDK implementieren allerdings eine public-clone()-Methode, die prinzipiell als Grundlage eines Prototyp-Patterns verwendet werden kann.

[Bearbeiten] Verwandte Entwurfsmuster

Einerseits konkurrieren abstrakte Fabrik und Prototyp miteinander, weil sie beide unterschiedliche Arten von Objekten erzeugen können. Andererseits lassen sie sich miteinander kombinieren, wenn eine abstrakte Fabrik Prototypen erzeugt, die dann anschließend ohne Zuhilfenahme einer Fabrik geklont werden können.

Auf der Seite Prototype Pattern ist das Prototype-Muster implizit mit einer Fabrikmethode verbunden, die über "indizierte virtuelle Konstruktoren" die zu klonenden Vorlagen-Objekte findet: In einem "Registry" werden Vorlage-Objekte unter einem beliebigen Schlüssel (Name, Aufzählung) abgelegt und beim Erzeugen selektiert. Üblicherweise wird aber beim Prototyp-Muster nicht erwartet, dass die Selektion des zu klonenden Objekts über ein solches Registry erfolgt.

[Bearbeiten] Weblinks

Prototype Pattern (englisch)

Kompositum und Dekorierer werden häufig gemeinsam mit Prototypen verwendet.

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu