Facebook
Twitter
Google+
Kommentare
0

MeinPHP: Typsicheres Set – Auflösung Teil 2

So Tag 2 der Auflösung (Teil 1). Ich hoffe mal, dass ihr euch alle vor Spannung fast nicht mehr halten könnte. Heute will ich kurz die Lösung, die Timo und ich uns ausgedacht habe skizzieren. Vielleicht noch das ein oder andere UML Klassendiagramm und das wars dann auch schon. Wie fangen wir also an. Ein kurzes Resumé. Wir brauchen eine Klasse, die bestimmte Typen halten kann, aber jedes Element nur genau ein mal zulässt. Nicht mehr, nicht weniger.

Zu Beginn betrachten wir uns die Hilfsmittel, die PHP uns von Hause aus mitgibt. Wie es ja schon einige von euch gemacht haben, haben wir uns die, unserer Meinung nach, die best passendste Schnittstelle aus der SPL als Grundlage genommen. Dem Iterator Interface. Wichtig war uns, dass wir das Set später ganz einfach durchiterieren können, um so auf alle Elemente zugreifen zu können, die vorhanden sind. Und genau dies macht ein Iterator.

Getreu nach dem Paradigma „Separation of Concerns“ brauchen wir jetzt noch eine Klasse, die dafür sorgt, das Daten vorgehalten werden können. Wir haben diese Klasse Collection, in Anlehnung an die Java Klasse,  genannt. Ein schönes Interface drumrum und alles bestens.Wir können jetzt also durchiterieren und Daten sammeln. Wichtig war uns, dass wir die Collection unabhängig vom Set verwenden können.

Im nächsten Schritt wollen wir das Set, eine spezielle Collection kreieren. Dafür leiten wir die Collection ab und verbieten, dass ein Element mehrmals vorkommen kann. Der letzte Schritt, ist die Typsicherheit. Hier haben wir uns für das Decorator Pattern entschieden. Uns war wichtig, dass dieses spezielle Set auch mit anderen Einschränkungen kombiniert werden kann.

Als Klassendiagramm sieht es also wie folgt aus:

Type safe Set

Dass viele der Methoden einer Collection einen boolschen Wert zurückliefern, liegt an dem Java Interface, an das wir uns gehalten haben. Diese Methoden geben true zurück. sobald sich die Collection durch Aufruf die Collection verändert hat. retainAll erzeugt den Schnitt zweier Mengen. Neben den hier Aufgeführten Klassen gibt es noch drei Exceptions, die wir eingeführt haben.

Wie wir das ganze dann tatsächlich implementiert haben, zeige ich euch morgen.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen