Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus.

Slides:



Advertisements
Ähnliche Präsentationen
Entwurf, Implementierung und Integration eines C# Struktureditors
Advertisements

Vortrag Code-Dokumentation
C Sharp (C#) Martin Saternus Senior Student Partner
Visual C# Programmieren mit dem Visual Studio. Was ist C#? Programmiersprache von Microsoft Einfach zu erlernen Vielfältige Möglichkeiten Basierend auf.NET.
Harald Köbler Software Design Patterns Prototype.
Objektorientierte Datenbanken
Das „Vorgehensmodell“
Kapitel 4 Datenstrukturen
Design Patterns- Entwurfsmuster
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Was ist Refactoring? Bevor man die Integration angeht, mag es angebracht sein, den.
es gibt (fast) nichts, was nicht anders gemacht werden könnte
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Grundlagen der Sprache
DOM (Document Object Model)
Komponentenbasierter Taschenrechner mit CORBA
Sebastian Grahn Sebastian Kühn
Programmieren mit JAVA Teil V. Grafikausgabe mit JAVA, das AWT Java wurde von Anfang an mit dem Anspruch entwickelt, ein vielseitiges, aber einfach zu.
Grundlegende Analysen & Zwischendarstellungen
Rigi und Web2Rsf vorgestellt von Tobias Weigand. Inhalt Ziel von Web2Rsf und Rigi Vorstellung des Parsers Web2Rsf Vorstellung des Werkzeugs Rigi Analyse.
Introducing the .NET Framework
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Mono und andere freie.NET Implementierungen. Implementierungen Microsoft.NET Framework Win32, Win64? Microsoft.NET Compact Framework WinCE (Mobile, Phone)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Software Design Patterns Extreme Programming (XP).
Command Pattern Karola Schäuble,
Abstrakte Klassen, Interface
DVG Klassen und Objekte
Erweiterung von Eclipse als Entwicklungs-Plattform aus Sicht des Eclipse-Boardmitgliedes TogetherSoft Together auf Basis von Eclipse.
Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses
Zurück zur ersten Seite SEP Entwurf und Implementierung einer effizienten Rechenstruktur zur Baumdarstellung mittels Java-Texteditoren Betreuer : Matthias.
1 Dienstbeschreibung mit DAML Ein graphischer Editor für DAML - Ting Zheng Betreuer: Michael Klein, Philipp Obreiter.
FH-Hof Java2D - Grundlagen Richard Göbel. FH-Hof Java2D - Funktionen Java2D unterstützt: das Zeichnen von Grafiken die Darstellung von Texten die Darstellung.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Entwurf und Realisierung einer digitalen Bibliothek zur Verwaltung von Notenhandschriften Dipl.-Ing. Temenushka Ignatova Datenbank- und Informationssysteme,
n Produktfamilie VisiWinNET
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Simple Programmierung
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 14: Schrittweise.
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
Einfache Automaten mit Lego Mindstorms praktisch umsetzen
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 12 Folie 2 Web Services (1)
Entstehung & Einflüsse Ideen, Wünsche, eigene Überlegungen bisheriges Dateisystem Einschrän- kungen: - technisch - zeitlich - fachlich Literatur, ältere.
Entwicklung der Programmiersprachen
Cooperation unlimited © Zühlke Juni 2009 Hansjörg Scherer Folie 1 Cooperation unlimited TFS als BackEnd für Visual Studio und Eclipse.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
CGI (Common Gateway Interface)
Wasserfallmodell und Einzelbegriffe
Tutorium PG Verbesserung Blatt 5 Beim instanziieren eines Fahrrades muss es möglich sein, alle benötigten Attribute dem Konstruktor zu übergeben.
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Enterprise Achitect (Sparx Systems) Marius Rudolf
Visionaire - Adventure Game Engine Tipps und Konzepte zur Entwicklung eines Spiele Editors Alex Hartmann.
Programmieren ... in C++ Prof. Dr.-Ing. Franz-Josef Behr, HfT Stuttgart Programmeiren I.
TDD mit MSTest Stefan Lieser
Stefan Lieser Web:
WIR LÖSEN DAS PROBLEM FÜR SIE
Parallele Programmierung im.NET Framework Darmstadt, Präsentation am Beispiel von C-Sharp (C#)  Wichtige Grundlagen  Generika, Delegate, Lambda,
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Objektorientierte Programmierung (OOP)
, Claudia Böhm robotron*SAB Anwendungsentwicklung mit dem Java und XML basierten Framework robotron*eXForms Simple Application Builder.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
Seminar Softwareproduktlinien Domänenspezifische Sprachen Sascha Draffehn von.
Das Entwurfsmuster Model-View-Controller
 Präsentation transkript:

Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Libra als Framework......für Code Repräsentierung operiert mit Abstrakten Syntax-Bäumen interne Darstellung: Hierarchien von Blöcken while < ++ a AnweisungenBedingung a10 while (a < 10) { a++; }

Libra als Forschung Suche nach bereits existierenden Ansätzen Idee existiert bereits seit 1970: syntax-gesteuerter Code Editor Bisher existierende Lösungen unpraktisch Idee aber dennoch richtig: Intentional Programming

Libra als Experiment Spielwiese zum Ausprobieren Suche nach einer bequemeren Code Darstellung Analyse von Benutzbarkeit existierender Entwicklungsumgebungen

Projektverlauf Teilprojekte: 1.Canvas.dll (grafische Bibliothek) 2.LibraCore.dll (Definition von Blöcken) 3.LibraClient.exe (Test-Umgebung für C# Code) 4.XmlEditor.exe (Test-Umgebung für XML) Heute: Vier Projekte in C#.NET (Visual Studio 2005 Beta 2) C# Code Zeilen 180 Klassen und Schnittstellen

Canvas.dll Status: fast fertig implementiert stellt ein.NET UserControl DrawWindow zur Verfügung, womit man schnell und unabhängig von einer konkreten Grafikbibliothek zeichnen kann

DrawWindow Eigenschaften gepuffert (double-buffering) verwendet intern wahlweise GDI oder GDI+ (Benutzung von OpenGL und DirectX später auch möglich: flexible Schnittstelle IRenderer ) erweiterbare Scrollbar auf Basis von Shapes Es fehlen noch die Funktionen zum Arbeiten mit Bitmaps.

Canvas Shapes Canvas.dll stellt auch Shape Funktionalität zur Verfügung: Basisklassen für visuelle Objekte, die auf DrawWindow gezeichnet werden können

LibraCore.dll stellt Klassen zur Verfügung, mit welchen man Blockhierachien modellieren kann zu jeder Blockhierarchie existiert ein RootBlock, der als Repräsentant für die gesamte Hierarchie dient beinhaltet CodeWindow, welches beliebige modellierte Blockhierarchien, mittels DrawWindow, visualisieren kann

CodeWindow

Klassenhierarchie

IBlock unterstützt elementare Operationen auf Blöcken Beispiele: AcceptVisitor(IVisitor v) Parent, Root und Draw() AbstractBlock ist die Standardimplementierung, von der alle weiteren Blöcke in Libra erben AbstractContainerBlock ist die Standardbasisklasse für alle Blöcke die Kinder enthalten können (z.B. NamespaceBlock) Basisschnittstelle IBlock

Entwurfsmuster: Visitor um die Funktionalitäten kapseln zu können und schnell und übersichtlich neue hinzuzufügen, haben wir uns für dieses Entwurfsmuster entschieden durch Visitoren kann man neue Funktionalitäten, wie z.B. das Kompilieren oder die statische Analyse, hinzufügen ohne an der Klassenhierarchie etwas ändern zu müssen streng typisierte Softwarearchitektur, so ist kein Casting nötig, alles zur Kompilierungszeit bekannt Beispiele: DrawVisitor, LayoutVisitor und XMLGeneratingVisitor

Editieren von Blockhierarchien

ActionManager IAction stellt eine Transaktion auf Blöcken dar der ActionManager verwaltet Objekte vom Typ IAction, er speichert diese chronologisch und stellt so eine sehr flexible und einfach zu nutzende Basis für Undo/Redo zur Verfügung alle Transaktionen auf Blöcken werden durch Actions, wie z.B. AddBlocksAction und RemoveBlockAction gekapselt (ausgelagert), und somit können wir neue Transaktionen hinzufügen ohne an den Basisklassen von LibraCore etwas ändern zu müssen

Entwurfsmuster: Composite durch dieses Entwurfsmuster lassen sich sich sehr komplexe Transaktionen als einfaches IAction auffassen somit bleibt die komplexität vor dem späteren Verwender von LibraCore verborgen dieses Entwurfsmuster wird auch bei den Block-Klassen verwendet (AbstractContainerBlock)

Anwendungbeispiele Libra ist als Framework für Quelltexteditoren aller Art gedacht (fast) jede Programmiersprache lässt sich als eine (Libra-) Blockhierarchie modellieren Zum Experimentieren und als Präsentationsbeispiel implementieren wir parallel die Unterstützung für zwei Sprachen: C# und XML

Wie gehts weiter? Mit C# und XML Testprojekten muss noch experimentiert werden, um die notwendige Funktionalität zu gewährleisten (z.B. Benutzbarkeit, Arbeit mit Tastatur und Maus, Navigation, Selektierung, Drag & Drop, etc.). Erst nachdem die Testbeispiele zufriedenstellend laufen, werden die jeweiligen Hierarchien um fehlende Blöcke ergänzt. So wird sichergestellt, dass die meiste Arbeit vor dem Losprogrammieren passiert – so erleichtert man sich die Aufgabe, Hierarchien am Ende zu ergänzen. Idealerweise kann der C# Quellcode für die fehlenden Blöcke eventuell automatisch nach der vorgegebenen Grammatik erzeugt werden. Als Super-Aufgabe (für viele Jahre) könnte man sich die automatisierte Generierung von Libra-basierten Editoren für beliebige Programmiersprachen vorstellen, wenn die Grammatik vorgegeben ist.

Aber das ist noch nicht alles... Blöckenhierarchie alleine reicht nicht, um einen guten Editor zu bauen. Man braucht noch: Name resolution system, Typ-Informationen Integration mit modernen Entwicklungsumgebungen Compiler, Debugger, statische Analyse und vieles mehr Das ganze ist natürlich extrem aufwendig, aber... machbar! Das Wesentliche ist der neue Ansatz, neue Art und Weise mit Code zu arbeiten. Gerade dies soll Libra-Framework demonstrieren.

expect Libra Beta coming soon...