Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 22:28

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Klasse oder Objekt?
BeitragVerfasst: Mi Mai 04, 2011 15:38 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
Hi,

das Octree-Tutorial hat mich mal wieder an eine Unwissenheit von mir erinnert.
Und zwar geht es darum worin sich Klassen von Objekten unterscheiden und wann es besser ist etwas als Klasse bzw Objekt zu deklarieren.

Also, Freiwillige vor :)

MfG
bubble

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Mi Mai 04, 2011 15:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Jau… Der exakte semantische Unterschied war mir gerade auch nicht geläufig. Ich wollte es eigentlich dabei belassen, habe dann aber doch nachgelesen.
Notation: “object” bedeutet hier, eine Instanz eines Types, der mit object deklariert wurde, ”class” bedeutet hier, eine Instanz eines Types, der mit class deklariert wurde. Analog für object-Klasse und class-Klasse.

Objects liegen wie records standardmäßig auf dem Stack (im Gegensatz zu Classes, die immer auf dem Heap liegen). Anders als Classes können Objects keine published oder automated-Sektionen beinhalten, ebensowenig wie Properties und dementsprechend auch keine RTTI. Sie müssen keinen Konstruktor oder Desktruktor haben, wenn sie aber einen haben, kann der anders als bei Classes auch direkt ohne umweg über den Class-Klassennamen aufgerufen werden.
Vererbung und Polymorphie geht im vollen Umfang auch mit objects, sofern anwendbar (also natürlich nicht für properties, da es die in objects nicht gibt).
Objects sind also prinzipiell eher bessere records. Die Tatsache, dass sie auf dem Stack liegen, kann das Arbeiten damit stellenweise deutlich angenehmer machen, kann aber auch eine Stolperfalle sein (wie bei Strings eben).

Weitere Informationen:
Object Oriented Programming with FreePascal and Lazarus, Abschnitt Free Pascal Language Extensions und davon insbesondere:
Programming using Objects
und natürlich die großartige FreePascal Sprachreferenz

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Mi Mai 04, 2011 17:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
Objects sind also prinzipiell eher bessere records. Die Tatsache, dass sie auf dem Stack liegen, kann das Arbeiten damit stellenweise deutlich angenehmer machen, kann aber auch eine Stolperfalle sein (wie bei Strings eben)
Heißt das, dass man die wie records weder erzeugen noch freigeben muss? Also zB dass ich nicht am Ende einer Funktion alle lokalen Variablen händisch (also mit .Free bzw hier mit dispose (?)) freigeben muss und dass "a * b + c" nicht "a * b" im Speicher rumgammeln lasst (wobei kA, ob der compiler gerade das vielleicht sowieso erkennt) wie bei klassen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Mi Mai 04, 2011 18:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Genau. Solange du in den Objects keine Pointer oder so hast. Die müsstest du dann genauso wie andere Pointer freigeben, bevorzugt im Destruktor des objects. Genauso wie du dann einen Konstruktor haben solltest, den du, genauso wie den Destruktor, manuell aufrufen musst.

Also hast du nicht so viel von objects, wenn du automatisches aufräumen des Speichers haben willst, dann sind es eigentlich nur Records mit Methoden. Auch virtuelle Methoden sollten nämlich nicht ohne Konstruktor verwendet werden.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Mi Mai 04, 2011 18:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also die allgemeine, sprachunabhängige Definition ist wie folgt:
Die Klasse enthält die Beschreibung. Objekte sind Instanzen dieser Klasse.

Auto-Beispiel:
Eine Mercedes-Benz "A-Klasse" wäre wie der Name schon sagt eine Klasse. Damit sind alle Autos dieser Baureihe gemeint. Ein Objekt (oder Instanz) dieser Klasse wäre dann das eigene Auto. Also ein einzelnes Auto dieser Baureihe. Hier kann ich die Eigenschaften exakt benennen, z.B: Farbe Schwarz, Plüschwürfel am Innenspiegel, etc.

Häufig nennt man statische Methoden, also Methoden die im Namensraum der Klasse liegen aber kein Objekt benötigen, auch Klassenmethoden. Genauso Klassenattribute.


Was bei Delphi/FreePascal der Unterschied zwischen Klasse und Objekt ist kann ich nicht sagen, davon habe ich keine Ahnung.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Mi Mai 04, 2011 18:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Meh. Coolcat, du hast meine Links nicht gelesen.
Sorg hier bitte nicht für zusätzliche verwirrung :P.

Object und Class sind bei FreePascal zwei komplett unterschiedliche Zweige der OOP-Entwicklung. Beide kennen Klassen und Objekte im Sinne der von der genannten Sprachunanbhängigen Defintition. Dass man sie Objects und Classes nennt, liegt daran, dass die Keywords, die eine entsprechende Definition einleiten, eben so heißen.
Objects sind m.W.n. älter, während Classes womöglich auf Borland zurückgehen [citation needed].

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Do Mai 05, 2011 10:53 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
Genau. Solange du in den Objects keine Pointer oder so hast. (...) Also hast du nicht so viel von objects, wenn du automatisches aufräumen des Speichers haben willst, dann sind es eigentlich nur Records mit Methoden.
Also das war mir schon klar. Das mit den Pointern ist ja bei records genauso, und virtuelle Methoden sind schließlich auch Pointer.

Außerdem funktioniert generic mit objects, aber (FPC 2.2.4) nicht mir records.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Do Mai 05, 2011 15:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Coolcat hat mit seiner Definition aber eigentlich recht. Klasse ist eine Klassendefinition und Objekt ist eine Instanz dieser Klasse. Wird auch gerne nur Instanz genannt. Was über Objects gesagt wird ist aber deswegen nicht falsch. Nur fehlt da wohl der geschichtliche Hintergrund dazu.

Objects sind das fehlende Bindeglied in Pascal auf dem Weg zur objektorientierten Programmierung. Im früheren Pascal gab es nur Records und Methoden. Später wurden dann die Object eingeführt. Das waren im Endeffekt Records mit OOP Merkmalen. Noch ein Stück später gab es dann die echten Klassen so wie sie heute wohl hoffentlich jeder kennt. Das was über Objects gesagt wurde ist richtig. Allerdings wurden diese auch gerne mit new/dispose erzeugt und freigegeben. Ziemlich genau so wie Klassen heute. Nur das man stupide Pointer ohne Typsicherheit hatte. Kann man in dem Link "Programming using Objects" ganz unten sehen. Und obwohl sie so tun als wären es Klassen merkt man es dann ganz besonders, dass es nur Records mit OOP Merkmale und anderem Namen sind. Da gibt es einige prinzipbedingte Probleme die es bei echten Klassen nicht gibt. Wenn sie nur auf dem Stack benutzt werden ist das nicht ganz so tragisch (ist eigentlich ein Manko der Klassen).

Es ist sozusagen eigentlich eine Altlast die man nicht mal so ohne Weiteres aus einer Sprache werfen kann. Mittlerweile können aber Records auch Methoden enthalten. Aber keine Vererberung. Was wohl zum Lesen/Schreiben mit Streams wohl auch sinnvoller ist. Denn Objects können (glaube ich) auch noch Zusatzdaten enthalten. Was bei Records mit Methoden nicht ist. Und ob das beim Schreiben so gut kommt lasse ich mal dahin gestellt.

Deswegen sollte man meiner Meinung nach heutzutage auch nur noch Klassen benutzen. Oder wenn es nur so kleine Datenhaufen sind, dann Records die Methoden enthalten können. Oder dann Pointer auf Records.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Fr Mai 06, 2011 06:45 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
Oder wenn es nur so kleine Datenhaufen sind, dann Records die Methoden enthalten können
Genau das ist ja das Problem: mit FPC können sie nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Klasse oder Objekt?
BeitragVerfasst: Fr Mai 06, 2011 08:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
In Delphi gibt es Records mit Methoden noch gar nicht sooo lange. Im Endeffekt ist das eh nichts anderes als Methoden die als erstes Parameter das Record haben. Ist nur vom Code her etwas schöner mehr aber auch nicht. Habe bisher auch noch keine Notwendigkeit gehabt so was zu benutzen. In den meisten Fällen benutze ich Record und Pointer drauf auch nur intern in meinen Klassen um meine Daten zu verwalten.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]