Componenta Pascal

Componenta Pascal
Paradigme : imperativ , modular , orientat pe obiecte , orientat pe componente
Anul publicării: 1990
Dezvoltator: Microsisteme Niklaus Wirth /
Oberon
Versiunea actuală  : 1.5   (2005, Candidat de lansare 1.6: 2007)
Tastare : static și dinamic, puternic
Implementări importante : Producător de componente BlackBox, componentă Gardens Point Pascal
Influențată de: Modula-2 / Oberon
Sistem de operare : Windows , sisteme de execuție .NET și JVM
Licență : gratuit
Microsisteme Oberon

Component Pascal este un limbaj de programare imperativ , modular , orientat pe obiecte și componente, care a fost gratuit din 2004 și a fost dezvoltat din 1990 pentru sistemul de dezvoltare bazat pe componente BlackBox Component Builder dezvoltat de microsistemele Oberon . Între timp, există și versiuni sub numele Gardens Point Component Pascal care pot rula sub .NET și sub mașina virtuală Java .

Component Pascal a fost dezvoltat din limbajul de programare Oberon și funcționa încă sub numele Oberon / L când a fost publicat în 1994. Cadrul asociat a fost numit Oberon / F. Odată cu lansarea 1.3 (care a fost lansată la începutul anului 1996/1997), limba Oberon / L Component Pascal și cadrul Oberon / F au devenit Generatorul de componente BlackBox.

caracteristici

Component Pascal are o descriere a limbajului foarte scurtă și simplă, cu o sintaxă complet structurată . Permite tipuri și obiecte statice , precum și tipuri dinamice și legare dinamică . Este un limbaj de programare foarte puternic tastat și sigur , cu condiția ca modulul SYSTEM să nu fie importat în mod explicit, care este de obicei destinat doar programării sistemului și, prin urmare, este ușor de transportat . Moștenirea este ancorată în limbajul de programare, dar nu moștenirea multiplă pentru a evita sarcina suplimentară pentru compilatori și pentru a face semantica limbajului cât mai clară posibil și pentru a evita problema Diamond .

Componenta Pascal sprijină , de asemenea , colectarea gunoiului automat și de încărcare dinamică și îndepărtarea de module sau a componentelor în timpul rulării , chiar și în timp ce cazuri există deja și urmează să fie utilizate.

În plus, Component Pascal permite afirmații , programare generică și suprascrierea tipurilor de date și, prin urmare, și metode (așa-numitele proceduri legate de tip ). Totuși, pentru simplitate și o mai bună trasabilitate a codului sursă , nu este posibilă supraîncărcarea operatorilor sau a metodelor.

Limbajul de programare Component Pascal și sistemul de dezvoltare și runtime BlackBox Component Builder sunt open source din 2005 .

Domenii de aplicare

Component Pascal se caracterizează prin cerințele sale hardware reduse , stabilitate ridicată , simplitate și viteză, atât în ceea ce privește timpul de rulare, cât și dezvoltarea de software . Este utilizat în principal pentru aplicații științifice și tehnice , în predare și cercetare , dar și pentru aplicații comerciale .

Programe

Salut Lume

Programul Hello World din Component Pascal 1. Exemplu

( Fara parametri ) comanda de ieșire este definit în HalloWelt modulul . Asteriscul (*) după numele procedurii definește exportul ieșirii procedurii , astfel încât să poată fi referit în afara modulului cu sintaxa HalloWelt.Output . Următorul cod sursă este un program simplu care afișează mesajul Hello World! urmat de un print de linie:

 MODULE HalloWelt;

 IMPORT Out;

 PROCEDURE Output*;
 BEGIN
    Out.Open;
    Out.String ("Hallo Welt!");
    Out.Ln;
 END Output;

 END HalloWelt.

Programul Hello World din exemplul 2 Component Pascal

În modulul HalloWelt2 definiți o variabilă care va fi afișată ulterior într-o casetă de dialog. Asteriscul (*) după numele procedurii definește exportul ieșirii procedurii, astfel încât să poată fi referit în afara modulului cu sintaxa HalloWelt.Output . Următorul cod sursă este un program simplu care afișează mesajul Hello World! într-o casetă de dialog care se deschide prin „Dialog IMPORT;” a fost importat. În caseta de dialog, printre altele, toate variabilele marcate cu un * sunt afișate. Cu „VAR output *: ARRAY 50 OF CHAR” se specifică faptul că se va crea o „output” variabilă care 1. este vizibilă în dialog ( ) și 2. constă dintr-o secvență de 50 de caractere (ARRAY 50 OF CHAR) linia "Dialog.UpdateString (ieșire);" este ordonat ca conținutul variabilei „ieșire” să fie atribuit casetei de dialog și să fie afișat imediat: VAR*

  MODULE HalloWelt2;

  IMPORT Dialog;

  VAR ausgabe*: ARRAY 50 OF CHAR;

  PROCEDURE Output*;
  BEGIN
    ausgabe:= "Hallo Welt!" ;
    Dialog.UpdateString(ausgabe);
  END Output;

 END HalloWelt2.

calculator

Programul de calcul de adăugare din Component Pascal primul exemplu

 MODULE Kurs10Rechner;
 IMPORT Dialog;

 VAR zahl1*, zahl2*, ergebnis*, rest* : INTEGER;

   PROCEDURE add* ;
   BEGIN
      ergebnis := (zahl1 + zahl2);
      Dialog.UpdateInt(ergebnis);
   END add;

 END Kurs10Rechner.

Exemple de implementare a moștenirii

Implementarea structurilor succesorale în Componenta Pascal a fost simplificat oarecum în comparație cu predecesorul său, Oberon , și a fost structurată și mai clar și sigur. Comentariile dintre (*și *)sunt utilizate în scopuri explicative și sunt ignorate de compilator. Exemple:

 MODULE Vererbung1;

 TYPE (* Typendefinitionen *)

    GraphischesObjekt* = POINTER TO ABSTRACT RECORD farbe*: INTEGER; END;
    Punkt* = POINTER TO RECORD (GraphischesObjekt) x*, y*: INTEGER; END;
    Linie* = POINTER TO RECORD (GraphischesObjekt) xStart*, yStart*, xEnde*, yEnde*: INTEGER; END;

 VAR (* Variablendefinitionen *)

    punkt1: Punkt;
    linie1: Linie;

 PROCEDURE (g: GraphischesObjekt) Zeichne* (), NEW, EXTENSIBLE;
 BEGIN
    (* Leere, erweiterbare Methode *)
 END Zeichne;

 PROCEDURE (punkt: Punkt) Zeichne* ();
 BEGIN
    (* ... *)
 END Zeichne;

 PROCEDURE (linie: Linie) Zeichne* ();
 BEGIN
    (* ... *)
 END Zeichne;

 BEGIN

    NEW (punkt1);
    punkt1.farbe := 0FFH; (* Objektfarbe wird auf 0FF ("H" für hexadezimal) gesetzt *)
    punkt1.x := 1;
    punkt1.y := 1;
    punkt1.Zeichne ();

    NEW (linie1);
    linie1.farbe := 07FH; (* Objektfarbe wird auf 07F ("H" für hexadezimal) gesetzt *)
    linie1.xStart := 1;
    linie1.yStart := 1;
    linie1.xEnde  := 2;
    linie1.yEnde  := 2;
    linie1.Zeichne ();

 END Vererbung1.

Atributele care au doar acces la citire pot fi modificate folosind proceduri (metode) specifice tipului. Exportul identificatorilor corespunzători, care pot fi citiți doar în afara modulelor proprii ale obiectului, nu este indicat de *, ci de -. Exemplu:

 MODULE Vererbung2;

 TYPE

    Objekt* = POINTER TO RECORD x-: INTEGER; END; (* Kommentar: außerhalb des Moduls "Vererbung2" ist kein direkter Schreibzugriff auf das Attribut "x" möglich *)

 PROCEDURE (objekt: Objekt) setzeX* (wert: INTEGER), NEW; (* Kommentar: für den indirekten Schreibzugriff auf das Attribut "x" *)
 BEGIN
    objekt.x := wert;
 END setzeX;

 END Vererbung2.
 MODULE AnderesModul;

 IMPORT Vererbung2;

 VAR

    objekt1: Vererbung2.Objekt;
    int: INTEGER;

 BEGIN

    NEW (objekt1);
    objekt1.setzeX (1); (* Kommentar: die Anweisung "objekt1.x := 1" ist außerhalb des Moduls "Vererbung2" nicht möglich *)
    int := objekt1.x;  (* Kommentar: direkter Lesezugriff auf das Attribut ""x ist möglich *)

 END AnderesModul.

literatură

  • Karlheinz Hug: module, clase, contracte. Un manual despre construcția de software orientat pe componente cu Component Pascal . Compania Editura Vieweg, 2001
  • J. Stanley Warford: Noțiuni fundamentale de calcul - Teoria și practica proiectării software cu Generatorul de componente BlackBox . Vieweg, 2002
  • Markus Bautsch: Cicluri de crize software . În: ENISA Quarterly on Secure Software (PDF; 2 MB)

Link-uri web