Mit oder ohne OOP?

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

flona

Betreff: Mit oder ohne OOP?

BeitragMo, Dez 01, 2008 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Dez 01, 2008 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 01, 2008 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 01, 2008 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin eindeutig für OOP! Wink
 

E. Urbach

ehemals "Basicprogger"

BeitragMo, Dez 01, 2008 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 01, 2008 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 02, 2008 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Urbach

ehemals "Basicprogger"

BeitragDi, Dez 02, 2008 0:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Dez 02, 2008 1:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 02, 2008 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 02, 2008 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 02, 2008 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 02, 2008 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink (Jedenfalls nicht ohne eine If-Abfrage)

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

BeitragDi, Dez 02, 2008 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ja auch schon im ersten Post geschrieben, dass ich OOP schöner Smile finde.

@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. Very Happy

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

BeitragDi, Dez 02, 2008 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 02, 2008 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 02, 2008 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@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
 

#Reaper

Newsposter

BeitragDi, Dez 02, 2008 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Embarassed )
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

BeitragMi, Dez 03, 2008 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Dez 03, 2008 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
#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 Wink
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

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group