![]() |
Abstract oder überhaupt nicht?
Hi,
Ich hatte gestern das erste mal wirklich etwas mit abstracten Methoden zu tun :) Ok ich hab sie auch schon zu spüren bekommen als ich versucht hatte mit einem TStream Daten auszulesen aber als es da gekracht hab, hat mich das eigentlich nur geärgert und ich hab nicht weiter drüber nachgedacht :mrgreen: Naja ich frage mich jetzt: Was ist der Vorteil von abstracten Methoden? Man könnte die Methode doch in der Basisklasse einfach weglassen.. Die Nachfolger könnten sie doch einfach so hinzufügen und sie hätten sich das Length('override;') Zeichen gespart :mrgreen: Das einzige etwas sinnvolle was mir einfällt ist das der Programmierer mehr oder weniger gezwungen ist abstracte Mehtoden in der Nachfolgeklasse auszufüllen weil es ansonsten halt kracht wenn man sie aufruft... Wenn man will das die Methode in der Basisklasse leer ist dann könnte man sie doch theoretisch auch einfach virtual machen und sie leer lassen. Dann würde es wenigstens nicht krachen wenn man sie aufruft... Also was ist jetzt der Vorteil? Gruß Neutral General |
Re: Abstract oder überhaupt nicht?
Zitat:
Stell dir mal vor: TStream deklariert Read(...) als virtuell, und implementiert eine leere Funktion. TFileStream implementiert aber kein Read(...) Wenn ich nun TFileStream.Read aufrufe, dann passiert nix - und es funktioniert auch nix. Durch abstract wird man (wie du erkannt hast) gezwungen, die Methode entweder zu deklarieren, oder weiterhin als abstract beizubehalten - durch denentsprechende Deklaration. Die Fehlermeldung, die du erhaelst, zeigt dir, dass etwas nicht stimmt, und du kannst das Problem schnell lokalisieren. Wenn aber kein Fehler auftritt, und das Programm einfach nicht funktioniert (weil eben bspw. keine Daten aus TFileStream gelesen werden), dann sitzt man schon mal ein paar Stunden/Tage an der Fehlersuche ;) greetz Mike |
Re: Abstract oder überhaupt nicht?
Ja aber man könnte doch einfach abstracte Methoden weglassen und dem Programmierer überlassen ob er sie hinzufügt
|
Re: Abstract oder überhaupt nicht?
Du bist gleichzeitig auf eine Besonderheit von Delphi gestossen, das nämlich das Anlegen von Instanzen von abstrakten Klassen erlaubt.
Abstrakte Methoden sind als Verpflichtung von abgeleiteten Klassen zur Implemnetierung zu verstehen. So kann eine übergeordnete Klasse eine Methode bereitstellen, welche dann von verschiedenenabgeleiteten Klassen verschieden implemnetiert wird. |
Re: Abstract oder überhaupt nicht?
Zitat:
TStream und seine Methoden sind deshalb abstrakt, weil sie ein Interface darstellen sollen, mit dem man auf alle Streams zugreifen kann. Kuck dir mal die Indys an, die liefern in ihren Ereignissen auch TStreams, nicht TMemoryStreams - obwohl sie die intern benutzen. |
Re: Abstract oder überhaupt nicht?
@Neutral General: Lies dich mal in sie Grundlagen der OOP ein.
|
Re: Abstract oder überhaupt nicht?
Das weglassen hätte große Nachteile.
Ich schreibe meine Daten z.B. gerne wahlweise in einen TMemorstream oder in einen TFilestream. Meine Variable deklariere ich als TStream, weise Ihr aber entweder ein TFilestream oder ein TMemorystream zu. Rufe ich nun das Read bzw. das Write der Variablen auf, wird automatisch die richtige Funktion/Prozedur, nämlich die der entsprechenden Childklasse angesprochen. Hätte man Read und Write in der Basisklasse TStream nicht deklariert, so wäre das nicht möglich. abstract wird eigentlich immer dann verwendet, wenn man einer Gruppe von Klassen eine Methode mitgeben möchte, die zwar bei allen Nachfahren das selbe Ziel hat (z.B.: schreiben und lesen) aber auf ganz unterschiedlichen Wegen funktionieren. Hoffe, das bringt ein kleines bißchen licht ins Dunkel. Gruß onlinekater [such]wo it er, der rote Katen...[/such] |
Re: Abstract oder überhaupt nicht?
Zitat:
Es tut mir leid wenn es jetzt so rübergekommen ist das ich kein OOP könnte.. *hust* Ehhm.. Das war einfach nur eine Frage die mich beschäftigt hat. Weil man abstract ja eigentlich nicht brauch wenn man seine Klasse nur selbst verwendet.. Also was ich sagen will: Ich kann euch beruhigen ich bin mit den Grundlagen von OOP vertraut --- ___ --- :roll: :roll: :roll: :wall: EDIT: Thx ich denke ich habe jetzt den Sinn von abstract verstanden.. Hatte mir das vorher auch in etwa so gedacht ;) |
Re: Abstract oder überhaupt nicht?
also ich brauche abstract in meinen selbstverwalteten Klassen.
Eben aus den Gründen, die ich in meinem letzten Beitrag aufgezeigt habe. Gruß onlinekater |
Re: Abstract oder überhaupt nicht?
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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