Vererbung - Geschwindigkeit
Übersicht

![]() |
CaesiumBetreff: Vererbung - Geschwindigkeit |
![]() Antworten mit Zitat ![]() |
---|---|---|
huhu,
ich habe folgende frage an euch: wo liegt der sinn eine basisklasse inklusive leerer funktionen zu erstellen? ein beispiel, damit man sieht, was ich meine: basisklasse: Code: [AUSKLAPPEN] Type Tbase Abstract
Field field1:Int Field field2:Int Field field3:Int Function function1() End Function Method method1() End Method End Type abgeleitete klasse: Code: [AUSKLAPPEN] Type Texample Extends Tbase
Method New() field1 = 1 field2 = 2 field3 = 3 End Method Function function1() 'tu irgendwas... End Function Method method1() 'tu irgendwas... End Method End Type an folgendem beispiel sieht man denke ich ganz gut, was ich meine. in der basisklasse werden variablen deklariert die dann nach der vererbung in der abgeleiteten klasse verwendet werden (können), soweit ist mir der sinn auch noch klar. doch in der basisklasse eine funktion/methode zu deklarieren die sowieso nach der vererbung wieder überschrieben wird, da man ja nicht mit Super auf die ursprüngliche zugreift (warum auch, sie ist ja leer), erscheint mir das ganze irgendwie sinnlos. diese "technik" ist mir in einem tutorial auf blitzbasic.com aufgefallen (bzw. aus dem dortigen forum). aber außer zur übersicht (und soviel bringt das nun auch nicht an übersichtlichkeit) ist das doch irgendwie... non-sense!? hiermit erweitere ich meine ursprüngliche frage: zieht das nicht einfach nur die geschwindigkeit runter? vielen dank im vorraus, caesium |
||
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. ![]() |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Die abstrakten Methoden im Type sind nicht leer, sondern dienen sozusagen als Vorlage. Du kannst daher auch keine Instanz eines Types erzeugen, der abstrakte Methoden enthält.
Zum Beispiel bei einem Raumschiff: Code: [AUSKLAPPEN] SuperStrict
Framework brl.blitz Type TRaumschiff Method Fliegen( ) Abstract Method Tanken( ) Abstract End Type Type TMumu Extends TRaumschiff Method Fliegen( ) WriteStdout "Mumu fliegt!" End Method Method Tanken( ) WriteStdout "Mumu tankt!" End Method End Type Type TDubidu Extends TRaumschiff Method Fliegen( ) WriteStdout "Dubidu fliegt!" End Method Method Tanken( ) WriteStdout "Dubidu tankt!" End Method End Type Local schiff:TRaumschiff = New TDubidu schiff.Fliegen( ) schiff.Tanken( ) Damit alle Raumschiffe über die gleichen Methoden ( Fliegen und Tanken ) verfügen, werden die Methoden des Basistypes als Abstract deklariert. Wenn jetzt ein Type von TRaumschiff abgeleitet wird, müssen alle abstrakten Methoden überschrieben werden. Die Geschwindigkeit leidet nur unwesentlich bis garnicht darunter. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Caesium |
![]() Antworten mit Zitat ![]() |
---|---|---|
kurz und knapp, danke. ![]() gruß, caesium edit: @artemis: auch wenn du "zu langsam" warst war es trotzdem hilfreich den sinn der sache besser zu verstehen. danke! |
||
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. ![]() |
- Zuletzt bearbeitet von Caesium am Do, Apr 17, 2008 19:19, insgesamt 2-mal bearbeitet
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du nur eine Klasse davon ableitest ist das ganze sowieso Quatsch, da man dass dann in eine Klasse packt.
Aber die Funktion einer abstrakten Klasse ist nützlich um Dinge zu verallgemeinern. Code: [AUSKLAPPEN] Type Fahrzeug Abstract
Field geschwindigkeit:Int Field max_geschwindigkeit:Int Method beschleunigen() Abstract Method bremsen() Abstract EndType Type Pkw Extends Fahrzeug Method beschleunigen() Self.geschwindigkeit :+ 20 EndMethod Method bremsen() Self.geschwindigkeit :- 20 EndMethod EndType Type Fahrrad Extends Fahrzeug Method beschleunigen() If Self.geschwindigkeit < 20 Then Self.geschwindigkeit :+ 2 EndMethod Method bremsen() Self.geschwindigkeit = 0 EndMethod EndType Function BremseFahrzeug(obj:Fahrzeug) obj.bremsen() EndFunction So ist es der Funktion BremseFahrzeug egal, ob das Fahrzeug ein Fahrrad, Pkw oder ein sonstiges von der Klasse Fahrzeug abgeleitetes Objekt ist. Hauptsache ist, dass die Funktion weiß es ist ein Fahrzeug und das Fahrzeug kann man bremsen. Wie das Bremsen für die einzelnen Subklassen funktioniert müssen die selber regeln. EDIT: Jo, da war ich wieder zu langsam. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group