Benutzerdefinierte Klassen

In LunaAVR lassen sich eigene Klassen definieren, mit denen Funktionen im Sinne eines Moduls oder einer in sich geschlossenen Bibliothek nachgerüstet werden können.

Eine solche Klasse kann als Bestandteil des Hauptprogramms implementiert werden und ist in sich geschlossen. Dies bedeutet, dass die enthaltenen Komponenten nur durch den Zugriff über den Namen der Klasse erreichbar sind (getrennter Namensraum: „KlassenName.xxx“). Der getrennte Namensraum erlaubt es daher Bezeichner/Namen für die Komponenten zu verwenden, die auch im Hauptprogramm existieren.

Eine Klasse kann folgende Komponenten enthalten:

Die einzelnen Komponenten werden innerhalb der Klasse wie im Hauptprogramm deklariert und sind dann Teil der Klasse.

  • Class Bezeichner
    • Konstantendeklaration
    • Definitionen/Aliase
    • Strukturdeklaration
    • Variablendimensionierung
    • Interrupt-Serviceroutinen
    • Funktionen und Proceduren
    • Datenstrukturen
  • EndClass

Anwendung von Klassen im Programmcode
Von Außen sind Zugriffe die Komponenten einer Klasse erlaubt:

  • Strukturdeklarationen (zur Dimensionierung)
  • Konstanten (lesen)
  • Variablen (lesen und schreiben)
  • Prozeduren (aufrufen)
  • Funktionen (aufrufen)
  • Daten (lesen und Ggf. schreiben)
' Initialisierung
[..]
dim var as single
'Aufruf irgendwo im Programmcode
print test.Version       ' Ausgabe
test.Init()              ' Procedure aufrufen
var = test.GetData(0,2)  ' Funktion aufrufen
test.a=123               ' Wert zuweisen
print str(test.a)        ' Wert lesen und ausgeben
 
' Hauptschleife
do
loop
 
' Deklaration
Class test
  const Version = "1.0"
  dim a as byte
 
  Procedure Init()
    print "Initialisierung"
    print "a = "+str(a)
  EndProc
 
  Function GetData(x as byte, y as byte) as single
    mul y,4
    y=y+x
    return tabelle.SingleValue(y)
  EndFunc
 
  data tabelle
    .dw &h1234,&h5678,&h9aab
    .dw &h1234,&h5678,&h9aab
    .dw &h1234,&h5678,&h9aab
    .dw &h1234,&h5678,&h9aab
  enddata
 
EndClass