Mit oder ohne OOP?
Übersicht

![]() |
flonaBetreff: Mit oder ohne OOP? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hy,
wie einige vll im WiP gelesen haben, bastle ich momentan an einem Basic-Compiler. Nachdem die meisten SchA geschafft sind, bin ich nun dabei die GUI Lib zu schreiben. Ich kann mich allerdings nicht entscheiden ob ich sie Objektorientiert machen soll oder nicht? OOP: Code: [AUSKLAPPEN] win:WINDOW=CreateWindow("Hallo!",0,0,100,100)
win.SetPosition(1,1) While WaitEvent()<>EVENT_CLOSE Wend win.Free() Vorteile: - übersichtlicher - schöner ![]() Nachteile: - etwas langsamer - Speicherhungriger Nicht OOP: Code: [AUSKLAPPEN] win=CreateWindow("Hallo!",0,0,100,100)
SetPosition(win,1,1) While WaitEvent()<>EVENT_CLOSE Wend FreeGadget(win) Vor u. Nachteile sind meiner Meinung nach das Gegenteil von OOP Bitte um eure objektive Meinung mfg flona |
||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im WiP konnte ich in den letzten drei Seiten nichts finden.
Daher: - Wenn die GUI für BlitzBasic, Blitz3D oder BlitzPlus sein soll, dann mach es nicht objektorientiert. - Wenn die GUI für BlitzMax sein soll, dann wäre es eventuell objektorientiert ratsamer. Meine Meinung |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Beitrag in der WiP is schon 5 Seiten(Seite 15) zurück oder so. Und die GUI soll weder für BB noch für BM werden sondern für meinen eigenen Compiler. Dessen Syntax ist eine Mischung aus BB und BM. | ||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin eindeutig für OOP! ![]() |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was soll das denn für eine Frage sein?
GUI-Systeme natürlich immer mit OOP. Hohen Speicherverbrauch bzw. mangelnde Effizienz musst du im Compiler und nicht durch Designentscheidungen beseitigen! Und Code: [AUSKLAPPEN] win.SetPosition(1,1)
sieht - meiner Meinung nach - bei weitem besser aus als Code: [AUSKLAPPEN] SetPosition(win,1,1)
Außerdem spiegelt die OOP-Variante die natürliche Anordnung der Satzbausteine wider (Subjekt, Prädikat, Objekt) und liest sich IMHO besser. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
- Zuletzt bearbeitet von E. Urbach am Di, Dez 02, 2008 0:47, insgesamt einmal bearbeitet
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wider. Sie spiegelt die Anordnung wider, nicht dar.
Im übrigen ist Speicherverbrauch und Effizienz durchaus etwas was im Design bedacht werden sollte. In diesem Fall ist der Unterschied aber auf jeden Fall zu vernachlässigen und objektorientiertes Design zu bevorzugen. |
||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was ist denn an der OOP-Variante (die ich auch bevorzugen würde) langsamer und speicherhungriger? Solange man keine komplizierten Techniken, sondern nur einfaches OOP benutzt, kann man das genau so effizient übersetzen lassen wie die prozedurale Variante. | ||
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 |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mahe, ich bezog mich auch nur auf dieses Beispiel, sonst hätte ich nicht den "Compiler" erwähnt.
Effizienz ist allerdings in den meisten Fällen das unwichtigste Kriterium bei Designentscheidungen (bei Spieleentwicklung natürlich etwas wichtiger). Danke für den Fehler, hatte ich übersehen. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau Basicprogger, und aus diesem Grund haben sich Java und .Net in den letzten Jahren nochmal so weit nach vorne boxen können. Denn, für Firmen ist es egal wenn der Kunde 100% schnellere Rechner kaufen muß, wenn man 10% an Arbeitszeit bei der Entwicklung sparen kann.
- Meine Meinung zur OO-GUI muß ich ändern, denn gerade bei einer GUI ergibt OO wirklich Sinn. Gerade bei weiteren Unterelementen ist es eine schöne Sache. Keine Ahnung wo ich da mein Hirn gelassen hatte. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
OOP mit normalen Events wäre wohl absolut die beste Kombination. Dafür bräuchte deine Sprache jedoch Delegates, bzw. Funktionszeiger / Referenzen.
Das würde dann z.B. so aussschauen: Code: [AUSKLAPPEN] window = new Window (); window.setPosition (10,123); window.onClick = win_onClick; window.caption = "Blabla"; void onClick () { messageBox (this.caption); } mfG |
||
~Tehadon~
www.tehadon.de http://www.blitzforum.de/worklogs/14/ |
![]() |
Geeecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
peacemaker:
Deine Variante ist im Prinzip OO, nur blöder irgendwie. Wieso sollte man die Funktion onClick nicht einfach mit in die Fensterklasse packen? Dann würde man sich window.onClick = win_on... bla Sonder man würde schreiben: if clicked() then window.Click() Also würde ich mich für OO entscheiden. lg MD |
||
![]() |
coolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde auch OOP nehmen, iss einfach übersichtlicher. Ausserdem ist OOP genau für solche Zwecke konzipiert worden. | ||
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project! "Eigenzitate sind nur was für Deppen" -Eigenzitat |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meister_Dieb hat Folgendes geschrieben: Dann würde man sich window.onClick = win_on... bla
Jup, aber dann könnte man nicht mehr für jede Instanz einen anderen Code ausführen lassen ![]() Code: [AUSKLAPPEN] button1.onClick = but1_Click
button2.onClick = but2_Click Function but1_Click() ShowOptionsPanel() End Function Function but2_Click() button1.BackgroundColor = new Color(255, 255, 0) End Function 'Irgendwo im Type Button ... If onClick <> Null Then onClick() ... usw.. |
||
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe ja auch schon im ersten Post geschrieben, dass ich OOP schöner ![]() @ChristianK: Die OOP ist ein wenig langsamer(wahrscheinlich kaum spürbar) da bei der Erstellung eines neuen Objektes ein Speicherfeld allokiert wird in dem die Attribute und Zeiger auf vorheriges und folgendes Objekt gespeichert werden. Werde trotzdem auf alle Fälle OOP verwenden. ![]() Edit: Wie ich das mit den Events mache weiß ich noch nicht. Anfangs dachte ich an ein Eventsystem ähnlich B+ aber das(s. vorheriger Post) wäre natürlich auch eine schöne Alternative. Könnte mal jemand ein 'Grundgerüst' eines solchen Programmes posten. Also wie des mit Fensterschließen und so geregelt wird. Funktionszeiger glaube ich lassen sich einfach einbauen. Danke für die Entscheidungshilfe mfg flona |
||
![]() |
peacemaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fiona:
Code: [AUSKLAPPEN] window = new (GUI_Window); window.setPosition (100,100); window.caption = "fenstername"; window.onclick = win_onClick; window.onMove = win_onMove; window.onClose = win_onClose; void win_onClick () { messagebox ("Du hast Fenster "+this.caption+" angeklickt"); }; void win_onMove () { messagebox ("Neue Koordinate : "+this.pos.x); } void win_onClose () { messagebox ("Du hast fenster geschlossen"); } |
||
~Tehadon~
www.tehadon.de http://www.blitzforum.de/worklogs/14/ |
![]() |
tiffany |
![]() Antworten mit Zitat ![]() |
---|---|---|
flona hat Folgendes geschrieben: @ChristianK: Die OOP ist ein wenig langsamer(wahrscheinlich kaum spürbar) da bei der Erstellung eines neuen Objektes ein Speicherfeld allokiert wird in dem die Attribute und Zeiger auf vorheriges und folgendes Objekt gespeichert werden.
Willst Du mir erklären, wozu das gut sein soll? |
||
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
@tiffany: Mein Compiler übersetzt alles in Assembler. Assembler kann aber kein OOP.(Zumindest FASM nicht) Deshalb muss des ganze irgendwie umgesetzt werden. In meinem Fall ist das Handle eines Objektes ein Pointer auf einen Speicherblock, in dem das erste DWORD den Pointer auf das vorherige und das zweite den Pointer auf das folgende Objekt beinhaltet, um eine For Each Schleife wie in BB zu ermöglichen. Die folgenden DWORDs sind dann die Attributwerte. Bei der GUI hab ich dann halt bei jedem Fenster einen Speicherblock zu erstellen, in dem ich das Handle usw. speichere. Das ist logischerweise langsamer als einfach das Handle zurückzugeben. | ||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieso benutzt du keine Linked Lists?
Denke sowas wäre da besser angebracht? Man muss dann allerdings genauer drauf achten, ob noch ein Objekt verwendet wird, oder nicht (sprich Garbage Collector). (Ok, kenne mich da eh nicht aus, was Assembler angeht. ![]() |
||
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7 |
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieso überlässt du es nicht dem Programmierer, wie er seine Objekte organisiert? Man könnte verschiedene Container anbieten, die Objekte verwalten, wie Vektoren (Array) oder Listen. Diese Container kann man dann ebenfalls mit was foreach-ähnlichem durchlaufen.
Beherrscht dein Compiler Polymorphie? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
#Reaper hat Folgendes geschrieben: Wieso benutzt du keine Linked Lists?
flona hat Folgendes geschrieben: in dem das erste DWORD den Pointer auf das vorherige und das zweite den Pointer auf das folgende Objekt beinhaltet, um eine For Each Schleife wie in BB zu ermöglichen.
Soweit ich weiss, ist flonas Beschreibung doch eine Linked List? Ich verstehe allerdings nicht, was eine Linked List mit OOP zu tun haben soll - BB benutzt ja auch LLs und hat trotzdem kein OOP ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group