AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi OOP machts mir schwer (Design von Klassen)
Thema durchsuchen
Ansicht
Themen-Optionen

OOP machts mir schwer (Design von Klassen)

Ein Thema von Neutral General · begonnen am 28. Mai 2008 · letzter Beitrag vom 28. Mai 2008
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

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

OOP machts mir schwer (Design von Klassen)

  Alt 28. Mai 2008, 18:03
Hi,

Also ich befinde mich gerade in folgender Situation: Ich habe eine Basisklasse und 3-4 davon abgeleitete Klassen. Sagen wir mal das ganze sieht so aus (aufs wesentliche reduziert):

Delphi-Quellcode:
TBase = class

end;

TClass1 = class(TBase)
  procedure DoSomething;
end;

TClass2 = class(TBase)
  procedure DoSomething;
end;


TClass3 = class(TBase)
  procedure DoSomething;
end;

// etc
Nun würde man es intelligenterweise so machen:

Delphi-Quellcode:
TBase = class
 procedure DoSomething;
end;
Jedoch gibt es das Problem, dass sich die Procedure DoSomething in jeder abgeleiteten Klasse in ungefähr genau einer Code-Zeile unterscheidet, wodurch ich sie nicht einfach von TBase erben kann. Außerdem ist diese Zeile auch nicht am Anfang oder am Ende der Procedure, so dass ich nicht mit inherited arbeiten kann, sondern die ganze Procedure bis auf eine Zeile genau abschreiben muss... nun hatte ich eine Idee:

Delphi-Quellcode:
TBase = class
protected
  procedure Zeile; virtual;
public
  procedure DoSomething;
end;

TClass1 = class(TBase)
protected
  procedure Zeile; override;
end;

procedure TBase.Zeile;
begin
end;

procedure TBase.DoSomething;
begin
  // Code
  Zeile;
  // Code;
end;

procedure TClass1.Zeile;
begin
  // Zeile in TClass1
end;
Nur bin ich mir nicht so sicher, ob diese Lösung so schön ist...

Was sagt ihr dazu? Gibt es bessere Methoden?

Gruß
Neutral General
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

Re: OOP machts mir schwer (Design von Klassen)

  Alt 28. Mai 2008, 18:13
Die Idee ist gar nicht mal so schlecht.

Ich würde diese Methode Abstrakt definieren, so dass jede Ableitung diese Methode implementieren muss. Natürlich kannst Du dann die Basisklasse nicht mehr instanzieren, aber das ist ja vielleicht auch gar nicht notwendig?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: OOP machts mir schwer (Design von Klassen)

  Alt 28. Mai 2008, 18:17
Du könntest das Template Method Design Pattern einsetzen. http://de.wikipedia.org/wiki/Schablonenmethode (siehe auch die englisch WP)
1.) in der Basisklasse wird der allgemeine Ablauf vorgegeben. Diese Methode ist public.
Delphi-Quellcode:
TBase = class
private
  procedure Vorberechnung;
  ...
protected
  procedure Phase1; virtual; abstract
  procedure Phase2; virtual; abstract;
public
   procedure DoSomething;
end;

procedure TBase.DoSomething;
begin
  // ein fiktiver Ablauf
  Vorbrechnung;
  Phase1;
  SaveData;
  if bedingung then
    Phase2;
end;
2.) die virtuellen Methoden Phase1 und Phase2 werden in den abgeleiteten Klassen überschrieben und bleiben protected.
Andreas
  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
 
#4

Re: OOP machts mir schwer (Design von Klassen)

  Alt 28. Mai 2008, 18:33
Zitat von shmia:
Du könntest das Template Method Design Pattern einsetzen. http://de.wikipedia.org/wiki/Schablonenmethode (siehe auch die englisch WP)
1.) in der Basisklasse wird der allgemeine Ablauf vorgegeben. Diese Methode ist public.

[...]

2.) die virtuellen Methoden Phase1 und Phase2 werden in den abgeleiteten Klassen überschrieben und bleiben protected.
So war das ganze auch gedacht

Zitat von Phoenix:
Die Idee ist gar nicht mal so schlecht.

Ich würde diese Methode Abstrakt definieren, so dass jede Ableitung diese Methode implementieren muss. Natürlich kannst Du dann die Basisklasse nicht mehr instanzieren, aber das ist ja vielleicht auch gar nicht notwendig?
Danke Ja ich denke, ich mache es auch abstrakt. Die Basisklasse soll tatsächlich nicht erstellt werden.

Also ihr habt mir sehr geholfen
Die größte Schwierigkeit, die jetzt noch besteht und bei der ihr mir nicht helfen könnt, ist einen Namen für meine abstrakte Procedure zu finden

Gruß
Neutral General
Michael
  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 07:32 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