Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Objekte direkt verketten???


Died12 - Mo 18.08.08 14:49
Titel: Objekte direkt verketten???
Hallo Liebe Delphi Community,

Ich besuche die 13. Klasse eines Gymnasiums und bin wirklich nicht grade ein Ass in Informatik. Wir haben uns in der Vergangenheit mit der Klasse TList in Form einer Vokabelliste auseinandergesetzt. Nun sollen wir bis Freitag folgende Aufgabe lösen die auch noch benotet wird und ich bitte euch um Hilfe:

Die Klasse TList stellt eine Verwaltungsstruktur für Listenobjekte zur Verfügung. Die Objekte sind zwar logisch verkettet, tatsächlich jedoch sind sie in die Liste "eingehängt". Als Alternative bietet es sich an, die Objekte direkt zu verketten, indem jedes Listenobjekt einen Verweis auf seinen Vorgänger erhält.

1)Formulieren Sie eine solche Alternative unter Benutzung von Hat-,Ist- und Kennt Beziehung.

2) Erstellen Sie ein zugehöriges Klassendiagramm.

3) Implementieren Sie diese Alternative.

Keine Idee wie ich das realisieren kann. Bitte erklärt es mir.


Narses - Di 19.08.08 20:59
Titel: Re: Objekte direkt verketten???
Moin und :welcome: im Forum!

user profile iconDied12 hat folgendes geschrieben:
Ich besuche die 13. Klasse eines Gymnasiums und bin wirklich nicht grade ein Ass in Informatik.
[...]
Keine Idee wie ich das realisieren kann.
Vielleicht das "falsche" Fach gewählt? :nixweiss: Manchmal hilft´s auch einfach, wenn man zuhört, was der Lehrer im Unterricht so erzählt... :zwinker: sorry, aber für Null-Plan-Fragen muss man auch einen Spruch kassieren können *g*

user profile iconDied12 hat folgendes geschrieben:
Nun sollen wir bis Freitag folgende Aufgabe lösen die auch noch benotet wird und ich bitte euch um Hilfe:
Vorab: du kannst sicher nicht erwarten, dass wir für dich deine Hausaufgaben machen. :| Wenn sie auch noch benotet werden, wäre das sogar ein Betrugsversuch, nur mal zum drüber nachdenken. :idea:

user profile iconDied12 hat folgendes geschrieben:
Als Alternative bietet es sich an, die Objekte direkt zu verketten, indem jedes Listenobjekt einen Verweis auf seinen Vorgänger erhält.
[...]
Bitte erklärt es mir.
Es geht hier um eine sogenannte verkettete Liste [http://de.wikipedia.org/wiki/Verkettete_Liste]. Das könnte man in Delphi etwa so abbilden:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TMyObject = class(TObject)
  private
    FText: String// Nutzdaten
    FNext: TMyObject; // Zeiger auf den Nachfolger
  public
    property Text: String read FText write FText; // Zugriff auf Nutzdaten
    property Next: TMyObject read FNext write FNext; // Zugriff auf den Nachfolger
  end;
Das Beispiel oben ist nur zur Veranschaulichung gedacht (es wird sich so nicht verwenden lassen, ich habe absichtlich einen wichtigen Teil weggelassen, den der Compiler braucht, damit er das "versteht"; aber ein bischen was sollst du schließlich auch noch machen ;)).

cu
Narses


Inicus63 - Mi 20.08.08 11:57


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
.
.
.

type
  TListe = class (TObject)
    private
      hListe: TList;
      AktPos: Integer;
    public
      constructor Create;  virtual;
      destructor  Destroy; override;
      property AktElement: TListe read FNext write FNext
      procedure Append (Elem: TObject); virtual;
      procedure Insert (Elem: TObject); virtual;
      procedure Delete;                 virtual;
      function  GetElement: TObject;    virtual;
      procedure First; virtual;
      procedure Last; virtual;
      procedure Previous; virtual;
      procedure Next; virtual;
      function IsEmpty: Boolean; virtual;
      function IsFirst: Boolean; virtual;
      function IsLast:  Boolean; virtual;
    end;

implementation

constructor TListe.Create;
begin
  inherited Create;
  hListe := TList.Create;
  AktPos := -1;
end;

destructor TListe.Destroy;
begin
  hListe.Destroy;
  inherited Destroy
end;

procedure TListe.Append (Elem: TObject);
begin
  hListe.Add (Elem);
  AktPos := hListe.Count-1;
end;

procedure TListe.Insert (Elem: TObject);
begin
  if not Self.IsEmpty
    then begin
      hListe.Insert (AktPos, Elem);
      AktPos := hListe.IndexOf (Elem)
    end
    else Self.Append (Elem)
end;

procedure TListe.Delete;
begin
  if not IsEmpty
    then begin
      hListe.Delete (AktPos);
      if AktPos >= hListe.Count
        then AktPos := hListe.Count-1
     end;
end;

function TListe.GetElement: TObject;
begin
  if not IsEmpty then
    GetElement := hListe.Items[AktPos]
end;

procedure TListe.First;
begin
  If AktPos >= 0
    then AktPos := 0
end;

procedure TListe.Last;
begin
  if AktPos >= 0
    then AktPos := hListe.Count-1;
end;

procedure TListe.Previous;
begin
  if AktPos >= 1
    then AktPos := AktPos-1;
end;

procedure TListe.Next;
begin
 if AktPos <= hListe.Count-2
   then AktPos := AktPos+1;
end;

function TListe.IsEmpty: Boolean;
begin
  IsEmpty := (AktPos <= -1)
end;

function TListe.IsFirst: Boolean;
begin
  IsFirst := (AktPos = 0)
end;

function TListe.IsLast: Boolean;
begin
  IsLast := (AktPos = hListe.Count-1)
end;

end.


So müsste der gesamte Code aussehen, nur wie implementiere ich da jetzt die verkettete Liste ein?

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Gausi - Mi 20.08.08 12:05

Wenn du eine verkettete Liste haben willst, dann musst du vom Delphi-Typ TList weg. Denn das heißt zwar Liste, ist aber ein Array.

user profile iconNarses hat da die ersten Ansätze geliefert. In eine Liste kommen Objekte rein, die jeweils den Vorgänger und Nachfolger in der Liste speichern. Die Liste muss dann diese "Zeiger" auf Vorgänger und Nachfolger ändern, wenn Daten/Objekte angehängt, eingefügt oder gelöscht werden. Die Methoden sind dann in etwa die, die du da auch schon hast. Aber das mit TList ist Murks.


Died12 - So 24.08.08 22:35
Titel: Thema verkettete Liste
Hallo allerseits!!

Ersteinmal danke für die kompetente Hilfe. Ich wollte jedoch nur einaml anmerken das ich keinen gebeten habe meine Hausaufgaben zumachen. Ich habe mir ienfach schnelle Hilfe erhofft weil unser Kurs nicht grade der Beste ist und wir auch nciht so recht mit unserer Lehrerin klar kommen. Deswegen jedoch direkt wegen eines Betrugsverscuhes angeklagt zu werden habe ich nicht gedacht :shock: :shock: !!

Naja wie dem auch sei vielen Dank nochmal und wenn ich noch einmal Probleme haben sollte wende ich mich vertrauensvoll an das Forum.

mfG Andre