AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit selbst erstellter Klasse

Ein Thema von XiONLuNiX · begonnen am 5. Jun 2005 · letzter Beitrag vom 7. Jun 2005
Antwort Antwort
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#1

Re: Probleme mit selbst erstellter Klasse

  Alt 5. Jun 2005, 20:13
Der fundamentale Fehler schlechthin ist die Sache mit den globalen Variablen Nach und Anzahl. Anzahl gehört eigentlich zum Gedächtnis deines Kunden-Objektes. Mit dem Verweis auf den Nachfolger ist das allerdings so eine Sache. Der Grad der Entkopplung deiner Klassen bestimmt wo dieser Verweis unterzubringen ist.

Denkbar sind folgende Ansätze:

(1) Deine Queue ist spezifisch und kann nur Objekte einer bestimmten Klasse verwalten.
(2) Deine Queue ist generisch und kann Objekte einer beliebigen Klasse verwalten.
(2.1) Die Klasse TKunde ist Nachfahre einer speziellen Klasse TQueueItem.
(2.2) Die Klasse TQueueItem enthält einen Verweis auf ein Kunden-Objekt.

Ich favorisiere Ansatz (2) und bei deiner Aufgabe dürften die beiden dort unterschiedenen Varianten beide problemlos umsetzbar sein.

Delphi-Quellcode:
// Variante (2.1)

type
  TQueueItem = class
  private
    FNext: TQueueItem;
  public
    property Next: TQueueItem read FNext write FNext;
  end;
  
  TKunde = class(TQueueItem)
  private
    FAnzahl: integer;
  public
    constructor Create(anzahl: integer);
    procedure Auflegen; // Einen Artikel zum Erfassen geben
    property Anzahl: integer read FAnzahl; // write nur intern
    property Naechster: TKunde read FNext;
  end;
Delphi-Quellcode:
// Variante (2.2)

type
  TQueueItem = class
  private
    FNext: TQueueItem;
    FData: TObject;
  public
    consturctor Create(data: TObject);
    property Data: TObject read FData;
    property Next: TQueueItem read FNext write FNext;
  end;
  
  TKunde = class
  private
    FAnzahl: integer;
  public
    constructor Create(anzahl: integer);
    procedure Auflegen; // Einen Artikel zum Erfassen geben
    property Anzahl: integer read FAnzahl; // write nur intern
  end;
Früher oder später solltest du dir angewöhnen abstrakte Klassen (Queue) und solche aus deinem Aufgabenfeld (Kunde, Kasse) voneinander zu trennen. Hier noch ein Code-Schnippsel für TQueue:

Delphi-Quellcode:
  TQueue = class
  private
    FHead: TQueueItem;
    FTail: TQueueItem;
  public
    function Add(qi: TQueueItem): TQueueItem;
    function Remove: TQueueItem;
    property Head: TQueueItem read FHead;
  end;
Ein anderer Fehler ist deine Verwendung von Randomize(). Diese Prozedur dient eigentlich dazu dem Pseudo-Zufallszahlen-Generator einen bestimmten Seed-Wert zu verpassen, damit er eine reproduzierbare Folge von Zufallszahlen erzeugt. Brauchst du eigentlich nicht wirklich - schon gar nicht im Konstruktor deiner Kunden-Klasse.

Bevor ich deine Hausaufgaben jetzt ganz erledige warte ich lieber mal darauf, was du so zu Stande bringst.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:59 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-2025 by Thomas Breitkreuz