>
> 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