Wann ist es sinnvoll OOP zu nutzen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Freeman

Betreff: Wann ist es sinnvoll OOP zu nutzen

BeitragMi, Jul 06, 2005 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

ich habe heut ein paar stunden damit zugebracht etwas oop zu üben. Wenn ich es richtig gemacht habe ist mir aufgefallen das es manchmal situationen gibt an denen man ohne oop besser fährt. Mal eine llgemeine frage zu oop.
Eigentlich packt man doch alles in types, bastelt methodes um die eigenschaften besser beschreiben zu können und das ganze wird dann in den functionen genutzt oder? wenn ich falsch liege dnn berichtigt mich bitte. Wäre nett wenn ihr mal ein paar richtige oop beispiele posten könntet. thx

FrEeMaN
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28
 

Dreamora

BeitragMi, Jul 06, 2005 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Es hat hier in der FAQ Sektion einen interessanten Artikel dazu:

https://www.blitzforum.de/viewtopic.php?t=11419
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

TheShadow

Moderator

BeitragMi, Jul 06, 2005 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich persönlich nutze mehr Funktionen ausserhalb von Types.

Irgendwie wird der Code sonst zu unübersichtlich wenn ich alles in Types reinquetsche... Zudem muss man irgendwelche kaputten Variablen-Namen nutzen:

Type abc
Field x
Field y

Method setcoord(_x,_y)
x=_x
y=_y
EndMethod
EndType

Aber wenn man es komplett in Include auslagert - Z.B. button-Type in 1 Datei, window-type in 2 Datei usw, dann ist es beser.
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

regaa

BeitragMi, Jul 06, 2005 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutze nur noch OOP in Blitz, weil...(und das ist bei mir so)...ich viel besser in Objekten denken kann. Es hilft zu denken Smile . Es ist für mich viel logischer

Auto.Fahren() als AutoFahren(Auto) zu schreiben. Find ich viel übersichtlicher.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Freeman

BeitragMi, Jul 06, 2005 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
sicher, haste mal den speedtest gemacht? wie schnell ds programm brauch deine befehle durchzugehen? also bei mir ist es oft so das das oop zeug langsamer is.

FrEeMaN
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28
 

Dreamora

BeitragDo, Jul 07, 2005 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann machst du etwas falsch ...

In allen bisherigen Tests war OO beträchtlich schneller als prozedural, da das Prozedurale immer erst das Objekt "herschaffen" muss um damit zu programmieren.

Von daher vermute ich, verwendest du das OO falsch oder in einer prozeduralen Weise, was es dann natürlich relativ lahmlegt ...

hast du ein beispiel wo OO langsamer ist?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Freeman

BeitragDo, Jul 07, 2005 0:46
Antworten mit Zitat
Benutzer-Profile anzeigen
weis nich ob das richtig ist...drum eben der thread, hier nen kleines bsp.

?oop?
Code: [AUSKLAPPEN]

Graphics 800,600,0

Type test
Field x:Float
Field y:Float
Field frame:Int 
Field imagename:String
Field image:TImage   
Field ms:Int

Method load()
image=LoadImage(imagename)
End Method

Method draw()
DrawImage(image,x,y,frame)
End Method
End Type

Local t:test=New test
t.imagename="test.png"

t.ms=MilliSecs()
t.load()
t.draw()
flip()
Print MilliSecs()-t.ms



"normal"
Code: [AUSKLAPPEN]

Graphics 800,600,0
ms=MilliSecs()
image=LoadImage("test.png")
DrawImage(image,0,0,0)
flip()
Print MilliSecs()-ms


bei beiden durchläufen bekomme ich werte um 225. Wo liegt die speedbremse? ich denke mal mein oop is kein oop

FrEeMaN
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28
 

Dreamora

BeitragDo, Jul 07, 2005 1:18
Antworten mit Zitat
Benutzer-Profile anzeigen
naja da hat es ja auch noch keine wirkliche anwendung. du lädst etwas und zeichnest es einmal.

98% der gesamten zeit geht da mit laden drauf, unabhängig davon ob OO oder nicht OO Smile

Wir hatten ja erst grad das Bank Problem, wo OO 8x so schnell wie wie prozedural. (vor allem mit den BM internen Typen muss man wohl immer OO gehen)


Übrigens fehlt da ein flushmem am ende der mainloop, wenn du das dann um eine Loop erweiterst Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

bruZard

BeitragDo, Jul 07, 2005 7:15
Antworten mit Zitat
Benutzer-Profile anzeigen
TheShadow hat Folgendes geschrieben:
Ich persönlich nutze mehr Funktionen ausserhalb von Types.

Irgendwie wird der Code sonst zu unübersichtlich wenn ich alles in Types reinquetsche... Zudem muss man irgendwelche kaputten Variablen-Namen nutzen:

Type abc
Field x
Field y

Method setcoord(_x,_y)
x=_x
y=_y
EndMethod
EndType

Aber wenn man es komplett in Include auslagert - Z.B. button-Type in 1 Datei, window-type in 2 Datei usw, dann ist es beser.


Warum machst Du das hier? Code: [AUSKLAPPEN]
Method(_x,_y)


Mache es doch so:
Code: [AUSKLAPPEN]

Type abc
 Field x
 Field y

 Method setcoord(x,y)
 self.x=x
 self.y=y
 EndMethod
EndType

Keine "kaputten" Variablennamen. Wink
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Henry

BeitragDo, Jul 07, 2005 8:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde das mit den "kaputten" Variablen Namen gar nicht so schlimm.

Ich habe es mir mittlerweile angewöhnt, die Variablen innerhalb eines Types mit dem Unterstrich voran zu benennen.

Code: [AUSKLAPPEN]

Type foo

Field _x:int
Field _y:int

Method Init( x:int, y:int )
_x = x
_y = y
End Method

End Type


Aber letzten Endes ist das persönliche Geschmacksache. Wink
Aiya Eärendil Elenion Ancalima!

All you have to decide is what to do with the time that is given to you.

Robsite.de ist eine Anlaufstelle für Tutorials und Tools, die Noobs das Leben leichter machen!
Forensuche ist nicht nur als Lückenfüller in den oberen Links gedacht!

Artemis

BeitragDo, Jul 07, 2005 8:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schreibe immer Self.Variable, da ich es schon von C# mit this.Variable gewähnt bin.
Außerdem, weiß man dann direckt ob die Variable jetzt dem Objekt angehört.
 

Dreamora

BeitragDo, Jul 07, 2005 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich nix kaputte Variablennamen ... da ich mit Private - Public die Informationen immer verschwinden lasse, kann ich bei der "öffentlichen" Variante normale Variablennamen nehmen, selbst wenn sie bei der Implementation voll kryptisch sind danach Wink
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Henry

BeitragDo, Jul 07, 2005 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Ich nix kaputte Variablennamen ... da ich mit Private - Public die Informationen immer verschwinden lasse, kann ich bei der "öffentlichen" Variante normale Variablennamen nehmen, selbst wenn sie bei der Implementation voll kryptisch sind danach Wink


Ähem....Wäs? Confused
Aiya Eärendil Elenion Ancalima!

All you have to decide is what to do with the time that is given to you.

Robsite.de ist eine Anlaufstelle für Tutorials und Tools, die Noobs das Leben leichter machen!
Forensuche ist nicht nur als Lückenfüller in den oberen Links gedacht!
 

Dreamora

BeitragDo, Jul 07, 2005 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Infoermation hiding (siehe das entsprechende Post in der FAQ)

zB so

Code: [AUSKLAPPEN]
Public
Type MAP
   
   Function create:MAP (width:Int,height:Int)
      Return MAP (MAP_IMP.create (width,height))
   End Function
End Type


Private
Type MAP_IMP Extends MAP
   Field fields:TILE[,,]
   
   Function create:MAP (w:Int,h:Int)
      Local t:MAP_IMP   = New MAP_IMP
      t.fields      = New TILE[w,h,10]
      Return t
   End Function
End Type



Der Private Teil existiert dabei nur innerhalb der BMX in welcher es vorkommt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Henry

BeitragDo, Jul 07, 2005 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso...mich hat das "kryptisch" verwirrt! Laughing
Aiya Eärendil Elenion Ancalima!

All you have to decide is what to do with the time that is given to you.

Robsite.de ist eine Anlaufstelle für Tutorials und Tools, die Noobs das Leben leichter machen!
Forensuche ist nicht nur als Lückenfüller in den oberen Links gedacht!

TheShadow

Moderator

BeitragDo, Jul 07, 2005 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
achso bruz - ja stimmt schon Smile

so geht es auch - nur dann hat man längere namen...


Zitat:
Wir hatten ja erst grad das Bank Problem, wo OO 8x so schnell wie wie prozedural. (vor allem mit den BM internen Typen muss man wohl immer OO gehen)


Nö das siehst du falsch. In BBmax ist es so, dass wenn man kein Typ hinschreibt, dann wird Handle zu Integer konvertiert. Und in FOR-Schleife dann wieder aufwändig zurück - das ist dadurch höllisch langsam. Wenn schon dann sollte man Bank (mit Typehandle) mit einem Array vergleichen. Und ich denke Array wäre dann schneller.
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

Dreamora

BeitragFr, Jul 08, 2005 6:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich ja gesagt Smile
Ohne Type wirds zu BB like code sprich prozedural ...

Ich nutze in BM ja net ma % # $ etc, da ich das als relativ schludrige Deklaration ansehe ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

TheShadow

Moderator

BeitragFr, Jul 08, 2005 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ich mag diese symbole auch nicht - in BB-classic war es akzeptabel - in BBmax ist es unsinn....
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Artemis

BeitragFr, Jul 08, 2005 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
richtig, genauso wie programmieren ohne strict!

Wofür ist Strict da?
Genau, damit man keine Fehler durch Schreibfehler bekommt!
Also immer schön "Strict"en

regaa

BeitragFr, Jul 08, 2005 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist Geschmackssache. Ich persönlich mag Hallo:String viel mehr als Hallo$, weil ich sonst das Dollarzeichen immer vor die Variable stellen will und nachher ein Fehler kommt, weil PHP einfach aus Reflex dazwischenkommt^^.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group