AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Basisklasse und davon abgeleitet drei Standardklassen
Thema durchsuchen
Ansicht
Themen-Optionen

Basisklasse und davon abgeleitet drei Standardklassen

Ein Thema von s-off · begonnen am 8. Okt 2007 · letzter Beitrag vom 10. Okt 2007
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 16:31
Mehrfachvererbung bringt mehr Probleme als Vorteile, deshalb findet man sie nicht in neuren Sprachen wie Java, Delphi, C#, ..., wo man Vererbung per Interfaces präferiert.
Markus Kinzler
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#12

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 16:34
Zitat von quendolineDD:
Da TEdit ja abgeleitet wird von TBasisklasse, übernimmt es schon automatisch dessen Eigenschaften, welche in Public und in protected sich befinden.
Ähm, das ist mir schon klar - ein bissel OOP verstehe ich schon, aber:
TEdit wird nicht von Basisklasse abgeleitet.
Ich möchte eine Klasse, deren Instanz der eines TEdit entspricht, zusätzlich aber die Eigenschaften aus TBasisklasse übernimmt.

Und wie ich schon schrieb: so, wie ich das im Delphi-Code meines ersten Beitrages dargestellt habe, kann das nicht funktionieren; das weiß ich. Aber genau dort liegt ja mein Problem - ich weiß nicht, wie ich dieses Konstrukt erzeugen soll.

Edit:
was ich nicht möchte, ist soetwas:
Delphi-Quellcode:
Type
   TEditklasse = Class(TEdit)
   private
      FEigenschaft1: Integer;
      FEigenschaft2: Integer;
      FEigenschaft3: Integer;
      FWind: String;
      Procedure SetWind(Const Value: Integer);
   public
       Property Wind: String read FWind write SetWind;
   End;

   TLabelklasse = class(TLabel)
   private
      FEigenschaft1: Integer;
      FEigenschaft2: Integer;
      FEigenschaft3: Integer;
      FWind: String;
      Procedure SetWind(Const Value: Integer);
   public
       Property Wind: String read FWind write SetWind;
   end;

   TMemoklasse = Class(TMemo)
   private
      FEigenschaft1: Integer;
      FEigenschaft2: Integer;
      FEigenschaft3: Integer;
      FWind: String;
      Procedure SetWind(Const Value: Integer);
   public
       Property Wind: String read FWind write SetWind;
   End;
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 16:55
Mehrfachvererbung wäre hier sehr praktisch. Du könntest einfach schreiben
 TEditklasse=class(TEdit, TBasisklasse) und fertig wärst du. Ich habe mir auch schon eine weniger eingeschränkte Form der Mehrfachvererbung gewünscht, als es sie in Delphi gibt. Das Diamond-Problem (das meintest du doch, mkinzler?!) wurde in C++ ja sehr gut mit virtueller Vererbung gelöst, und die Spezialfälle, bei denen es vorkommt, ließen sich bestimmt auch anders vermeiden oder verbieten.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#14

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 17:00
Zitat von Apollonius:
Mehrfachvererbung wäre hier sehr praktisch. Du könntest einfach schreiben
 TEditklasse=class(TEdit, TBasisklasse)
Ja, das wäre was

Wenn doch so viele Leute eine solche Funktionalität gerne hätten - gibt es dann keinen 'Workaround'?
Interfaces sind es ja aufgrund der nicht vorhandenen Möglichkeit, Felder etc. zu deklarieren, nicht.

Und nein - für mich ist kein Workaround, das Ganze in C-basierten Sprachen zu realisieren
Abgesehen davon, dass ich kein C[x] beherrsche, sind mir meine Arbeitsmittel vorgegeben.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#15

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 17:27
An Workarounds mangelt es nicht, dafür müsste man aber erst etwas mehr von den Hintergründen erfahren; man möchte schließlich das freakigstmögliche Design-Pattern einsetzen . Z.B. könnte es sinnvoll sein, das ganze als Factory-Interface zu gestalten:
Delphi-Quellcode:
type
  IMyFactory = interface
    function CreateSomething : TBasisklasse;
  end;

[...]

function TMyEdit.CreateSomething;
begin
  Result := TEditklasse.Create;
end;
Oder auch einfach als
Delphi-Quellcode:
type
  IMyExtender = interface
    function GetSomething : TBasisklasse;
    property Something : TBasisklasse read GetSomething;
  end;
(Alle Angaben ohne Gewähr, hab Interfaces in Delphi nur ein-, zweimal benutzt)
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#16

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 17:44
Zitat von Khabarakh:
man möchte schließlich das freakigstmögliche Design-Pattern einsetzen


Naja, zu den Hintergründen - den Sinn habe ich ja bereits erläutert, und ich sehe ein, dass Mehrfachvererbung eine nette Sache wäre.

Ich habe es jetzt so gelöst, dass ich einfach in der Basisklasse ein Feld 'FControl' und eine entsprechende Property dazu erstellt habe, dem ich dann im Constructor, den ich in den Kindklassen überschreibe, einfach eine Instanz der entsprechenden Klasse zuweise, und erst danach den Constructor der Basisklasse aufrufe.
Dann spreche ich das Ganze halt hinterher nicht nur mit dem Instanzennamen an, sondern mit Instanzenname.Control
Mit Mehrfachvererbung hätte mir zwar besser gefallen, aber so gehts auch.

Delphi-Quellcode:
   TBasisklasse = Class
   private
      FControl: TControl;
      FEigenschaft1: Integer;
      FEigenschaft2: Integer;
      FWind: Integer;
      Procedure SetWind(Const Value: Integer);
   public
      Constructor Create(AOwner: TComponent); virtual;
      Property Control: TControl read FControl;
      Property Wind: Integer read FWind write SetWind;
   End;

   TEditklasse = Class(TBasisklasse)
   public
      Constructor Create(AOwner: TComponent); override;
   End;

   TLabelklasse = Class(TBasisklasse)
      Constructor Create(AOwner: TComponent); override;
   End;

   TMemoklasse = Class(TBasisklasse)
      Constructor Create(AOwner: TComponent); override;
   End;

[...]

Constructor TBasisklasse.Create(AOwner: TComponent);
Begin
   FEigenschaft1: FControl.Width;
   FEigenschaft2: FControl.Height;
End;

Procedure TBasisklasse.SetWind(Const Value: Integer);
Begin
   FWind := Value;
   FControl.Width := FEigenschaft1 * Value;
   FControl.Height := FEigenschaft2 * Value;
End;

Constructor TEditklasse.Create(AOwner: TComponent);
Begin
   FControl := TEdit.Create(AOwner);
   Inherited;
End;

Constructor TLabelklasse.Create(AOwner: TComponent);
Begin
   FControl := TLabel.Create(AOwner);
   Inherited;
End;

Constructor TMemoklasse.Create(AOwner: TComponent);
Begin
   FControl := TMemo.Create(AOwner);
   Inherited;
End;
Edit: freue mich natürlich noch immer über anderweitige Lösungsmöglichkeiten, wenn Ihr welche habt
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#17

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 19:46
Hier steht nicht viel brauchbares ! Das einzige wäre ein Tedit und ein TMemo. Die besitzen zumindest mal Editier-Funktionalitäten. Ein TLabel hat nicht mal die. Wozu soll dieser unzusammenhängende Kram jetzt zusammengeschmissen werden ? Wird ein spezielles TEdit gebraucht, dann leite das von TEdit ab usw. Die Funktionalität bei TObject (= bei Null) etc. angefangen selber einzubauen ist völliger Blödsinn.
Gruß
Hansa
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#18

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 19:55
Wenn ich mich jetzt nicht vollkommen vertue, könnten Delphi-Referenz durchsuchenClass Helpers was für dich sein. Das sind Klassen, die du an die Klasse, der sie "helfen", direkt anheftest. Die Klasse hat also zusätzlich diese Felder, Methoden, ... Einzige Einschränkung ist, dass die Unit mit den Helferklassen in der uses-Klausel der verwendenden Units stehen muss.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#19

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 20:02
Hallo,
wenn ich mich recht erinnere gibt es für Delphi mittlerweile ClassHelper.
Mal hier im Forum suchen. Wenn man keine property sondern nur eine
Setter und Getter Methode für WInd verwendet könnte man einen
Classhelper verwenden.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Basisklasse und davon abgeleitet drei Standardklassen

  Alt 8. Okt 2007, 20:02
Ich habe auch schon daran gedacht, aber Helferklassen können keine Felder enthalten.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 04:00 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