Seite 4 von 6

Verfasst: 03.07.2005 21:46
von Sebe
An verfügbaren Libraries ist C/C++ trotzdem nicht zu schlagen.
Auch ist objektorientiertes Programmieren NICHT in jeder Sprache möglich, da Objekte Methoden enthalten (können). Dies trifft auf Basicsprachen aber zu 90% nicht zu (BlitzMax ist eine Ausnahme, wobei das für mich eigentlich keine Basic Sprache mehr ist).
Ausserdem gehst du nach wie vor (aus gutem Grund) nicht auf die 3D Möglichkeiten von PB ein, die eigentlich (wenn man es mal praktisch betrachtet) nicht vorhanden sind.
Mein Rat an peak7810: Wenn du eine Sprache brauchst, mit der du vergleichsweise schnell irgendwelche Tools programmieren kannst, dann ist PureBasic sehr gut geeignet :allright:
Wenn du etwas suchst, mit dem du 3D Spiele machen kannst und was du vielleicht später als Referenz vorzeigen kannst, dann mach lieber mal nen Bogen um PureBasic, beisse in den (sauren???) Apfel und lerne C++ oder C#. Denn das wird sich später auch mal besser in einer Bewerbung machen als PureBasic (wobei auch hier gilt: man kann nie zuviel können!).

Verfasst: 03.07.2005 21:51
von remi_meier
@Sebe: Sry, aber du scheinst nicht zu wissen, was OOP ist... OOP heisst
nicht Objekte mit Funktionen, es heisst ganz einfach, dass man Objekt
orientiert arbeitet! Also aufs Objekt bezogen! In der Definition von OOP
steht nirgends, dass das was mit Memberfunktionen zu tun hat, da kann
man genauso ohne OOP betreiben.
Lass es dir einmal durch den Kopf gehen...

@peak7810: Hab nicht alles gelesen, aber wenn du noch neu beim Proggen
bist, dann ist es einfacher mit Basic zu beginnen als gleich mit C++. Viele
hier machen den Schritt von Basic zu C++, aber ohne diese "Vorstufe"
hätten viele viele Müh (lol).

greetz
Remi

Verfasst: 03.07.2005 22:33
von Zaphod
@remi_meier:

jeder vertipper führt zu einem schwer aufindbaren fehler. das ist für große projekte vollkommen indiskutabel. wenn auchnoch mehrere programmierer beteiligt sind, wird das zur echten qual.

und wer diese lächerliche linked list lösung oop nennt, der hat keine ahnung was oop eigentlich ist. sorry, ist aber so.

Verfasst: 03.07.2005 22:35
von remi_meier
Welche LL-Lösung :? ?
> jeder vertipper führt zu einem schwer aufindbaren fehler
ist wohl bei jeder Sprache so :?

Das nenn ich OOP, kannste von mir aus die LL entfernen...

Code: Alles auswählen

#N = 4

; Die Klasse cOBJECT
Structure POINTS
  Steps.l
  x.l
  y.l
  Step.l
EndStructure

Structure cOBJECT
  ; MemberFunktionen
  *fMOVE
  *fDRAW
  *fUPDATE
  
  ; Daten
  x.f
  y.f
  Pos.l
  Way.POINTS[#N]
EndStructure



  
; Memberfunktionen
Procedure cobj_Move(*This.cOBJECT)
  ; Setze die neue Position für das Objekt
  
  *This\Way[*This\Pos]\Step + 1
  If *This\Way[*This\Pos]\Step = *This\Way[*This\Pos]\Steps
    *This\Way[*This\Pos]\Step = 0
    *This\Pos + 1
    If *This\Pos = #N
      *This\Pos = 0
    EndIf
  EndIf
  
  *This\x + *This\Way[*This\Pos]\x
  *This\y + *This\Way[*This\Pos]\y
  
EndProcedure

Procedure cobj_Draw(*This.cOBJECT)
  ; Zeichne das Objekt
  StartDrawing(ScreenOutput())
    Circle(*This\x, *This\y, 5, $FF)
  StopDrawing()
EndProcedure

Procedure cobj_Update(*This.cOBJECT)
  ; Setze neue Position und Zeichne das Objekt
  CallFunctionFast(*This\fMOVE, *This)
  CallFunctionFast(*This\fDRAW, *This)
EndProcedure


NewList Obj.cOBJECT()
; Konstruktor
Procedure cobj_New(x.l, y.l)
  Protected *Ret.cOBJECT, z.l
  
  AddElement(Obj())
  Obj()\fMOVE = @cobj_Move()
  Obj()\fDRAW = @cobj_Draw()
  Obj()\fUPDATE = @cobj_Update()
  
  ; Füllen
  Obj()\Pos = Random(#N - 1)
  Obj()\x = x
  Obj()\y = y
  
  Restore WAY1
  For z = 1 To #N
    Read Obj()\Way[z - 1]\Steps
    Read Obj()\Way[z - 1]\x
    Read Obj()\Way[z - 1]\y
    Obj()\Way[z - 1]\Step = 0
  Next
  
  ProcedureReturn @Obj()
EndProcedure




; Main Prozedur
Procedure Main()
  Protected *OBJEKT.cOBJECT, z.l
  
  InitSprite()
  InitKeyboard()
  OpenScreen(1024, 768, 32, "OOP-Test")
  
  ; Objekte erstellen (Konstruktor aufrufen)
  For z = 0 To 20
    cobj_New(Random(1024), Random(768))
  Next
  
  Repeat
    ExamineKeyboard()
    ClearScreen(0, 0, 0)
    
    ; Update-Funktionen aufrufen
    ForEach Obj()
      CallFunctionFast(Obj()\fUPDATE, @Obj())
    Next
    
    FlipBuffers()
  Until KeyboardPushed(#PB_Key_Escape)
  
EndProcedure

Main()


DataSection
WAY1:
Data.l 10,  1,  1
Data.l 10,  1, -1
Data.l 10, -1, -1
Data.l 10, -1,  1
EndDataSection
Jetzt kann das jeder mal für sich studieren und _danach_ kritisieren :|

Verfasst: 03.07.2005 22:40
von Zaphod
klasse dann ist c auch eine objektorientierte sparache :lol:

zeig mir mal wie du so richtige datenkapselung erzeugen willst. wie willst du vererbung realisieren?
das sind einfach strukturen mit funktionszeigern. mehr nicht. oop ist sehr viel mehr.

>ist wohl bei jeder Sprache so
nein, in fast allen sprachen führt ein vertipper nicht zur deklaration einer neuen variablen, sondern einer fehlermeldung vom compiler. dann sieht man an der entsprechenden stelle nach und korregiert den fehler. bei pb hat man da eine neue veriable die mit 0 initialisiert ist. so ein fehler ist in vielen situationen extrem schwer ausfindig zu machen.

Verfasst: 03.07.2005 22:51
von remi_meier
Ich habe nicht gesagt, dass PB eine OOP Sprache ist (s.o.!!).
Du weisst wirklich nicht, was OOP heisst.. Übersetzen wir nochmals gaaanz
langsam:
Objekt orientierte Programmierung
Auf Objekte bezogene Programmierung
Siehst du da irgendwo, auch nur irgendwo einen Zusammenhang mit C++,
Klassen, nicht LinkedList, nicht Funktionspointern??
OOP hat unendlich viele Stufen, wie man es realisieren kann! Wenn man
einen Spieler in einer Struktur speichert, dann kann man den Spieler als
Objekt verwalten, also wenn man will objekt orientiert.
Bsp:
Nicht OOP:

Code: Alles auswählen

Dim X.l(5)
Dim Y.l(5)

Circle(X(1), Y(1), 5)
OOP:

Code: Alles auswählen

Structure Test
  X.l
  Y.l
  R.l
EndStructure
Dim P.Test(5)

Circle(P(1)\X, P(1)\Y, P(1)\R)
Diese Diskussionen wurden schon oft geführt, man kann mit fast jeder
Programmiersprache OOP machen.

> zeig mir mal wie du so richtige datenkapselung erzeugen willst.
Na wie wohl? Mit Strukturen, die Pointer auf Strukturen haben, die Pointer
auf Strukturen haben, die....
oder was meinst du??

Vererbung mit Extends, reicht längstens für alles, oder nenn mir mal ein
Beispiel, wo du unbedingt Public, Private, Virtual brauchst!

OOP kann sogar sehr viel weniger sein!!


Variablendeklaration:
Jap, ein verschwindend kleiner Nachteil. Überleg mal, was du bei einem sooo
grossen Projekt noch für Fehler machen kannst! Da ist dieser Fehler noch
dein geringstes Problem! Da gewöhnt man sich schnell mal dran und mit
der richtigen Technik, ist das Problem so gut wie nicht mehr vorhanden.

greetz
Remi

Verfasst: 03.07.2005 22:57
von Green Snake
ich komme bei dieser fachsimplerei nich ganz mit.

meint ihr mit "deklaration einer neuen variable" volgendes?

Hallo = 10

debug hallop

debugoutput = 0

?

wenn p der tippfehler is, wird der bei anderen proggsprachen als fehler rausgegeben?
bei pb, stimmt, es wird dann die variable hallop gebildet.
aber ich muss sagen, dieser fehler is mir eigentlich noch nie passiert.
ok, ich habe nicht sehr grosse projekte, aber...hmm...so etwas wäre bei pb sicher auch sinnvoll...wäre das machbar?

edit:
aber dann müsste man ja jede variable deklarieren.

also

Declare AAA
Declare AAB
Declare AAC
...
...
...
...
Declare ZZY
Declare ZZZ


das wäre dann aber wieder äusserst mühsam, oder nich? :?

Verfasst: 03.07.2005 23:01
von remi_meier
@GS, jap!
Fred hats schon ne Weile angekündigt und ich bin auch nicht dagegen.
Aber ehrlich gesagt, gerade bei grossen Projekten ist es wichtig, dass man
jede Zeile genaustens überdenkt! Und wenn man sie nochmals durchliest
sieht man diesen Fehler normalerweise sofort...

Edit:
Ich denke
A.l
genügt

Verfasst: 03.07.2005 23:05
von Zaphod
das problem ist, deine definition von oop ist eine andere, als die definition von oop den der rest der welt hat.

schau dir am besten mal den wikipedia artikel dazu an, der ist ganz gut geschrieben.

du hast keine datenkapselung nur weil du diese in strukturen packst. damit kannst du nicht verhindern, dass man auf die werte zugreift wie man will.
bei oop dürften nur die eigenschaften des objektes frei zugänglich sein, die zu seiner schnittstelle gehören, genauso wie dessen funktionen.
es gibt verschiedenen abstufungen von oop, es gibt aber ein minimum an eigenschaften die erfüllt sein müssen das man von oop sprechen kann.
die möglichkeit den zugriff auf bestimmte eigenschaften eines objektes von aussen effektiv auszuschließen ist eine davon.

lern mal ein paar objektorientierte sprachen, dann verstehst du den wirklichen unterschied vieleicht.

Verfasst: 03.07.2005 23:09
von Green Snake
>lern mal...

sorry, aber ich begnüge mich mit pb, vb.
ich bin jetzt assembler am anschauen, da pb den code j ain asm übersetzt.
ich habe nich vor, c++ (nochmal) anzuschauen.
falls wirkllich mal die zeit kommt, und ich hoffe das das nie wird, dass pb mal langweilig, oder einfach zu schlecht ist, dass ich dan mal c++ anschauen oder sogar lernen werde.
aber jtzt ist es halt das zeitproblem.
habe zu wenig zeit, um etwas neues anzuschauen.
habe schulstress etc.

werde aber mal c++ dev anschauen (nochmal) um zu sehen, was du genau meinst :allright: