"private" aktuell wertlos

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Dreamora

BeitragFr, Jan 07, 2005 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Es funktioniert aber über den dynamic typecasting umweg. Etwas was man normalerweise nur tut wenn man bei einer klassendeklaration den abstrakten basistype genommen hat welcher dann beim erzeugen "raufgecastet" werden muss.

es funzt net umbedingt so wie es soll oder zu erwarten ist und schon garnicht so wie das woher es die technik klaut nämlich von C++ was ja auch den linker dahinter stellt.


demon: die erklärtung von Bruzard funktioniert in dieser Form NICHT. aber mit seiner idee und masterk's einwurf von wegen interfaces in java ist mir etwas in den sinn gekommen das wir kürzlich im OO kurs an der ETH hatten, allerdings in einer komplett anderen anwendung ... aber es gab mir die immerhin ne idee was man probieren könnte. wollte damit den programmierern hier helfen, die module auf OO basis proggen und auch was davon verstehen und drum darauf nicht verzichten können.

du kannst dann types draussen nur die abstrakte deklaration geben und die kann GARKEINE funktion oder etwas aufrufen. bevor du also postest, bitte erst hirn einschalten vor allem wenn du nix von der materie verstehst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Demon

BeitragSa, Jan 08, 2005 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Es mag sein, dass du mir geistig überlegen bist, aber sogar ich als BMax Laie kann erkennen, dass du exakt diesen Vorschlag umgesetzt hast.

Wenn ich mir den Code von bruZard anschaue, fällt mir auf, dass du strukturell genau das Gleiche hast, mit der Ausnahme, dass du in deinem Stacktype eine Konstruktorfunktion definiert hast, die effektiv eine Erweiterung der eigenen Klasse zurückgibt.
Damit hast du den manuellen Schritt von bruZard umgangen, bzw. ihn in eine public Funktion umgelagert.

Wenn dem nicht so ist, bitte ich um eine Erläuterung in einfachen Worten für mich.
Don't drink and derive!
 

Dreamora

BeitragSa, Jan 08, 2005 1:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese kleine Konstruktorfunktion ist der einzige Grund, warum es überhaupt funktioniert. kannst es gerne mal ohne versuchen im falle von gewissen zweifeln und unglauben Smile

Abstrakte funktionen kannst du nicht aufrufen, sie sind nur eine deklaration ohne jegliche implementation. insofern ist ein abstract im public und eine implementation im private in der form vollständig "nutzlos" da du nichts vom private type deklarieren kannst ausserhalb des modules. insofern kannst du auch nicht darauf zugreifen. Aber auf meinen Konstruktor kannst du zugreifen, da er sich dynamic binding zu nutze macht ( gott sei dank kann BM immerhin das Smile ) um einen erweiterten type durch seinen public basistype zu übergeben.

sorry wenn ich oben ein wenig harsch war, aber hat mich effektiv genervt, da ich seit gut 3 Tagen dran sitze irgendwie public private sinnvoll zum laufen zu bekommen. Die Java variante mit den interfaces war dabei die einzige die ich noch net versuchte, da ich davon ausging das BM sich GCC gemäss also C / C++ like verhalten würde ... naja fehlannahme.

das thema läuft übrigens seit rund 1,5-2 wochen im englischen forum und bisher hatte auch dort keiner ne lösung wo bedeutend mehr leute aktiv sind als die 5 hier. ( oder falls sie wer hatte, hat er sie brav für sich behalten. jetzt wurde sie allerdings von Mark Tiffany direkt in die englische Wiki miteinbezogen, sollte also insofern in zukunft hoffentlich geklärt sein )

Wie auch geschrieben ist net alles auf meinem mist gewachsen, ohne bruzard's und masterk's ideen wäre mir dynamic binding wahrscheinlich garnicht in den sinn gekommen ...

ich bin froh das es klappt, das ist für mich die hauptsache und ich denke andere hier sind froh dass es nu eine einfache und leicht verständliche erklärung gibt, wie man es zum laufen bekommt.
ich werde mir allerdings in zukunft überlegen solche dinge noch ins D board zu posten, da sich hier nur wenige die mühe machen mitzuhelfen in solchen dingen aber ständig blöde sprüche hinten vor kommen wenn die lösung "simpel erscheint".
leute wie du demon dürfen gerne selbst 5-10h das englische board nach lösungsvorschlägen und ansätzen durchforsten weil sie es selbst nicht aktiv lesen und mitverfolgen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Jolinah

BeitragSa, Jan 08, 2005 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Gute Lösung Dreamora Smile

Ich hatte auch schon rumprobiert, wäre aber niemals auf sowas gekommen *g*.

Dennoch wärs viel besser wenn man Private und Public so nutzen kann wie in anderen Sprachen auch.

Code: [AUSKLAPPEN]

Type bla
  Private

  Field x

  Method ModifyX()
    x = x + 3
  End Method

  Public

  Method SetX(x)
    Self.x = x
    ModifyX()
  End Method

  Method GetX()
    Return x
  End Method
End Type
 

Dreamora

BeitragSa, Jan 08, 2005 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ja besser wärs durchaus. da man sich so die "doppelte Arbeit" der deklaration ersparen könnte. aber ich denke wenn man sich daran gewöhnt hat, hat es auch vorteile ... und verhindert das es in so grausig designeten code liefert, wie C++ ihn zulässt ( und auch häufig dazu verleitet )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Demon

BeitragSo, Jan 09, 2005 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, für Methoden funktioniert das ja immerhin Wink.

Code: [AUSKLAPPEN]

Type TTest
 
  Method MySin:Float(x:Float) Private
    Return Sin(x)
  EndMethod

  Method PublicSin(x:Float)
    Return MySin(x)
  EndMethod
 
EndType
Don't drink and derive!

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group