Leser: 1
![]() |
|< 1 2 3 4 >| | ![]() |
40 Einträge, 4 Seiten |
murphy+2008-03-24 06:01:22--KurtZ+2008-03-23 20:53:21--[...] Und da die Terminologie von OOP für mich ziemlich inkoherent ist (manche bezeichnen z.B. mit "Objekte" die "Instanzen" andere die "Klassen") und diverse quasistandards einander beißen (smalltalk, Java, ...) würde mich doch interessieren wo du diese spezielle Definition für "Klasse" herholst. [...]
Hmm, einen offiziellen Standard gibt's dafür wohl nicht. Ich bin aber einfach mal davon ausgegangen, dass der Begriff Klasse recht einheitlich im Sinne von "Kombination aus Datenstruktur und Methoden" verwendet wird jedenfalls ist das die Bedeutung wie sie in der Wikipedia steht ....
Wenn Du anmerkst, dass zum Beispiel die Terminologien von Java und Smalltalk unterschiedlich sind, so ist das eigentlich auch kein Wunder, denn Java gehört zur klassenbasierten Familie objektorientierter Sprachen und Smalltalk zur prototypenbasierten.
murphy+2008-03-24 06:01:22--Dass irgendwo Klassen Objekte genannt werden, habe ich eigentlich noch nie gesehen. ... Weißt Du noch, wo Dir diese andere Bezeichnungsweise begegnet ist?
1 2 3 4 5 6 7 8 9 10 11 12 13
sub new_closure { my %self=@_; # initdata $self{methode1} = sub { my ($para1)=@_; return "$para1 $self{data1}"; }; return \%self; } $inst=new_closure( data1 =>"value 1", ); print $inst->{methode1}("GET: ");
KurtZ+2008-03-24 13:53:11--[...] Tatsächlich? meine Recherche dazu zählt Smalltalk nicht zu den Prototypischen. [...]
Quote[...] Es ist mittlerweile üblich prototypische OO als "Classless" zu bezeichnen. aber die Leute die solche Kriterien herausarbeiten arbeiten IMHO vorwiegend mit statischen Compilersprachen, z.B. kann ich in Perl sehr wohl eine Klasse während der Laufzeit manipulieren ("kann" ne "sollte" !). Auch sind viele Design Patterns in Perl überflüssig. [...]
QuoteMein Verständnis ist das ein "Objekt" eine Struktur ist die Daten und Methoden kaspelt. [3]
Eine "Klasse" ist zum einen eine Menge von Objekten die sich aus der Konstruktion aus einem Vorlageobjekt ergeben zum anderen die Bezeichnung des Vorlageobjekts (als Repräsentanten o. Erzeuger der Klasse).
Die einzelnen Mitglieder einer Klasse heißen "Exemplare" oder "Instanz" [1]
Quote[...] In der Mathematik ist es auch durchaus üblich "Klassen" zu schachteln, da kann sehr wohl das Exemplar der einen Oberklasse der Repräsentant (d.h. hier Prototyp,Singletonklasse) einer Unterklasse sein. [...] Randbemerkung: Klassen sind mathematisch AFAIK Mengen die sich nicht selbst enthalten dürfen, z.B. sowas wie die "Menge aller nichtleeren Mengen" würde sonst viele Mathemodelle kaputt machen, deswegen Klassen. [...]
murphy+2008-03-24 15:22:50--Also meines Wissens ist das etwas anders: In der klassischen Mengenlehre ist eine Klasse jedes Objekt dass durch ein beliebiges Prädikat auf seinen Elementen definiert ist. Insbesondere kann sich eine Klasse auch ohne weiteres selbst enthalten. Mengen hingegen sind Klassen, die zusätzlich die Zermelo-Fraenkel-Axiome erfüllen. Mengen können sich trotzdem selbst enthalten, aber bei bestimmten komischen Konstruktionen der Art "die Klasse aller Mengen, die xyz erfüllen" kommen eben keine Mengen, sondern echte Klassen heraus. Beispiele für solche echten Klassen sind die Klasse aller Mengen, die sich nicht selbst enthalten, oder die Klasse aller Mengen, die genau sich selbst enthalten.
Da eine Klasse aber praktisch keine Voraussetzungen erfüllen muss, kann bzw. darf man über die Eigenschaften einer echten Klasse im Allgemeinen wenig aussagen :-)
murphy+2008-03-23 20:03:48--Das ist schlicht falsch. ECMA-262 konformes JavaScript kennt das Konzept einer Klasse im Sinne der objektorientierten Programmierung nicht. In dem gesamten Text des Standarddokumentes taucht dieses Konzept kein einziges Mal auf.
KurtZ+2008-03-25 01:15:05--Fundsache bei Mozilla [...]
prototype
Represents the prototype for this class.
[...]
Instanz = new Klasse1();
Klasse1.prototype= new Klasse0();
Unterinstanz=new Instanz(); // Fehler: Instanz is not a constructor
KurtZ+2008-03-25 21:10:26--[...] das folgende erzeugt aber ne Fehlermeldung
Code: (dl )Unterinstanz=new Instanz(); // Fehler: Instanz is not a constructor
[...]
Die oft zitierte Vererbung durch Cloning habe ich übrigens nicht so deutlich gesehen.
QuoteUnd nur weil ich z.B. in JS einzelnen Instanzen eigene Methoden geben kann, fallen mir dazu spontan keine Anwendungsfälle/Muster ein! Bräuchte ich sowas in Perl hätten halt die Instanzen ein Hash wo ich Coderefs namentlich ablege, und mittels AUTOLOAD würden diese aufgerufen. Es geht also in beiden Sprachen/Modellen, man braucht sowas aber wirklich selten.
QuoteWenn dir jetzt ein Anwendungsfall einfällt Objekte in JS deutlich anders und effizienter zu modellieren, dann wär ich dir für den Hinweis dankbar.
murphy+2008-03-25 22:30:22--Das was new automatisch tut, nämlich den Prototypen zu klonen und dann eine Initialisierungsfunktion auszuführen, kann man auch von Hand machen:
Schon haben wir einen Klon von o0 erzeugt, ohne dass irgendwelche Klassen im Spiel wären ;-)
KurtZ+2008-03-25 21:10:26--Man kann die Konstruktorobjekte (also "Klassendefinitionen") von den zugehörigen Instanzobjekten auch gut unterscheiden, erstere haben ein Objektattribut "prototype" mit den "Klassenmethoden" und "Klassenattributen" letztere ein Refrenzattribut "__proto__" das auf den prototype des Konstruktors verweist.
KurtZ+2008-03-25 21:10:26--
1
2
3
4
5
6
7
8
9
10
11
function Klasse0() {this.name = 'Klasse 0';}
function Klasse1() {this.name = 'Klasse 1';}
function Klasse2() {}
Klasse2.prototype= new Klasse0();
var a = new Klasse2();
alert( a.name + '\n' + a.constructor);
Klasse2.prototype= new Klasse1();
var a = new Klasse2();
alert( a.name + '\n' + a.constructor);
var Unterinstanz=new Instanz.constructor();
KurtZ+2008-03-25 21:10:26--Sicher Vererbung mit JS-Prototype bietet Möglichkeiten die einfacher Umzusetzen sind als mit Perl-ISA aber auch umgekehrt. Tatsächlich sind beide AFAIK viel flexibler als C++ oder JAVA was wiederum mehr Disziplin und modifizierte Design-Pattern erfordert.
KurtZ+2008-03-25 23:56:28--hmm dann haben wir unterschiedliche Vorstellungen von Klonen, in "perlisch" gesprochen ist o1.__proto__ eine Referenz auf o0. Klonen wäre für mich eine 1 zu 1 Kopie des Objektes, also in Perl eine Kopie der Hashes, %o1=%o0. [...]
QuoteBin übrigens darauf hingewiesen worden dass nur Netscape/Mozilla direkten Zugriff auf __proto__ erlauben.
1
2
3
4
5
6
7
8
9
10
Object.prototype.clone = function () {
var CloneConstructor = function () { }
CloneConstructor.prototype = this
return new CloneConstructor()
}
var o0 = { a: 1, b: 2 }
var o1 = o0.clone()
alert(o1.b)
![]() |
|< 1 2 3 4 >| | ![]() |
40 Einträge, 4 Seiten |