Wiederverwendung von Software

Größe: px
Ab Seite anzeigen:

Download "Wiederverwendung von Software"

Transkript

1 Lehrstuhl Praktische Informatik Wiederverwendung von Software Dennis Reuling

2 Lehrstuhl Praktische Informatik WIEDERVERWENDUNG Wiederverwendung von Software 2

3 Grundidee Produkte möglichst weitgehend aus vorhandenen / vorgefertigten Standard- Komponenten konstruieren Vorteile: Kostensenkung, weniger Neuentwicklung Erhöhung der Qualität Keine neue Idee, passiert tausendfach: Benutzung von Bibliotheken Muster,... Wiederverwendung von Software 3

4 WV vs Regeln/Erfahrung Nach Größe der Artefakte sortiert: 1. Programmstrukturen, Konzepte der Programmiersprache 2. Entwurfsmuster, Analysemuster 3. Architekturmuster 4. Standardarchitekturen Sind Gestaltungsregeln, d.h. keine Komponenten, die man i.w. unverändert einbaut überlappt thematisch mit Wiederverwendung Wiederverwendung von Software 4

5 WV vs Arbeitsteilung (1) Fremdherstellung von Komponenten ist in klassischen Industrien üblich: ggf. eigenes, umfangreiches Know-How (Domänenwissen) erforderlich, das nicht zu den Kernkompetenzen des Anbieters gehört Ausnutzung von Skaleneffekten bei kleinen Produktionsmengen Wiederverwendung von Software 5

6 WV vs Arbeitsteilung (2) Allgemeines Prinzip der industriellen Arbeitsteilung: spezialisierte Marktteilnehmer geringe Fertigungstiefe Konzentration auf Kernkompetenzen Wichtig: nicht zu viele Modelle, Normen Keine offene Spezifikationen Wiederverwendung von Software 6

7 WV vs Arbeitsteilung (3) Besonderheiten in der Informatik: Größe der Produktionsmengen irrelevant für SW- Produkte Versteckte technologische Arbeitsteilung durch Benutzung von: Netzwerkprotokollen mathematische Bibliotheken Technologische Arbeitsteilung in der Informatik selbstverständlich Ist auch ohne Wiederverwendung sinnvoll (zugekaufte Komponenten werden nur 1* verwendet) Wiederverwendung von Software 7

8 Definition Wiederverwendung: Fälle, wo mehrere einander ähnliche Systeme in der gleichen Technologie entwickelt werden: ggf. in verschiedenen Zeiträumen insb. bei Systemen, die nicht Varianten voneinander sind, sondern unabhängig voneinander entwickelt werden sofern gleichzeitig: Entwicklung einer Systemfamilie Besonderheit: gemeinsame, wiederverwendbare Komponenten können gezielt bestimmt werden Wiederverwendung von Software 8

9 Typen Im Prinzip gibt es beliebige wiederverwendbare Typen: Anforderungen, Testfälle Quelltexte von Programmen Modul-/API-Spezifikationen Architekturen bzw. Architekturfragmente Datenbankschemata Gestaltungselemente von GUIs Dokumentation: Bedien-, Installationshandbücher, Glossare Gegebenfalls auch (zusammenhängende) Gruppen dieser Typen, z.b. GUI besteht aus Code, Manual, Schwerpunkt in der Praxis: Quelltexte, Architekturen, Modelle Wiederverwendung von Software 9

10 Arten der Wiederverwendung Ungeplant (Reaktiv/Extraktiv): Komponente wird nach ihrer Entwicklung für Wiederverwendung entdeckt Muss i.d.r. abgeändert / verbessert / nachdokumentiert werden Geplant (Proaktiv) : Komponente von vornherein zwecks Wiederverwendung entwickelt und gestaltet a) Bibliotheksfunktionen b) Teile eines konkreten Systems, die vermutlich später noch einmal verwendet werden können Wiederverwendung von Software 10

11 Lehrstuhl Praktische Informatik SOFTWARE-PRODUKTLINIEN Wiederverwendung von Software 11

12 Produktlinien als Methode A software product line is an explicit specification of commonality and variability between [product] variants in a family of similar [software] products by means of features. (Pohl et al., 2005) Wiederverwendung von Software 12

13 Development Effort Aufwand/Kosten Konventionelle Entwicklung Produktlinienentwicklung # Produkte Wiederverwendung von Software 13

14 SPLE Ziel: Entwicklung einer Produktfamilie als Produktlinie statt als einzelne Produkte Produktlinie deckt Anforderungen (Features) der ganzen Domäne ab Abweichung vom klassischen Entwicklungsprozess und Lebenszyklus, Unterscheidung in Domain Engineering Application Engineering Wiederverwendung von Software 14

15 Application Eng. Domain Eng. Übersicht Feature-Modell Wiederverwendbare Implementierungsartefakte Feature-Auswahl Generator Fertiges Program Wiederverwendung von Software 15

16 Domain Engineering [...] is the activity of collecting, organizing, and storing past experience in building systems [...] in a particular domain in the form of reusable assets [...], as well as providing an adequate means for reusing these assets (i.e., retrieval, qualification, dissemination, adaptation, assembly, and so on) when building new systems. (K. Czarnecki and U. Eisenecker) Wiederverwendung von Software 16

17 Application Engineering [ ] has the goal of developing a specific product for the needs of a particular customer.it corresponds to the process of single application development in traditional software engineering, but reuses artifacts from domain engineering where possible. [ ] is repeated for every product of the product line that is to be derived. (Apel et al.) Wiederverwendung von Software 17

18 Feature-Oriented SPLE (FOSD) Idee: Feature als ganzheitliches Abstraktionskonzept Feature als Domänen-Abstraktion im Problemraum der Anwendungsdomäne => Spezifikation von Produktkonfigurationen (Feature-Auswahl als Eingabe für die Produktkonfiguration) Feature als Implementierungskonzept im Lösungsraum der Produktlinie => Spezifikation von Produktvarianten (Feature-Auswahl als Eingabe für die Programmgenerierung) Wiederverwendung von Software 18

19 Lehrstuhl Praktische Informatik FEATURE-MODELLE Wiederverwendung von Software 19

20 Application Eng. Domain Eng. Einordnung Feature-Modell Wiederverwendbare Implementierungsartefakte Feature-Auswahl Generator Fertiges Program Wiederverwendung von Software 20

21 Übersicht (1) Feature-Modelle spezifizieren den Konfigurationsraum einer Produktlinie: Menge der konfigurierbaren Produktparameter: relevante Domain Features im Problemraum der Produktlinie Einschränkung der Kombinierbarkeit von Features in validen Produktkonfigurationen durch Abhängigkeiten zwischen Features Wiederverwendung von Software 21

22 Übersicht (2) Darstellungsformen Explizite Auflistung aller validen Konfigurationen: Konfigurationstabellen Graphisch: Entscheidungsbäume, FODA Feature-Diagramme, Orthogonal Variability Model (OVM), Mathematisch: Aussagenlogische Terme (SAT), Constraint Satisfiability Problems (CSP), Binary Decision Diagrams (BDD), Wiederverwendung von Software 22

23 FODA Feasibility Study [Kang et al., 1990] Wiederverwendung von Software 23

24 Feature-Diagramm Gruppe Feature (Cross-Tree)Constraint Wiederverwendung von Software 24

25 Feature-Hierarchie Die Feature-Hierarchie bildet einen Wurzelbaum auf der Menge der Features Das Wurzel-Feature ist per Konvention obligatorisch (engl.mandatory) und bezeichnet den Namen der Produktlinie (Konzept-Feature) Jedes einzelne Kind-Feature ist entweder obligatorisch oder optional => Abhängigkeiten zwischen Nachbar-Features durch Feature- Gruppen Wiederverwendung von Software 25

26 Feature-Gruppen Unter einem Eltern-Feature können mehrere Gruppen und Einzel-Features hängen Zwei Arten von Gruppen: Alternativ (XOR) und Oder (OR) Einzel-Features und Feature-Gruppen dürfen sich nicht überlappen Häufig auch: Mandatory-Gruppen und Optional-Gruppen Abhängigkeiten zwischen hierarchisch unkorrelierten Features durch Cross-Tree-Constraints Wiederverwendung von Software 26

27 Cross-Tree Constraints Cross-Tree Kanten können beliebig quer zur Feature-Hierarchie verlaufen Verallgemeinerung auf beliebige Cross-Tree Constraints in Form von aussagenlogischen Termen über Features Wiederverwendung von Software 27

28 Feature-Modell Editor: FeatureIDE [Leich et al., 2005] Erstellung von Feature-Diagrammen in FODA-ähnlicher Notation Semantische Analysen: Anzahl Produktkonfiguration, Anomalien, Mapping in den Lösungsraum (CPP, FOP, AOP, ) Wiederverwendung von Software 28

29 Lehrstuhl Praktische Informatik PRÄPROZESSOREN Wiederverwendung von Software 29

30 Application Eng. Domain Eng. Einordnung Feature-Modell Wiederverwendbare Implementierungsartefakte Feature-Auswahl Generator Fertiges Program Wiederverwendung von Software 30

31 Präprozessoren Präprozessoren transformieren den Quelltext vor dem eigentlichen Compileraufruf Funktionsumfang: von einfachen #include Befehlen und bedingter Übersetzung bis zu komplexen Makrosprachen und Regeln Grundlage für generische Programmierung / konfigurierbare Programme / Meta-Programmierung / Fester Bestandteil vieler Programmiersprachen C, C++, Fortran, Erlang mit eigenem Präprozessor C#, Visual Basic, D, PL/SQL, Adobe Flex Java: externe Tools Wiederverwendung von Software 31

32 Beispiel: #ifdef in Berkley DB static int rep_queue_filedone(dbenv, rep, rfp) DB_ENV *dbenv; REP *rep; rep_fileinfo_args *rfp; { #ifndef HAVE_QUEUE COMPQUIET(rep, NULL); COMPQUIET(rfp, NULL); return ( db_no_queue_am(dbenv)); #else db_pgno_t first, last; u_int32_t flags; int empty, ret, t_ret; #ifdef DIAGNOSTIC DB_MSGBUF mb; #endif // over 100 lines of additional code #endif Wiederverwendung von Software 32

33 Beispiel: Graph SPL in Java class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); if (Conf.WEIGHTED) e.weight = new Weight(); return e; Edge add(node n, Node m, Weight w) if (!Conf.WEIGHTED) throw RuntimeException(); Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = w; return e; void print() { for(int i = 0; i < ev.size(); i++) { ((Edge)ev.get(i)).print(); class Conf { public static boolean COLORED = true; public static boolean WEIGHTED = false; class Node { int id = 0; Color color = new Color(); void print() { if (Conf.COLORED) Color.setDisplayColor(color); System.out.print(id); class Edge { Node a, b; Color color = new Color(); Weight weight; Edge(Node _a, Node _b) { a = _a; b = _b; void print() { if (Conf. COLORED) Color.setDisplayColor(color); a.print(); b.print(); if (Conf.WEIGHTED) weight.print(); class Color { static void setdisplaycolor(color c) {... class Weight { void print() {... Wiederverwendung von Software 33

34 C-Präprozessor Präprozessor-Direktiven sind spezielle Instruktionen im Programm- Code, die nicht Teil des endgültigen (durch den Compiler übersetzten) Programms sind, sondern vom Präprozessor vor der Kompilierung verarbeitet (und dabei möglicherweise entfernt) werden. Der C-Präprozessor (CPP) wird vor der eigentlichen Kompilierung aufgerufen und transformiert das Programm gemäß der im Programm enthaltenen Direktiven CPP ist Teil des ANSI C Standards Für Präprozessor-Direktiven in C gilt bestehen aus Zeilen beginnend mit # gefolgt vom Namen und (optionalen) weiteren Argumenten für die Direktive dürfen sich nicht über eine Zeile hinaus erstrecken Wiederverwendung von Software 34

35 Bestandteile von CPP Der CPP umfasst vier Mechanismen Auslagern von Code und Einbinden durch Header-Files Makros zum Definieren/Verwenden und Finden/Ersetzen (Expandieren) von Namen für beliebige Code-Fragmente Bedingte Kompilierung: optionale/alternative Code- Fragmente vor der Kompilierung einblenden/ausblenden bzw. auswählen. Generische Programmierung Explizite Deklaration und Kennzeichnung von Programmzeilen, z.b. für Tracing, Debugging etc. Wiederverwendung von Software 35

36 Definition von Makros Direktive Makro-Name Fragment Expansionsstelle Expansionsstelle #define SIZE foo = (char *) xmalloc (SIZE);... #define NEWSIZE SIZE Definition von Namen für beliebige Code-Fragmente Jedes Auftreten des Namens im nachfolgenden Programmtext wird durch das Fragment ersetzt (expandiert) Fragmente können selbst wieder Makro-Namen enthalten Fragmente werden nicht interpretiert, sondern als einfache Strings kopiert Wiederverwendung von Software 36

37 Makros mit Argumenten Deklaration von Argumentnamen Vorkommen von Argumentnamen im Fragment #define min(x,y) ((X) < (Y)? (X) : (Y))... min(1,2) ((1) < (2)? (1) : (2))... min(x+42,*p) ((x+42) < (*p)? (x+42) : (*p))... min(min(a,b),c)... // => Übung Argumente können an jeder Expansionsstelle neu gesetzt werden Genau wie Fragmente sind Argumente uninterpretierte Strings Schachtelung von Makro-Expansionen und/oder Argumenten beliebig möglich Wiederverwendung von Software 37

38 Bedingte Kompilierung Markieren von Quelltextabschnitten, die beim Kompilieren unter bestimmten Bedingungen ignoriert werden, d.h. nicht in das Zielprogramm übersetzt werden Bedingungen müssen zur Kompilierzeit auswertbar sein Mögliche Bedingungen: Prüfen, ob ein Name als Makro definiert/undefiniert ist (eingeschränkte) Boole sche Ausdrücke über Makro-Namen und Konstanten Wiederverwendung von Software 38

39 #if Direktive #if expression // conditional code #endif #if SIZE < 1020 foo = (char *) xmalloc(size); #endif Der conditional code kann weitere Makros enthalten In der expression dürfen vorkommen: Literale vom Typ Integer und Character Makro-Namen Arithmetische, relationale und logische Operatoren Namen, die keine Makros sind, werden als Konstante 0 interpretiert Wiederverwendung von Software 39

40 #else Direktive #if expression #else // conditional code // alternative conditional code #endif #if SIZE < 1020 foo = (char *) xmalloc(size); #else foo = (char *) xmalloc(1020) #endif Auswahl zwischen zwei alternativen Quelltext-Abschnitten Es wird immer genau einer der beiden conditional code Abschnitte kompiliert Wiederverwendung von Software 40

41 #elif Direktive #if expression // 1. alternative conditional code #elif expression // 2. alternative conditional code #elif expression // n. alternative conditional code #else // default conditional code #endif Auswertungsreihenfolge Auswahl zwischen n alternativen Quelltextabschnitten Die expressions müssen sich nicht zwangsläufig gegenseitig ausschließen (ähnlich zu switch-case) Wiederverwendung von Software 41

42 #ifdef und #ifndef #ifdef makro-name // conditional code #endif #ifndef makro-name // conditional code #endif #ifdef SIZE foo = (char *) xmalloc(size); #endif #ifndef SIZE foo = (char *) xmalloc(1020); #endif Der conditional code wird kompiliert, wenn ein Makro-Name definiert / nicht definiert (bzw. undefiniert) ist Wiederverwendung von Software 42

43 SPL Implementierung mit CPP 1. Feature Modell erstellen Funktion zum Verdoppeln einer Ganzzahl x TWICE MAXVAL : int PLUS TIMES MAXBOUND Verdoppeln von x durch Addition mit x Verdoppeln von x durch Multiplikation mit 2 Falls der verdoppelte Wert von x größer als der Wert MAXVAL ist, dann MAXVAL zurückgeben Wiederverwendung von Software 43

44 SPL Implementierung mit CPP 2. Feature-Modell als Makro kodieren TWICE MAXVAL : int PLUS TIMES MAXBOUND Mandatory Root Feature Feature- Makros Alternativ- Gruppe #if ( defined (TWICE) && ((defined (PLUS) &&! defined (TIMES)) (defined (TIMES) &&! defined (PLUS) )) && (defined (MAXVAL)! defined (MAXBOUND) ) #define VALIDCONFIG #endif Makro gesetzt, falls Konfiguration valide Attributwert für MAXVAL gesetzt, wenn MAXBOUND gewählt Wiederverwendung von Software 44

45 SPL Implementierung mit CPP 3. Parametrisierter C-Code TWICE Nur für valide Konfigurationen wird ein Programmvariante erzeugt PLUS TIMES MAXBOUND #ifdef VALIDCONFIG int twice(int x) { int y = #ifdef PLUS x+x; #elif TIMES 2*x; #endif #endif #ifdef MAXBOUND if (y > MAXVAL) return MAXVAL; else #endif return y; MAXVAL : int Wiederverwendung von Software 45

46 SPL Implementierung mit CPP 4. Konfigurationen kodieren TWICE MAXVAL : int Beliebiger Wert PLUS TIMES MAXBOUND P1 = { TWICE, PLUS #define TWICE 1 #define PLUS 1 P2 = { TWICE, TIMES #define TWICE 1 #define TIMES 1 P3 = { TWICE, PLUS, MAXBOUND, MAXVAL=1020 #define TWICE 1 #define PLUS 1 #define MAXBOUND 1 #define MAXVAL 1020 P4 = { TWICE, TIMES, MAXBOUND, MAXVAL=1020 #define TWICE 1 #define TIMES 1 #define MAXBOUND 1 #define MAXVAL 1020 Wiederverwendung von Software 46

47 SPL Implementierung mit CPP 5. Programmvarianten twice_spl.c #ifdef VALIDCONFIG int twice(int x) { int y = #endif #ifdef PLUS x+x; #elif TIMES 2*x; + #endif #ifdef MAXBOUND if (y > MAXVAL) return MAXVAL; else #endif return y; config1.h #define TWICE 1 #define PLUS 1 config2.h #define TWICE 1 #define TIMES 1 config3.h #define TWICE 1 #define PLUS 1 #define MAXBOUND 1 #define MAXVAL 1020 config4.h #define TWICE 1 #define TIMES 1 #define MAXBOUND 1 #define MAXVAL 1020 int twice(int x) { int y = x+x; return y; int twice(int x) { int y = 2*x; return y; int twice(int x) { int y = x+x; if (y > 1020) return 1020; else return y; int twice(int x) { int y = 2*x; if (y > 1020) return 1020; else return y; Wiederverwendung von Software 47

48 Präprozessoren für Java Nicht nativ vorhanden Bedingte Kompilierung im Java-Compiler nur auf Statement-Ebene, nicht für Klassen, Methoden und Felder class Example { public static final boolean DEBUG = false; void main() { System.out.println( immer ); if (DEBUG) System.out.println( debug info ); Dead Code wird durch Java-Compiler entfernt Externe Tools vorhanden, z.b. CPP, Munge, Antenna, XVCL, Gears, pure::variants Wiederverwendung von Software 48

49 MUNGE Einfacher Präprozessor für Java Code Ursprünglich für Swing in Java 1.2 eingeführt class Example { void main() { System.out.println( immer ); /*if[debug]*/ System.out.println( debug info ); /*end[debug]*/ > java Munge DDEBUG DFEATURE2 Datei1.java Datei2.java... Zielverzeichnis Konfiguration: Feature-Auswahl aus Feature-Modell Wiederverwendung von Software 49

50 Beispiel: Graph SPL class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = new Weight(); return e; Edge add(node n, Node m, Weight w) Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = w; return e; void print() { for(int i = 0; i < ev.size(); i++) { ((Edge)ev.get(i)).print(); class Node { int id = 0; Color color = new Color(); void print() { Color.setDisplayColor(color); System.out.print(id); class Edge { Node a, b; Color color = new Color(); Weight weight; = new Weight(); Edge(Node _a, Node _b) { a = _a; b = _b; void print() { Color.setDisplayColor(color); a.print(); b.print(); weight.print(); class Color { static void setdisplaycolor(color c) {... class Weight { void print() {... Wiederverwendung von Software 50

51 Graph SPL mit MUNGE class Graph { Vector nv = new Vector(); Vector ev = new Vector(); Edge add(node n, Node m) { Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); /*if[weight]*/ e.weight = new Weight(); /*end[weight]*/ return e; /*if[weight]*/ Edge add(node n, Node m, Weight w) Edge e = new Edge(n, m); nv.add(n); nv.add(m); ev.add(e); e.weight = w; return e; /*end[weight]*/ void print() { for(int i = 0; i < ev.size(); i++) { ((Edge)ev.get(i)).print(); /*if[weight]*/ class Weight { void print() {... /*end[weight]*/ class Edge { Node a, b; /*if[color]*/ Color color = new Color(); /*end[color]*/ /*if[weight]*/ Weight weight; /*end[weight]*/ Edge(Node _a, Node _b) { a = _a; b = _b; void print() { /*if[color]*/ Color.setDisplayColor(color); /*end[color]*/ a.print(); b.print(); /*if[weight]*/ weight.print(); /*end[weight]*/ /*if[color]*/ class Color { static void setdisplaycolor(color c) {... /*end[color]*/ class Node { int id = 0; /*if[color]*/ Color color = new Color(); /*end[color]*/ void print() { /*if[color]*/ Color.setDisplayColor(color); /*end[color]*/ System.out.print(id); Wiederverwendung von Software 51

52 Antenna Präprozessor-Direktive #ifdef wie in cpp Sammlung von Ant-Tasks für Java ME In vielen Java ME Projekten eingesetzt Bedingte Kompilierung objektorienter Programm- Elemente in Java Klassen und Interfaces Methoden und Member- Variablen Klassenvariablen und statische Methoden Statements Wiederverwendung von Software 52

53 Antenna - Beispiel //#ifdef midp20 //# import javax.microedition.lcdui.game.sprite; //#endif //#ifdef siemens //# import com.siemens.mp.game.sprite //#endif <wtkpreprocess srcdir="src destdir="siemens symbols="siemens verbose="true" /> (build.xml) //#ifdef midp20 //# import javax.microedition.lcdui.game.sprite; //#endif //#ifdef siemens import com.siemens.mp.game.sprite //#endif Wiederverwendung von Software 53

54 Vorteile von Präprozessoren In vielen Sprachen bereits enthalten / einfach verwendbare Tools Den meisten Entwicklern bereits bekannt Sehr einfaches Programmierkonzept: markieren und entfernen Sehr flexibel / ausdrucksstark, beliebige Granularität Nachträgliche Einführung von Variabilität in bestehendes Projekt einfach Wiederverwendung von Software 54

55 Nachteile: Unleserlicher Code Vermischung von zwei Sprachen (C und #ifdef, oder Java und Munge, ) Kontrollfluss schwer nachvollziehbar Lange Annotationen schwer zu finden Zusätzliche Zeilenumbrüche zerstören Layout Vermischung von syntaktischer Variation und Programmsemantik Alternativ: Feature-Code separieren/modularisieren? class Stack { void push(object o #ifdef SYNC, Transaction txn #endif ) { if (o==null #ifdef SYNC txn==null #endif ) return; #ifdef SYNC Lock l=txn.lock(o); #endif elementdata[size++] = o; #ifdef SYNC l.unlock(); #endif firestackchanged(); Wiederverwendung von Software 55

56 Weitere Nachteile Hohe Komplexität durch beliebige Schachtelung Fehleranfälligkeit durch Komplexität und unstrukturierten ( undisziplinierten ) Einsatz Beispiele: Variabler Rückgabetyp => Typanalyse? Edge/*if[WEIGHT]*/Weight/*end[WEIGHT]*/ add(node n, Node m /*if[weight]*/, int w/*end[weight]*/) { return new Edge/*if[WEIGHT]*/Weight/*end[WEIGHT]*/ (n, m /*if[weight]*/, w/*end[weight]*/ ); Derivate -Kommata bei Separierung variabler Parameter Edge set(/*if[weight]*/int w/*if[color]*/, /*end[color]/*end[weight]*/ /*if[color]*/int c/*end[color]*/) { Wiederverwendung von Software 56

57 Weitere Nachteile Feature-Code ist komplett verstreut Feature-Traceability-Problem Beispiel Graph-SPL: Wie findet man einen Fehler in der Implementierung des Weight Features? Verhindert/erschwert Tool Support Negative Erfahrungen bereits bekannt von der Analyse von C/C++ (Refactoring, Typ-Analyse, ) MUNGE und andere: Definition in Kommentaren Wiederverwendung von Software 57

58 Kritik an Präprozessoren Designed in the 70 th and hardly evolved since #ifdef considered harmful #ifdef hell maintenance becomes a hit or miss process incomprehensible source texts is difficult to determine if the code being viewed is actually compiled into the system programming errors are easy to make and difficult to detect preprocessor diagnostics are poor CPP makes maintenance difficult source code rapidly becomes a maze Wiederverwendung von Software 58

59 Ziele von Programmierparadigmen für SPL Entwurf neuartiger Implementierungskonzepte und Sprachkonstrukte für Variabilität auf Programmebene Lösungsansätze für Feature Traceability Querschneidende Belange (Crosscutting Concerns) ST2 Unflexible Vererbungshierarchien Feature-orientiert: Modulare Feature-Implementierung (zumindest Kohäsion) Wiederverwendung von Software 59

60 Lehrstuhl Praktische Informatik HAUSAUFGABE Wiederverwendung von Software 60

61 Aufgabenestellung Implementierung des PONG Projekts als (reaktive) Produktlinie Domänenentwicklung Feature-Modell: FODA / FeatureIDE Präprozessor-Implementierung: Java + MUNGE Applikationsentwicklung Konfiguration(en): FeatureIDE Produktgeneration: FeatureIDE Wiederverwendung von Software 61

62 Übersicht Pong Einzelprodukt Pong SPL Wiederverwendung von Software 62

63 Arbeitsschritte Abbildung von gegebenem Feature-Modell in Feature IDE Erweiterungen in der Implementierung (auf Basis der Features im Modell) Sinnvolle Abbildung von Features zu Implementierungsartefakten Änderungen der (Aufrufer/Klassen)Struktur, falls notwendig Generierung aller Varianten Testweise Ausführung jeder Variante Wiederverwendung von Software 63

64 Literatur Apel et al.: Feature-Oriented Software Product Lines, Hauptliteratur zu SPLE Exemplar in der UB verfügbar ISBN Wiederverwendung von Software 64

65 Literatur Pohl et al.: Software Product Line Engineering, Frei im Uni-Netz verfügbar (Springer Link) ISBN Wiederverwendung von Software 65

66 Literatur P. Clements, L. M. Northup: Software Product Lines: Practices and Patterns, Weiterführende Literatur ISBN: Wiederverwendung von Software 66

67 Referenzen Kyo C. Kang, Sholom G. Cohen, James A. Hess, William E. Novak, and A. Spencer Peterson. Feature-Oriented Domain Analysis (FODA) Feasibility Study. Technical report, Carnegie-Mellon University Software Engineering Institute, November Thomas Leich, Sven Apel, Laura Marnitz, and Gunter Saake. Tool Support for Feature-oriented Software Development: FeatureIDE: an Eclipse-based Approach. In Proceedings of the OOPSLA workshop on Eclipse technology exchange, eclipse 05, pages 55 59, New York, NY, USA, ACM. David Benavides, Sergio Segura, and Antonio Ruiz-Cortés. Automated Analysis of Feature Models 20 Years Later: A Literature Review. Advanced Information Systems Engineering, 35: , September Pierre-Yves Schobbens, Patrick Heymans, and Jean-Christophe Trigaux. Feature Diagrams: A Survey and a Formal Semantics. In Requirements Engineering, 14th IEEE International Conference, pages , sept Don Batory. Feature Models, Grammars, and Propositional Formulas. In SPLC, pages Springer, Arnaud Hubaux: Feature-based Configuration: Collaborative, Dependable, and Controlled. PhD thesis, University of Namur, Belgium, Richard M. Stallman: The C Preprocessor. Last Revised July 1992 for GCC v.2. Tom Ball: Munge: Swing's Secret Preprocessor. Jörg Pleumann, Omry Yadan, Erik Wetterberg: Antenna An Ant-To-End Solution for Wireless Java. Version Wiederverwendung von Software 67

Softwareproduktlinien Teil 5: Präprozessoren (Variabilitätsannotationen)

Softwareproduktlinien Teil 5: Präprozessoren (Variabilitätsannotationen) Softwareproduktlinien Teil 5: Präprozessoren (Variabilitätsannotationen) Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Wie Variabilität implementieren?

Mehr

Softwareproduktlinien Teil 5: Präprozessoren

Softwareproduktlinien Teil 5: Präprozessoren Softwareproduktlinien Teil 5: Präprozessoren Christian Kästner (CMU) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) Wie Variabilität implementieren? Domain Eng. Feature-Modell

Mehr

Lehrstuhl Praktische Informatik. Softwaretechnik 2. Variabilitätsmodellierung im Lösungsraum

Lehrstuhl Praktische Informatik. Softwaretechnik 2. Variabilitätsmodellierung im Lösungsraum Lehrstuhl Praktische Informatik Softwaretechnik 2 Variabilitätsmodellierung im Einordnung Software-Produktlinienentwicklung Entwicklungsprozess von Software-Produktlinien Variabilitätsmodellierung und

Mehr

Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 3: Software-Produktlinien

Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 3: Software-Produktlinien Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 3: Software-Produktlinien Sven Apel, Christian Kästner, Gunter Saake Apel, Kästner, Saake EPMD Folie 3-2 Agenda Produktlinien und Programmfamilien

Mehr

Softwareproduktlinien - Analyse von Produktlinien

Softwareproduktlinien - Analyse von Produktlinien Softwareproduktlinien - Analyse von Produktlinien Christian Kästner (CMU) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) Das Problem Variability = Complexity 33 optional,

Mehr

Software Product Lines

Software Product Lines Software Product Lines Concepts, Analysis and Implementation Feature-Oriented Software Product Lines Dr. Malte Lochau Malte.Lochau@es.tu-darmstadt.de author(s) of these slides 2008 including research results

Mehr

Softwareproduktlinien - Analyse von Produktlinien

Softwareproduktlinien - Analyse von Produktlinien Softwareproduktlinien - Analyse von Produktlinien Christian Kästner (CMU) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) Das Problem Variability = Complexity 33 optional,

Mehr

Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 3: Software-Produktlinien

Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 3: Software-Produktlinien Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 3: Software-Produktlinien Sven Apel, Christian Kästner, Gunter Saake Apel, Kästner, Saake EPMD Folie 3-2 Agenda Produktlinien und Programmfamilien

Mehr

Softwareproduktlinien Teil 12: Analyse von Produktlinien

Softwareproduktlinien Teil 12: Analyse von Produktlinien Softwareproduktlinien Teil 12: Analyse von Produktlinien Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) inkl. Folien von Das Problem Database

Mehr

Software Product Lines

Software Product Lines Software Product Lines Concepts, Analysis and Implementation Programmier-Paradigmen für Software-Produktlinien (1/3) ES Real-Time Systems Lab Prof. Dr. rer. nat. Andy Schürr Dept. of Electrical Engineering

Mehr

Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung

Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Agenda

Mehr

Softwareproduktlinien Teil 2: Entwicklungsprozess und Variabilitätsmodellierung

Softwareproduktlinien Teil 2: Entwicklungsprozess und Variabilitätsmodellierung Softwareproduktlinien Teil 2: Entwicklungsprozess und Variabilitätsmodellierung Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) 1 Agenda Produktlinien

Mehr

Softwareproduktlinien. Christian Kästner

Softwareproduktlinien. Christian Kästner Softwareproduktlinien Christian Kästner 1 Agenda Einfuehrung Produktlinien (inkl Herausford.) Wiederverwendung von Komponenten Domain Engineering und Automatisiertes Application Engineering Implementierung

Mehr

Softwareproduktlinien - Laufzeitvariabilität

Softwareproduktlinien - Laufzeitvariabilität Softwareproduktlinien - Laufzeitvariabilität Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Wie Variabilität implementieren?

Mehr

Softwareproduktlinien Teil 3: Laufzeit-Variabilität

Softwareproduktlinien Teil 3: Laufzeit-Variabilität Softwareproduktlinien Teil 3: Laufzeit-Variabilität Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) 1 Application Eng. Domain Eng. Wie Variabilität

Mehr

Software Product Lines

Software Product Lines Software Product Lines Concepts, Analysis and Implementation Programmier-Paradigmen für Software-Produktlinien (3/3) ES Real-Time Systems Lab Prof. Dr. rer. nat. Andy Schürr Dept. of Electrical Engineering

Mehr

Implementierung v. Software-Produktlinien - Einführung und Überblick

Implementierung v. Software-Produktlinien - Einführung und Überblick Implementierung v. Software-Produktlinien - Einführung und Überblick Christian Kästner (Carnegie Mellon University) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Agenda

Mehr

Implementierung v. Software-Produktlinien - Einführung und Überblick

Implementierung v. Software-Produktlinien - Einführung und Überblick Implementierung v. Software-Produktlinien - Einführung und Überblick Christian Kästner (Carnegie Mellon University) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Agenda

Mehr

Software Product Lines

Software Product Lines Software Product Lines Concepts, Analysis and Implementation Feature-Modelle und Produktkonfiguration ES Real-Time Systems Lab Prof. Dr. rer. nat. Andy Schürr Dept. of Electrical Engineering and Information

Mehr

Softwareproduktlinien - Versionsverwaltungs- und Buildsysteme

Softwareproduktlinien - Versionsverwaltungs- und Buildsysteme Softwareproduktlinien - Versionsverwaltungs- und Buildsysteme Christian Kästner (Carnegie Mellon University) Sven Apel (Universität Passau) Gunter Saake, Martin Kuhlemann (Universität Magdeburg) 1 Application

Mehr

Software Product Lines

Software Product Lines Software Product Lines Concepts, Analysis and Implementation Programmier-Paradigmen für Software-Produktlinien (1/3) Dr. Malte Lochau Malte.Lochau@es.tu-darmstadt.de author(s) of these slides 2015 including

Mehr

Softwareproduktlinien Teil 12: Analyse von Produktlinien. Christian Kästner (CMU) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg)

Softwareproduktlinien Teil 12: Analyse von Produktlinien. Christian Kästner (CMU) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Softwareproduktlinien Teil 12: Analyse von Produktlinien Christian Kästner (CMU) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Das Problem Variability = Complexity 33 optional, independent

Mehr

Softwareproduktlinien Teil 11: Verbesserte Präprozessoren

Softwareproduktlinien Teil 11: Verbesserte Präprozessoren Softwareproduktlinien Teil 11: Verbesserte Präprozessoren Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Agenda Wiederholung: Probleme von Präprozessoren

Mehr

Softwareproduktlinien Teil 12: Analyse von Produktlinien. Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg)

Softwareproduktlinien Teil 12: Analyse von Produktlinien. Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Softwareproduktlinien Teil 12: Analyse von Produktlinien ChristianKästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) inkl. Folien von Das Problem Database

Mehr

FACHHOCHSCHULE MANNHEIM

FACHHOCHSCHULE MANNHEIM für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen

Mehr

Softwareproduktlinien Teil 4: Versionsverwaltungs- und Buildsysteme

Softwareproduktlinien Teil 4: Versionsverwaltungs- und Buildsysteme Softwareproduktlinien Teil 4: Versionsverwaltungs- und Buildsysteme Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) 1 Application Eng. Domain

Mehr

Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung. Teil 4. Frameworks

Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung. Teil 4. Frameworks Erweiterte Programmierkonzepte für maßgeschneiderte Datenhaltung Teil 4 Präprozessoren, ren, Komponenten, Frameworks Christian Kästner (Universität Magdeburg) Gunter Saake (Universität Magdeburg) Erweiterte

Mehr

Softwaretechnik. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen

Softwaretechnik. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Softwaretechnik Prof. Dr. Rainer Koschke Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen Wintersemester 2012/13 Überblick I Software-Produktlinien Software-Produktlinien

Mehr

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter C - PRÄPROZESSOR Seminar effiziente C Programmierung WS 2012/13 Von Christian Peter Themen Was sind Präprozessoren? Beispiele für Präprozessoren Funktionsweisen Der C - Präprozessor Der # Präfix #include

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

C/C++ Programmierung

C/C++ Programmierung 1 C/C++ Programmierung Grundlagen: Der Präprozessor Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Der Präprozessor

Mehr

Implementierung v. Software-Produktlinien - Einführung und Überblick

Implementierung v. Software-Produktlinien - Einführung und Überblick Implementierung v. Software-Produktlinien - Einführung und Überblick Christian Kästner (Carnegie Mellon University) Sven Apel (Universität Passau) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Gunter

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

Einführung Makros Includes Errors und Warnings Pragmas Diverses. Der C-Präprozessor. Lukas Stabe. Universität Hamburg

Einführung Makros Includes Errors und Warnings Pragmas Diverses. Der C-Präprozessor. Lukas Stabe. Universität Hamburg Der C-Präprozessor Lukas Stabe Universität Hamburg Proseminar C - Grundlagen und Konzepte, 2013 Lukas Stabe C-Präprozessor 1 / 19 Inhalt 1. Einführung 2. Makros 3. Includes 4. Errors und Warnings 5. Pragmas

Mehr

Formale Spezifikation mit Java Modeling Language

Formale Spezifikation mit Java Modeling Language Formale Spezifikation mit Java Modeling Language Daniel Bruns Praxis der Software-Entwicklung, 25 November 2010 INSTITUT FÜR THEORETISCHE INFORMATIK KIT Universität des Landes Baden-Württemberg und nationales

Mehr

Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung

Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) Thomas Thüm (TU Braunschweig)

Mehr

Softwareproduktlinien Teil 9: Features vs. Aspekte

Softwareproduktlinien Teil 9: Features vs. Aspekte Softwareproduktlinien Teil 9: Features vs. Aspekte Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) AOP vs. FOP AOP und FOP implizieren keine

Mehr

Die Programmiersprache C Eine Einführung

Die Programmiersprache C Eine Einführung Die Programmiersprache C Eine Einführung Christian Gentsch Fakutltät IV Technische Universität Berlin Projektlabor 2. Mai 2014 Inhaltsverzeichnis 1 Einführung Entstehungsgeschichte Verwendung 2 Objektorientiert

Mehr

Softwareproduktlinien Ain t Nobody Got Time For That? Stephan Seifermann (FZI Karlsruhe) Karlsruher Entwicklertag 2016,

Softwareproduktlinien Ain t Nobody Got Time For That? Stephan Seifermann (FZI Karlsruhe) Karlsruher Entwicklertag 2016, Softwareproduktlinien Ain t Nobody Got Time For That? Stephan Seifermann (FZI Karlsruhe) Karlsruher Entwicklertag 2016, 15.06.16 Agenda Kundenspezifische Anpassung von Produkten Konsolidierung von Produktkopien

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung

Mehr

Wissensverarbeitung. - Knowledge Engineering: Feature Models -

Wissensverarbeitung. - Knowledge Engineering: Feature Models - - Knowledge Engineering: Feature Models - Alexander Felfernig und Gerald Steinbauer Institut für Softwaretechnologie Inffeldgasse 16b/2 A-8010 Graz Austria 1 Goals Feature Models Semantics Anomalies Inconsistencies

Mehr

Einführung in C. EDV1-04C-Einführung 1

Einführung in C. EDV1-04C-Einführung 1 Einführung in C 1 Helmut Erlenkötter C Programmieren von Anfang an Rowohlt Taschenbuch Verlag ISBN 3-4993 499-60074-9 19,90 DM http://www.erlenkoetter.de Walter Herglotz Das Einsteigerseminar C++ bhv Verlags

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

Feature Diagramme und Variabilität. Requirements Engineering Seminar 2006 Stefan Marr

Feature Diagramme und Variabilität. Requirements Engineering Seminar 2006 Stefan Marr Feature Diagramme und Variabilität Requirements Engineering Seminar 2006 Stefan Marr Agenda 2 Ausgangssituation 3 Anforderungen ermittelt und niedergeschrieben Verbessert und geordnet Nächstes großes Ziel:

Mehr

So#wareproduktlinien - Feature-Orien4erung. Sven Apel (Universität Passau) Chris4an Kästner (CMU) Gunter Saake, Thomas Thüm (Universität Magdeburg)

So#wareproduktlinien - Feature-Orien4erung. Sven Apel (Universität Passau) Chris4an Kästner (CMU) Gunter Saake, Thomas Thüm (Universität Magdeburg) So#wareproduktlinien - Feature-Orien4erung Sven Apel (Universität Passau) Chris4an Kästner (CMU) Gunter Saake, Thomas Thüm (Universität Magdeburg) 1 Wie Variabilität implemen4eren? Domain Eng. Feature-Modell

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) Informatik I (D-ITET) Übungsstunde 2, 5.10.2009 ETH Zürich? Übungsgruppenwechsel? Abgabe der Übungen... Bis Mo, 24:00 Theorie: Programme: per mail oder auf Papier.cpp Datei per mail Bin euch noch Demos

Mehr

Softwareproduktlinien Teil 1: Einführung und Überblick

Softwareproduktlinien Teil 1: Einführung und Überblick Softwareproduktlinien Teil 1: Einführung und Überblick Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) 1 Agenda Formales, Organisatorisches Kurzeinführung

Mehr

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) Beispiel Beispiel: Namensliste konvertieren (Karl Egon Meier Meier, Karl Egon). s/(.*) (.*)/$2, $1/; Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) s/(.*) (.*)/$2, $1/; s/(.*) ([a-z]+

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? weit verbreitet einfach und (relativ) sicher keine Pointer (?) keine gotos kein Präprozessor keine globalen Variablen garbage collection objekt-orientiert

Mehr

Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung

Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung Softwareproduktlinien - Entwicklungsprozess und Variabilitätsmodellierung Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) 1 Agenda Produktlinien

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 16.04.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 39 Einführung Datentypen Operatoren Anweisungssyntax Algorithmen zur Datenanalyse in

Mehr

Syntax und Kontrollstrukturen

Syntax und Kontrollstrukturen Syntax und Kontrollstrukturen Praktikum C-Programmierung Eugen Betke, Nathanael Hübbe, Michael Kuhn, Jakob Lüttgau, Jannek Squar Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg 2018-10-29

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einführung in die Programmierung by André Karge Übung - Operatoren, Methoden, Primitives 25. Oktober 2018 Einführung in die Programmierung WS18/19 André Karge 1/29 Notizen Standard Linux Befehle: http://images.linoxide.com/linux-cheat-sheet.pdf

Mehr

Programmieren in C++ Templates

Programmieren in C++ Templates Programmieren in C++ Templates Inhalt Templates Funktions- und Klassen-Templates Spezialisierung von Templates Generische Klassen Einbinden von Templates Instantiierung (implizit und explizit) Templates

Mehr

Georg Hinkel 1, Thomas Goldschmidt 2

Georg Hinkel 1, Thomas Goldschmidt 2 FZI FORSCHUNGSZENTRUM INFORMATIK Tool Support for Model Transformations: On Solutions using Internal Languages Georg Hinkel 1, Thomas Goldschmidt 2 1 FZI Forschungszentrum Informatik, Softwareentwicklung,

Mehr

Comparing Software Factories and Software Product Lines

Comparing Software Factories and Software Product Lines Comparing Software Factories and Software Product Lines Martin Kleine kleine.martin@gmx.de Betreuer: Andreas Wuebbeke Agenda Motivation Zentrale Konzepte Software Produktlinien Software Factories Vergleich

Mehr

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef Proseminar C-Programmierung Grundlagen und Konzepte Der Präprozessor von: Svenja Neef Inhaltsverzeichnis 1Der C-Präprozessor...2 1.1Was ist der C-Präprozessor...2 1.2Präprozessor-Befehle...2 1.2.1Zusammenführen

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

Softwareproduktlinien Teil 2: Entwicklungsprozess und Variabilitätsmodellierung

Softwareproduktlinien Teil 2: Entwicklungsprozess und Variabilitätsmodellierung Softwareproduktlinien Teil 2: Entwicklungsprozess und Variabilitätsmodellierung Sven Apel (Universität Passau) Christian Kästner (Universität Marburg) Gunter Saake (Universität Magdeburg) 1 Agenda Produktlinien

Mehr

8.1 Vom Quellcode zur ausführbaren Programm

8.1 Vom Quellcode zur ausführbaren Programm 8. Die Umgebung von C- 8.1 Vom Quellcode zur Programmausführung 8.2 Präprozessor-Anweisungen 8.3 Compiler, Assembler, Binder 8.4 Das Make-Utility 8.5 Datenübergabe vom und zum Betriebssystem 8-1 8.1 Vom

Mehr

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Java Tools JDK. IDEs.  Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation Java Tools JDK http://www.oracle.com/technetwork/java/javase/ Downloads IDEs Java SE 8 Java SE 8 Documentation Eclipse http://www.eclipse.org IntelliJ http://www.jetbrains.com/idea/ NetBeans https://netbeans.org/

Mehr

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung Berichte aus der Informatik Dieter Pawelczak Start in die C-Programmierung Shaker Verlag Aachen 2012 Inhaltsverzeichnis Inhaltsverzeichnis i 1 Einleitung 1 1.1 Umfeld und Aufbau des Buches 1 Die Programmiersprache

Mehr

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java Ursprünge Die Syntax von Java Borland Software Corp 1995 Syntax: Pascal Objektorientierte Prorammierung optional Plattformen: Windows (Linux, Mac OS X) Sun Microsystems 1995 Syntax: C/C++ Objektorientiert

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik

Mehr

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 2.0 Einfache Java Programme Thomas R. Gross Department Informatik ETH Zürich Uebersicht 2.0 Einfache Java Programme Struktur Namen Output 2 Graphische Darstellung

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 9 Lösungsvorschlag Objektorientierte Programmierung 26. 06. 2006 Aufgabe 19 (Sieb des Erathostenes)

Mehr

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität

Mehr

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7. CoMa 04 Java II Paul Boeck Humboldt Universität zu Berlin Institut für Mathematik 7. Mai 2013 Paul Boeck CoMa 04 7. Mai 2013 1 / 13 Verzweigungen Wenn-Dann Beziehungen if (BEDINGUNG) { else if (BEDINGUNG2)

Mehr

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp Ursprünge Die Syntax von Java Borland Software Corp 1995 Syntax: Pascal Objektorientierte Prorammierung optional Plattformen: Windows (Linux, Mac OS X) Sun Microsystems 1995 Syntax: C/C++ Objektorientiert

Mehr

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch) JAVA BASICS 2. Primitive Datentypen 1. Warum Java? zunehmend weit verbreitet einfach und (relativ) sicher keine Adressrechnung, aber Pointer keine gotos kein Präprozessor keine globalen Variablen garbage

Mehr

Artefakte, Linktypen und Besonderheiten von OOSE/RUP

Artefakte, Linktypen und Besonderheiten von OOSE/RUP Artefakte, Linktypen und Besonderheiten von OOSE/RUP Matthias Riebisch TU Ilmenau Workshop AK Traceability 07.12.2007 Darmstadt Eigenschaften von Traceability Links Obligatorisch: Identifier Startelement

Mehr

Welche Informatik-Kenntnisse bringen Sie mit?

Welche Informatik-Kenntnisse bringen Sie mit? Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 02: Methoden Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 17 Inhalt Scanner

Mehr

Anweisungen zur Ablaufsteuerung

Anweisungen zur Ablaufsteuerung Anweisungen zur Ablaufsteuerung if-else switch while do-while for Ausdrücke Ein Ausdruck ist eine Folge von Variablen, Operatoren und Methodenaufrufen, der zu einem einzelnen Wert ausgewertet wird. Operanden

Mehr

C++ Templates - eine kleine Einführung. Funktionstemplates. Fabian Scheler, Peter Ulbrich, Niko Böhm. 20. Oktober 2008

C++ Templates - eine kleine Einführung. Funktionstemplates. Fabian Scheler, Peter Ulbrich, Niko Böhm. 20. Oktober 2008 Überblick 1 Allgemein C++ Templates - eine kleine Einführung Fabian Scheler, Peter Ulbrich, Niko Böhm Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 3. Kontrollstrukturen 09.11.2016 Jun.-Prof. Dr.-Ing. Anne Koziolek Version 1.1 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND

Mehr

Stratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum:

Stratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum: Stratego/XT und ASF+SDF Meta-Environment Paul Weder Seminar Transformationen Datum: 20.01.2006 Gliederung Allgemeines ASF+SDF Meta-Environment Stratego/XT Zusammenfassung/Vergleich SDF (Syntax Definition

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 06: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von

Mehr

Algorithmen und Datenstrukturen II

Algorithmen und Datenstrukturen II Algorithmen und Datenstrukturen II in JAVA D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009, 4. Mai 2009, c 2009 D.Rösner

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen

Mehr

Generatives Programmieren

Generatives Programmieren Generatives Programmieren Seminar Produktlinien WS03/04 Tammo van Lessen 08.01.2004 Outline Einleitung Generatoren Generatives Programmieren Fazit Einleitung Industrielle Entwicklung 1826 Austauschbare

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 3. Kontrollstrukturen 04.11.2015 Prof. Dr. Ralf H. Reussner Version 1.1 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),

Mehr

Gliederung. Algorithmen und Datenstrukturen II. Java: Objektorientierung. Java: Objektorientierung. Objektorientierung in JAVA. D.

Gliederung. Algorithmen und Datenstrukturen II. Java: Objektorientierung. Java: Objektorientierung. Objektorientierung in JAVA. D. Gliederung Algorithmen und Datenstrukturen II in JAVA D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Sommer 2009, 4. Mai 2009, c

Mehr

Einführung in Generatives Programmieren. Bastian Molkenthin

Einführung in Generatives Programmieren. Bastian Molkenthin Einführung in Generatives Programmieren Bastian Molkenthin Motivation Industrielle Entwicklung *!!*,(% % - #$% #!" + '( & )!* Softwareentwicklung Rückblick auf Objektorientierung Objektorientierte Softwareentwicklung

Mehr

Seminar aus Programmiersprachen. Markus Raab LVA

Seminar aus Programmiersprachen. Markus Raab LVA Seminar aus Programmiersprachen Markus Raab LVA 185.307 09.03.2016 Outline Problem description Topics Seminar course Grading Select date Choose topic+registration Elektra's

Mehr

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen.

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen. Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen. Modularisierung Zerlegung eines Programms in überschaubare Einheiten Die einzelnen Einheiten werden als Modul bezeichnet.

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

4.4 Imperative Algorithmen Prozeduren

4.4 Imperative Algorithmen Prozeduren 4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):

Mehr

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO Dipl.-Ing. Klaus Knopper 21.12.2006 Hinweis: Bitte schreiben Sie auf das Deckblatt und auf jede Seite Ihren Namen und Ihre Matrikelnummer,

Mehr