Klaus D. Günther GMD - Institut für Sichere Telekooperation 1.

21
Klaus D. Günther GMD - Institut für Sichere Telekooperation http://www.sit .fraunhofer.de/Lava 1

Transcript of Klaus D. Günther GMD - Institut für Sichere Telekooperation 1.

Page 1: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

Klaus D. Günther

GMD - Institut für Sichere Telekooperation

http://www.sit .fraunhofer.de/Lava

1

Page 2: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

Ausgangslage

Die Nachfrage nach neuer Software wächst beständig.

Existierende Software veraltet immer schneller und mussdann an neue Anforderungen angepasst werden.

Greencard und Verstärkung der Informatiker-Ausbildungreichen nicht, um den wachsenden Software-Engpasserfolgreich zu beheben.

Das Programmieren selbst muss entscheidend vereinfachtund beschleunigt werden.

2Klaus D. Günther, GMD-SIT

Page 3: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

Klaus D. Günther, GMD-SIT 3

Rapid Application Developmentmit Fertig-Bauteilen

Wir können uns auf die Dauer nicht mit den gegenwärtigpopulären Programmiersprachen, wie C++, Java,VisualBasic, oder C# zufriedengeben.

Wir brauchen neue RAD-Sprachen und RAD-Programmier-umgebungen, die das Programmieren• wesentlich vereinfachen und beschleunigen,• weniger fehleranfällig machen,• Programme in übersichtlicher Weise aus kleinen, für sich verstehbaren Funktionen, aus anpassbaren Klassen und Entwurfsmustern und aus gebrauchsfertigen Software- Komponenten zusammmensetzen.

Page 4: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

4Klaus D. Günther, GMD-SIT

Syntaktische Fertigbauteile in Lava

Verfeinerbare Skelette ausführbarer Anweisungen undAusdrücke („Metaprogrammierung“).

Verschachtelte Deklarationen in auf- und zuklappbarerBaumdarstellung, ein Popup-Formular pro Deklaration.

Top-Deklarationen „oben/außen“, Hilfsdeklarationen„unten/innen“.

Drag-and-Drop, Cut/Copy/Paste werden nicht mehr aufText, sondern auf sinnvolle strukturelle Einheiten angewandt.

Page 5: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

5Klaus D. Günther, GMD-SIT

Konsequenzen der syntaktischenFertigbauweise

Der Lava-Programmierer wird von dem fehlerträchtigenKampf mit der komplexen Syntax rein textuellerProgrammiersprachen befreit.

Texteditoren werden vollständig durch Struktureditorenabgelöst.

Lego-artige Komposition und Restrukturierung vonProgrammen auf Struktur- statt auf Textebene.

Lava ist eine kompakte Sprache, die auf einem Minimumorthogonaler Konzepte basiert und dadurch leicht zu lernen ist.

Page 6: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

6Klaus D. Günther, GMD-SIT

Anpassbare Fertigbauteile auf Klassen-Ebene

Klare Aufteilung von Klassen nach dem Black-Box-Prinzipin ein öffentliches Interface und eine private Implementation:

Ein großer Vorteil von Modula2 und Ada wird so für dieobjektorientierte Programmierung wiedergewonnen.

Mehrfachvererbung für Interfaces erlaubt Zerlegungkomplexer Anwendungen in kleine Funktionsgruppen, die(anders als in Java) getrennt implementiert werden können.

Spezialisierung abgeleiteter Klassen durch Überschreibenvon Funktionen, Member-Variablen und Typ-Parametern(s.u.) wird durch speziellen Override-View leicht gemacht.

Page 7: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

7Klaus D. Günther, GMD-SIT

Anpassbare Fertigbauteile auf Pattern-Ebene

Klassen und Packages können Typ-Parameter haben:Virtual Types (VTs).

Ableitungs- und (Mehrfach-)Vererbungsbegriff auch fürsolche parametrisierten Packages.

Diese sind bestens geeignet, wiederverwendbare,spezialisierbare Design Patterns als Familien aufeinanderbezugnehmender Klassen darzustellen.

Page 8: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

8Klaus D. Günther, GMD-SIT

Fortsetzung Pattern-Ebene

Override-View auch für Design Patterns.

„Type-Casts“ nach (abschreckendem!) C++ - und Java - Muster sind in Lava dank den Lava-VTs nicht mehr nötig.

Lava unterstützt sogar „virtuelle Basisklassen“ (VT alsBasisklasse), wodurch besondere Abstraktionsmöglichkeiten eröffnet werden (etwa im Sinne des „Decorator Pattern“).

Lava behält den klassischen Begriff von Typverträglichkeitals Normalfall bei, erlaubt aber auch, Variablen mit derschwächeren Subtyp-Verträglichkeit zu deklarieren.

Page 9: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

9Klaus D. Günther, GMD-SIT

Fertigbauteile auf Komponenten-Ebene

Der Lava-Komponentenbegriff orientiert sich am Microsoft Component Object Model (COM)

(das CORBA Component Model (CCM) ist ähnlich):

Sprachunabhängige, gebrauchsfertige Komponenten,in denen Komponentenobjekte mit weltweit eindeutigerID („CLSID“) kreiert werden können, die ihrerseits mehrereInterfaces mit weltweit eindeutiger Interface-ID („UUID“)haben können, zwischen denen „navigiert“ werden kann.

Unterstützung enger Komponenten-Integration:„Compound Documents“, „In-Place-Activation“,„Menu-Merging“, „Drag-and-Drop“, ...

Page 10: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

10Klaus D. Günther, GMD-SIT

Fortsetzung Komponenten-Ebene

Typsichere Lava-Spracheinbettung:

Kreieren neuer Komponenten-Objekte mit dem normalenLava-Objektkreations-Konstrukt „new“,

Ankoppeln schon laufender Komponenten-Objekte mitdem Lava-„attach“-Konstrukt.

Event Notification wahlweise durch serverbestimmteCallbacks (COM: Connection Points, CCM: Receptacles)

oder durch Lava-Callbacks, die auch Client-Data unter-stützen und durch die Ausnutzung von Lava-VTsecht objektorientiert und typsicher sind.

Page 11: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

11Klaus D. Günther, GMD-SIT

Lava in der objektorientierten Analyse

Lava bietet sich auch schon für die objektorientierteAnalyse an (wo man heutzutage oft UML-Use-Casesund UML-Klassendiagramme benutzt),

da es das inkrementelle Vervollständigen von Klassenmit Attributen, Methoden, Methoden-Parametern

und das Umordnen und Umbenennen von Deklarationendurch automatische Folge-Updates sehr leicht macht.

Philosophie: Lava als durchgängige Primärsprache vonder Analyse bis zu Implementation, automatischesGenerieren sekundärer Diagrammdarstellungen bei Bedarf.

Page 12: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

12Klaus D. Günther, GMD-SIT

Lava im objektorientierten Entwurf

Für den objektorientierten Entwurf ist Lava durchdie eingebaute Unterstützung von Design Patterns(mit parametrisierten Klassen und Packages, Ableitungs-und Vererbungsbegriff für Packages) in besondererWeise geeignet.

Darüberhinaus bietet sich an, die Schachtelung vonPackages zu benutzen, um ganze „Pattern Languages“in Lava darzustellen.

Page 13: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

13Klaus D. Günther, GMD-SIT

Übersicht: Automatismen in Lava

Automatische Anpassung aller Referenzen nachUmbenennung/Umordnung von Deklarationen undnach Änderung von Formalparameter-Listen.

Insbesondere automatische Konsistenz von Interfaceund Implementation, automatische Erzeugung einesImplementations-Skeletts für Funktionen/Konstruktoren.

Automatischer Korrektheits-Check mit sofortigenFehlermeldungen nach jedem (Struktur-)Edit-Schritt.

Automatisierte Unterstützung von Overrides.

Page 14: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

14Klaus D. Günther, GMD-SIT

Fortsetzung: Automatismen in Lava

Automatisiertes Generieren von Combo-Boxen zurAuswahl erlaubter Referenzen.

Automatische Erzeugung einer anpassbaren Default-Formulardarstellung zu einem Lava-Interface,dauerhafte Konsistenz von Interface und Formular.

Automatisierte, transparente Daten-Persistenz.

Automatische Erzeugung einer verlinkten HTML-Darstellung eines Lava-Programms.

Page 15: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

15Klaus D. Günther, GMD-SIT

Datenbanken und Transaktionen in Lava

Eingebaute Query-Ausdrucksmittel (Quantoren foreachund exists, logische Konjunktionen, select-Ausdruck)machen „embedded SQL“ überflüssig.

Rein deklarative Ausdrucksmittel für Multi-Threading,Synchronisation und Transaktionen.

Datenbanken werden wie persistente Komponenten-Objekte mit dem attach-Konstrukt an die Anwendungangekoppelt und wie transiente Lava-Objektehandhabbar gemacht.

Page 16: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

16Klaus D. Günther, GMD-SIT

„Experimentelle“ neue Lava-Features,die zu einem höheren Grad von „strukturierter

Programmierung“ führen sollen

„Single-Assignment“: Nur eine Wertzuweisung an eineVariable in jedem Programmzweig.

Als Konsequenz gibt es in Lava keine herkömmlichensequentiellen Schleifen mehr.

Stattdessen Quantoren und (vorzugsweise „kleine“)rekursive Funktionen.

Vereinfachung des Datenflusses („von oben nachunten“), ähnlich wie das GOTO-Verbot den Kontrollflussübersichtlicher gemacht hat.

Page 17: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

17Klaus D. Günther, GMD-SIT

Fortsetzung „Experimentelle Lava-Features“

Zwei Objekt-Kategorien: Variable Zustands-Objekte(z.B. „Bankkonto“) und nach Fertigstellung „versiegelte“konstante Werte-Objekte (z.B. „Überweisungsauftrag“).

Die unterschiedlichen Rollen von Objekten werdenschon in ihrer Deklaration sichtbar gemacht. Die Methodenvon Zustands-Objekten werden im typischen Fall unterTransaktions-Schutz ablaufen.

Zugleich strengere Objekt-Initialisierungs-Disziplin: Allenicht-optionalen Member-Variablen müssen explizit ineinem Klassen-„Initializer“ initialisiert werden.

Page 18: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

18Klaus D. Günther, GMD-SIT

Fortsetzung „Experimentelle Lava-Features“

Funktionen haben Input- und Output-Parameter.

Einem Input-Parameter darf in der Funktion kein Wertzugewiesen werden, einem (nicht-optionalen) Output-Parameter muss in jedem Funktions-Zweig ein Wertzugewiesen werden.

Eine nicht als „constant“ deklarierte Funktion darf nichtmit einem versiegelten Werte-Objekt aufgerufen werden.

Eine „constant“ deklarierte Funktion darf keinem Memberihres „self“-Objekts einen neuen Wert zuweisen.

Page 19: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

19Klaus D. Günther, GMD-SIT

Fortsetzung „Experimentelle Lava-Features“

Member-Variablen von Lava-Klassen können „constituents“,„acquaintances“ oder „Rückwärts-Links“ darstellen.

Dadurch werden sinnvolle eingebaute Kopier- undVergleichsoperationen in Lava ermöglicht, bei denen„constituents“ in die Kopier/Vergleichsoperation einbezogenwerden, während „acquaintances“ nur als Pointer kopiert/verglichen werden.

Die Lava-Speicherverwaltung basiert auf Referenz-Zählernund vermeidet dadurch die „Garbage-Collection-Bursts“von Java.

Page 20: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

20Klaus D. Günther, GMD-SIT

Ausblick

Da Lava-Programme direkt als AST (Abstract Syntax Tree)erzeugt, gespeichert und interpretiert werden, ist dieOpen-Source-Lava-Software besonders geeignetfür Experimente mit

• Programm-Analyse und -Synthese, insbesondere

• Generative und Aspektorientierte Programmierung,

• Programmtransformations-Techniken,

• Restrukturierung/Refactoring von Programmen.

Attraktive Spielwiese für alle an diesen FragenInteressierten Forscher!

Page 21: Klaus D. Günther GMD - Institut für Sichere Telekooperation  1.

21Klaus D. Günther, GMD-SIT

Ausblick

Insbesondere legt die Struktureditor-Technik es nahe,ein- und ausblendbaren bedingten Programmcode zuunterstützen

• für die Bildung von Programm-Varianten, Software-Familien, Produktlinien,

(mit Steuerung durch externe Parameter)

• für das inkrementelle Hinzufügen von ausführbaremCode beim Override von Methoden.