AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • Offizieller Beitrag

    Hi,
    ich habe mal ein wenig mit AutoItObject gespielt und mir vorgestellt, wie AutoIt-Syntax als AutoIt-Object aussehen könnte. Dazu habe ich die String-Bibliothek kpl. in einem Objekt gewrappt.
    Jede String-Funktion ist hier als Methode abgebildet. Dabei habe ich unterschieden in "aktive Methoden", welche Manipulationen am String vornehmen, und "passive Methoden", welche Auswertungen vornehmen.
    Zusätzlich wird der String, der dem Objekt erstmalig zugewiesen wird als Initialstring unveränderbar im Objekt gespeichert. Auf diesen kann wahlweise zugegriffen werden, solange das Objekt existiert. Standardmäßig verwenden jedoch alle Methoden .Val und speichern dort auch die Veränderungen. Somit ist gewährleistet, dass bei verketteten Methoden, jede Methode auf das Ergebnis der vorigen zugreift.
    (Über Sinn oder Unsinn dieses Projektes wollen wir hier aber nicht reden. Es geht einzig um die Möglichkeiten. - Auch wenn ich den Eindruck habe, dass kaum jemand ausser MG und mir sich mit AutoIt-Object befasst. ;) )

    Und hier mal ein Bsp. mit einigen Funktionen in der Anwendung.

    Beispiel
    • Offizieller Beitrag

    Da sich mal wieder im Forum jemand für AutoIt-OOP interessiert hat, möchte ich mal noch eine weitere Spielerei nachschieben: Gui-Elemente als Objekte. Dazu habe ich einige Gui-Ctrl "objektisiert" :D

    Das Beispiel:

    Im Anhang sind alle erforderlichen Dateien enthalten, ebenso nochmal das Bsp. aus Post #1

    EDIT: Gerade bemerkt: In der Zwischenzeit hat sich etwas geändert mit der AutoIt Version. Wenn ich das Window-HWnd aus dem Speicher abrufe muss ich es vor der Verwendung mit HWnd($hWnd) erst wieder nutzbar machen. Dadurch lief meine Methode .Clone nicht. Jetzt korrigiert.

  • Also 1.


    Absolut Krass.


    mehr brauch ich wohl nicht sagen.

    Aber witzig, schau was ich von gestern auf heute geschrieben habe, hahaha

  • Hallo,

    diese OOP Syntax ist ja echt Wahnsinn. :)

    Kann man im Autoit it auch eine Gui erstellen, in der der bewegliche Objekte sind?

    Sprich ein Quadrat liegt auf dem "Boden" der GUI und ich kann es mit der Maus nach oben ziehen. Wenn ich die Maus loslasse, würde es wieder auf den Boden fallen.

    VG

    horphi

  • Hallo @Yjug,

    danke für dein Tutorial, macht OOP sehr verständlich. :)

    Allerdings fehlt mir noch ein gedanklicher Schritt, um die Box zu bewegen.
    Frage ich permanent die Position der Box ab und ändere die property, oder hat die Box keinen x/Y Wert und liegt auf einem 2. Layer auf ?

    Wie soll sich die Box bewegen:

    1. durch drag & drop mit der Maus
    2. wenn ich die Box loslasse, soll sie sich alleine in die obere linke Ecke bewegen

    Danke und Gruß,

    horphi

  • Ich verstehe deine Frage nicht ganz. Hast du überhaupt mal versucht dazu ein Skript zu verfassen?

    Gehen wir mal davon aus wir haben unser Objekt. Diese hat im Fenster eine Fläche (welche gezeichnet wird) und eine Koordinate um die Position zu definieren. Du musst lediglich prüfen ob sich der Mauszeiger innerhalb des Objektes befindet und entsprechend darauf reagieren wenn du die linke Maustaste betätigst. In diesem Fall zeichnest du das Objekt an der Mauskoordinate schlichtweg neu so lange wie die Maustaste gedrückt ist.

    Was du mit einen 2. Layer meinst verstehe ich nicht so recht.

  • Hi,

    ich würde dann mit deiner Methode Dynamische Wertzuweisung die Property so lange anpassen, bis sie auf Null ist richtig? (Zeile 71)

    Gruß

  • Hat diese "Objektisierung" irgendwelche Vorteile bezügl. Ausführungsgeschwindigkeit oder erweiterter Möglichkeiten, die AutoIt selbst nicht bietet; außer daß sie vielleicht Leuten, die diese Syntax schon von anderen Programmiersprachen gewohnt sind, besser liegt?

    Ich fürchte, wenn AutoIt komplett auf OOP umgestellt würde, wäre der Einstieg für viele Programierneulinge wesentlich schwerer. :/

  • Zitat

    Hat diese "Objektisierung" irgendwelche Vorteile bezügl. Ausführungsgeschwindigkeit oder erweiterter Möglichkeiten, die AutoIt selbst nicht bietet;

    Nein, Objektorientierung ist eine Idee um Programme im Code anders zu strukturieren. Prinzipiell gibt es momentan 2 Arten der Programmierung (grob gefasst):

    - Prozedurale Programmierung

    - Objektorientierte Programmierung

    Der Trend tendiert langsam in objektorientierter Programmierung.

    Zitat

    Ich fürchte, wenn AutoIt komplett auf OOP umgestellt würde, wäre der Einstieg für viele Programierneulinge wesentlich schwerer.

    Dies ist nicht wirklich handfest. Aber ich kann dich beruhigen, da objektorientierte Programmierung eine andere Idee ist, seinen Programmcode aufzubauen und strukturieren hat dies für Neulinge (welche erst anfangen) keine merklichen Hindernisse. Das Schwierigste ist es, die Neulinge überhaupt in die Denkweise hinein zu bringen, Probleme logisch und schlüssig in Teilprobleme zu zerlegen und diese entsprechend zu lösen. Da spielt es keine Rolle ob der Code objektorientiert oder prozedural aufgebaut ist.

    Kann es sein dass du nicht mit objektorientierter Programmierung bisher nicht auseinander gesetzt hast? Zumindest klingt dies so als ob du in dem Bereich durchaus Ahnungslos bist (ohne dir zu nahe treten zu wollen).

  • Das meiste Wissen bezügl. Computern hab ich mir selbst erschlossen (und dabei mit Javascript in prozeduraler Form angefangen). Unser C++Dozent (FI/SI-Ausbildung) kommentierte ständig: "Hast Du da nicht einen [Punkt|DoppelPunkt|zwei Doppelpunkte|Ausrufezeichen|Komma|etc.] vergessen? .. Kaum macht man's richtig, schon funktionierts." Die Leute waren mehr damit beschäftigt, an Syntaxfehlern zu verzweifeln, als daß sich Erfolge eingestellt haben.

    Sowas wie automatische Typkonvertierung ist halt immer Fluch und Segen. Es macht den Einstieg oft erst mal leichter, weil man sich nicht um so viele Dinge kümmern muß, bevor mal was funktioniert, aber es ist auch fehleranfälliger, und ein späteres Umlernen dann nochmal anstrengend.

    Ich hab mich schon mal etwas mit OOP beschäftigt, aber da ich meine Aufgabenstellungen bisher auch anders lösen konnte, hatte ich bisher nicht die Motivation, mich so dahinter zu klemmen, daß ich da Fuß fasse.

  • Ich hab mich schon mal etwas mit OOP beschäftigt, aber da ich meine Aufgabenstellungen bisher auch anders lösen konnte, hatte ich bisher nicht die Motivation, mich so dahinter zu klemmen, daß ich da Fuß fasse.

    Zumindest fürs Scripten ist OOP (meiner Meinung nach) absolut ungeeignet.

    AutoIt wurde eigentlich dafür designt Makros auszuführen, Fenster zu automatisieren und einfach Befehlsabläufe zu automatisieren und keine große Software zu entwickeln.

    Natürlich verbiegt hier jeder im Forum (mich eingeschlossen) AutoIt und es wird schöne Software programmiert, seien es Spiele, Musikplayer oder sonst was.

    Für solche Anwendungen ist aber OOP besser geeignet, denn bei Spielen kann man z.B. für jeden Spieler ein Objekt anlegen und ihm Attribute anhängen und Objekte

    klonen, vererben und wirklich schönen Code schreiben. In AutoIt ist das (mit den Standardtypen) nicht so einfach, aber dafür wurde es ja auch nicht entwickelt.

  • Momentan nutze ich persönlich AutoIt nur noch für einige einfache Simulationen wo eine gewisse Wahrscheinlichkeit gegeben ist und ich wissen will wie oft etwas vor kommt. Beispiel:

    Rainbow Six Siege hat ein Booster Pack System wo man nach jedem Spiel, was man absolviert eine Chance hat ein Booster Pack (für kosmetische Dinge) zu erhalten. Man startet bei 1% und nach jedem Spiel steigt die Chance um 1.5%. Sollte man ein Booster Pack erhalten startet man wieder bei 1%.

    Sieht etwa so aus:

    1% -> Spiel absolviert, kein Booster erhalten: Nächstes Spiel 2.5%

    2.5% -> Spiel absolviert, kein Booster erhalten: Nächstes Spiel 4%

    4% -> Spiel absolviert, Booster bekommen (yay) - Reset auf 1%

    Da war ich mal neugierig wie viele Spiele man bei dem System durchschnittlich braucht um so ein Booster Pack eigentlich zu erhalten: 10.2 Games durchschnittlich (auf 100'000 Booster Packs getestet)

    Nun ja, solche kleinen Dinge sind in AutoIt dann fix runter geschrieben und man muss nicht mathematisch an die Sache ran gehen. :P

    Aber ich schweife vom Thema ab.