AGB  ·  Datenschutz  ·  Impressum  







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

Zwei Klassen in einer ObjectList

Ein Thema von totti14 · begonnen am 28. Mai 2010 · letzter Beitrag vom 28. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#1

Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 17:19
Hallo,
ich habe zwei Klassen mit den selben public proceduren.
Die beide Klassen werden eigentlich nur beim erzeugen unterschieden. Je nachdem auf welchen Port die Daten rein kommen.
Jeder Klasse macht natürlich was anderes in Send und Verarbeite.
Diese wollte ich dann einer Generetic Objectlist verwalten. Die scheinen in D2010 ja gut zu funktionieren ?

Delphi-Quellcode:
Type
  TProt1 = class
    private
      procedure MachWasAB;
    public
      constructor create;
      procedure Send(const Buf : Array of byte);
      procedure Verarbeite;
  end;

  TProt2 = class
    private
      procedure MachWasABC;
    public
      constructor create;
      procedure Send(Const Buf : Array of Byte);
      procedure Verarbeite;
  end;

Var
  ClientList: TObjectList<TProt1>;
Delphi-Quellcode:

MAIN

  ClientList:=TObjectList<TProt1>.create;
........
  if Port = 300 then
  ClientList.Add(TProt2.create) // das geht natürlich nicht
  else
  ClientList.Add(TProt1.create);

  ........
  ClientList[i].Send(Data];
Da gibt es doch bestimmt eine bessere Lösung dafür ?

Besten Dank
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 17:24
Du könntest beide Klassen von einer abstrakten Basisklasse ableiten, die die gemeinsamen public Methoden ebenfalls als abstrakt definiert. Von dieser Basisklasse könntest Du die generische ObjectList erstellen...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 17:25
Hallo und Willkommen im Land der Objektorientierung

Du leitest einfach TProt2 von TProt1 ab:

Delphi-Quellcode:
type
 TProt1 = class
    protected
      procedure MachWasAB; virtual;
    public
      constructor create; virtual;
      procedure Send(const Buf : Array of byte); virtual;
      procedure Verarbeite; virtual;
  end;

  TProt2 = class(TProt1)
    protected
      procedure MachWasABC; override;
    public
      constructor create; override;
      procedure Send(Const Buf : Array of Byte); override;
      procedure Verarbeite; override;
  end;

Var
  ClientList: TObjectList<TProt1>;
oder erstellst eine (abstrakte) Oberklasse:

Delphi-Quellcode:
type
 TProt = class abstract
    protected
      procedure MachWasAB; virtual; abstract;
    public
      procedure Send(const Buf : Array of byte); virtual; abstract;
      procedure Verarbeite; virtual; abstract;
  end;

  TProt1 = class(TProt)
    protected
      procedure MachWasAB; override;
    public
      constructor create; virtual;
      procedure Send(const Buf : Array of byte); override;
      procedure Verarbeite; override;
  end;

  TProt2 = class(TProt1)
    protected
      procedure MachWasABC; override;
    public
      constructor create; override;
      procedure Send(Const Buf : Array of Byte); override;
      procedure Verarbeite; override;
  end;

Var
  ClientList: TObjectList<TProt>;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 17:25
Ich würde das ganze über Ableitungen lösen:
Delphi-Quellcode:
Type
  TBasicProt = class(TObject)
  public
    procedure Send(const Buf : Array of byte); virtual; abstract;
    procedure Verarbeite; virtual; abstract;
  end;

  TProt1 = class(TBasicProt)
    private
      procedure MachWasAB;
    public
      constructor create;
      procedure Send(const Buf : Array of byte); override;
      procedure Verarbeite; override;
  end;

  TProt2 = class(TBasicProt)
    private
      procedure MachWasABC;
    public
      constructor create;
      procedure Send(Const Buf : Array of Byte); override;
      procedure Verarbeite; override;
  end;

Var
  ClientList: Array of TBasicProt; // oder auch eine andere Liste
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 17:36
Wow. In 2 Minuten soviele Antworten.
Bei OOP hatte ich schon immer ein Brett vor der Rübe Kommt im Embedded Pascal nicht vor.

Bei meiner Generetic Objectlist wollte ich schon bleiben, da mein Prog so schon läuft.
Ich wollte es nur erweitern.

Ich werde Eure Vorschläge mal probieren.

Danke

Wobei hier hakt es wieder bei mir:

Zitat:
oder erstellst eine (abstrakte) Oberklasse:
Delphi-Quellcode:
   type
TProt = class abstract
    protected
      procedure MachWasAB; virtual; abstract;
    public
      procedure Send(const Buf : Array of byte); virtual; abstract;
      procedure Verarbeite; virtual; abstract;
  end;

  TProt1 = class(TProt)
    protected
      procedure MachWasAB; override;
    public
      constructor create; virtual;
      procedure Send(const Buf : Array of byte); override;
      procedure Verarbeite; override;
  end;

  TProt2 = class(TProt1)
    protected
      procedure MachWasABC; override;
    public
      constructor create; override;
      procedure Send(Const Buf : Array of Byte); override;
      procedure Verarbeite; override;
  end;

Var
  ClientList: TObjectList<TProt>;
ClientList.Add(TProt2.Create); funzt ja nicht ?
EDIT: Sorry. Das funktioniert ja sogar
Aber jetzt mag er mein MachWasABC in TProt2 nicht. Gibt ja auch nicht in der Basis Klasse.

  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 18:10
Zitat von totti14:
Aber jetzt mag er mein MachWasABC in TProt2 nicht. Gibt ja auch nicht in der Basis Klasse.
Nunja entweder musst du die Methode in die Basisklasse aufnehmen (als abstrakte Methode) oder du musst halt ggf. casten.

Deine MachWasABC; kannst/darfst du in Prot2 übrigens nicht überschreiben. Die wurde vorher ja nicht definiert. Das habe ich in meinem Code auch übersehen. Je nachdem musst du MachWasAB und MachWasABC auch gar nicht in die Basisklasse aufnehmen und dann überschreiben. Dann kannst du sie als private in jeder Klasse implementieren. Aber das kommt halt auf den Anwendungszweck drauf an.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 18:19
Jo.
Jede Klasse hat halt noch ein paar interne Funktionen. Diese werden nur von Send gebraucht.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 18:30
OK. Diese internen brauchst du dann nicht in die Basisklasse zu tun.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
totti14

Registriert seit: 26. Mai 2005
Ort: Bremen
90 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 18:36
Delphi-Quellcode:
type
TProt = class abstract
    public
      procedure Send(const Buf : Array of byte); virtual; abstract;
      procedure Verarbeite; virtual; abstract;
  end;

  TProt1 = class(TProt)
    privat
      procedure MachWasAB;
      procedure MachWasABC;
      procedure MachWasABCD;
    public
      constructor create; virtual;
      procedure Send(const Buf : Array of byte); override;
      procedure Verarbeite; override;
  end;

  TProt2 = class(TProt1)
    privat
      procedure MachWasABCDE;
      procedure MachWasABCDEF;
    public
      constructor create; override;
      procedure Send(Const Buf : Array of Byte); override;
      procedure Verarbeite; override;
  end;
Dann würde TProt2 ja alles unnütze private von TProt1 erben ?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Zwei Klassen in einer ObjectList

  Alt 28. Mai 2010, 18:44
Private Felder und Methoden werden nicht vererbt
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  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 19:24 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