Seite 5 von 9

Re: SimpleOOP - Opensource Precompiler

Verfasst: 07.07.2010 17:19
von NicTheQuick
Mal 'ne blöde, weil ich den Thread jetzt nicht komplett gelesen und im Download nur Exe-Dateien gefunden hab: Funktioniert SimpleOOP auch unter Linux, wenn ich die Sourcen dort kompiliere?

Re: SimpleOOP - Opensource Precompiler

Verfasst: 07.07.2010 21:17
von Blackskyliner
Wenn du die wenigen API Funktionen ersetzt siehe 5 Posts oder so vor deinem stehen alle genutzten API Funktionen...

Re: SimpleOOP - Opensource Precompiler

Verfasst: 09.07.2010 00:56
von CSHW89
Hi Sirhc.ITI,
also ersteinmal eine Top-Arbeit :allright: .
hab hier im thread schon öfter mal gelesen. hab mich aber nie so richtig begeistern können von einem oop-precompiler. aber ich dachte mir mal, da ich ein paar kleine projekte realisieren will, die es in java z.b. schon gibt, dachte ich mal, warum dann nicht auch objektorientiert. und da ja SimpleOOP anscheinend nicht links liegen gelassen wird, so wie manch andere Projekte, dachte ich mal fängste hier mit an.

so lange rede kurzer unsinn...
jetzt zum thema. ich hab nämlich leider auch was zu bemängeln. nun ich bin halt ein kleiner java-fetischist, und deshalb fehlt mir was ganz entscheidenes in SimpleOOP: 'InstanceOf'.
kleine erklärung: die methode überprüft zur Laufzeit, ob ein Objekt der angegebenen Klasse angehört, oder einer Klasse die von dieser angegebenen Klasse erbt. hier mal ein kleines beispiel um das zu veranschaulichen:

Code: Alles auswählen

Class Objekt
EndClass

Class Fahrzeug Extends Objekt
EndClass

Class Auto Extends Fahrzeug
EndClass

Procedure Test(*fahrzeug.Fahrzeug)
  
  If InstanceOf(*fahrzeug, Auto)
    Debug "ist Auto"
  EndIf
  If InstanceOf(*fahrzeug, Objekt)
    Debug "ist Objekt"
  EndIf
  
EndProcedure

*auto.Auto = NewObject.Auto
*fahrzeug.Fahrzeug = NewObject.Fahrzeug

Test(*auto)     ; Ausgabe: "ist Auto" und "ist Objekt"
Test(*fahrzeug) ; Ausgabe: "ist Objekt"
also ich hatte schon mal eine eigene oo-programmiersprache geschrieben, die sehr an java angelehnt war, deshalb weiß ich, dass das schwieriger aussieht als man denkt.

so die erste bedingung "ein Objekt der angegebenen Klasse angehört" ist ja noch recht leicht zu realisieren: um zu prüfen, ob ein objekt z.b genau ein auto ist, als durch 'NewObject.auto' erstellt wurde, müsste jedes objekt nur eine int-variable besitzen. zudem hat jede klasse eine eigene id. in der int-variablen wird dann die id der jeweiligen klasse gespeichert. bei InstanceOf muss nur dieser int-wert mit der id der klasse verglichen werden.

die zweite bedingung "einer Klasse die von dieser angegebenen Klasse erbt" ist halt der knackpunkt. ohne zu viel in deiner jetzigen strukture zu ändern wüsste ich da jetzt nicht, wie man das machen sollte. vielleicht hast du ja ne gute lösung dafür. würde mich sehr darüber freuen, denn das halte ich für sehr wichtig in einer oo-sprache.

ansonsten werd ich mir noch was überlegen, wie es ohne viel aufwand möglich wäre. SimpleOOP ist ja OpenSource :allright: .

bis denne
lg kevin

Re: SimpleOOP - Opensource Precompiler

Verfasst: 09.07.2010 01:46
von CSHW89
hi, sorry ich muss dir leider nochmal ein messer in den bauch stechen :evil: . nein quatsch, also:
ich weiß zwar nicht wie das in anderen oo-sprachen ist, aber aus java kenn ich halt, dass private methoden und argumente in der klasse nicht nur von this benutzt werden dürfen, sondern auch von allen variablen, die diese klasse als struktur haben und in dieser klasse definiert wurden. hier mal ein beispiel (unter java würde so was z.b funktionieren):

Code: Alles auswählen

Class Test
  
  value.i
  
  Public Method Init(value.i)
    This\value = value
  EndMethod
  
  Public Method.i compareTo(*obj.Test)
    If (This\value < *obj\value)  ; *obj ist auch von der Klasse Test, in der wir gerade drin sind.
      MethodReturn -1             ; also müsste es möglich sein, auf value zugreifen zu können
    ElseIf (This\value = *obj\value)
      MethodReturn 0
    Else
      MethodReturn 1
    EndIf
  EndMethod
    
EndClass
das ist hier in diesem beispiel noch einfach zu lösen. aber bei komplexen datenstrukturen, wie z.b binäre Suchbäume, die intern verändert werden müssen bei einer bestimmten operation, wie einfügen oder so was, dort muss es möglich sein, nicht nur den baum in 'this' zu verändern, sondern auch die unterbäume. gleichzeitig will man natürlich auch nicht, dass der benutzer dies verändern kann.

ich hoffe ich konnte das problem verständlich erklären und hoffe natürlich auch, dass du nicht denkst, ich will alles nur schlecht reden. stimmt natürlich nicht. ich will halt ein paar datenstrukturen ect. mal schreiben, vielleicht auch für die öffenlichkeit. da bräuchte ich aber schon solche sachen. also nicht böse sein :wink: .

lg kevin

Re: SimpleOOP - Opensource Precompiler

Verfasst: 13.07.2010 23:53
von CSHW89
So zum zweiten Punkt hab ich ein wenig gegoogelt. so wie ich das verstanden hab ist das auch in anderen oo-sprachen so (man möge mich steinigen, wenns nicht so ist, und bitte meldet euch, falls jemand dort wirklich ahnung hat). aber ehrlich gesagt, bei rekursiven datenstrukturen, mit denen ich mich schon sehr oft beschäftigt hab, geht das gar nicht, so wies bei dir zur zeit ist. zumindest kann ich dann die attribute nicht vor dem benutzer verstecken. hier mal ein etwas ausführlicheres beispiel:

sagen wir mal, ich will mir einen binären suchbaum 'BinTree' als rekursive datenstruktur erstellen. dazu hat der binäre suchbaum einen linken und einen rechten teilbaum auch vom Typ 'BinTree'. nun will ich eine methode bereitstellen, damit ein element eingefügt werden kann. es soll aber an der richtigen stelle im baum eingefügt werden (also alle elemente im linken teilbaum müssen kleiner sein, als die wurzel, rechts größer), somit es immer noch ein binären suchbaum darstellt. hier mal als code verdeutlicht (ist nicht vollständig):

Code: Alles auswählen

Class BinTree
  *left.BinTree
  *right.BinTree
  *obj
  
  Public Method add(*new)
    *parent.BinTree
    *tree.BinTree
    While (*tree <> #Null) ; In der Schleife durchlaufe ich den Baum von oben nach unten, bis ich eine leere Stelle finde
      *parent = *tree
      If (*new < *tree.obj)   ; Ab hier hab ich ein Problem
        *tree = *tree.left
      Else
        *tree = *tree.right
      EndIf
    Wend
    If (*new < *parent.obj)
      *parent.left = NewObject.BinTree(*new)
    Else
      *parent.right = NewObject.BinTree(*new)
    EndIf
  EndMethod
EndClass
ich will halt nicht, dass ich dem benutzer lese- und schreibrechte für 'left', 'right' und 'obj' gebe, will aber trotzdem in der lage sein, intern eine solch rekursive datenstruktur zu verändern.

lg kevin

Re: SimpleOOP - Opensource Precompiler

Verfasst: 05.09.2010 14:20
von X0r
Download-Link ist tot, wie auch bei vielen anderen Projekten.
Das passiert also wenn man einem Kiddy vertraut, das Webhoster spielen will. /:->

Re: SimpleOOP - Opensource Precompiler

Verfasst: 05.09.2010 19:49
von X0r
Vielen Dank!

Re: SimpleOOP - Opensource Precompiler

Verfasst: 20.09.2010 13:58
von edel
@Sirhc

Koenntest du noch "static" mit einbauen? Ich hab es zwar versucht, kommt aber nix sinnvolles bei rum.

Code: Alles auswählen

Class Test 
    
    Public Static Method Callback()
        
    EndMethod    
    
EndClass
Methoden mit Static sind unabhaengig von der instanz, man kann also auch kein this in der Methode benutzen. Sehr sinnvoll z.b. fuer Callbacks.
Fuer mehr infos kannst du ja mal hier reinschauen
http://de.wikibooks.org/wiki/C%2B%2B-Pr ... in_Klassen

Re: SimpleOOP - Opensource Precompiler

Verfasst: 28.09.2010 23:22
von edel
naja, dann muss ich sie ja so oder so ausserhalb der Klasse schreiben. Aber im Moment eilt hier eh nix...

Re: SimpleOOP - Opensource Precompiler

Verfasst: 20.06.2011 18:21
von gekkonier
Hallo, ich wollte Dir hier huldigen:
:praise:

Das Ding ist Gold wert und macht auch Spaß! Auf etwaigen Overhead der durch das Featureaufpeppen passieren könnt wird - ihr wisst schon was!