ObjectIt Objektorientiertes Autoit (Alpha v1)

  • ObjectIt Objektorientiertes Autoit (Alpha v.1)

    Idee:
    Was mich immer bei AutoIt gestört hat ist die Tatsache, das es keine Objekte gibt. Natürlich werden für die meisten Programme garkeine Objekte benötigt, trotzdem währe es ganz hilfreich wenn wir auch welche bei AutoIt hätten. JavaScript unterstützt zum Beispiel auch Objekte, obwohl man diese Funktion nur sehr selten braucht.

    Prinzip:
    Edit: AspirinJunkie hat mich darauf hingewiesen das Progandy und Co eine AutoItObject UDF geschrieben haben. Darum wurde das Programm so umgestellt das es den übersichtlichen Code umwandelt, sodass diese UDF verwendet wird um die Objekte zu erzeugen.

    Beispiel
    Ich denke dieses Hello World Beispiel zeigt ganz gut, wie Code aussieht:

    [autoit]

    struct test

    [/autoit][autoit][/autoit][autoit]

    private $message

    func .create()
    .$message = "Hello World"
    endfunc

    func .display()
    msgbox(0,"",.$message)
    endfunc

    [/autoit][autoit][/autoit][autoit]

    endstruct

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $example=test.create()
    $example.display()

    [/autoit]

    Zuerst wird die Klasse test erzeugt, sie besitzt eine Methode Create() und eine Methode Display().
    Bei Create() wird das Attribut .$message auf "Hello World" gesetzt. Mit der Methode Display() wird der Wert von dem Attribut ausgegeben.
    Am Ende vom Code wird $example erzeugt, welches ein Objekt vom Typ test ist. Danach wird die display() Methode aufgerufen.
    (Resultat: Es wird Hello World ausgegeben)

    Da dieser Code von Autoit nicht verstanden wird, muss er von ObjectIt umgewandelt werden.
    So sieht der Code aus wenn er konvertiert wurde:

    Spoiler anzeigen
    [autoit]

    #include "AutoItObject.au3"

    [/autoit] [autoit][/autoit] [autoit]

    _AutoItObject_Startup()
    func test_create()

    [/autoit] [autoit][/autoit] [autoit]

    local $objectit_local_number = _AutoItObject_Create()
    _AutoItObject_AddProperty($objectit_local_number, "message",$ELSCOPE_PUBLIC)
    _AutoItObject_AddMethod($objectit_local_number, "display", "test_display")

    [/autoit] [autoit][/autoit] [autoit]

    $objectit_local_number.message = "Hello World"

    return $objectit_local_number
    endfunc

    [/autoit] [autoit][/autoit] [autoit]

    func test_display($ObjectIt_Local_Number)

    [/autoit] [autoit][/autoit] [autoit]

    msgbox(0,"",$objectit_local_number.message)

    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $example=test_create()
    $example.display()

    [/autoit]


    Wissenswertes
    Zu beginn von jedem Objekt werden die Attribute angegeben, an dieser Stelle darf den Attributen aber noch kein Wert zugewiesen werden!
    (Genau so wie im Beispiel darf der Wert erst in der .create() methode gesetzt werden)
    Jedes Objekt muss mit .create() initialisiert werden, dabei wird die Methode .create() automatisch erzeugt, wenn sie nicht vorhanden ist.
    Es können auch Parameter an .create übergeben werden.
    Um ein Objekt zu zerstören wird .destroy() genutzt, wenn diese Methode nicht existiert wird sie automatisch erstellt.
    .destroy() erlaubt keine Parameter!


    Bekannte Probleme und Workarounds:
    -Soll ein Attribut den Wert einer GUI haben muss .$attribut = GUICreate() & "" verwendet werden
    - .$test += 1 muss durch .$test = .$test +1 ersetzt werden
    -Variablennamen dürfen nicht struct oder func enthalten
    -Attribute können nicht direkt Arrays sein, aber in ihnen kann trotzdem der Wert eines Arrays gespeichert werden. Schaut euch am besten das Beispiel Notebook.au3 an, wenn ihr mit Arrays arbeiten wollt

    Änderungen zu Version Alpha v1:
    -Attribute und Methoden können nun privat oder public sein
    -Fehler in der Create Methode wurde gefixt
    -Optional können Attribute oder Methoden innerhalb der Klasse mit this. aufgerufen werden

    ToDo List:
    -Buggs finden und fixen
    -Wenn gewünscht die Methode .exists() hinzufügen die überprüft, ob das Objekt zerstört wurde
    -Klassen per include in das Projekt reinladen
    -Vererbung

    Download der Alpha Version (mit 4 Beispielen):

    Die Alpha Version dient nur dazu die Beispielprogramme zu begutachten und einfache kleine Tests zu erstellen. Die Chance auf Buggs zu treffen ist noch sehr hoch, aber es würde mir sehr helfen wenn ich nicht der einzige bin der verschiedene Konstellationen mit Objekten ausprobiert.
    Wichtig: Im Download befindet sich zusätzlich eine ganze portable AutoIt Version, dies hat einige Vorteile:
    -Die AutoIt.exe muss nicht mehr angegeben werden
    -Die Mitgelieferte Skite Version zeigt die neue Syntax richtig an
    -In Skite kann mit F5 (oder Tools->Go) der Code direkt ausgeführt werden

    Download ObjectIt Alpha v1

    Credits:

    Zitat

    Gehen an
    * Andreas Karlsson (monoceres)
    * Dragana R. (trancexx)
    * Dave Bakker (Kip)
    * Andreas Bosch (progandy)
    für die AutoItObject UDF

    MfG Oger-Lord

    Einmal editiert, zuletzt von Oger-Lord (10. August 2010 um 22:36)

  • Arg, ein paar Monate nicht richtig aktiv und schon haut progandy sowas raus, jetzt muss ich überlegen in wie weit es sich lohnt sowas fortzuführen....

  • Arg, ein paar Monate nicht richtig aktiv und schon haut progandy sowas raus, jetzt muss ich überlegen in wie weit es sich lohnt sowas fortzuführen....


    Ich muss sagen, dass ich nur mitgemacht habe und nicht angefangen ;)
    Aber mach einfach weiter, das ist doch ein interessantes Projekt. Zumindest die Syntax kannst du weiterentwickeln, eventuell eben dann umwandeln in AutoItObject statt deine Hashtables.

  • So, hab mich nochmal drangesetzt und optimiert. Ausführliche Beschreibung und Download gibts im ersten Post, wobei diesmal beim Download eine komplette AutoIt Version dabei ist. Dies hat verschiedene Vorteile, zum Beispiel kann der Code im mitgelieferten Skite direkt mit F5 ausgeführt werden.
    Hier ist ein Beispiel aus Skite mit optimierten Syntaxhighlighing:
    [Blockierte Grafik: http://img3.imagebanana.com/img/qu9zmigh/Syntax.png]

    MfG

  • Hallo, also das mit dem Syntax highlighting find ich super.
    Doch wenn ich ein Skript starten will, kommt ein error, und zwar das er die Datei C:\Dokumente nicht findet.
    Ich weiß, dass es an dem Leerzeichen im Makro @AppDataDir liegt, aber es wäre schon wenn du es
    fixen würdest.

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.