AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klassen
Thema durchsuchen
Ansicht
Themen-Optionen

Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klassen

Ein Thema von Luckie · begonnen am 1. Okt 2008 · letzter Beitrag vom 2. Okt 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klassen

  Alt 1. Okt 2008, 11:45
Wir machen in der Berufsschule gerade Java. Ich bringe mir allerdings so ein paar Dinge im Selbststudium bei, weil mir das in der Schule nicht tief genug geht und auch nicht schnell genug. Zur zeit bin ich gerade beim Thema "Vererbung" und "abstrakte Klassen". Die abstrakten Klassen kenne ich natürlich schon aus Delphi, allerdings habe ich mir bisher wohl noch nie richtig Gedanken gemacht, was für einen Nutzen sie haben und wo man sie einsetzt. Könntet ihr mir diesbezüglich etwas helfen?
Michael
  Mit Zitat antworten Zitat
Apollonius

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

Re: Siin, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 11:49
Das Beispiel, welches in den meisten Tutorials verwendet wird, handelt von einer Sammlung von Graphikobjekten. TCircle, TRectangle, TImage und so weiter werden von einer Klasse TGraphic abgeleitet und überschreiben deren Paint-Methode. In TGraphic gibt es jedoch keine sinnvolle Implementierung der Paint-Methode, es ist sogar ein Fehler, diese aufzurufen. Daher sollte sie als abstrakt gekennzeichnet werden. In Java geht man sogar noch einen Schritt weiter: Wenn man TGraphic.Paint nicht aufrufen darf, ergibt es keinen Sinn, überhaupt ein Objekt der Klasse TGraphic zu erzeugen. Die Klasse ist daher abstrakt.

Etwas realistischere Beispiele sind Threads oder Aufträge. Letztere werden in Java mit Interfaces (Runable und Callable) implementiert, welche ja letztlich eine konsequente Erweiterung von abstrakten Klassen sind.
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
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 11:52
Man kann eine abstrakte fast mit einem Interface vergleichen. Die abstrakte Klasse selbst kannst du nicht erzeugen, du kannst aber innerhalb der abstrakten Definition irgendwelche Methoden aus der abstrakten Klasse aufrufen. Allerdings implementieren MUSST du sie (genau wie bei Interfaces) in der abgeleiteten Klasse. Damit zwingst du auch den Programmierer, sich im Team an gewisse Konventionen zu halten.

Deine Instanzvariablen dürfen aber natürlich weiterhin vom Typ deiner abstrakten Klasse sein. Nur darfst du nicht dessen Konstruktor direkt aufrufen sondern den aus der abgeleiteten Klasse.

Bis dahin seh ich also keinen grossen Unterschied zu einem Interface.

Der Unterschied zum Interface ist der, dass du mehrere Interfaces definieren kannst, die eine Klasse implementieren muss, und du diese Klasse über jeden dieser Interfaces ansprechen kannst. Damit immitierst du eine Art Mehrfachvererbung.
  Mit Zitat antworten Zitat
Apollonius

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

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 11:55
Noch andere Unterschiede zu Interfaces: Man kann einige Methoden bereits implementieren und Felder deklarieren. Außerdem sind abstrakte Klassen meist performanter, gerade in Java kann sich das durchaus bemerkbar machen.
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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 11:56
@Appolonius: dann könnte ich doch einfach bei TGraphic die Paint Methode weglassen, so dass jede abgeleitete Klasse sie selber implementieren muss. Wozu dann eine abstrakte Methode, wenn die abgeleiteten Klassen sie doch selber implementieren müssen? Warum deklariere ich sie denn dann erst in der übergeordneten Klasse?
Michael
  Mit Zitat antworten Zitat
Apollonius

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

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 11:58
Wie würdest du dann eine Liste von Graphikobjekten implementieren, die du alle zeichnen lassen kannst?
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
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 12:02
Zitat von Luckie:
...wenn die abgeleiteten Klassen sie doch selber implementieren müssen...
Das "müssen" definierst du in der abstrakten Klasse.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#8

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 12:08
Zitat von Luckie:
Warum deklariere ich sie denn dann erst in der übergeordneten Klasse?
Einfach, damit Du sie auf der Basisklasse aufrufen kannst.
Will heissen, Du lässt Dir von einer factory eine konkrete Instanz einer Ableitung von TGraphic zurückgeben, benutzt aber eine Referenz auf TGraphic. Wenn Du sie nicht in der abstrakten Basisklasse deklarieren würdest, könntest Du die Paint-Methode gar nicht aufrufen, ohne auf die jeweilige Konkrete Klasse zu casten.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 12:46
Wie wäre es mit einem Beispiel:

Wir wollen verschiedene geometrische Figuren (Dreieck, Quadrat, Kreis) verwalten und deren Fläche berechnen können. Die Klassen sollen TDreieck, TQuadrat und TKreis heißen und eine Funktion function BerechneFlaeche(): Double soll bei jeder der Klassen den Flächeninhalt berechnen. Natürlich hat jede Klasse andere Attribute (TKreis hat einen Radius, etc.). Wenn wir jetzt alle drei von einer Klasse TGeometrischeFigur ableiten, könnten wir also beliebige Kreise, Dreiecke, etc. in einem gemeinsamen array of TGeometrischeFigur verwalten. Um noch die Fläche berechnen zu können, muss TGeometrischeFigur logischerweise die Funktion BerechneFlaeche implementieren.
Und hier macht es dann keinen Sinn mehr, weil man ja nicht weiß, was man zu berechnen hat. Also kommt das abstrakte ins Spiel. Damit zwingst du (wie oben beschrieben) den Programmierer dazu, die Funktion BerechneFlaeche in jeder abgeleiteten Klasse zu implementieren und kannst sie gleichzeitig (Polymorphismus sei dank) direkt über den Array-Eintrag vom Typ TGeometrischeFigur aufrufen (es wird natürlich jeweils die Richtige aufgerufen). Und da eine Instanz von TGeometrischeFigur hier weitgehend sinnfrei wäre, kann man halt auch die gesamte Klasse als abstrakt kennzeichnen, um das unfreiwillige instanziieren zu unterbinden.

Korrigiert mich, wenn ich Blödsinn geschrieben habe
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Sinn, Nutzen und Einsatzmöglichkeit von abstrakten Klass

  Alt 1. Okt 2008, 12:49
Ich glaube, so langsam wird mir das Konzept klar.
Michael
  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 10:30 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