TYPE name = RESTRICTED bezugsdatentypDer neu definierte Datentyp besitzt die gleiche Struktur wie bezugsdatentyp, jedoch gelten restriktivere Zugriffsregeln.
bezugsdatentyp ist vorzugsweise ein
strukturierter Datentyp.
Variablen mit geschützten Datentyp schirmen ihre Komponenten einem
unmittelbaren Zugriff ab.
Sinnvoll eingesetzt werden können geschützte Datentypen im
Zusammenhang mit Moduln:
Ein Modul exportiert
Ein Variable mit geschützten Datentyp darf als aktueller Parameter an ein Unterprogramm übergeben werden, welches einen ungeschützten Datentyp als formalen Parameter vorsieht. Dies gilt sowohl für Wert- als auch für Variablenparameter.
Mit PRIVATE oder PROTECTED deklarierte Komponenten eines Objekts ermöglichen eine ähnliche Abschirmung von Komponenten wie geschützte Datentypen.
Beispiel (Pascal++):
Interface-Teil des Moduls personal
MODULE personal INTERFACE(OUTPUT);
EXPORT personal = (person, einstellen, steigern, informieren);
TYPE string20 = STRING(20);
sperson = RECORD
name : string20;
vorname : string20;
pnr : INTEGER;
gehalt : REAL;
END;
person = RESTRICTED sperson;
FUNCTION einstellen(name: string20; vorname: string20) : person;
PROCEDURE steigern(VAR p: sperson; betrag: REAL);
PROCEDURE informieren(p: sperson);
END.
Exportiert werden der geschützte Datentyp person und die
Routinen einstellen, steigern, informieren zum Zugriff auf Daten
vom Typ person. Implementationsteil des Moduls personal
MODULE personal IMPLEMENTATION;
CONST anfangsgehalt = 1000.0;
VAR nr : INTEGER;
FUNCTION einstellen; { (name: STRING; vorname: STRING) : person }
VAR p : sperson;
BEGIN
p.name := name;
p.vorname := vorname;
p.pnr := nr;
p.gehalt := anfangsgehalt;
nr := nr + 1;
einstellen := p;
END;
PROCEDURE steigern; { (VAR p: sperson; betrag: REAL) }
VAR pp : sperson;
BEGIN
p.gehalt := p.gehalt + betrag;
END;
PROCEDURE informieren; { (p: sperson) }
VAR pp : sperson;
BEGIN
WITH p DO
Writeln(pnr:3, ' ', name:20, ' ', vorname:20, ' ', gehalt:10:2);
END;
TO BEGIN DO
nr := 1;
END.
Programm, welches Ressourcen des Moduls personal nutzt
PROGRAM firma(OUTPUT);
IMPORT personal;
VAR p1, p2, p3 : person;
BEGIN
p1 := einstellen('Meier', 'Otto');
informieren(p1);
steigern(p1, 500.0);
informieren(p1);
p2 := einstellen('Mueller', 'Ottokar');
informieren(p2);
p3 := einstellen('Moeller', 'Ottilie');
informieren(p3);
steigern(p3, -500.0);
informieren(p3);
END.
Das Programm hat keinen direkten Zugriff auf die Komponenten der
Datenstrukturen, d.h. Anweisungen wie p1.gehalt := 1500.0;
führen zu einem Syntaxfehler. Ergebnisprotokoll
1 Meier Otto 1000.00 1 Meier Otto 1500.00 2 Mueller Ottokar 1000.00 3 Moeller Ottilie 1000.00 3 Moeller Ottilie 500.00