AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Instanz von T wird mit der abstrakten Methode XYZ angelegt

Instanz von T wird mit der abstrakten Methode XYZ angelegt

Ein Thema von Codehunter · begonnen am 19. Mär 2018 · letzter Beitrag vom 19. Mär 2018
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#1

AW: Instanz von T wird mit der abstrakten Methode XYZ angelegt

  Alt 19. Mär 2018, 10:36
Das ist richtig, im konkreten Fall jedoch etwas unpraktikabel, weil es ein Delphi Starter ist. Ich müsste weiter oben in der Hierarchie schon abzweigen und dann jede Menge nachimplementieren. Da ist es deutlich einfacher und sicherer, einfach leere Prozeduren anzulegen. Im ungünstigsten Fall passiert dann einfach gar nichts, aber es kracht nicht mit einer Abstract Exception. Da es sich bei den bisher abstraktion Methoden um Functions handelt, gebe ich einfach den Defaultwert zurück, auf den ich dann in der Routine prüfen kann, wo dynamisch die eine oder andere Kindklasse verwendet wird.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#2

AW: Instanz von T wird mit der abstrakten Methode XYZ angelegt

  Alt 19. Mär 2018, 11:06
Wenn du sicher bist, daß die Methoden nur in überschreibenden Klassen verwendet werden, kannst du auch in der Dummy-Methode eine Assertion einbauen oder eine EAbstractError -Exception werfen. Dann bekommst du wenigstens mit, wenn sich am Aufrufverhalten ungewollt etwas ändert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#3

AW: Instanz von T wird mit der abstrakten Methode XYZ angelegt

  Alt 19. Mär 2018, 12:25
Da hast du völlig recht Uwe. Die Idee finde ich sogar sehr gut, in der Basisklasse eine Art von Not-Implemented-Benachrichtigung einzubauen. Irgendwie finde ich es schade, dass es neben den protected- und public-Abschnitten in Klassen nicht auch einen gibt wo man Methoden deklarieren kann, die ausschließlich in Kindklassen angesprochen/überschrieben werden können und deren Sichtbarkeit nach außen hin in Kindklassen nicht erhöht werden kann. Also ungefähr sowas:
Delphi-Quellcode:
type
  TMyBaseClass = class(TObject)
  private

  protected

  descendend
    procedure MyMethod; virtual; obligatory;
  public

  end;

  TMyChildClass = class(TMyBaseClass)
  descended
    procedure MyMethod; override; // <-- Klappt
  end;

  TMyChildClass2 = class(TMyBaseClass)
  public
    procedure MyMethod; override; // <-- Compilerfehler wegen erhöhter Sichtbarkeit
  end;

  TMyChildClass3 = class(TMyBaseClass)
  descendend
    // MyMethod wird nicht implementiert, Compilerfehler
  end;
Damit könnte man von vornherein ausschließen, dass solche Methoden nach außen hin sichtbar werden. Ein Konstrukt aus protected Methode + final trifft das irgendwie nicht so richtig. Das Statement "obligatory" würde die Implementierung einer Methode in Kindklassen erzwingen - "abstract" lässt es ja offen und im Zweifel kracht es.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (19. Mär 2018 um 12:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#4

AW: Instanz von T wird mit der abstrakten Methode XYZ angelegt

  Alt 19. Mär 2018, 12:32
Irgendwie finde ich es schade, dass es neben den protected- und public-Abschnitten in Klassen nicht auch einen gibt wo man Methoden deklarieren kann, die ausschließlich in Kindklassen angesprochen/überschrieben werden können.
Es gibt strict protected .
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#5

AW: Instanz von T wird mit der abstrakten Methode XYZ angelegt

  Alt 19. Mär 2018, 12:37
Es gibt strict protected .
Tatsache Da wird man alt wie eine Kuh und lernt immer noch dazu... Gibts vielleicht auch sowas wie das "obligatory" in meinem Beispiel?
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#6

AW: Instanz von T wird mit der abstrakten Methode XYZ angelegt

  Alt 19. Mär 2018, 15:03
Gibts vielleicht auch sowas wie das "obligatory" in meinem Beispiel?
Nicht direkt in der Form, aber du kannst in den Projekt-Optionen unter Hinweise und Warnungen bei der Warnung Konstruierende Instanz enthält abstrakte Methode den Eintrag auf Fehler stellen, dann compiliert der Source so nicht mehr.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#7

AW: Instanz von T wird mit der abstrakten Methode XYZ angelegt

  Alt 19. Mär 2018, 17:33
Hmmm womit wir wieder beim abstract wären Aber ich meine mich zu erinnern, dass das früher bei D7 von Haus aus so war, dass der Compiler abgebrochen hat wenn Abstracts nicht implementiert waren. Mit dem strict protected bin ich aber schon mal ein gutes Stück weiter beim ordentlichen Anwendungsdesign.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:18 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