[linux-l] Re: SW-Design / Modules vs. Objects/Classes
Axel Weiß
aweiss at informatik.hu-berlin.de
So Okt 23 16:42:00 CEST 2005
Peter Ross schrieb:
> On Sun, 23 Oct 2005, Axel Weiß wrote:
> >> | FP-approach: | OO-approach:
> >>
> >>
> >> ---------------|-------------------------|-------------------------
> >> adding a new | add one function, | Must edit all classes,
> >> operation over | other functions | adding a new method
> >> things | unchanged | to every class
> >> ---------------|-------------------------|-------------------------
>
> In Objective-C kann man nachfragen, ob die Methode existiert
> (respondsToSelector).
>
> Wenn ja, fuehrt man die Methode aus, wenn nicht, halt nicht..
Hi Peter,
was willst Du damit sagen? Was hat das mit dem Thema FP-/OO-Sicht zu tun?
> So kann man z.B. in eine Liste alle moeglichen Objekte dreintun. Und
> wenn diese Liste benutzt wird, um etwas zu malen, werden die Objekte
> nach einer Paint-Methode gefragt, wenn es sie gibt, kann man das
> Objekt malen, indem man die Methode aufruft.
>
> Dazu muessen die Objekte nicht einmal einen gemeinsamen Vorfahren
> haben.
Es wäre aber besser (aus OO-Sicht), sie hätten einen gemeinsamen
Vorfahren. Wenn dieser die Paint-Methode virtuell bereitstellt und eine
leere Implementierung dafür hat, braucht man keine Abfrage, ob die
Methode existiert. Man ruft sie einfach auf. Objekte (Klasseninstanzen),
die eine Paint-Methode haben, dürfen sie jetzt anwenden, Objekte, die
keine haben, werden einfach übergangen.
> Das entspricht z.B. dem Messaging bei gaengigen GUIs. Wenn ein Fenster
> z.B. eine Message geschickt bekommt, reagiert es nur, wenn es eine
> Methode hat, um darauf zu reagieren.
>
> Ich denke, wie man an verschiedenen Beispielen sieht, ist die Tabelle
> so starr nicht, es ist von den Features einer konkreten Sprache
> abhaengig.
Das sehe ich anders. Es ist Zweierlei, ob man Konzepte umsetzt oder
Sprachfeatures nutzt. Konzepte sind an bestimmte Sichtweisen geknüpft
und lassen sich im Zweifelsfall auch in C oder Assembler umsetzen.
Zugegeben, bei manchen Konzepten wäre das ziemlich mühsam, aber darauf
kommt es mir nicht an. Wenn eine Sprache für ein gegebenes Konzept keine
direkte Unterstützung hat, lässt sich das Konzept dennoch durch
entsprechende Programmierdisziplin umsetzen. Ich setze seit Jahren
erfolgreich OO-Konzepte mit C um (Kapselung, Vererbung, spätes Binden
von Methoden, Polymorphie).
Die Tabelle ist, denke ich, nicht als starres Schema zu verstehen,
sondern als eine Gegenüberstellung der Konsequenzen zweier Sichtweisen,
bezogen auf die Wiederverwendbarkeit von Code. Das Interessante dabei
ist, dass die Codeerweiterung in zwei Richtungen geschehen kann
(Hinzufügen von Merkmalen, Hinzufügen von Aktionen), und jede Sichtweise
für eine Art der Erweiterung prädestiniert scheint. So lässt sich Code,
der nach OO-Konzepten strukturiert ist, besonders gut durch Hinzufügen
neuer Klassen (Merkmale) erweitern - FP-Code besonders gut durch
Hinzufügen neuer Aktionen. Die Tabelle sagt nichts über
Programmiersprachen oder deren Features.
Gruß,
Axel
Mehr Informationen über die Mailingliste linux-l