Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Baumstruktur in Klassen statt Array's abbilden (https://www.delphipraxis.net/43612-baumstruktur-klassen-statt-arrays-abbilden.html)

kalmi01 6. Apr 2005 13:44


Baumstruktur in Klassen statt Array's abbilden
 
Hallo,

habe neulich ein Prog geladen, welches DXF lesen/schreiben kann.
Dieses Prg. läuft sehr schnell, stabil und kommt sogar spielend mit Killer-Datenmengen zurecht.

In den Sourcen wird ein TList-Objekt und eine Masterklasse abgeleitet, von denen sich
dann die nachfolgenden Klassen ableiten.

Kommt ein Knoten, wird eine neue Instanz einer Knoten-Klasse abgeleitet, welche dann wieder
neue Zeichen-Klassen beinhaltet, bis wieder ein Knoten kommt oder Ende ist.

Soetwas würde ich normalerweise mit Array's oder Records lösen, da leichter nachvollziehbar.

Jetzt zu meinen Fragen:

Die Listen der Unterklassen werden mit Listen vom Typ TList verwaltet, geht soetwas nicht auch
ohne rumge-Pointere ?

Ist so eine Klassen-Lösung einer Array-Lösung wirklich vorzuziehen ?
Der Autor hat selbst geschrieben (frei übersetzt):
Kaum zu verstehen, was wann passiert, aber es funktioniert.

Und zu guter Letzt, hat jemand ein simples Beispiel, an dem ich mich probieren kann ?
Schließlich müssen die angelegten Datenstrukturen auch wieder ausgelesen werden,
teilweise sogar selektiv.
Und spätestens beim selektiven Zugriff meine ich, wären Array's bzw. Record's besser zu handeln.

So, nun überzeugt mich mal vom Gegenteil.

marabu 8. Apr 2005 07:22

Re: Baumstruktur in Klassen statt Array's abbilden
 
Zitat:

Zitat von kalmi01
Die Listen der Unterklassen werden mit Listen vom Typ TList verwaltet, geht soetwas nicht auch ohne rumge-Pointere?

Das ist wie beim tapezieren. Die einen nageln, die anderen kleben.

Zitat:

Zitat von kalmi01
Ist so eine Klassen-Lösung einer Array-Lösung wirklich vorzuziehen?

Auf jeden Fall. Mit Vektoren bewegst Du dich noch sehr nah an der Maschine. Programmieren im Kleinen lässt sich so machen, aber wenn du mehr Funktionalität in deine Programme hineinlegen willst und dabei selbst den Überblick behalten möchtest, dann kommst du um abstrakte Datentypen und darauf aufbauende Anwendungsdatentypen nicht herum - früher oder später.

Zitat:

Zitat von kalmi01
Und zu guter Letzt, hat jemand ein simples Beispiel, an dem ich mich probieren kann?

Mit einem guten Buch über abstrakte Datentypen und dem Handbuch für Object Pascal solltest Du eine Weile beschäftigt sein.

Zitat:

Zitat von kalmi01
Schließlich müssen die angelegten Datenstrukturen auch wieder ausgelesen werden, teilweise sogar selektiv. Und spätestens beim selektiven Zugriff meine ich, wären Array's bzw. Record's besser zu handeln.

Das ist keine Alternative, sondern das eine baut auf dem anderen auf. Die Klasse TStack arbeitet intern mit einem Array, aber du arbeitest nur mit den Methoden Push, Pop, Peek. Der Vorteil liegt auf der Hand: Deine Klasse kann reifen, ohne dass die Programme verändert werden müssen, die diese Klasse verwenden.

Zitat:

Zitat von kalmi01
So, nun überzeugt mich mal vom Gegenteil.

Ist gar nicht nötig, glaube ich. Du formulierst zwar sehr provozierend, aber zwischen den Zeilen lese ich etwas anderes.

Bleib dran, es lohnt sich.

kalmi01 8. Apr 2005 08:01

Re: Baumstruktur in Klassen statt Array's abbilden
 
Hallo Marabu,

danke für die Antwort.

Zitat:

Auf jeden Fall. Mit Vektoren bewegst Du dich noch sehr nah an der Maschine
Wieso bin ich mit einer Integer-Variablen als Zeiger auf Array-Position und einem "array of irgendwas" nah an der Maschine ?

Zitat:

Mit einem guten Buch über abstrakte Datentypen und dem Handbuch für Object Pascal solltest Du eine Weile beschäftigt sein.
Die Bücher, die ich bisher gesehen/gelesen habe, sind entweder so abgehoben bzw. abstrakt, daß man 3 Dekaden Informatik und Philosophie studiert haben muß, oder aber reißen das Thema nur vage an.
Oder aber, noch schlimmer, pointern selbst wie wild in der Gegend herum.

Die Klassen/Polymorphie-Beispiele Mensch/Student/Fahrrad/Auto sind mir geläufig und verständlich, aber wenig hilfreich.

Was ist denn ein gutes Buch.

Schöner wär ein Beispiel, welches nicht so überladen ist und eine reale Funktion erfüllt.

marabu 8. Apr 2005 12:06

Re: Baumstruktur in Klassen statt Array's abbilden
 
Zitat:

Wieso bin ich mit einer Integer-Variablen als Zeiger auf Array-Position und einem "array of irgendwas" nah an der Maschine?
Weil du so die Möglichkeit zur Abstraktion nicht nutzt, die eine Hochsprache wie Object Pascal dir bietet.

Zitat:

Die Bücher, die ich bisher gesehen/gelesen habe, sind entweder so abgehoben bzw. abstrakt, daß man 3 Dekaden Informatik und Philosophie studiert haben muß
Jedes gute Fachbuch sagt dir in der Einleitung, welcher Qualifikationsgrad vorausgesetzt wird. Du darfst diese Hinweise des Autors nicht ignorieren.

Zitat:

Was ist denn ein gutes Buch.
Das gute Buch holt dich ab, wo du stehst. Ich werde später ein paar Bücher heraussuchen, die ich mit meinen Praktikanten bearbeitet habe. Eventuell ist da etwas für dich dabei.

kalmi01 8. Apr 2005 16:31

Re: Baumstruktur in Klassen statt Array's abbilden
 
Hallo Marabu,
Zitat:

Jedes gute Fachbuch sagt dir in der Einleitung, welcher Qualifikationsgrad vorausgesetzt wird
das ist eine sehr praktische Erfindung, sofern man die Möglichkeit hat, diese zu lesen.
Ich hab auch schon eins gehabt, welches versprach, den geneigten (unwissenden) Leser in Delphi einzuführen.
Nach dem ersten Kapitel brauchte ich Aspirin/Cognac, Aspirin/Cognac immer im Wechsel um wieder klar zu werden.
Danach kamen nur noch WinAPI hier, Pointer dort.

Das war aus der Buchbeschreibung und der Einleitung nicht erkennbar.

OK, das war ein negativ-Beispiel, derer hab ich aber noch mehr im Schrank stehen, oft auch das genaue Gegenteil.
Lauter "Die tralala-Biebel", der "irgendwas-Profi", usw.

Die meisten landen nur nicht auf dem Scheiterhaufen, weil sie Geld gekostet haben und über einen schönen Einband verfügen.

marabu 8. Apr 2005 16:48

Re: Baumstruktur in Klassen statt Array's abbilden
 
Vielleicht gefällt dir dieser Versuch einer didaktischen Annäherung an das Thema.

kalmi01 8. Apr 2005 17:23

Re: Baumstruktur in Klassen statt Array's abbilden
 
:-D Danke für den Hinweis,

doch ich frag mich allen Ernstes, ob man nicht auch ohne ^ und @ (in Delphi) programmieren kann ?
Delphi-Quellcode:
Zeiger    = ^Datentyp;
Datentyp  = RECORD
                 Inhalt       : Inhaltstyp;
                 Nachfolger   : Zeiger;
             END;
sind das nicht sogar Relikte aus der guten alten Turbo-Pascal-Zeit ?

Ergibt:
Delphi-Quellcode:
Zeiger = RECORD
             Inhalt       : Inhaltstyp;
             Nachfolger   : Zeiger;
         END;
funktional nicht das Gleiche ?

Naja, sei's Drum, die Seite ist aber trotzdem einen Favoriten-Eintrag wert.

Kleine Anmerkung zu den Beispielen, also ich werd ja schon von einigen Kollegen als Herr_der_Leerzeichen beschimpft, aber wenn ich so einrücken würde; NaaaJaa :-D

Übrigens (Off-Topic aber wahr):
Zitat:

Das ist wie beim tapezieren. Die einen nageln, die anderen kleben.
Wer nagelt kann Tapete und Nägel beim Umzug mitnehemen.
Geklebte Tapete löst sich bei ständig wechselnden Temperaturen/Luftfeuchtigkeiten ab,
die Genagelte wird nur wellig, bleibt aber hängen. :lol:

bttb930 8. Apr 2005 18:23

Re: Baumstruktur in Klassen statt Array's abbilden
 
Zitat:

Zitat von kalmi01
:-D Danke für den Hinweis,

doch ich frag mich allen Ernstes, ob man nicht auch ohne ^ und @ (in Delphi) programmieren kann ?
Delphi-Quellcode:
Zeiger    = ^Datentyp;
Datentyp  = RECORD
                 Inhalt       : Inhaltstyp;
                 Nachfolger   : Zeiger;
             END;
sind das nicht sogar Relikte aus der guten alten Turbo-Pascal-Zeit ?

Ergibt:
Delphi-Quellcode:
Zeiger = RECORD
             Inhalt       : Inhaltstyp;
             Nachfolger   : Zeiger;
         END;
funktional nicht das Gleiche ?

NEIN, das ist nicht dasselbe!!!

Ich denke mal dass das zweite Beispiel sich nicht mal compilieren lässt.

Das Problem ist RECORD - sobald Du Klassen benutzt bist Du nah dran, aber mit RECORDs definitiv nicht.

bttb930 8. Apr 2005 18:28

Re: Baumstruktur in Klassen statt Array's abbilden
 
Zitat:

Zitat von marabu
Vielleicht gefällt dir dieser Versuch einer didaktischen Annäherung an das Thema.

Moment mal, erst sagst Du man solle die Abstraktion nutzen, die eine höhere Programmiersprache wie Delphi mir bietet, und dann verweist Du auf eine Seite auf der direkt mit Zeigern programmiert wird?

Lies dir mal die Quellcodes durch - die stehen im Widerspruch zu deinen beiträgen in diesem Thread.

Man sollte Klassen verwenden, keine Arrays und keine Records. Und da braucht man kein ^ und kein @.

Robert_G 8. Apr 2005 18:33

Re: Baumstruktur in Klassen statt Array's abbilden
 
Zitat:

Zitat von bttb930
Man sollte Klassen verwenden, keine Arrays und keine Records. Und da braucht man kein ^ und kein @.

Amen :angle2:
Einen PSomeBloodyRecord zu benutzen nur um sich vor Assigment By Copy zu drücken muss wohl irgendwie cooler zu sein, als ästhetischer OO Code. ;)

kalmi01 9. Apr 2005 18:14

Re: Baumstruktur in Klassen statt Array's abbilden
 
Hallo bttb930,

Zitat:

NEIN, das ist nicht dasselbe!!!

Ich denke mal dass das zweite Beispiel sich nicht mal compilieren lässt.
Also:
a.) es läßt sich in Delphi 7 ohne Fehler kompilieren.
b.) ich habe ein altes Prog von solchen Konstrukten:
Delphi-Quellcode:
Zeiger    = ^Datentyp;
Datentyp  = RECORD
                 Inhalt       : Inhaltstyp;
                 Nachfolger   : Zeiger;
             END;
auf solche umgestellt:
Delphi-Quellcode:
Zeiger = RECORD
             Inhalt       : Inhaltstyp;
             Nachfolger   : Zeiger;
         END;
und es funktioniert genauso wie vorher.
Allerdings bekomme ich keine Warnungen vom Typ: inkompatible Typen
mehr.
OK, war ein bischen mehr, als nur diese eine Deklaration abändern, aber auch laut Borland-Doku ist beides identisch.

mimi 10. Apr 2005 10:00

Re: Baumstruktur in Klassen statt Array's abbilden
 
Delphi-Quellcode:
Zeiger = RECORD
             Inhalt       : Inhaltstyp;
             Nachfolger   : Zeiger;
         END;
komisch in meinen versuchen hat das nie funktioniert....

Delphi-Quellcode:
  TTest = record
    Test:Integer;
    test1:TTest
  end;
das wird nicht gehen weil TTest der record selbst ist das geht nur bei klassen so.....

kalmi01 11. Apr 2005 11:50

Re: Baumstruktur in Klassen statt Array's abbilden
 
Hallo Michael,

Du hast Recht.
In meinem Eifer hatte ich übersehen, daß es in dem Beispiel ein Record war.
Bei den Sourcen, die ich umgestellt hatte, waren es immer Klassen.

kalmi01 11. Apr 2005 15:49

Re: Baumstruktur in Klassen statt Array's abbilden
 
Aus Delphi-Sprachreferenz:

Zitat:

Die Typdeklaration selbst liegt nicht im Gültigkeitsbereich des Typbezeichners (dies
gilt allerdings nicht für den Typ Pointer). Aus diesem Grund kann beispielsweise ein
Record-Typ definiert werden, der sich selbst rekursiv verwendet.
war aber kein Beispiel dabei.

mimi 13. Apr 2005 18:42

Re: Baumstruktur in Klassen statt Array's abbilden
 
kann mal jemmand ein beispiel geben zu den gezeigt text?
ich kann mir darunter nicht so richtig was vorstellen.

marabu 13. Apr 2005 19:16

Re: Baumstruktur in Klassen statt Array's abbilden
 
Zitat:

Zitat von kalmi01
Aus Delphi-Sprachreferenz:

Zitat:

Die Typdeklaration selbst liegt nicht im Gültigkeitsbereich des Typbezeichners (dies
gilt allerdings nicht für den Typ Pointer). Aus diesem Grund kann beispielsweise ein
Record-Typ definiert werden, der sich selbst rekursiv verwendet.
war aber kein Beispiel dabei.

Vermutlich ein Übersetzungsfehler - muss heißen:

Zitat:

Aus diesem Grund kann beispielsweise kein Record-Typ definiert werden, der sich selbst rekursiv verwendet.
Gemeint ist, dass folgendes nicht geht:

Delphi-Quellcode:
type
  TMyRecord = record
    mr: TMyRecord;
  end;

mimi 13. Apr 2005 23:00

Re: Baumstruktur in Klassen statt Array's abbilden
 
ja das war mich auch klar, daher meine frage wie der text es meinte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz