Wiederverwendung von Software
|
|
- Rudolf Bruhn
- vor 5 Jahren
- Abrufe
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) Christian Kästner (Universität Marburg) Sven Apel (Universität Passau) Gunter Saake (Universität Magdeburg) Wie Variabilität implementieren?
MehrSoftwareproduktlinien 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
MehrLehrstuhl 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
MehrErweiterte 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
MehrSoftwareproduktlinien - 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,
MehrSoftware 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
MehrSoftwareproduktlinien - 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,
MehrErweiterte 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
MehrSoftwareproduktlinien 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
MehrSoftware 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
MehrSoftwareproduktlinien - 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
MehrSoftwareproduktlinien 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
MehrSoftwareproduktlinien. Christian Kästner
Softwareproduktlinien Christian Kästner 1 Agenda Einfuehrung Produktlinien (inkl Herausford.) Wiederverwendung von Komponenten Domain Engineering und Automatisiertes Application Engineering Implementierung
MehrSoftwareproduktlinien - 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?
MehrSoftwareproduktlinien 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
MehrSoftware 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
MehrImplementierung 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
MehrImplementierung 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
MehrSoftware 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
MehrSoftwareproduktlinien - 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
MehrSoftware 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
MehrSoftwareproduktlinien 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
MehrSoftwareproduktlinien 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
MehrSoftwareproduktlinien 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
MehrFACHHOCHSCHULE 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
MehrSoftwareproduktlinien 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
MehrErweiterte 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
MehrSoftwaretechnik. 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
MehrC - 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
MehrEinstieg 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
MehrEinstieg 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
MehrC/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
MehrImplementierung 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
MehrProgrammieren 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
MehrEinfü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
MehrFormale 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
MehrSoftwareproduktlinien - 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)
MehrSoftwareproduktlinien 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
MehrDie 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
MehrSoftwareproduktlinien 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
MehrAngewandte 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
MehrC++ - 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
MehrWissensverarbeitung. - 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
MehrEinfü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
MehrAlgorithmen 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
MehrFeature 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:
MehrSo#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
MehrInformatik 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
MehrSoftwareproduktlinien 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
MehrBeispiel. 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]+
MehrJAVA 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
MehrSoftwareproduktlinien - 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
MehrAlgorithmen 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
MehrSyntax 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
MehrEinfü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
MehrProgrammieren 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
MehrGeorg 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,
MehrComparing 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
MehrProseminar. 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
MehrRepetitorium 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
MehrJAVA 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
MehrSoftwareproduktlinien 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
Mehr8.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
MehrJava 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/
MehrBerichte 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
MehrUrsprü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
MehrInformatik - Ü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
MehrEinfü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
MehrObjektorientierte 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)
MehrEinleitung 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
MehrCoMa 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)
MehrDie 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
MehrJAVA 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
MehrArtefakte, 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
MehrWelche 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
MehrProgrammieren 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
MehrAnweisungen 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
MehrC++ 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)
MehrVorlesung 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
MehrStratego/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
MehrJavakurs 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
MehrAlgorithmen 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
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
MehrMartin 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
MehrGeneratives 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
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
MehrVorlesung 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),
MehrGliederung. 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
MehrEinführung in Generatives Programmieren. Bastian Molkenthin
Einführung in Generatives Programmieren Bastian Molkenthin Motivation Industrielle Entwicklung *!!*,(% % - #$% #!" + '( & )!* Softwareentwicklung Rückblick auf Objektorientierung Objektorientierte Softwareentwicklung
MehrSeminar 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
MehrProgrammierung 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.
MehrUnterlagen. 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
Mehr4.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):
MehrTest-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