Gut beschrieben sind die Vorteile in unseren Vorlesungsfolien http://www.informatik.uni-ulm.de/ki/Edu/Vorlesungen/PI-1/WS0102/Script/S criptum.html
-----Urspr�ngliche Nachricht----- Von: Claudius Ceteras [mailto:[EMAIL PROTECTED]] Gesendet: Samstag, 19. Januar 2002 11:04 An: AspGerman Kaffeehaus Betreff: [aspdecoffeehouse] RE: Klassen II > > Ich weiche mal mit der Diskussion besser ins Kaffeehaus aus. Wobei ich > gleich vorweg sage: das sind jetzt mehrere Fragen draus geworden. Wer zu > einzelnen Teilen was sagen m�chte: ich freu mich �ber jede Meldung. > > > Ich suche eine kompakte, und m�glichst treffsichere und pr�zise > Erkl�rung von Klassen und Objekten. Niveau ist Einsteiger, hier > speziell Kinder in der 7. Klasse Gymnasium mit denen ich seit einigen > Monaten VBScript unter WSH mache. Dein Problem ist, dass VBS nicht gerade DIE objektorientierte Programmiersprache ist... Sie besitzt einfach viele der Features, die objektorientierte Programmierung richtig interessant machen einfach nicht... > > Was ich momentan habe ist "d�nn". Da schreib ich nur dass eine Klasse > Eigenschaften und Methoden hat und dass eine Klasse komplexe > Funktionalit�t kapselt. Es ist wirklich d�nn. > > Wer kann mir da mit einer besseren Beschreibung helfen. Oder wer m�chte > sich mal dran wagen und beschreiben was eine Klasse tut, warum ich so > was brauche/haben will, was es besser macht als Programmieren ohne > Klassen? > Vorteil von Klassen ist, dass Daten und dazugeh�rige Funktionalit�t kapselt... Vor der Objektorientierten Programmierung hat man z.B. oft solche Konstrukte gehabt: PrintPoint(thePoint) PrintCircle(theCircle) PrintRect(theRect) Man musste also darauf achten, dass man die entsprechenden Daten auch den richtigen Funktionen �bergibt... Heute kann man einfach sowas schreiben: Point.print Circle.print Rect.print Dazu k�nnte man eigentlich noch ein paar Seiten mehr schreiben, aber daf�r habe ich keine Zeit... Schau Dir mal ein paar B�che wie z.B. "C++ f�r Kids" und �hnliche als Ideengeber an... > --------------------- > > Und wie schaffe ich den Sprung von Klassen zu Objekten? Oder andersrum, > wie erkl�re ich Objekte. Klassen sind die Baupl�ne f�r Objekte. Ein Objekt ist immer von einem bestimmten (Klassen-)Typ. Manche Programmiersprachen(z.B. Java) haben auch statische Methoden; F�r die Methoden braucht man kein Objekt, sondern kann sie an der Klasse selbst aufrufen... > > --------------------- > > Als �bungsbeispiel (7. Klasse) hatte ich mir eine Klasse Quader > zurechtgelegt. Die braucht drei Dinge (L�nge, Breite, H�he) und kann > damit 3 Fl�chen und ein Volumen liefern. Evtl. k�nnte man das Ding dann > zur �bung von den Kindern auch erweitern lassen. Beispiel: ich gebe > Material an, die Klasse kennt einige spezifische Gewichte und spuckt mir > dann das Gewicht des aktuellen Quaders aus. Besser ist es gleich das spez. Gewicht anzugeben, dann hast Du keine Probleme mit unbekannten Materialien. > > Ist das zu trivial? Hat jemand bessere Ideen (f�r Beispiele)? > Fahrad (ist aktiver... hat Methoden, die auch wirklich was machen): Fahrad.farbe = "rot" Fahrad.G�nge = 3 Fahrad.schalteInGang(2) Fahrad.beschleunige(12) ' 12 km/h Fahrad.Bremse v = Fahrad.Geschwindigkeit 'v sollte jetzt 0 sein Das Fahrad hat auch interne Variablen(Geschwindigkeit), die man nicht direkt �nden kann, sondern nur �ber die entsprechenden Methoden. > --------------------- > > Bleiben wir bei dem einfachen Beispiel mit Quader: da hab ich ja mehrere > M�glichkeiten zur Berechnung. > > A) Jedesmal wenn eine Seitenl�nge "reinkommt" schaun ob alles da ist und > dann alles berechnen. Kostet Zeit und berechnet etwas, das ich > vielleicht gar nicht brauche > > B) Nur dann berechnen wenn ich was brauche/abfrage. Muss dann aber > trotzdem einen gemeinsames St�ck code durchlaufen, das pr�ft ob ich alle > Einzeltteile beieinander hab. F�r ein einfaches Beispiel m�glicherweise > schon ganz sch�n kompliziert. > > B') Wobei es f�r B dann noch die Untervarianten g�be: beim ersten > Abfragen eines Ergebnisses alles berechnen oder nur das momentan > gefragte berechnen. > Genau daf�r sind Konstruktoren da, weil man, wenn es z.B. nur den Konstruktor Quader(breite,h�he,l�nge) gibt auch im Code davon ausgehen kann, dass alle Werte gesetzt sind, weil man ohne �ber einen Konstruktor zu gehen keine M�glichkeit hat ein Objekt zu erzeugen. F�r Dein Beispiel w�rde ich in Class_Initialize einfach alle drei Werte auf 0 setzen. Wenn die Berechnung eines abh�ngigen Wetes, wie z.B. Inhalt nicht sehr aufwendig ist, spricht nichts dagegen, die Berechnung jedesmal bei der Abfrage zu tun, also: Public function Inhalt() Inhalt = breite*hoehe*laenge End function Aber das ist ja das sch�ne an Objekten und der gekapselten Information... Man muss gar nicht wissen, wie es intern funktioniert: solange man die Semantik weiss, ist es egal wie es intern implementiert ist und kann auch sp�ter ver�ndet werden... Genau deswegen sollte man z.B. nie Variablen public machen, sondern immer �ber properties gehen... > --------------------- > > Und was mir auch noch fehlt und schleierhaft ist: wie macht man in einer > eigenen Klasse eine [von au�en nutzbare] Collection? > Das einfachst ist es bei der Anfrage nach der collection einfach eine intern bereits bestehende Collection(z.B. Scripting.Dictionary) nach draussen zu geben; nat�rlich kann diese Collection auch eine eigene Klasse sein. Wenn man forEach benutzen will, muss aber die Collection auch was zur�ckgeben, wor�ber auch mit foreach iteriert werden kann, weil man sowas nicht in VBS erzeugen kann... solche iterierbaren Objekte sind z.B. Arrays.. Claudius | [aspdecoffeehouse] als [EMAIL PROTECTED] subscribed | http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv | Sie k�nnen sich unter folgender URL an- und abmelden: | http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffeehouse.asp | [aspdecoffeehouse] als [email protected] subscribed | http://www.aspgerman.com/archiv/aspdecoffeehouse/ = Listenarchiv | Sie k�nnen sich unter folgender URL an- und abmelden: | http://www.aspgerman.com/aspgerman/listen/anmelden/aspdecoffeehouse.asp
