• MeinPHP: Typsicheres Set – Auflösung Teil 2

    von am 3. Januar 2009

    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.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    Keine Kommentare »

    Noch keine Kommentare

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.