Skript mit Dateiname als Variable
-
ja, so kannst du eine Art OOP in Sprachen ohne Objektmodell simulieren. Vergleiche auch python's "self"-Parameter in den Methoden.
- was will uns das sagen ? Man kann auch forth in javascript simulieren, ist javascript deshalb eine concatenative language, oder was?
Der Unterschied zeigt sich spätestens dann, wenn du messages kaskadieren willst. Das geht mit echtem message passing einfach durch Aneinanderhängen der messages:
#(1 2 3) allButFirst allButLast printOn: Transcript.
ich finde, die Lesbarkeit des Gegenstücks ohne message passing ...
printOn(&Transcript, allButLast_Array(allButFirst_Array(add_Array(add_Array(&emptyArray,1),2),3))))
... fällt im Vergleich etwas ab
Aber auch Polymorphie stelle ich mir mit Funktions- (statt Methoden-)Aufrufen bei statischer Typisierung schwierig vor - schließlich muß das erste Argument (der Zeiger auf das "Objekt") ja einen Typ haben.
Drittens, wie ist das mit "state hiding"? Wer verbietet den Zugriff auf privates in einer solchen OO-Simulation?
-
!rr!rr_. schrieb:
Der Unterschied zeigt sich spätestens dann, wenn du messages kaskadieren willst. Das geht mit echtem message passing einfach durch Aneinanderhängen der messages:
#(1 2 3) allButFirst allButLast printOn: Transcript.
ich finde, die Lesbarkeit des Gegenstücks ohne message passing ...
printOn(&Transcript, allButLast_Array(allButFirst_Array(add_Array(add_Array(&emptyArray,1),2),3))))
... fällt im Vergleich etwas ab
Das ist doch nur Syntaxzucker. Ich will hustbaer nicht nochmal zitieren.
Aber auch Polymorphie stelle ich mir mit Funktions- (statt Methoden-)Aufrufen bei statischer Typisierung schwierig vor - schließlich muß das erste Argument (der Zeiger auf das "Objekt") ja einen Typ haben.
Wo genau ist das Problem? Bei virtuellen Funktionen erstellst du dir ne vtable.
Drittens, wie ist das mit "state hiding"? Wer verbietet den Zugriff auf privates in einer solchen OO-Simulation?
Das ist ne ganz andere Baustelle.
-
Michael E. schrieb:
Das ist doch nur Syntaxzucker.
das ist ja interessant.
- Dann kannst du sicher mal den folgenden einfachen
Smalltalk-Ausdruck in gleichwertige C-Funktionsaufrufe umwandeln?Object class class isMemberOf: Metaclass class.
-
oder formuliere das mal mit C und Funktionsaufrufen:
o := Object new. Object compile: 'foo ^123'. o foo.
(hierbei wird dem Object o zu dessen Lebenszeit eine neue Fähigkeit hinzugefügt und abgerufen - ohne das Objekt zu zerstören oder neu zu erzeugen)
-
@!rr!rr_.
Je mehr du schreibst, desto mehr festigt sich bei mir der Verdacht zu einer Überzeugung, dass du nie wirklich programmiert hast, und es auch nicht wirklich verstehst.Kann es sein dass du vielleicht Informatik studierst (man beachte die Gegenwartsform)? Das würde einiges erklären...
EDIT: nur um Misverständnisse zu vermeiden: ich will dich damit nicht für doof erklären, denn das bist du ganz sicher nicht. Auch an theoretischem Wissen fehlt es nicht. Und mit "nie wirklich programmiert" meine ich längere Praxiserfahrung in realen Projekten.
----
Nochwas: was ist bitte der Unterschied zwischen einem Funktionsaufruf und einem Methodenaufruf? Antwort: keiner. Beide können statisch oder dynamisch gebunden werden, bei beiden ist wenn die Sprache es unterstützt multiple Dispatch möglich etc. Der Unterschied ist Schall und Rauch. Syntax und Namen. Und vollkommen uninteressant wenn es um die Prinzipien von etwas im allgemeinen, oder OOP im speziellen geht.
-
!rr!rr_. schrieb:
(hierbei wird dem Object o zu dessen Lebenszeit eine neue Fähigkeit hinzugefügt und abgerufen - ohne das Objekt zu zerstören oder neu zu erzeugen)
Und das ist die Essenz der OOP? Dass das Typsystem dynamisch ist?
selten so einen Bloedsinn gehoert...
hoer einfach auf hustbaer. Das alles ist nur syntax zucker - mehr nicht.
-
ich bin untröstlich, hustbaer ...
An euren ratlosen Antworten lese ich ab, daß wir uns in Wirklichkeit einig sind, daß reines object message passing weit mehr ist als Syntaxzucker für Funktionsaufrufe.
-
!rr!rr_. schrieb:
An euren ratlosen Antworten lese ich ab, daß wir uns in Wirklichkeit einig sind, daß reines object message passing weit mehr ist als Syntaxzucker für Funktionsaufrufe.
Wenn das so ist (was ich zwar bezweifle), dann sprichst du eine Sprache die keiner versteht.
Way to go, damit wirst du weit kommen
-
hustbaer schrieb:
Wenn das so ist (was ich zwar bezweifle), dann sprichst du eine Sprache die keiner versteht.
also, keiner ist etwas übertrieben - es gibt schon mehrere Smalltalk'er.
-
Du hast überhaupt nicht verstanden was ich damit sagen wollte.
Klar, wenn es für dich ausser Smalltalk nichts auf der Welt gibt...Bloss dann fang bitte nicht an über irgendwelche abstrakten Konzepte wie OOP zu schreiben.