am 23. Juni 2010
Vor einem Jahr oder so kam ich mal auf die Idee eine PHPedia aufzubauen, ein paar Begriffe einfach erläutern und schön irgendwie „abheften“. Habe ich eigentlich ziemlich schnell wieder fallen gelassen, weil ich glaube, dass man damit die Leser ziemlich schnell langweilen kann. Heute ist das Thema aber wieder aufgepoppt. Ich habe da ein paar Begriffe, die ich neu gelernt habe und die vielleicht auch nicht zum Sprachgebrauch jeden Lesers gehören. Wie wäre es also, wenn ich diese für mich neuen Ausdrücke hier kurz beschreibe? Ich glaube das ist eine brillante Idee.
Der heutige Artikel soll sich also um Adam-Klassen drehen. Eigentlich sind sie auch ganz schnell erklärt. Fangen wir aber erst mal mit dem nächsten Verwandten dieser Spezies an, der Gott-Klasse. Eine Gott-Klasse ist eine Klasse, die von allen anderen Verwendet wird. Sozusagen das Schweizer-Armee-Messer der Softwareentwickler. Nur leider nicht in einem McGyver-Sinn. (Wer kann mir übrigens ohne nachzuschauen, den Vornamen von McGyver sagen?). Ganz klar baut man sich viel zu viele Abhängigkeiten mit so einer Klasse auf und schon haben wir einen fiesen Code-Smell in unserer Applikation, denn jede Änderung an der Klasse zieht viele Änderungen in den anderen nach.
Bei Gott-Klassen haben wir also eine nutzende Abhängigkeit. Bei Adam-Klassen ist das ein wenig anders. Dort haben wir nämlich eine ableitende Abhängigkeit. Jede mögliche Klasse leitet sich also von diesem Ursprungsobjekt ab. Meist steckt in so einem Objekt auch so viel nützliche Funktionalität, dass man ja doof wäre, wenn man nicht davon ableitet. Das ist aber meistens eine blöde Idee. Irgendwie gibt es ja den OOP-Leitspruch, dass man nur ableiten soll, wenn man die Elternklasse konkretisieren will und nicht, wenn es darum geht Funktionalitäten zu sammeln. Dafür sollte man die Delegation verwenden. Da können wir aber auch gerne mal wann anders drauf eingehen.
Wahrscheinlich kennt jeder diese Art sich seinen Code zu verbauen, für mich war nur der Name neu und deswegen wollte ich ihn teilen.