![]() |
Klassen und Objekte
Kann mir bitte jemand anhand eines logischen beispiels den Unterschied zwischen klassen und objekten erklären. es irritiert mich volle. verstehe den sinn nicht, warum man objekte erzeugen muss. danke im voraus.
cu. |
zb datentransfer
besteht zumindest aus einem head, dateninformation, crc und tail du teilst ein deine zu übertragende daten in pakete (indem fall deine objekt) willst du für jedes einzelne teilpaket dauernd was neues definieren? i glaub ned so sagst einfach neues_paket=new paket_klasse(); |
eine klasse ist der bauplan für ein objekt
sprich du definierst in der klasse, welche eigenschaften notwendig sind, jedes objekt dieser klasse besitzt genau diese, wie ein bauplan eben. |
also wenn die klasse wie ein bauplan sein sollte, dann ist das objekt ein produkt von der klasse, der durch die anweisungen und den feldern der klasse produktiv ist. oder bin ich da falsch? aber die klasse kann ja auch ausgeführt werden, ohne ein objekt zu erzeugen oder? schon ziehmlich kompliziert!!! ;-((
|
wie führst du eine klasse aus ??
du hast entweder einen konstruktor der dir ein objekt erzeugt oder statische methoden in der klasse die du auch ohne objekt erzeugung aufrufen kannst |
hab mit klassen ausführen die statischen methoden gemeint!!!! wenn wir schon bei den konstruktoren sind, kann mir jemand auch dieses erklären bitte! programmieren lernen ist doch nicht so einfach, wie ich es mir vorgestellt habe!!!
|
Nehmen wir als einfaches Beispiel eine Klasse die Punkt in einem rechtwinkeligen Koordinatensystem beschreiben kann. Um einen solchen Punkt eindeutig festzulegen benötigt man einen Wert für die Achse X für und einen Wert für die Achse Y. Unsere Klasse sollte also zwei Members enthalten die ich jetzt einfach mal mAX und mAY nenne und als Integer definiere. Unter VB könnte man jetzt also ein Klassenmodul Punkt erstellen und in den Deklarationen folgendes schreiben:
public mAX as integer public mAY as integer Ich habe damit also so eine Art Bauplan für Punkte die über zwei Werte festgelegt werden erstellt. Dieser Bauplan beschreibt wie so ein Punkt aussehen kann, gibt mir aber keinen bestimmten an. Um einen Punkt zu bestimmen müssen wir also ein Objekt nach diesem Bauplan erstellen. dim P as Punkt set P = new Punkt Ich habe jetzt also ein Objekt das einen Punkt eindeutig bestimmen könnte aber das tut es noch nicht weil mAX und mAY noch keine Werte enthalten. Da wird diese beiden Members Public definiert haben, können wir sie von aussen ändern. Zum Beispiel könnten wir also sagen: P.mAX = 2 P.mAY = 5 Eigentlich wäre es aber doch schön wenn ein Punkt schon beim Erzeugen Werte besitzen würde. Er könnte dann zum Beispiel am Ursprung liegen, also am Punkt 0, 0. Dazu haben Klassen unter VB ein Initialize-Ereignis das beim Erzeugen eines neuen Objekts (=New) auftritt. Private Sub Class_Initialize() mAX = 0 mAY = 0 End Sub Eigentlich schon ganz ordentlich. Es könnte jetzt aber sein, dass wir nur Punkte im ersten Quadranten und damit nur postive Werte für mAX und mAY zulassen wollen. Wie können wir jetzt den Benutzer davon abhalten die Werte negativ zu setzen? Dafür deklarieren wir mAX und mAY Private statt Public. Dadurch können sie dann nur mehr von innerhalb der Klasse geändert werden. Von ausserhalb der Klasse sind sie nicht einmal mehr sichtbar womit also zum Beispiel A = P.mAX nicht mehr funktionieren würde. Um die Werte jetzt noch sehen oder ändern zu können brauchen wir jetzt Properties (Eigenschaften). Zum Beispiel könnte das so aussehen. Property Get AX AX = mAX End Property Property Set AX if AX >= 0 then mAX = AX else mAX = 0 end if End Property Property Get AY AY = mAY End Property Property Set AY if AY >= 0 then mAY = AY else mAY = 0 end if End Property Damit würde jetzt A = P.AX wieder einen Sinn ergeben. Um unseren Punkt jetzt noch zu perfektionieren könnten wir ihm zum Beispiel beibringen sich mit einem Kommando in X- und Y- Richtung verschieben zu lassen. Dazu verwenden wir ein Sub das zum Beispiel so aussehen könnte: Public Sub Move(X, Y) AX = AX + X if AX < 0 then AX = 0 end if AY = AY + Y if AY < 0 then AY = 0 end if End Sub Das wäre auch schon ganz annehmbar aber jetzt wissen wir nach einem Aufruf von Move nicht, ob wir zu kleine Werte erzeugt hätten oder ob der Punkt korrekt verschoben wurde. Dazu machen wir aus unserem Sub eine Function: Public Function Move(X, Y) as Boolean Move = True AX = AX + X if AX < 0 then AX = 0 Move = False end if AY = AY + Y if AY < 0 then AY = 0 Move = False end if End Sub Ich hoffe damit kannst was anfangen. ;) Wenn du dich genauer einlesen willst wirst du z.B. unter http://msdn.microsoft.com fündig. Tip: http://msdn.microsoft.com/library/de...ownclasses.asp |
danke seidl für die ausführliche erklärung!! trotzdem hab ich es nicht vollständig nachvollziehen können, da ich versuche c# zu lernen! trotzdem thx.
|
Na in dem Fall:
MSDN-Library und im linken Frame folgendes wählen: .NET Development / Visual Studio .NET / C# Seminars Das dürfte doch recht informativ sein. Im Prinzip ging es mir bei meinem Beispiel aber ohnehin nur ums Prinzip. Die Syntax mag sich zwar von Sprache zu Sprache ändern aber das Konzept bleibt immer das selbe genauso wie ein Punkt immer ein Punkt bleibt. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag