gif gif up gif contents
Nächste Seite: 7.3 Bewertung der Implementierung Vorige Seite: 7.2.4 API Designer

7.2.5 Beispielapplikation

In diesem Abschnitt soll an einer kleinen Beispielapplikation die Verwendung der Programmierschnittstelle gezeigt werden. Als Sicht wird dafür das schon vorher benutzte Beispiel EmpDept verwendet. Das Programm gibt alle Angestellten mit ihren Abteilungen und den Abteilungsleitern auf den Bildschirm aus. Die Schnittstellenklasse heißt EmpDeptAdmin, die Hauptklasse wird mit EmpDept bezeichnet, und die Klasse für die Teilanfrage der Departments heißt SV_dept. Die vollständigen Deklarationen der Klassen sind in Anhang E enthalten.

#include <iostream.h>
#include "EmpDept.h"

int main()  {
    
    CBref<EmpDept> e;
    CBref<SV_dept> d;
	
    EmpDeptAdmin empAdmin("localhost",4723);
    
    // Verbindung ok?
    if(!empAdmin)
        exit(1);
Zunächst wird die Verbindung aufgebaut, dabei mußnur der Rechnername und die Portnummer des ConceptBase-Servers angegeben werden. Der Konstruktor des Objekts empAdmin stellt nicht nur die Verbindung her, sondern stellt auch die Anfrage zur Initialisierung der Sichten und füllt die Mengen im Anwendungsprogramm mit den Antwortobjekten. Nachdem überprüft wurde, ob die Verbindung korrekt aufgebaut worden ist, beginnt eine Endlosschleife. In dieser Schleife wird zunächst die Sicht ausgegeben.
    while(1) {
        for(int i=0; i <empAdmin.EmpDeptSet.size(); i++) {
            e=empAdmin.EmpDeptSet[i];

            cout << (char*) *e << endl;
Die Menge der Objekte der Sicht ist in der Objektvariablen EmpDeptSet des emp- Admin-Objekts enthalten. Für die Ausgabe werden die Objekte der Variablen e zugewiesen und mit dem Cast-Operator (char*) in einen C++-String konvertiert.
            for(int j=0; j < e->dept.size(); j++) {
                d=e->dept[j].getValue();
                cout << e->dept[j].getLabel() ",";
                cout << (char*) *d << endl;
Die Objektvariable dept der Klasse EmpDept ist vom Typ CBset<CBattribute< CBref<SV_dept>>>. Beim Zugriff mußdaher zunächst mit dem Array-Operator [] ein Objekt der Menge selektiert werden. Dann kann man über die Methoden getLabel und getValue die Attributbezeichnung und den Attributwert erhalten. Hier ist der Attributwert eine Referenz auf die Klasse SV_dept.
                for(int k=0; k < d.getValue()->head.size(); k++) {
                    cout << d->head[k].getLabel() << ",";
                    cout << (char*) d->head[k].getValue() << endl;
                }
            }
        }
In dieser Schleife werden die Leiter einer Abteilung mit ihren Attributbezeichner ausgeben. Die Objektvariable head ist ebenfalls eine Menge von Attributen, jedoch ist der Template-Parameter keine Referenz wie bei dept, sondern CBobjectName.
        if(empAdmin.processUpdateMessage(0))
            cout << "Neue Nachricht eingetroffen und verarbeitet!\n";
        else
            cout << "Keine neue Nachricht!\n";
    }
}
Am Ende der Endlosschleife kontrolliert der Client, ob für ihn neue Nachrichten eingetroffen sind und verarbeitet die Nachrichten direkt. Die Methode processUpdate- Message über nimmt auch das Einfügen und Löschen von Objekten.



Christoph Quix
31. Juli 1996