Schnelles Prototyping (Rapid Application Development, RAD)



Ähnliche Dokumente
12) Generische Datenstrukturen

Generische Datenstrukturen

12) Generische Datenstrukturen

Software Engineering Klassendiagramme Assoziationen

Gebundene Typparameter

Java Kurs für Anfänger Einheit 5 Methoden

Grundbegriffe der Informatik

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Algorithmen und Programmieren II Einführung in Python

Algorithmen und Datenstrukturen

2. Programmierung in C

Algorithmen mit Python

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Java Einführung Collections

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Version 0.3. Installation von MinGW und Eclipse CDT

Grundlagen von Python

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Einführung in die Java- Programmierung

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

AK Medientechnologien 05 Delegation

Programmierung I Einführung in Python, Beyond the Basics

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Beispiel 19. December 4, 2009

Programmieren Tutorium

Tutorium Rechnerorganisation

Felder. November 5, 2014

Installation und Inbetriebnahme von Microsoft Visual C Express

Innere Klassen in Java

Programmierkurs Java

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Java: Vererbung. Teil 3: super()

Übungsblatt 3: Algorithmen in Java & Grammatiken

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Objektorientierte Programmierung

Javakurs zu Informatik I. Henning Heitkötter

Software Engineering Klassendiagramme Einführung

Java Generics & Collections

Objektorientierte Programmierung

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Python SVN-Revision 12

Einführung in die Programmierung

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Bedingungen. Bedingungen. Bedingungen

C++ mit Eclipse & GCC unter Windows

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Übungen zur Softwaretechnik

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Objektorientierte Programmierung. Kapitel 12: Interfaces

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Java Einführung Packages

Einführung in die Informatik Tools

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Lua. June 9, Marcus Brenscheidt Marcin Golkowski ( Dynamische Programmiersprachen Lua )

Zählen von Objekten einer bestimmten Klasse

Vorkurs C++ Programmierung

Prinzipien Objektorientierter Programmierung

Wir sind eine altmodische Bank: Das Steuergeld fliesst von uns zum Staat, nicht umgekehrt.

Programmieren mit Python in der Sek. 1

Einführung in die Java- Programmierung

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Dokumentation für das Spiel Pong

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Software Engineering Interaktionsdiagramme

Einführung in die Programmierung

U08 Entwurfsmuster (II)

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Howto. Einrichten des TREX Monitoring mit SAP Solution Manager Diagnostics

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

SS Björn Berezowski B.Sc. Marco Münch B.Sc. Michael Roth B.Sc. Repetitorium PG 1. Übungsblatt. 1 Übung - Probeklausur SS 2010 Typ Prof.

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Teil II) Objektorientierte Implementierung 10) Verfeinern von UML-Assoziationen mit dem Java-2 Collection Framework

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Zahlensysteme: Oktal- und Hexadezimalsystem

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Einführung in die C++ Programmierung für Ingenieure

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Fax einrichten auf Windows XP-PC

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

15 Optimales Kodieren

Herzlich willkommen zur Kurzvorlesung: Die häufigsten Fehlerquellen bei der Erstellung von Webapplikationen. Udo H. Kalinna. Nürnberg, den

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Scala kann auch faul sein

Objektorientierte Programmierung

Generatives Programmieren

WhiteStarUML Tutorial

Transkript:

Schnelles Prototyping (Rapid Application Development, RAD) Prof. Dr. rer. nat. habil. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Softwaretechnologie, Prof. Uwe Aßmann

2 Trends in der Softwareentwicklung Rapid Application Development (RAD) Schneller viel Code schreiben Sehr schnell ein UML-Modell in ausführbaren Code übersetzen Mit Skriptsprachen Perl (Larry Wall etc, www.perl.org) Python (Guido van Rossum, www.python.org) Pike (Frederik Hübinette et al., pike.ida.liu.se) Eigenschaften Oft schwach oder ungetypt (Strings und integer werden unterschieden) Interaktive Umgebungen JIT compiler, die implizit gestartet werden Gute Mustererkennung (string pattern machting) und Stringverarbeitung Mächtige Operationen, die schnell zu schreiben sind Grosse Bibliotheken erhältlich Zeit pike Java Java.5 Zuverlässigkeit Prof. U. Aßmann, Softwaretechnologie 2

Transformation auf Behälterklassen in Java (Wdh.) Ersetzen von * -Assoziationen durch Behälterklassen Bestellung Bestellung kunde: String kunde: String + neueposition(b: Bestellposition) + löscheposition(pos int) +sonderpreis(pos: int, preis: int) + auftragssumme(): int + print() + neueposition(b: Bestellposition) + löscheposition(pos int) +sonderpreis(pos: int, preis: int) + auftragssumme(): int + print() {ordered} {ordered} * Bestellposition Bestellposition <<interface>> Collection anzahl: String preis: int + einzelpreis(): int + einzelpreis(p: int) + positionspreis(): int anzahl: String preis: int + einzelpreis(): int + einzelpreis(p: int) + positionspreis(): int * für * für * Artikel Artikel name: String preis: int name: String preis: int + preis(): int + preis(): int Prof. U. Aßmann, Softwaretechnologie 3

Abbildung von UML-Assoziationen in der Skriptsprache Pike Ersetzen von * -Assoziationen durch Behälterklassen Bestellung kunde: String + neueposition(b: Bestellposition) + löscheposition(pos int) +sonderpreis(pos: int, preis: int) + auftragssumme(): int + print() Bestellung kunde: String + neueposition(b: Bestellposition) + löscheposition(pos int) +sonderpreis(pos: int, preis: int) + auftragssumme(): int + print() {ordered} {ordered} * Bestellposition Bestellposition array multiset mapping anzahl: String preis: int + einzelpreis(): int + einzelpreis(p: int) + positionspreis(): int anzahl: String preis: int + einzelpreis(): int + einzelpreis(p: int) + positionspreis(): int * für * für * Artikel Artikel name: String preis: int name: String preis: int + preis(): int + preis(): int Prof. U. Aßmann, Softwaretechnologie 4

Generische Datentypen in Pike Pike kennt generische Datentypen (array, multiset). Beide Collection- Datentypen können aber auch ungetypt verwendet werden (mixed) // This is pike, not Java class Bestellung { array(bestellposition) positionen; // generic array positionen2; // mixed multiset(bestellposition) positionen3; // generic multiset positionen4; // mixed } Bestellposition b = Bestellposition(); Bestellposition b2 = Bestellposition(); main() { positionen = ({b, b2}); // a typed array positionen2 = ({b, A, 3}); // a mixed array positionen3 = ([b, b2, b2]); // a typed multi-set (bag) positionen4 = ([b, b2, b2, A, A ]); // a mixed multi-set (bag) } Prof. U. Aßmann, Softwaretechnologie 5

Mehr über Arrays in Pike Mächtige Array-Operatoren, die sehr knappe Spezifikation von mächtigen Algorithmen erlauben (gut für RAD) // This is pike, not Java array empty = ({}); // mixed, empty array // An array of arrays of int array(array(int)) p = ({ ({, 3 }), ({ 2, 4, 3 }) }); array(int) a = ({, 3 }); array(int) b = ({ 2, 4, 3 }); array a_sum = a+b; // ({, 3, 2, 4, 3 }) array a_difference = a-b; // ({ }) array a_intersection = a&b;// ({ 3 }) array a_division = b/2.0; // ({ ({2,4}),({3}) }) Erzeugung von 2-d Arrays Prof. U. Aßmann, Softwaretechnologie 6

Mappings (Assoziative Arrays) als allgegenwärtige Datenstruktur Pike hat assoziative Arrays eingebaut (mappings, in Java: Map) Sehr sinnvoll, da mappings als explizit repräsentierte Funktionen in sehr vielen Anwendungen vorkommen Ein mapping ist ein array von (key, value) pairs Zufügen mit +=, Entfernen mit -= // This is pike, not Java mapping empty = ([]); // mixed, empty mapping mapping(string:int) DresdenPhoneBook = ([ Assmann : 072349879, Miller : 08784994 ]) mapping(string:int) GelsenkirchenPhoneBook = ([... ]); mapping(string:mapping(string:int)= GermanPhoneBooks = ([ Dresden : DresdenPhoneBook, Gelsenkirchen : GelsenkirchenPhoneBook,... ]) int assmann_phone = GermanPhoneBooks[ Dresden ][ Assmann ]; // Korregiere Assmanns Nummer DresdenPhoneBook -= ({ Assmann :072349879 }) GelsenkirchenPhoneBook += ({ Assmann :048889879 }) Prof. U. Aßmann, Softwaretechnologie 7

Pike hat Mehrfachvererbung Mehrfachvererbungen aus UML können direkt in Pike eingetippt werden Nationality German Francais // This is pike, not Java class Elsaesser { inherit Francais; inherit German; void eat () { // super call auf Klasse Francais Francais::mange(); }; void talk () { // super call auf Klasse German German::sprechen(); }; } Elsaesser Prof. U. Aßmann, Softwaretechnologie 8

String-Verarbeitung in Pike Die wahre Stärke zeigt das Array-Konzept bei der String-Verarbeitung Anwendungsgebiete der Stringverarbeitung: Web-Programmierung (template processing von html-schablonen) Textverarbeitung Suchanwendungen in Datenbasen Strings sind ähnlich zu Arrays Operatoren sum, intersect, division u.v.m. // This is pike string translatetowindows(string path) { array(string) directories = path / / ; return \\ +directories * \\ ; } translatetowindows( /home/ua/local/papers ); Prof. U. Aßmann, Softwaretechnologie 9

String-Verarbeitung in Pike Die map Funktion wendet eine Funktion auf alle Elemente eines arrays an Der * Operator distributiert ein Zeichen über ein Array von strings // This is pike string countpath(string path) { return (array(string)) map(path / /, sizeof) // ({ 4, 3, 5, 6 }) *, ; // 4,3,5,6 } countpath( /home/ua/local/papers ); Prof. U. Aßmann, Softwaretechnologie 0

String-Verarbeitung: Splicing Splice-Operator wendet eine Operation auf alle Elemente eines Arrays an (ähnlich zu map) // This is pike array(string) currencies = ({ Euro, Dollar, Yen, Pound }); ausgabe(4.32, @currencies); // 4.32 Euro 4.32 Dollar 4.32 Yen 4.32 Pound ausgabe(4.32, Euro, Dollar, Yen, Pound ); // the same output array(float) exchangerates = ({.32,, 4,.6 }); int money = 33; float calc (float rate, int i) { return i*rate; } array(float) moneys = map(exchangerates, calc, money); // accumulate moneys by + operator float int sum = +(0,@moneys); Prof. U. Aßmann, Softwaretechnologie

Vorteil von Pike: Skalisierbare Typisierung Man kann einen Pike Prototyp ohne Typisierung beginnen und die Typen später hinzufügen Um die Programmiersicherheit zu erhöhen Um die Effizienz zu erhöhen Ausserdem kann man Java aufrufen und schrittweise die Anwendung in Java umwandeln Das ist einmalig für eine Skriptsprache und hervorragend für RAD Untypisierter Pike Prototyp Typisierter Pike Prototyp Prof. U. Aßmann, Softwaretechnologie 2

Abbildungsschritte Der Platz von Skriptsprachen ist in der schnellen Prototypentwicklung Pike kann zum Prototyping (RAD) verwendet werden Einfache :-Übersetzung von UML-Assoziationen und Mehrfachvererbung Falls nicht schnell genug, bilde man das UML-Modell schrittweise auf Java ab. Das ist aufwendiger, bringt aber mehr Effizienz und stärkere Typsicherheit. Es ist sogar möglich, vom untypisierten Analysemodell aus zu beginnen Analysemodell in UML Entwurfsmodell in UML Untypisierter Pike Prototyp Typisierter Pike Prototyp Java Produkt Prof. U. Aßmann, Softwaretechnologie 3

Vergleich von Skriptsprachen: Pike vs Perl vs Python Pike hat einen Übersetzer, der schnellen Code erzeugt. Pike ist die momentan schnellste Skriptsprache (pike.ida.liu.se) Skalierbare Typisierung Ideal zur Abbildung von UML-Modellen Python ist voll typisiert, hat aber keine Mehrfachvererbung Schwierige Transformation von UML-Diagrammen Perl hat Mehrfachvererbung, ist aber untypisiert Gute Musterverarbeitung für Strings Grosse Bibliothek Prof. U. Aßmann, Softwaretechnologie 4

Andere Vorteile Einfache Programmierung von GUI durch guten Anschluss von GTK (Gnu Widget TookKit), analog zu AWT/Swing Gute Unterstützung von XML Java kann aus Pike aufgerufen werden Interaktive Umgebung hilfe Einfache Installation auf Windows und Linux Gute Vorbereitung für Web-Programmierung Roxen-Webserver in Pike programmiert Aktive open-source community, die auf Fragen reagiert: probieren Sie es aus! Prof. U. Aßmann, Softwaretechnologie 5

End Prof. U. Aßmann, Softwaretechnologie 6