Generative Programmierung
|
|
|
- Dennis Koenig
- vor 8 Jahren
- Abrufe
Transkript
1 Generative Programmierung Andreas Zeller Lehrstuhl für Softwaretechnik Universität des Saarlandes, Saarbrücken Grundidee: Parametrisierung Die Abstraktion ist ein Grundprinzip der Softwaretechnik. Seit Beginn der Programmierung wurden Konzepte entwickelt, um mit einem Programm möglichst viele ähnliche Aufgaben lösen zu können. Durch Instanziieren geeigneter Parameter kann ein Programm (eine Funktion, ein Modul ) auf verschiedenen Daten arbeiten. Daten sind klassische Parameter! Parametrisierte Datentypen Nicht nur Daten, sondern auch Datentypen können als Parameter benutzt werden. Grundidee: Bestandteile des Typs sind variabel z.b. der Objekttyp bei Containern. Geht explizit nur in manchen Sprachen: Ada generische Pakete C++ Templates Funktionale Sprachen Polymorphismus Generische Stacks in Java 5 Java 5 führt generische Klassen ein. 1
2 public class Stack<E> { // Instanzvariablen und Klassenkonstanten static final int size = 500; E s[] = new E[size]; int c = -1; // Öffentliche Funktionen public void empty() { c = -1; public void push(e x) { s[++c] = x; public void pop() { --c; public E top() { return s[c]; public boolean isempty() { return c == -1; Generische Stacks in Java 5 (2) Verwendung des Stacks: Stack<int> values = new Stack<int>(); values.push(42); Stack<String> pizza = new Stack<String>(); pizza.push("salami"); pizza.push("käse"); pizza.push("knoblauch"); pizza.push("knoblauch"); pizza.push("knoblauch"); Vorteil: Allgemeinheit, viel bessere Wiederverwendbarkeit Analog für generische abstrakte Objekte. Generische Stacks in Java 4 In Java 4 gab es noch keine generischen Datentypen. Alternative: eine allgemeine Oberklasse - z.b. Object: 2
3 public class Stack { // Instanzvariablen und Klassenkonstanten static final int size = 500; Object s[] = new Object[size]; int c = -1; // Öffentliche Funktionen public void empty() { c = -1; public void push(object x) { s[++c] = x; public void pop() { --c; public Object top() { return s[c]; public boolean isempty() { return c == -1; Generische Stacks in Java 4 (2) Nachteil: keine Typsicherheit Explizite Typumwandlung nötig Mögliche Laufzeit-Fehler bei Typumwandlung: Stack s = new Stack(); s.push("hugo"); string st = (string) s.top(); // OK int x = (int)s.top(); // Laufzeitfehler lässt sich problemlos übersetzen, führt aber zu einem Laufzeitfehler. Bei echten generischen Datentypen würde dies zur Übersetzungszeit erkannt! Templates in C++ Die Programmiersprache mit den weitestgehenden generischen Möglichkeiten ist C++. template<class T> class Vector { // Template public: explicit Vector(size_t n); // Konstruktor T& operator[] (size_t); // Feld-Zugriff Benutzung: Vector<int> is(100); is[10] = 15; Vector<double> ds(100); ds[20] = 3.0; 3
4 Template-Parameter Als Parameter für Templates sind Typnamen, Aufzählungen und Integers erlaubt: template<class T, int N> class Vector { private: T elems[n]; public: explicit Vector(); // Konstruktor T& operator[] (size_t); // Feld-Zugriff Benutzung: Vector<int, 100> is; is[10] = 15; Spezialisierung Oft ist es sinnvoll, die Implementierung eines Containers je nach Typ zu unterscheiden. template<class T> class Vector<bool> { // Vektor für Booleans template<class T> class Vector { // Standard-Vektor Spezialisierungs-Muster geben Typmuster an: template<class T> class Vector<T *> { // Vektor für Zeiger Standard-Container in C++ In C++ sind zahlreiche Container Bestandteil der Standard-Bibliothek (standard template library, STL) Sequenzen (vector, list, dequeue) Davon abgeleitet: stack, queue, Abbildungen (map, multimap) Davon abgeleitet: set, multiset, Teilweise spezialisiert für bestimmte Typen 4
5 Alle Container [] insert push_front push_back Iteration vector O(1) O(n)+ O(1)+ Ran list O(1) O(1) O(1) Bi dequeue O(1) O(n) O(1) O(1) Ran stack O(1) queue O(1) O(1) priority_queue O(log n) O(log n) map O(log n) O(log n)+ Bi multimap O(log n)+ Bi set O(log n)+ Bi multiset O(log n)+ Bi string O(1) O(n)+ O(n)+ O(1)+ Ran array O(1) Ran valarray O(1) Ran bitset O(1) Ran + bedeutet: von Zeit zu Zeit kommt Extra-Aufwand hinzu Sequenzen und Iteratoren Für Sequenzen können Iteratoren definiert werden: #include <iostream> #include <vector> using namespace std; int main() { vector<long> coll; coll.push_back(9); coll.push_back(6); // Eine Sammlung // 9 hinzufügen // 6 hinzufügen long sum; // Die Summe vector<long>::iterator itr; // Iterator definieren for (itr = coll.begin(); itr!= coll.end(); ++itr) sum += *itr; Container und Algorithmen Die STL stellt zahlreiche Algorithmen bereit, die auf Containern arbeiten. find gibt das erste passende Element zurück: vector<long>::iterator itr; itr = find(coll.begin(), coll.end(), 7); 5
6 find_if nimmt ein Prädikat: bool less_than_7(long v) { return v < 7;... itr = find_if(coll.begin(), coll.end(), less_than_7); Container und Algorithmen (2) for_each(b, E, F) ruft F() auf für alle Elemente von B bis E: void sum_up(long v) { sum += v;... for_each (coll.begin(), coll.end(), sum_up); Insgesamt sind mehr als 70 Algorithmen verfügbar zum Suchen, Kopieren, Zählen, Sortieren, Funktionsobjekte In den vorangegangenen Beispielen mußten wir die Funktionen und Prädikate (less_than_7, sum_up) jeweils explizit definieren. Grund: C++ kennt keine anonymen Funktionen (λ). Ansatz: Entsprechende Funktionsobjekte definieren Funktionsobjekte (2) Wir definieren eine Klasse mit geeignetem ()-Operator: template<class T> class Sum { T res; public: Sum(T i = 0): res(i) { void operator() (T x) { res += x; T result() const { return res; Benutzung: Sum<long> s; for_each (coll.begin(), coll.end(), s); cout << "Summe: " << s.result() << endl; 6
7 Funktionsobjekte (3) Die STL stellt passende Funktionsobjekte zur Verfügung: template <class Arg1, class Arg2, class Res> struct binary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Res result_type; template <class T> struct less: public binary_function<t, T, bool> { bool operator() (const T& x, const T& y) const { return x < y; Anwendung: less<int>(x, y) ist äquivalent zu x < y Adapter In der Praxis benötigen wir häufig Funktionsobjekte, deren Argumente teilweise gebunden sind wie etwa less_than: template <class T> class less_than { T arg2; public: explicit less_than(const T& x): arg2(x) { bool operator() (const T& x) const { return less<t>(x, arg2); //... itr = find_if(coll.begin(), coll.end(), less_than<int>(7)); Adapter (2) Mit Adaptern lassen sich Funktionen auf spezialisiertere Funktionen abbilden ( Currying ). 7
8 Beispiel: f sei binäre Funktion bind2nd(f, y) ruft f mit y als zweitem Parameter auf bind1st(f, x) ruft f mit x als erstem Parameter auf bind2nd(less<int>(), 7)(x) ist äquivalent zu x < 7. bind2nd(less<int>(), 7)(4) ist true. Weitere Adapter: mem_fun, ptr_fun, not1, Adapter (3) Beispiele für den Einsatz von Adaptern: // Erstes Element < 7 suchen binder2nd<less<int> > less_than_7 = bind2nd(less<int>(), 7); itr = find_if(coll.begin(), coll.end(), less_than_7); // Erstes Element == 3 suchen itr = find_if(coll.begin(), coll.end(), bind1st(equal_to<int>(), 3)); Halleluja! Templates: Vor- und Nachteile Abscheuliche Syntax + Erhöhte Wiederverwendung (Generizität) + Optimierungsmöglichkeiten (Spezialisierung) Metaprogrammierung Der C++-Compiler muß zur Laufzeit Templates instantiieren und entscheiden, welche Template-Alternative benutzt wird. Mit diesen beiden Eigenschaften lassen sich Berechnungen zur Übersetzungszeit durchführen. Vorteil: erhöhte Effizienz! 8
9 Fakultät dynamisch Wir betrachten diesen klassischen Fakultäts-Code: int factorial(int n) { if (n == 0) return 1; else return n * factorial(n - 1); //... cout << "7! = " << factorial(7) << endl; factorial(7) wird zur Laufzeit berechnet. Fakultät statisch template<int n> struct Factorial { enum { RET = Factorial<n - 1>::RET * n ; // Spezialisierung template<> struct Factorial<0> { enum { RET = 1 ; //... cout << "7! = " << Factorial<7>::RET << endl; factorial<7>::ret wird zur Übersetzungszeit berechnet! Fibonacci-Zahlen statisch 9
10 template<int n> struct Fib { enum { RET = Fib<n - 1>::RET + Fib<n - 2>::RET ; template<> struct Fib<0> { enum { RET = 0; template<> struct Fib<1> { enum { RET = 1; //... cout << "fib(10) = " << Fib<10>::RET << endl; wird ebenfalls zur Übersetzungszeit berechnet Bedingungen template<bool cond, class Then, class Else> struct IF { typedef Then RET; // Spezialisierung für false template<class Then, class Else> struct IF<false, Then, Else> { typedef Else RET; //... IF<(1 + 2 > 4), short, int>::ret i; //... const bool have_ssl = true; typedef IF<have_ssl, SSLApache, StdApache>::RET Apache; Schleifen Wir betrachten eine iterative Implementierung zum Berechnen von Fibonacci-Zahlen: 10
11 int fib(int n) // n > 0 { int i = 1, x = 1, y = 0; while (i < n) { i = i + 1; int x_ = x; x = x + y; y = x_; return x; Kann man das so auch zur Übersetzungszeit berechnen? Schleifen (2) Wir definieren eine Anweisung und eine Bedingung für die Berechnung von Fibonacci-Zahlen: template<int i_, int x_, int y_> struct FibStat { enum { i = i_, x = x_, y = y_ ; typedef FibStat<i + 1, x + y, x> Next; template<int n> struct FibCond { template<class Statement> struct Code { enum { RET = Statement::i < n ; Schleifen (3) Hiermit können wir eine Schleife füllen: template<int n> struct Fib { enum { RET = WHILE<FibCond<n>, FibStat<1, 1, 0> >::RET::x ;... cout << "fib(8) = " << Fib<8>::RET << endl; Schleifen (4) WHILE ist mit Hilfe von IF definiert: 11
12 template<class Statement> struct STOP { typedef Statement RET; template<class Condition, class Statement> struct WHILE { typedef typename IF<Condition::template Code<Statement>::RET, WHILE<Condition, typename Statement::Next>, STOP<Statement> >::RET::RET RET; Erkenntnis: Der C++-Compiler ist Turing-universell! Anwendungen Auswahl von Alternativen zur Übersetzungszeit Bestimmung von Werten zur Übersetzungszeit Gesteuerte Optimierungen (z.b. Loop unrolling) Konzepte Generische Programmierung nutzt Parametrisierung, um zur Übersetzungszeit neue Typen zu generieren Templates in C++ ermöglichen erhöhte Wiederverwendung furch Generizität Optimierungsmöglichkeiten für bestimmte Typen und Werte (Spezialisierung) C++-Templates ermöglichen Metaprogrammierung: Auswahl von Alternativen zur Übersetzungszeit Bestimmen von Werten und Typen zur Übersetzungszeit Literatur Musser et al., STL Tutorial and Reference Guide Alles über die STL. Stroustrup, The C++ Programming Language Alles über C++. Czarnecki + Eisenecker, Generative Programming (Kapitel 10). Metaprogramming 12
Einführung in die STL
1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) [email protected] http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/29 Outline 1 3/29 Inhaltsverzeichnis 1 4/29 Typisierung
Objektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 10. Juli 2007 Fortgeschrittene Template-Techniken C++ bietet eine Vielfalt weiterer Techniken für Templates: Templates
Einführung in die STL anhand eines ausgewählten Beispiels
Einführung in die STL anhand eines ausgewählten Beispiels Frank M. Thiesing http://home.t-online.de/home/ frank.thiesing/stl/stl-folien.pdf Inhalt Überblick über die C++ STL Container Iteratoren Algorithmen
C++ Templates - eine kleine Einführung. Allgemein. Funktionstemplates. Allgemein. Funktionstemplates. Klassentemplates
Überblick 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)
Teil V. Generics und Kollektionen in Java
Teil V Generics und Überblick 1 Parametrisierbare Datenstrukturen in Java 2 Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 1 Parametrisierbare Datenstrukturen in Java Motivation für
Probeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
Vorlesung Informatik 2
Vorlesung Informatik 2 Fachhochschule für Technik Esslingen Studiengang Wirtschaftsinformatik Neues in Java 5.0 (Tiger) Dr. rer. nat. Andreas Rau http://www.fht-esslingen.de/~rau [email protected]
Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind
Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt
II.3.1 Rekursive Algorithmen - 1 -
1. Grundelemente der Programmierung 2. Objekte, Klassen und Methoden 3. Rekursion und dynamische Datenstrukturen 4. Erweiterung von Klassen und fortgeschrittene Konzepte II.3.1 Rekursive Algorithmen -
1. Übung zu "Numerik partieller Differentialgleichungen"
1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:
Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java
Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java Standardisierung durch die ECMA und ISO Short Introduction to C# C# (C
Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer
Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer Was Sie erwartet: Modernes C++ anwenden o ISO 14882 ist Norm für C++! o kein schlechteres Java, sondern mächtiger Moderne Standardbibliotheken anwenden
Einführung in den Einsatz von Objekt-Orientierung mit C++ I
Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen
Einführung in die Nutzung der C++ - Standard - Bibliothek
Einführung in die Nutzung der C++ - Standard - Bibliothek Literatur: (Amme) - Ammeraal, L.: STL for C++-Programmers; Chichester: Wiley, 1997 (Brey) - Breymann, U.: Die C++ Standard Template Library; München:
Rekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
Objektorientierte Programmierung mit C++ Vector und List
Vector und List Ziel, Inhalt Wir lernen die Klassen vector und list aus der Standard-C++ Library kennen und anwenden. In einer Übung wenden wir diese Klassen an um einen Medienshop (CD s und Bücher) zu
1 Polymorphie (Vielgestaltigkeit)
1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen
Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden
Grundlagen der Programmierung Prof. H. Mössenböck 6. Methoden Parameterlose Methoden Beispiel: Ausgabe einer Überschrift class Sample { static void printheader() { // Methodenkopf Out.println("Artikelliste");
Proseminar: C# und.net. 6. Vortag Generische Klassen. Sebastian Wolf
Proseminar: C# und.net 6. Vortag Generische Klassen Sebastian Wolf 1 Gliederung: 1. Einleitung 2. C# 2.0 3. Beschränkte Generizität 4. Generische Methoden 5. Überladene generische Klassen 6. Was passiert
Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten
Objekt Objekt kapselt Variablen und Routinen Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten Eigenschaften jedes Objekts: Identität (identisch = mehrere
Theorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
Übung 13: Priority Queues (Vorrangwarteschlangen 1 )
Übung 13: Priority Queues (Vorrangwarteschlangen 1 ) Definition Eine Priority Queue ist eine Datenstruktur zur Speicherung einer Menge von Elementen, für die eine Halbordnung (Prioritätssteuerung) definiert
Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden
Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08
Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only
Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer
Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe
Type Erasure in Java 5 Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe Warum Generics? Containerklassen in Java 1.4 sind generisch nutzbar aber typunsicher. Public class LinkedList
Einführung in die Programmierung Wintersemester 2011/12
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Kontrollstrukturen Inhalt Wiederholungen - while
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
1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)
Praktische Informatik (Software) Vorlesung Softwareentwicklung 1 Prof. Dr. A. Ferscha Hauptklausur am 01. 02. 2001 Zuname Vorname Matr. Nr. Stud. Kennz. Sitzplatz HS / / / Punkte Note korr. Fügen Sie fehlende
Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015
Java Crashkurs Kim-Manuel Klein ([email protected]) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
Assoziative Container in C++ Christian Poulter
Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: [email protected] Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...
Einstieg in die Informatik mit Java
1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen
Stapel (Stack, Keller)
Stapel (Stack, Keller) Eine wichtige Datenstruktur ist der Stapel. Das Prinzip, dass das zuletzt eingefügte Element als erstes wieder entfernt werden muss, bezeichnet man als LIFO-Prinzip (last-in, first-out).
Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein ([email protected].
Java Crashkurs Kim-Manuel Klein ([email protected]) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
Probeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
Javakurs für Anfänger
Javakurs für Anfänger Einheit 14: Generics Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Generische Klassen (Generics) Motivation Java Typ-Prüfung Warum also Generics? Generische
Programmierkurs. SoSe 2013. Markus Geveler Inst. f. Applied Mathematics, TU Dortmund. [email protected]
Programmierkurs SoSe 2013 Markus Geveler Inst. f. Applied Mathematics, TU Dortmund [email protected] Lesson 8 Was machen wir heute hier? mehr zu pointern und Speicher mehr zu pointern
Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8
Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen
C++ - Eine Ubersicht fur Java-Programmierer
C++ - Eine Ubersicht fur Java-Programmierer Daniel Wasserrab Lehrstuhl fur Programmierparadigmen Universitat Karlsruhe 23. April 2008 C++ I Entwickelt Anfang der 80er von Bjarne Stroustrup I Beeinut von
Programmieren I. Kapitel 5. Kontrollfluss
Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,
(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT
Architektur Übersicht (allgemeine) OOP in C++ Polymorphie Virtuelle Funktionen Kompilieren Linken dynamische/statische Bibliotheken Tutorial: vs2008+ogre+(campus modell) Architektur (allgemeine) OOP in
Programmierung in C/C++
Programmierung in C/C++ Philipp Lucas [email protected] 26. 01. 2009 Philipp Lucas, CDL, UdS 1 Heute Templates STL Philipp Lucas, CDL, UdS 2 Grundlagen In der Übung: IntArray für sicheren Zugriff auf
DAP2-Programmierpraktikum Einführung in C++ (Teil 1)
DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume
Generische Datenstrukturen
Generische Datenstrukturen Prof. Dr. rer. nat. habil. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Softwaretechnologie, Prof. Uwe Aßmann 1 2 Trends in der Softwareentwicklung
Angewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS2013/14 Inhalt Übung(Aufklärung) Vererbung(wdh.) Initilisierung bei Vererbung
To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1
To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1 Rekursion: Beispiele Bier trinken 8-Damen-Problem ipod Shuffle für alle Mitarbeiter Karten
Java Einführung Collections
Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...
7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen
7. Schnittstellen Grundlagen zu Schnittstellen 7. Schnittstellen Eine Schnittstelle (Interface) ist eine Spezifikation eines Typs in Form eines Typnamens und einer Menge von Methoden, die keine Implementierungen
Einführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
12. Rekursion Grundlagen der Programmierung 1 (Java)
12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung
Javakurs für Anfänger
Javakurs für Anfänger Einheit 10: Mehr zur Vererbung und abstrakte Klassen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Mehr zur Vererbung Methoden vererben und überschreiben
Benutzerdefinierte und zusammengesetzte Datentypen
- Aufzählungstypen - Felder: Der C++-Standardtyp vector - Zeichenketten: Der C++-Standardtyp string - Strukturierte Datentypen Strukturen Unions Bitfelder Programmieren in C++ Informatik FH Trier C++06-1
Objektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
Systemnahe Programmierung in C/C++
Systemnahe Programmierung in C/C++ Peter Piehler [email protected] Lehrstuhl für Datenbanken und Informationssysteme Fakultät für Mathematik und Informatik 2006 12 13 Peter Piehler (DBIS) C/C++
Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009
Formale Spezialisierungstechniken am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009 Spezialisierungsarten (Typbeziehungen erster Art) X stellt Methoden und Eigenschaften
Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.
Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende
5. Tutorium zu Programmieren
5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting
Methoden (fortgeschritten) in C# - 1
Methoden (fortgeschritten) in C# - 1 Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Opertatoren Überladung 2. delegate 3. Anonyme Methoden delegate Lamda Ausdruck-Lamdas Anweisung-Lamdas Variablenbereich
Speicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
Klausurvorbereitung Lösung
Ausgabe 1 a) unsigned char erzeuge_bitmuster() static int z=0; int rest; unsigned char bm; rest = z % 4; z=z+1; switch (rest) case 0: bm = 0x00; break; case 1: bm = 0x11; break; case 2: bm = 0x33; break;
Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.
Ziele sind das Arbeiten mit Funktionen und dem Aufzählungstyp (enum), sowie - einfache Verzweigung (if else) - Alternativen switch case - einfache Schleifen (while oder do while) Aufgabe 3: Diese Aufgabe
13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems
13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems 13.1 Modellierung des Rucksackproblems 13.2 Lösung mit Greedy-Algorithmus 13.3 Lösung mit Backtracking 13.4 Lösung mit Dynamischer Programmierung
Aufgabenblatt Nr. 5 Generizität und TicTacToe
Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung
Algorithmen und Programmierung II
Algorithmen und Programmierung II Vererbung Prof. Dr. Margarita Esponda SS 2012 1 Imperative Grundbestandteile Parameterübergabe String-Klasse Array-Klasse Konzepte objektorientierter Programmierung Vererbung
JAVA für Nichtinformatiker - Probeklausur -
JAVA für Nichtinformatiker - Probeklausur - Die folgenden Aufgaben sollten in 150 Minuten bearbeitet werden. Aufgabe 1: Erläutere kurz die Bedeutung der folgenden Java-Schlüsselwörter und gib Sie jeweils
Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode
Methoden und Klassen Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik Wiederholung Jede Applikation braucht eine Klasse mit einer main-methode Eintrittspunkt in das Programm Die main-methode
OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik
Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Test-Besprechung! Ziele verdeutlichen Große Bild von OOP Wiederholung: Einbettung als Technik
Klausur zu Objektorientierter Softwareentwicklung in C++ 4. Februar 2003 (WS 2002/2003) Beispiellösung
Klausur zu Objektorientierter Softwareentwicklung in C++ 4. Februar 2003 (WS 2002/2003) Beispiellösung Bearbeitungszeit: 120 Minuten NICHT MIT BLEISTIFT SCHREIBEN!!! Name: Vorname: Matrikelnummer: Aufgabe
Aspekt-Orientierte Programmierung mit C++
Aspekt-Orientierte Programmierung mit C++ Georg Blaschke ([email protected]) Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Betriebssysteme und Verteilte Systeme
Programmieren - C++ Funktions-Templates
Programmieren - C++ Funktions-Templates Reiner Nitsch 8471 [email protected] Was sind Templates? C++ Templates ermöglichen generische Programmierung. Das ist Programmierung unabhängig vom speziellen
Typdeklarationen. Es gibt in Haskell bereits primitive Typen:
Typdeklarationen Es gibt in bereits primitive Typen: Integer: ganze Zahlen, z.b. 1289736781236 Int: ganze Zahlen mit Computerarithmetik, z.b. 123 Double: Fließkommazahlen, z.b. 3.14159 String: Zeichenketten,
Hochschule München, FK 03 SS Masterstudiengang Technische Berechnung und Simulation. Programmierung von CAx-Systemen Teil 1
Masterstudiengang Technische Berechnung und Simulation Programmierung von CAx-Systemen Teil 1 Name Vorname Matrikelnummer Aufgabensteller: Dr. Reichl, Dr. Küpper Hilfsmittel: Taschenrechner nicht zugelassen,
6. Iteration (Schleifenanweisungen)
6. Iteration (Schleifenanweisungen) Java-Beispiel: TemperatureTable.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 9. Nov. 2015 2 Schwerpunkte While-Anweisung: "abweisende"
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),
II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl
Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 7. Funktionen Einleitung Nach dem Prinzip Divide and Conquer bietet es sich an, größere Aufgaben in kleinere Teile zu unterteilen. Anweisungsblöcke,
Verwendung von Klassen in C++
Verwendung von Klassen in C++ Heute: Benutzerdefinierte Datentypen (Konkrete Klassen) Vektoren Komplexe Zahlen Adressdatei Morgen: Objektorientierte Programmierung (Abstrakte Klassen) Vererbung Polymorphie
Ein erstes Java-Programm
Ein erstes Java-Programm public class Rechnung { public static void main (String [] arguments) { int x, y; x = 10; y = -1 + 23 * 33 + 3 * 7 * (5 + 6); System.out.print ("Das Resultat ist "); System.out.println
Übung HP Beispielaufgaben 3
Beispielaufgaben 3 Aufgabe 1: Implementieren Sie die Klassendeklaration und drei Funktionen der Klasse Lexikon, die Elemente vom Typ wstring speichert. Die Methode rm_punct soll an Anfang und Ende des
12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)
12. Vererbung Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Vererbung Konzept!Protected Section!Virtuelle Mitgliedsfunktionen!Verwendung von Vererbung Copyright: M. Gross, ETHZ, 2003 2 Vererbung!
Invarianten und sichere Vererbung
Kapitel 7 Invarianten und sichere Vererbung Idee der Vererbung: class U extends O... bedeutet: Jedes U ist auch als O verwendbar, denn es hat mindestens dieselben Members im O-Subobjekt (Typkonformanz,
Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
Enumerations und innere Klassen
Enumerations und innere Klassen Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung
2. Semester, 2. Prüfung, Lösung
2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter
Objektorientierung Grundlagen
Prof. Dr.-Ing. Andreas Simon Telefon +49 (0)5331 939 42630 Telefax +49 (0)5331 939 43634 E-Mail [email protected] Objektorientierung Grundlagen Probeklausur 18. Mai 2015 Name: Mat.-Nr.: Vorname: Login:
13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)
13. Vererbung Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012) Vererbung Konzept Protected Section Virtuelle Mitgliedsfunktionen Verwendung von Vererbung Vererbung Vererbung ist ein Mechanismus,
Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek
Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es
Klausur in Programmieren
Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)
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
