AGB  ·  Datenschutz  ·  Impressum  







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

Abstract oder überhaupt nicht?

Ein Thema von Neutral General · begonnen am 9. Aug 2006 · letzter Beitrag vom 10. Aug 2006
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Neutral General
Neutral General

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

Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 12:24
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

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
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
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
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 12:39
Zitat von Neutral General:
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...
Dass es kracht ist ein Vorteil. Das bedeutet naemlich, dass man bei der Implementierung etwas falsch gemacht hat.
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
Mike
Passion is no replacement for reason
  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: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 12:44
Ja aber man könnte doch einfach abstracte Methoden weglassen und dem Programmierer überlassen ob er sie hinzufügt
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
mkinzler
(Moderator)

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

Re: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 12:46
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 12:51
Zitat von Neutral General:
Ja aber man könnte doch einfach abstracte Methoden weglassen und dem Programmierer überlassen ob er sie hinzufügt
Wo bitte wäre dann der Sinn in der Basisklasse?

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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 12:54
@Neutral General: Lies dich mal in sie Grundlagen der OOP ein.
Markus Kinzler
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#7

Re: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 12:56
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]
Thomas Breitkreuz
  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: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 13:00
Zitat von mkinzler:
@Neutral General: Lies dich mal in sie Grundlagen der OOP ein.
erm..*hust*

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 --- ___ ---



EDIT: Thx ich denke ich habe jetzt den Sinn von abstract verstanden.. Hatte mir das vorher auch in etwa so gedacht
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
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#9

Re: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 13:03
also ich brauche abstract in meinen selbstverwalteten Klassen.
Eben aus den Gründen, die ich in meinem letzten Beitrag aufgezeigt habe.

Gruß

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Abstract oder überhaupt nicht?

  Alt 9. Aug 2006, 13:04
Zitat:
Es tut mir leid wenn es jetzt so rübergekommen ist das ich kein OOP könnte.
Ich kann dich beruhigen, so ist es nicht rübergekommen.
Zitat:
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.
Dann barucht man es vielleicht nicht unbedingt, ich würde es aber trotzdem verwenden.
Zitat:
Ich kann euch beruhigen ich bin mit den Grundlagen von OOP vertraut --- ___ ---
Aber nicht mit dem Konzept von abstrakten klassen.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     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 12:50 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