Neues Logo der TU-Dortmund
spaceFakultät für Informatik
spaceLehrstuhl 10
  Tu-Do-Bild
 
space
space

KURE-Java

In Zusammenarbeit mit der Arbeitsgruppe von Prof. R. Berghammer, Institut für Informatik und Praktische Mathematik der Universität Kiel, haben wir die im Kieler System RelView mechanisierte Relationenalgebra als Unix-C-Bibliothek KURE extrahiert. Um sie in Java-Projekten unter Windows verwenden zu können, gibt es die Java-Bibliothek KURE-Java. Sie verwendet eine modifizierte KURE-Version und kapselt diese in geeignete Java-Schnittstellen.

 

In KURE-Java werden Relationen als Objekte behandelt, deren Elemente durch get- und set-Methoden angesprochen werden. Relationen werden in einem sog. Relationenmanager verwaltet, der die in Funktionen und Programmen verwendbaren Relationen umfasst und diese auszuwerten erlaubt. Ein Werkzeug nutzt KURE-Java, um mit den aus einem proprietären Datenmodell erzeugten Relationen rechnen zu können. Dazu stehen im Wesentlichen die Methoden createFunction und loadProgramm zur Definition einer relationalen Funktion bzw. zum Laden eines Programmes sowie die Methode evaluateTerm zur Ausführung von Funktionen und Programmen zur Verfügung. Wir benutzen KURE-Java in unseren Werkzeugen PetRA und RelClipse.

 

Ansprechpartner: Prof. Dr. Ernst-Erich Doberkat

Aufbau und Arbeitsweise

Die Diplomarbeit von O. Szymanski beschreibt ausführlich, wie KURE-Java aufgebaut ist und verwendet wird. Darüberhinaus zeigen einige Veröffentlichungen, wie KURE-Java verwendet wird:

Veröffentlichungen mit Bezug zu KURE-Java

  • A. Fronk, J. Pleumann: Relation-algebraic Analysis of Petri Nets: Concepts and Implementation. In: PetriNet News Letters (April 2005). (Full Document) (BibTeX)
  • A. Fronk, J. Pleumann: Relation-algebraic Calculation of Elementary Cycles. In: I. Düntsch, W. MacCaull, M. Winter (Hrsg.): 8th International Conference on Relational Methods in Computer Science (RelMiCS 8). St. Catherines, Ontario, Canada, 2005. (Full Document) (BibTeX)
  • A. Fronk, R. Berghammer: Considering Design Problems in OO-Software Engineering with Relations and Relation-based Tools. In: Journal on Relational Methods in Computer Science (JoRMiCS) 1 (Dezember 2004), S. 73-92. (Full Document) (BibTeX)
  • A. Fronk: Using relation algebra for the analysis of Petri nets in a CASE tool based approach. In: 2nd IEEE Intl. Conference on Software Engineering and Formal Methods (SEFM 2004). Peking, 2004. - S. 396-405. (Full Document) (BibTeX)

Beispielprogramm

Das folgende KURE-Java-Programm zur Berechnung von Erreichbarkeitsgraphen in Petri-Netzen soll zeigen, wie mit KURE-Java relationale Programme behandelt werden (vgl. auch SEFM04).

Sie können KURE-Java in der aktuellen Version für Windows als zip-File downloaden.

public class GetReachabilityGraph implements RelviewTask {
    // Interface RelviewTasks stellt Methoden execute() und report() bereit
    // execute() führt relationale Analyse durch
    // report() stellt Ergebnis im Petri-Netz dar
    public void execute(RelviewSession session) throws RelationException, TermException {
                // richtigen Relationsmanager besorgen
                RelManager manager = session.getManager();
                 // falls Relation "ireach" noch nicht berechnet
		if (manager.containsRelation("ireach") == false) {
                         // relationales Programm ireach() aufrufen
			Relation ireach = manager.evaluateTerm("ireach()", "ireach");
		}
		if (manager.containsRelation("reach") == false) {
                        // Transitive Hülle von ireach berechnen
			Relation reach = manager.evaluateTerm("trans(ireach)", "reach");
		}
                 // alle Knoten des Erreichbarkeitsgraphen (=Markierungen) erhalten
		Relation allMarks = manager.evaluateTerm("dom(reach)", "allMarks");
                 // allMarks in Sequenz von Spaltenvektoren umwandeln
		manager.evaluateTerm("epsi(RelToVec(M)) *inj(allMarks)^", "seqreach");
    }

	public void report(RelviewSession session) throws RelationException, TermException {
		RelManager manager = session.getManager();        
		Relation ireach = manager.getRelation("ireach");
		Relation reach = manager.getRelation("reach");
		Relation allMarks = manager.getRelation("allMarks");
		
		String analyseMsg = "Der Erreichbarkeitsgraph besitzt " + allMarks.getNumberOfEntries() + " Knoten (Markierungen).\n";
		analyseMsg = analyseMsg + "Es gibt " + ireach.getNumberOfEntries()+ " Paare ummittelbar erreichbarer Markierungen.\n";
		analyseMsg = analyseMsg + "Der Erreichbarkeitsgraph besitzt " + reach.getNumberOfEntries()+ " Kanten.";
		
		session.showMessage("Erreichbarkeitsgraph", analyseMsg);
		session.showSelector("Erreichbare Markierungen", "seqreach", RelviewSelector.TYPE_MARKINGS);
	}
}

Das relationale Programm ireach() sieht dabei wie folgt aus:

IREACH(R, S, C, W_t, Wt_, M)
    DECL mvec, mpoint, allMarks
    BEG
        mvec = RelToVec(M);
        mpoint = syq(epsi(mvec), mvec);
        allMarks = O(mpoint * mpoint^)
        RETURN IRMARKS(M, mpoint, allMarks)
    END.

IRMARKS(M, mpoint, ALL)
    DECL allMarks, cnc, t, irm, irmvec, irmpoint
    BEG
        allMarks = ALL | mpoint * mpoint^;
        cnc = CN(R, S, C, W_t, Wt_, M);
        WHILE -empty(cnc) DO
            t = point(cnc);
            irm = IRM(R, S, W_t, Wt_, M, t);
            irmvec = RelToVec(irm);
            irmpoint = syq(epsi(irmvec), irmvec);
            allMarks = allMarks | mpoint * irmpoint^;
            IF -incl(irmpoint, dom(allMarks)) THEN
                allMarks = IRMARKS(irm, irmpoint, allMarks)
            FI;
            cnc = cnc & -t
        OD
        RETURN allMarks
    END.
 
  © Technische Universität Dortmund, Fakultät für Informatik, Lehrstuhl für Software-Technologie
Content-Management-System Typo3