PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Delphi] Doppelte Verkettung



Mordriel
19.08.2008, 16:12
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.

Vllt Kennt-Beziehung?

Crash-Override
19.08.2008, 18:00
kA was du meinst, ist es vll sowas in der Art:


// Untested
TListObject = class
private
loNext: TListObject;
loPrev: TListObject;
public
function AddNext: TListObject;
constructor Create(Parent: TListObject);
property GetPrevious: TListObject read loPrev;
property GetNext: TListObject read loNext;
end;

constructor TListObject.Create(Parent: TListObject);
begin
loPrev := Parent;
loNext := nil;
end;

function TListObject.AddNext: TListObject;
begin
if loNext <> nil then
begin
// Error already has a next
Result := nil;
end
else
begin
loNext := TListObject.Create(self);
Result := loNext;
end;
end;

Oder sowas in der Art?

Mordriel
19.08.2008, 21:51
Es handelt sich dabei um ein vokabel programm, bestehen aus mehreren Units, die Objekte, sprich die Vokabeln sollen innerhalb dieser Liste sowohl nachvolger als auch vorgänger kennen, um Listenzugriffe zu vereinfachen.

Lysandros
20.08.2008, 12:12
Ich weiß nicht, wie du Listen grundsätzlich implementierst, aber man könnte es z.B. mit einer inneren Klasse Node machen, die aus:
Node preNode;
Node nextNode;
String vocable;
Node(){}
Node(String s, Node p, Node n){
vocable = s;
nextNode = n;
preNode = p;
}
besteht. Außen herum hast du dann die Listenklasse die einen Verweis auf den Startknoten hat, der keinen Vorgänger hat und letzte Knoten hat dementsprechend bei nextNode eine Referenz auf einen null-value. Geeignete Konstruktoren und Methoden kannst du dann ja selbst hinzufügen.

Crash-Override
20.08.2008, 15:53
Es handelt sich dabei um ein vokabel programm, bestehen aus mehreren Units, die Objekte, sprich die Vokabeln sollen innerhalb dieser Liste sowohl nachvolger als auch vorgänger kennen, um Listenzugriffe zu vereinfachen.

Ich hab dir doch dazu die entsprechende Basis-Klasse bereits gepostet. Du muesstest im Prinzip nur noch deine Objekte (wie auch immer ihr die Vokabeln vorliegen habt, also in welchem Variabel-Typ) zu jeder Instanz hinzufuegen, oder verstehst du den Code nicht?