Schritt 2: Interface und Regel­modul ge­ne­rie­ren

Am einfachsten kann die Gene­rie­rung von Programmcode mit der Tasten­kombi­nation STRG + G (Speichern + Ge­ne­rie­ren) gestartet werden. Sie funktioniert in allen Bildschirmen und löst das Speichern der Ent­schei­dungs­ta­belle mit anschließender Gene­rie­rung der Source-Dateien aus.

image3333 33

Alternativ kann auch das Gene­rie­rungs-Menü über das Symbol "Speichern und Ge­ne­rie­ren" verwendet werden.

Informationen zu allen Möglichkeiten, die Gene­rie­rung zu starten, finden Sie im Kapitel: Programmcode generieren.

LF‑ET erzeugt bei dieser Gene­rie­rungs­art immer 2 Objekte: Ein Interface und ein Regel­modul, das ausschließlich die im Interface definierten Methoden verwendet.

Hier das gene­rier­te Interface "IAmpelSchaltung":

image3333 43

In den meisten Fällen wird man den voreingestellten Standard-Prolog (public interface) unverändert verwenden können, bei Bedarf kann dieser aber über eine INI-Datei beliebig verändert werden:

// Prolog Standard ---->
// profile LFET.Java.Prolog.Standard.Interface.ini not found
// used LF‑ET 2.1.4 (140116a) build in default

public interface IAmpelSchaltung
{
    // Prolog Standard <----

Die Ent­schei­dungs­ta­belle enthält bei dieser Gene­rie­rungs­art keinerlei Sourcecodes. Der Ent­schei­dungs­ta­bellen-Prolog wird in den gene­rier­ten Code nur eingebunden, damit die verwendeten Parameterangaben dokumentiert sind:

// Prolog Decision Table ---->
// InterfaceName=IAmpelSchaltung
// InterfaceRulesClassName=RAmpelSchaltung
// $$Package=""
// Prolog Decision Table <----

Zu jedem Bedingungswert wird eine Methode definiert: public boolean isBedingungsWert(), wobei die Methodennamen auto­ma­tisch aus der Ent­schei­dungs­ta­belle abgeleitet werden. Jede Methode erhält auto­ma­tisch einen JavaDoc-Kommentar, der aus allen verfügbaren Informationen aus der Ent­schei­dungs­ta­belle (Titel, Symbole, Texte, etc.) zusammengestellt wird:

/**
 * B01: Ist Rot an ?
 */
public boolean isIstRotAn();

/**
 * B02: Ist Gelb an ?
 */
public boolean isIstGelbAn();

Hinweis: Bei erweiterten Bedingungen muss für den letzten Wert (der "Sonst-Wert") kein logisches Argument definiert werden – genau wie beim "Nein-Wert" einer begrenzten Bedingung. Fehlt für den letzten Wert das logische Argument, dann ge­ne­riert LF‑ET auto­ma­tisch ein ELSE-Statement. Aus diesem Grunde werden für die letzten Werte von Bedingungen keine Methoden im Interface ge­ne­riert.

Auch zu jedem Aktions­wert wird eine Methode, inkl. JavaDoc-Kommentar, definiert: public void doAktionsWert():

/**
 *A01: Neuer Zu­stand: Rot an
 */
public void doNeuerZustandRotAn();

/**
 *A02: Neuer Zu­stand: Gelb an
 */
public void doNeuerZustandGelbAn();

/**
 *A03: Neuer Zu­stand: Grün an
 */
public void doNeuerZustandGruenAn();

Um das Laufzeitverhalten analysieren zu können, wird standardmäßig am Ende noch die Methode doTrace hinzugefügt. Der voreingestellte Standard-Epilog kann in den meisten Fällen unverändert übernommen werden, kann aber bei Bedarf über eine INI-Datei beliebig abgewandelt werden:

  public void doTrace(java.lang.String dtName, java.lang.String version, int rules, int rule);

  // Epilog Standard ---->
  // profile LFET.Java.Epilog.Standard.Interface.ini not found
  // used LF‑ET 2.1.4 (140116a) build in default

}

// Epilog Standard <----

Nun zum gene­rier­ten Regel­modul"RAmpelSchaltung":

image3333 44

In den meisten Fällen wird man auch hier den voreingestellten Standard-Prolog unverändert verwenden können. Bei Bedarf kann dieser aber über eine INI-Datei beliebig verändert werden. Die Klasse enthält nur eine Methode "execute", der das gene­rier­te Interface als Parameter übergeben wird:

// Prolog Standard ---->
// profile LFET.Java.Prolog.Standard.Interface.Dt.ini not found
// used LF‑ET 2.1.4 (140116a) build in default

public final class RAmpelSchaltung
{
  public final void execute(IAmpelSchaltung iface)
  {
    // Prolog Standard <----

Die Ent­schei­dungs­ta­belle enthält bei dieser Gene­rie­rungs­art keinerlei Sourcecodes. Der Ent­schei­dungs­ta­bellen-Prolog wird in den gene­rier­ten Code nur eingebunden, damit die verwendeten Parameterangaben dokumentiert sind:

// Prolog Decision Table ---->
// InterfaceName=IAmpelSchaltung
// InterfaceRulesClassName=RAmpelSchaltung
// $$Package=""
// Prolog Decision Table <----

Der IF-ELSE-Regelbaum ist genauso aufgebaut wie bei dem in den vorhergehenden Kapiteln generierten Java-Sourcecode, nur dass jetzt ausschließlich die Methoden des gene­rier­ten Interfaces verwendet werden:

if (iface.isIstRotAn())
{
  if (iface.isIstGelbAn())
  {
    // Rule R01 ---->

    iface.doTrace("AmpelSchaltung","20140211.152746", 4, 1);
    iface.doNeuerZustandGruenAn();

    // Rule R01 <----
  }
  else
  {
    // Rule R02 ---->

    iface.doTrace("AmpelSchaltung","20140211.152746", 4, 2);
    iface.doNeuerZustandRotAn();
    iface.doNeuerZustandGelbAn();

    // Rule R02 <----
  }
}
else
{
  if (iface.isIstGelbAn())
  {
    // Rule R03 ---->

    iface.doTrace("AmpelSchaltung","20140211.152746", 4, 3);
    iface.doNeuerZustandRotAn();

    // Rule R03 <----
  }
  else
  {
    // Rule R04 ---->

    iface.doTrace("AmpelSchaltung","20140211.152746", 4, 4);
    iface.doNeuerZustandGelbAn();

    // Rule R04 <----
  }
}

Der gene­rier­te Standard-Epilog wird in der Regel nicht verändert, kann bei Bedarf aber über eine INI-Datei beliebig verändert werden:

    // Epilog Standard ---->
    // profile LFET.Java.Epilog.Standard.Interface.Dt.ini not found
    // used LF‑ET 2.1.4 (140116a) build in default
  }
}

// Epilog Standard <----

Das Interface IAmpelSchaltung und die Klasse RAmpelSchaltung sind sofort nach der Gene­rie­rung verwendbar und werden in keiner Weise manuell verändert oder bearbeitet.

Weiterführende Informationen