![]() |
Re: Abstract oder überhaupt nicht?
Besser als Muetze1 hätt ichs bestimmt nicht erklären können :thumb:
|
Re: Abstract oder überhaupt nicht?
Zitat:
Naja aber egal.. Also das ist schon ziemlich interessant was hier geschrieben wurde :) Ich denke ich probier das mit den abstracten Klassen mal aus... Dann lern ichs am besten und ich denke ich werde dabei auch verstehn wofür man sie braucht (bzw ich weiß es ja jetzt schon aber ich würde es halt richtig erfahren). Hat jemand vielleicht ne kreative Idee für ein kleines Projekt indem man abstracte Klassen und Methoden braucht? Gruß Neutral General |
Re: Abstract oder überhaupt nicht?
Hallo,
Zitat:
Bau Dir ein Programm, mit dem Du geometrische Objekte zeichnen kannst (Kreise, Rechtecke, Linien, Polygone, WasAuchImmer). Jede geometrische Form ist eine eigene Klasse, wobei jede Klasse bestimmte Methoden implementieren muss, wie z. B. Paint, Save, Load, Change usw. Da kannst Du Dir eine abstrakte Basisklasse schreiben und darauf aufbauend beliebig viele geometrischen Objekte erschaffen. Bei einem neuen Element musst Du nur eine Instanz der jeweiligen Klasse erzeugen, und kannst dann in einer Schleife alle Objekte mit dem gleichen Aufruf zeichnen. Übrigens, um hier auch Hansa klarzumachen, dass man abstract durchaus benutzen kann, genau so wie hier beschrieben ist die Klassenhierarchie meiner ![]() Gruß xaromz |
Re: Abstract oder überhaupt nicht?
Hier steht die Frage :
Zitat:
|
Re: Abstract oder überhaupt nicht?
Zitat:
|
Re: Abstract oder überhaupt nicht?
Zitat:
Eine dementsprechende Diskussion gabs bereits mal: ![]() greetz Mike |
Re: Abstract oder überhaupt nicht?
Zitat:
|
Re: Abstract oder überhaupt nicht?
Zitat:
Gegeben sei die Basisklasse TStream, welche diverse Methoden deklariert, wie bspw. Read, Write, Close ect. Es gibt dann diverse Klassen, die von TStream abgeleitet sind, und die Methoden implementieren. So, TStream kann jetzt diese Methoden
Ich will Daten aus einem beliebigen Stream laden, und verwende dazu logisch meine Basisklasse.
Delphi-Quellcode:
Nun beobachten wir folgenden Fall:
procedure LoadData(Data: Stream);
begin //blubbdibla end;
Delphi-Quellcode:
Kompiliert einwandfrei.
var
MyData: TStream; begin MyData := TStream.Create; LoadData(MyData); end; Wenn wir die erste Moeglichkeit nehmen, also abstrakte Methoden in TStream deklariert haben, dann kriegen wir eine Exception um die Ohren geschmissen: Achtung, du baust da richtig Mist. Stimmt auch. Wenn wir die zweite Moeglichkeit nehmen, also die virtuellen Methoden verwenden, dann kriegen wir keine Exceptions. Ok, das Programm laeuft vielleicht ohne Exceptions zu ende, aber funktionieren tuts trotzdem nicht - Es werden keine Daten geladen. Und da ich keine Fehlermeldung kriege, dann kann ich mich mal ein paar Stunden dransetzen, um den Fehler zu suchen um dann zu merken, dass abstract doch ned so bloed gewesen waere. Damit sollte der Vorteil wohl offensichtlich sein, und wenn du jetzt nochmal den Thread durchliest, dann wirst du sehen, dass es darin genuegend dementsprechende Beispiele gegeben hat, die dir genau das selbe sagen. greetz Mike |
Re: Abstract oder überhaupt nicht?
Zitat:
Gegenfrage: wozu schreibe ich denn hier? Bisher war jede Diskussion um abstrakte Methoden/Klassen mit dir immer auf diesem Prinzip abgelaufen. Man erklärt dir die Vorteile und Beispiel wo man dieses sprachliche Mittel einsetzen kann mit Vorteilen und du schreibst immer nur einfach, dass du keine Vorteile siehst und das es Bockmist ist. Wieviele Diskussionen willst du hier noch anzetteln um immer wieder als resistent gegenüber Neuem und guten Beispielen/Begründungen auf zu treten? 2. In wie fern "undefinierte Sachen"? Was ist undefiniert? ------- in common ---------- Ich bin gerne bereit es zu erläutern und auch mit Fallbeispielen näher zu bringen wo die Vorteile liegen, aber es macht einfach kein Sinn, so lange du nicht den Argumentationen versuchst zu folgen. In den ganzen Threads zuvor habe ich auch schon geschrieben, dass abstrakte Methode/Klassen nicht immer und überall Sinn machen. Es behauptet keiner du sollst nur noch abstrakte Klassen schreiben. Genauso wenig ist gesagt, das jedes Projekt, egal wie gross, mindestens eine abstrakte Klasse braucht. Ich habe auch nur ab und zu in meinen Projekten mal eine abstakte Implementation - dann aber weil sie dort an der Stelle Sinn macht und Vorteile bringt. Es macht aber wirklich keinen Spass zu solchen Diskussionen mit dem Thema noch konstruktive Beiträge zu schreiben, so lange du daran beteiligt bist. Es ist wirklich deprimierend sich mit einer Wand zu unterhalten - da lass ich dass denn lieber. Aber anscheinend willst du es auch so, weil bisher auch jede Diskussion darauf hinaus lief, dass alle anderen aufgegeben hatten und dich bei deiner Meinung belassen hatten - mit gutem Grund wie mir scheint. |
Re: Abstract oder überhaupt nicht?
Hansa, Dein Problem ist, dass Du versuchst, viele Dinge zu generalisieren - dies zieht sich durch praktisch alle größeren Diskussionen mit Dir durch und wird auch zu einem echten Problem.
Welches Beispiel zur Verwendung von abstrakten Klassen hast Du jetzt nicht verstanden? Das: ![]() oder das ![]() oder das ![]() Im Übrigen ist Deine Einleitung einfach nur frech und unverschämt ("... und ein Geist wirds wohl nie lernen."). Ich weiß nicht, welche Laus Dir gestern Abend über die Leber gelaufen ist, das Verhalten solltest Du dringend ändern. :| |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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