vorteile von oop an praktischen beispielen erklärt

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

diGGa

GruppenKaspar

Betreff: vorteile von oop an praktischen beispielen erklärt

BeitragMi, März 30, 2005 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hhooh
da ich atm geld spare um bald ( so nem monat oder so ) mir bmax zuzulegen, würde ich gerne mal an praktischen beispielen oop erklärt bekommen... ok erklärt is wahrscheinlich zuviel verlangt...

ich würd halt gerne wissen was die vorteile von oop, an praktischen beispielen (bb code / bmx code - sowas in der art) erklärt, genau sind und wie sich das ausdrückt... vielleicht kann ich mir dann besser den unterschied (bis auf module etc) von bmx/bb vorstellen (dann freu ich mich vll noch mehr drauf xD)

falls das schonmal wo geschrieben wurde, link plz Smile habs nämlich nich gefunden.

danke schonmal im vorraus an alle fleissigen bmaxler Smile
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram
 

Sebe

BeitragMi, März 30, 2005 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, mit Code tue ich mich gerade etwas schwer aber ein Vorteil der mir auf Anhieb einfällt: Verkettete Listen! Ich habe noch nie eine verkettete Liste in einer 100% prozedualen Sprache gesehen und Objekte, die man mit Hilfe von Listen während der Laufzeit erstellen und verwalten kann sind ein sehr grosser Vorteil.
 

MasterK

BeitragMi, März 30, 2005 23:42
Antworten mit Zitat
Benutzer-Profile anzeigen
verkettete listen sind mit prozeduralen sprachen durchaus möglich, in C zB. es müssen eben nur entsprechende datentypen vorhanden sein, aber sobald eine sprache pointer-ähnliches bietet ist das an sich kein problem.

die vorteile voon OOP lassen sich in 2 oder 3 programmzeilen nur schwerlich darstellen. idR ist es so dass man mit steigende projektgrösse von OOP profitiert da sich dann durch vererbungen und beziehungen von projekten manche probleme fast von selbst lösen.
des weiteren fördert OOP (sofern man es sauber programmiert) auch sehr die verständlichkeit und erweiterbarkeit von code.
+++ www.masterk.de.vu +++
Lila FTW!

diGGa

GruppenKaspar

BeitragDo, März 31, 2005 4:26
Antworten mit Zitat
Benutzer-Profile anzeigen
jaa das hab ich alles schonmal gelesen. aber wirklich wissen wo denn nun der vorteil liegt kann ich immernoch nicht Wink vll hat ja jemand n abstraktes beispiel?
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram
 

Dreamora

BeitragDo, März 31, 2005 5:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]


Type Fahrzeug

  field Rad:Rad[4]
  field Farbe:int

end type

type Ferrari extends Fahrzeug

  field PS:int
  field Chasis:int

end type

type Transporter extends Fahrzeug

  field ladekapazität:int
  field Länge:int

end type



Das ist einer der Vorteile.

Ein weiterer ist, dass in OOP Methoden und Funktionen in Types existieren (funktionen sind vom type, methoden von typeinstanzen), als auch globals und konstanten (erstere existieren nur 1x für alle instanzen des types und letztere sind für alle instanzen des types nutzbar )

Für längere praktische Beispiele siehe Vertex's DreiDe
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

diGGa

GruppenKaspar

BeitragDo, März 31, 2005 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für deine antwort Smile
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram
 

Gombolo

BeitragDo, März 31, 2005 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Als man früher angefangen hat größere Programme zu schreiben stellte man fest das viele Routinen immer wieder vorkommen.

Das führe dazu das man diese Routinen in Funktionen ausgliederte. Die ersten Programmbiblitoheken enstanden.

Später kammen eigene Datentypen hinzu. Z.B. in BlitzBasic die Types, in C die Struct's. Diese kapselten Daten.

Ein Auto hat eine Marke, max Geschw. ect...

Die OOP ist die Verknüpfung dieser Datentypen und Funktionen zu einem Objekt.

Nun hat man nicht nur die Daten(Eigenschaften), sondern auch Funktionen(Methoden) um mit diesen Daten arbeiten zu können.

Man kann sich das wie ein Videorekorder vorstellen. Du schiebst eine Kasette ein und drückst auf Play.
In der modularen Programmierung würde das bedeuten. Du musst die Verkabelung im Rekorder jedesmal neu verlegen um Play zu aktivieren.

Das ist nur ein sehr sehr kurzer Versuch die OOProgrammierung zu erklären.

Am besten sucht man sich ein Buch über dieses Thema.
Heute ist der erste Tag vom Rest deines Lebens
http://gombolo.go.funpic.de/

diGGa

GruppenKaspar

BeitragDo, März 31, 2005 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
ja cool das is mal ne erklärung für jemanden der davon nix versteht Smile danke schön...
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram

diGGa

GruppenKaspar

BeitragFr, Apr 01, 2005 10:58
Antworten mit Zitat
Benutzer-Profile anzeigen
möcht jetz nich extra n thread aufmachen: wieviel sind die exen von blitzmax kleiner?
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram
 

Nemesis

BeitragFr, Apr 01, 2005 11:04
Antworten mit Zitat
Benutzer-Profile anzeigen
das hängt davon ab wieviel module du verwendest und reinpackst.

Jan_

Ehemaliger Admin

BeitragFr, Apr 01, 2005 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Exen, sind z.Z. von ca. 10 kb bis ca 700 kb
mit debug, ca. 50% mehr.
between angels and insects

diGGa

GruppenKaspar

BeitragFr, Apr 01, 2005 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
also hat man sozusagen selber in der hand.. wie bei purebasic oder cpp oder so.. desto mehr funktionen/module genutzt werden desto größer wird auch die exe.
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram

Jan_

Ehemaliger Admin

BeitragFr, Apr 01, 2005 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
jap.
between angels and insects
 

Serge

BeitragFr, Apr 01, 2005 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat ja schon die Vererbung an einem Code erklärt,

Nun, OOP Objekte können auch Funktionen beinhalten, die nur für das Objekt da sind.
z. B.
Code: [AUSKLAPPEN]

Type Fahrzeug
  Field Geschwindigkeit:Int

  method beschleunigen()
    Geschwindigkeit:+1
  end method
end Type


Ein großer Vorteil ist, dass man beim Vererben (beim erstellen einer neuen Klasse/Types, der die Eigenschaften von "Fahrzeug" übernimmt)
Die Methods Überschreiben kann. Es ist dann immernoch die selbe Funktion mit dem selbem Namen, nur dass sie, je nach Objekt, etwas anderes tut.

Code: [AUSKLAPPEN]

Type Fahrzeug
  Field Geschwindigkeit:Int

  method beschleunigen()
    Geschwindigkeit:+1
  end method
End Type

Type Ferrari extends Fahrzeug
 
  method beschleunigen()
    Geschwindigkeit:+3
  end method
End Type


Nun könnte man ein Array oder eine Liste vom Typ "Fahrzeug" erstellen. Dann steckt man da einige Objekte des Type "Fahrzeug" und einige des Type "Ferrari" rein. Nun könnte man mit einem Schleifendurchgang die Liste/array durchgehen und bei jedem Objekt die Funktion "Beschleunigen()" aufrufen, obwohl die Funktion bei manche Types was komplett anderes macht..

Nunja, hoffe du hast es verstanden, im erklären war ich noch nie der beste Very Happy
http://www.dark-matter-soft.de

diGGa

GruppenKaspar

BeitragFr, Apr 01, 2005 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für deine antwort Smile aber ich hab im englischen forum was gefunden... will ich nicht vorenthalten

http://blitzbasic.com/Communit...opic=42619
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram

Firstdeathmaker

BeitragFr, Apr 15, 2005 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich versuch das gerade auch zu verstehen:

Man kann also eine Funktion in ein Typ integrieren, aber in weiteren Typ´s die man definiert die Eigenschaften des ersten übernehmen indem man sie "vererbt"?

Gibt es auch unterschiedliche Listen für ein und dieselbe Objektart?
Oder werden automatisch alle Objekte die man durch Vererbung erstellt in die gleiche Liste eingetragen?

Muss man, wenn man eine normale Funktion aus dem Objekt heraus aufrufen möchte, diese dann nochmal in eine Funktion des Objektes integrieren oder kann man sie direkt aus dem Objekt ausrufen?

Ist es dadurch z.B. möglich einem Objekt (Button) einzuspeichern, dass er, wenn er gedrückt wird, eine bestimmte normaler Funktion aufzurufen die man vorher bei der Erstellung nur per Namen übergeben hat?

Quasi:

Code: [AUSKLAPPEN]
create_schalter("print_help")

function create_schalter(funktionsname$)
schalter.schalter=new schalter
schalter\funktion=execute funktionsname
end function

function print_help()
print "Help"
end function


oder so ähnlich?
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Suco-X

Betreff: .....

BeitragFr, Apr 15, 2005 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das geht mit den Funktionspointern.
Mfg Suco
[/code]
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Firstdeathmaker

BeitragFr, Apr 15, 2005 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hört sich recht schmackhaft an Wink

Daran bin ich nämlich mal verzweifelt in BB.

Zudem es ja auch auf Linux kommen soll. Ich würde echt gerne auch für Lunux proggen, vor allem Spiele gibt es dort noch zu wenig meinem Geschmack nach.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Jolinah

BeitragFr, Apr 15, 2005 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Firstdeathmaker hat Folgendes geschrieben:
Man kann also eine Funktion in ein Typ integrieren, aber in weiteren Typ´s die man definiert die Eigenschaften des ersten übernehmen indem man sie "vererbt"?


Genau, nicht nur die Eigenschaften sondern auch die Funktionen und Methoden werden mit übernommen. Diese kann man aber im Type der vom ersten geerbt hat überschreiben falls sie etwas anderes tun sollen als der erste Type.

Zitat:
Gibt es auch unterschiedliche Listen für ein und dieselbe Objektart?
Oder werden automatisch alle Objekte die man durch Vererbung erstellt in die gleiche Liste eingetragen?


In BMax funktioniert das mit den Listen nun etwas anderes. Du kannst Objekte frei erstellen ohne dass diese gleich zu einer Liste gehören, wie jeder andere Datentyp auch. Für die Listen gibts dann einen speziellen Type (TList). Hier ein kleines Beispiel:

Code: [AUSKLAPPEN]

Type Auto
  Field farbe
End Type

Local AutoListe:TList = CreateList()
Local Auto1:Auto = new Auto
Local Auto2:Auto = new Auto

Auto1.farbe = $FF0000
Auto2.farbe = $0000FF

ListAddLast(AutoListe, Auto1)   'Fügt das erste Auto am Ende der Liste ein
AutoListe.AddLast(Auto2)   'Macht genau das selbe, hier wird die Methode von TList direkt aufgerufen

'Alle Autos in der Liste durchgehen.
For Local meinAuto:Auto = EachIn AutoListe
  Print String(meinAuto.farbe)
Next


Es ist also möglich sogar für den selben Type soviele separate Listen anzulegen wie du willst.

Zitat:
Muss man, wenn man eine normale Funktion aus dem Objekt heraus aufrufen möchte, diese dann nochmal in eine Funktion des Objektes integrieren oder kann man sie direkt aus dem Objekt ausrufen?


Die muss man in einer Funktion oder Methode des Types aufrufen, ausser du verwendest einen Functionpointer als Eigenschaft des Types:

Code: [AUSKLAPPEN]

Type test
  Field function()
End Type

Function myfunc()
  Print "Hallo Welt!"
End Function

Local t:test = new test
t.function = myfunc

t.function()


Jedoch musst du dann zuerst dem Functionpointer auch eine Funktion zuordnen bevor du die aufrufen kannst. Und zu erwähnen ist noch dass du nur Funktionen zuordnen kannst die den gleichen Aufbau wie der Functionpointer haben, also gleicher Rückgabetyp und gleiche Parameter.

Zitat:
Ist es dadurch z.B. möglich einem Objekt (Button) einzuspeichern, dass er, wenn er gedrückt wird, eine bestimmte normaler Funktion aufzurufen die man vorher bei der Erstellung nur per Namen übergeben hat?


Funktioniert dann so ähnlich wie in dem Beispiel oben Wink

Firstdeathmaker

BeitragFr, Apr 15, 2005 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Echt? Also um bei deinem Beispiel zu bleiben:

BlitzBasic: [AUSKLAPPEN]
Type test 
Field Function()
End Type

s=create_testobjekt(myfunc)

s.Function()

Function myfunc()
Print \"Hallo Welt!\"
End Function

Function create_testobjekt(funktionsname$)
Local t:test = New test
t.Function = funktionsname$
Return t
End Function


Funktioniert das so in etwa?
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group