AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Container-Klassen in Delphi
Tutorial durchsuchen
Ansicht
Themen-Optionen

Container-Klassen in Delphi

Ein Tutorial von Luckie · begonnen am 22. Nov 2007 · letzter Beitrag vom 4. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Container-Klassen in Delphi

  Alt 22. Nov 2007, 10:34
Container-Klassen in Delphi
Verwalten von Objekten mit Hilfe von Container-Klassen am Beispiel eines Memory Spieles

In diesem Tutorial geht es darum, wie man Objekte mit einer Container-Klasse verwalten kann. Demonstriert wird das ganze an Hand der Implementierung eines einfachen Memory Spieles.

Bitte guckt es euch mal an und sagt mir, wo man noch was ergänzen oder verbessern könnte.
Angehängte Dateien
Dateityp: pdf delphicontainerklassen_209.pdf (208,0 KB, 270x aufgerufen)
Dateityp: zip delphicontainerklassen_demos_857.zip (293,2 KB, 90x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Container-Klassen in Delphi

  Alt 22. Nov 2007, 10:58
Moin Michael,

bei Deinem C#-Beispiel:

Zitat:
Auffällig ist hier nur, wenn man mal von der C# spezifischen Syntax absieht, dass es keinen
Destruktor gibt und nirgends etwas frei gegeben wird.
Also ich finde, dass am C#-Sharp-Code viel mehr auffällt, dass Du Generics benutzt und damit schon direkt eine typsichere Liste am Wickel hast. Deine Add- und Remove-Methoden werden damit überflüssig, da die Typsicherheit durch die deklaration gewährleistet ist. Die gesamte Mantel-Klasse könnte man also aus dem Beipsiel entfernen - oder man gibt ihr eine eigenständige Funktion. Aber als Wrapper alleine ist sie in diesem Beispiel nicht mehr nötig.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Container-Klassen in Delphi

  Alt 22. Nov 2007, 11:04
Ich weiß. Aber zum einem wollte ich das Beispiel möglichst dem Delphi Beispiel ähnlich halten, damit man leichter vergleichen kann und zum anderen könnte man den Wrapper brauchen, wenn man der Container-Klasse noch einige Features mitgeben will. Aber natürlich hast du recht, wenn du sagst, dass sie in diesem Beispeil eigentlich überflüssig ist. Das kann ich ja noch im Tutorial ergänzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Container-Klassen in Delphi

  Alt 22. Nov 2007, 11:06
Dann lass doch einfach die Verwendung der Generics weg und nimm' ne normale Liste. Dann kannst Du ja im Kommentar erwähnen, dass der .NET-typische Weg eigentlich die Verwendung der Generics wäre, Du hier aber, um die Parallelen zu zeigen, auf eine klassische Liste zurückgegrifefn hast.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Container-Klassen in Delphi

  Alt 22. Nov 2007, 15:17
Auch sollte der Wrapper auf jeden Fall IList<T> implementieren, wodurch der Code aber schnell mal doppelt so lang wie bisher werden könnte .
Es ist einfach so, dass die BCL einem in den allermeisten Fällen keinen Grund gibt, einen eigenen Wrapper zu schreiben. Brauche ich eine strunzdumme Liste, nehme ich List<T>, brauche ich eigene Logik, erbe ich von Collection<T>. Der Blick über den Tellerrand ist eine schöne Idee, aber zeigt er eben nur die Syntax von C# und das Vorhandensein eines GC und nicht das Eigentliche: Wie ein .Net-Entwickler das Problem lösen würde.

Entweder würde ich mir noch irgendeine für Personen-Objekte vernünftige Prüfung vor dem Einfügen in die Liste ausdenken[*] und dann das Ableiten von Collection<Person>, Überschreiben von InsertItems und schließlich auch die Benutzung der entstandenen Klasse zeigen, oder, wie du schon sagtest, das Beispiel stehen lassen und den Text noch etwas weiter ausführen (ArrayList würde ich eher nicht verwenden, denn das hat dann wirklich nicht mehr viel mit .Net-Code zu tun), wobei du dann noch zwei Kleinigkeiten ändern könntest:
Den Cast im Getter kannst du weglassen, denn gerade dafür hast du ja die generische innere Liste, ebenso die Namespace-Angabe von IEnumerator<T>, die eher verwirren dürfte und die du bei List<T> ja auch nicht verwendet hast.
[*]Dir fallen bestimmt schönere Beispiele als "eine Liste, die nur Personen annimmt, deren Nachname mit A anfängt" ein .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Container-Klassen in Delphi

  Alt 22. Nov 2007, 22:24
Das habe ich mir fast gedacht, das dieser Teil noch nicht ganz optimal ist. aber ich mache selber erst meine ersten ernsthaften gehversuche in C# (zwangsweise aus beruflichen Gründen).Ich werde ihn dann noch mal etwas überarbeiten. Danke für die Hinweise.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Container-Klassen in Delphi

  Alt 23. Nov 2007, 02:29
Zitat von Khabarakh:
Auch sollte der Wrapper auf jeden Fall IList<T> implementieren, wodurch der Code aber schnell mal doppelt so lang wie bisher werden könnte .
Naja, es gäbe da die Option das Tellerranddingsens als .Net im Allgemeinen aufzufassen und dann gäbe es eine weitere Sprache, die genau das vereinfacht.
Hier mal Pseudo code, wie eine Liste aussehen kann, deren Elementtyp zwar generisch ist, aber T muss mindestens Person oder ein Nachfahre sein und einen öffentlichen, parameterlosen Konstruktor besitzen:
Delphi-Quellcode:
type
  PersonList<T> = public class(IList<T>)
    where T is Person, T has constructor;
  public
    method AddNew : T;
    method Add(item : T);
    property Count : Integer
      read Innerlist.Count;
    property Item[index : Integer] : T
      read InnerList[index]
      write InnerList[index]; default;
  protected
    property InnerList : List<T> := new List<T>(); readonly;
      implements IList<T>; // *plopp*, schon implementiert...
  end;

implementation

method PersonList<T>.Add(item : T);
begin
  Innerlist.Add(item);
end;

method PersonList<T>.AddNew : T;
begin
  result := new T();
  Add(result);
end;
OK, man hätte gleich von List<T> ableiten können... *g*
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Container-Klassen in Delphi

  Alt 26. Nov 2007, 15:28
Hi Luckie,
nettes Tutorial (irgendwo her kenne ich das, aber es soll erst 4 Tage alt sein ).
Eine Sache fiel mir auf, und ja ich weiß ich bin kleinlich, aber dennoch finde ich, dass du es wissen solltest
Und zwar schreibst du in 3.:
Zitat:
Zentrale Methode ist die Methode
procedure Click(Sender: TObject); reintroduce;!
  1. Die Zentrale Methode ist die Methode.
    Ich hätte da sowas geschrieben: Das zentrale Ereignis ist die "OnClick"-Methode.
  2. Ist dein "!" in die Codezeile gerutscht

Eine Frage dazu habe ich noch:
Warum nicht von TList erben, und dann die Add... Methoden mit neuen Parametern überschreiben?

MfG
xZise

PS: Für ein Programm habe ich die Methode schon erfolgreich angewendet! Das funktioniert sehr gut, und ist richtig cool
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Container-Klassen in Delphi

  Alt 26. Nov 2007, 17:30
Zitat von xZise:
Warum nicht von TList erben, und dann die Add... Methoden mit neuen Parametern überschreiben?
Wie willst du eine statische Methode überschreiben, noch dazu mit anderen Parametern ? Und wenn du Add nur verdeckst/überlädst, hast du am Ende alles Mögliche, aber auf keinen Fall eine typsichere Liste.

@Elvis: Wenn ich das nächtse Mal vor dem Problem stehe, einen Wrapper ohne eigene Logik schreiben zu müssen, werde ich dran denken, versprochen *g* .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Container-Klassen in Delphi

  Alt 3. Dez 2007, 11:34
Zitat von Khabarakh:
ebenso die Namespace-Angabe von IEnumerator<T>, die eher verwirren dürfte und die du bei List<T> ja auch nicht verwendet hast.
Aber die brauche ich doch für das foreach Konstrukt:
Code:
// benötigt für foreach
        public System.Collections.Generic.IEnumerator<Person> GetEnumerator()
        {
            return innerList.GetEnumerator();
        }
und irgendwie, muss ich ja den Rückgabetyp festlegen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz