Software ubiquitärer Systeme

Größe: px
Ab Seite anzeigen:

Download "Software ubiquitärer Systeme"

Transkript

1 Software ubiquitärer Systeme Produktlinien mit C++-Templates Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund 1

2 Inhalt Motivation Templates für Fortgeschrittene Policy-Based Design Synthesizing Objects Zusammenfassung 06.2 Produktlinien mit C++-Templates 2

3 Motivation Produktlinienkomponenten müssen wiederverwendbar sein statisch/dynamisch konfigurierbar vom Anwendungsfall unabhängig (generisch) formuliert Welche Programmiersprachenmechnismen für die generische Programmierung können genutzt werden? ist GP noch besser geeignet als OO oder AO? Analyse am Beispiel von C++ Templates [1, 2] 06.2 Produktlinien mit C++-Templates 3

4 Inhalt Motivation Templates für Fortgeschrittene Policy-Based Design Synthesizing Objects Zusammenfassung 06.2 Produktlinien mit C++-Templates 4

5 Fortgeschrittene Templates Template Metaprogramme Programmierung zur Übersetzungszeit: gezielte Code-Generierung Introspection statische Analyse der vorhandenen Typen... und es gibt noch viel mehr 06.2 Produktlinien mit C++-Templates 5

6 Template Metaprogramme (1) durch rekursive Template-Instanziierung und Template- Spezialisierung können zur Übersetzungszeit Fallunterscheidungen und Schleifen ausgeführt werden: Fac.h // Fac<I>: instanziiert Fac<I-1> rekursiv template<int I> struct Fac { enum { RES = I * Fac<I-1>::RES // Spezialisierung für <0>: terminiert die Meta-Schleife template <> struct Fac<0> { enum { RES = Produktlinien mit C++-Templates 6

7 Template Metaprogramme (2) zur Übersetzungszeit ausgeführte Berechnungen kosten zur Laufzeit nichts: main: pushl %ebp movl %esp, %ebp pushl $5040 main.cc pushl $.LC0 call #include <stdio.h> printf leave #include fac.h xorl %eax, %eax ret int main () { printf ("%d\n", Fac<7>::RES); // hier entsteht eine // Instanziierungskette! } im generierten Assembler-Code steht das Ergebnis (5040) bereits fest! mit Metaprogrammen lässt sich praktisch alles berechnen: die Sprache ist Turing-vollständig 06.2 Produktlinien mit C++-Templates 7

8 Introspection mittels Template-Spezialisierung und dem Overload- Resolution Mechanismus kann man zur Übersetzungszeit vieles über vorhandene Typen herausfinden, z.b.: template <typename Base> struct InheritDetector { typedef char (&no)[1]; typedef char (&yes)[2]; static yes test(base *); // Resultatsgröße ist 1 static no test(...); // Resultatsgröße ist 2 template <typename Derived, typename Base> struct Inherits { typedef Derived *DP; // sizeof ermittelt die Größe des Resultatsobjekts enum { RET = sizeof(inheritdetector<base>::test(dp())) == sizeof(inheritdetector<base>::yes) 06.2 Produktlinien mit C++-Templates 8

9 Inhalt Motivation Templates für Fortgeschrittene Policy-Based Design Synthesizing Objects Zusammenfassung 06.2 Produktlinien mit C++-Templates 9

10 Policy-Based Design [3] Problemfeld Entwurfsentscheidungen wie man es macht, macht man es falsch Lösungen können je nach Anwendungsfall mehr oder weniger (oder gar nicht) geeignet sein Entscheidung sollte nicht beim Entwickler einer Klasse liegen, sondern beim Anwender Ziel: Klassen konfigurierbar gestalten Schaffung einer Auswahlmöglichkeit für verschiedene Verhaltensweisen durch den Anwender 06.2 Produktlinien mit C++-Templates 10

11 Idee von Policy-based Design Klassen mit komplexem Verhalten werden in eine Host-Klasse und mehrere kleinere Policy-Klassen zerlegt jede Policy kapselt einen Belang der Host-Klasse Verbindung der komplexen Klasse mit den Policy-Klassen über C++ Templates Policies sind vom Benutzer der Klasse auswählbar der Benutzer kann also das Verhalten der Host-Klasse durch geeignete Auswahl von Policy-Klassen anpassen 06.2 Produktlinien mit C++-Templates 11

12 Beispiel: NewCreator... ist ein Klassen-Template, das neue Objekte erzeugt: template <class T> class NewCreator { public: static T *create() { return new T; }... Widget *w = NewCreator<Widget>::create(); NewCreator erzeugt alle Objekte mit new in manchen Fällen könnte anderes Verhalten erwünscht sein 06.2 Produktlinien mit C++-Templates 12

13 Beispiel: MallocCreator Alternative zum NewCreator MallocCreator fordert Speicher mit malloc() an Objekt wird mit Placement New in den Speicher gelegt template <class T> class MallocCreator { public: static T *create() { void *buf = malloc(sizeof(t)); if (!buf) return 0; // oder Exception werfen return new(buf) T; // placement new }... Widget *w = MallocCreator<Widget>::create(); 06.2 Produktlinien mit C++-Templates 13

14 Beobachtung MallocCreator und NewCreator besitzen dieselbe Schnittstelle beide verfügen über die Methode create(), die ein neues Objekt erstellen soll eine gemeinsame abstrakte Basisklasse, die die gemeinsame Schnittstelle manifestieren würde, gibt es aber nicht NewCreator lässt sich trotzdem im Quellcode durch MallocCreator ersetzen statische Polymorphie 06.2 Produktlinien mit C++-Templates 14

15 Der Begriff Policy Policies sind Schnittstellen für konfigurierbare Belange einer Klasse Policy-Klassen implementieren die von der Policy vorgegebene Schnittstelle Beispiel: Creation Policy kapselt das Erstellen von neuen Objekten Schnittstelle besteht aus der Methode create(), welche ein neues Objekt erzeugen soll Templates NewCreator und MallocCreator sind mögliche Policy-Klassen; es sind aber noch weitere denkbar 06.2 Produktlinien mit C++-Templates 15

16 Verwenden der Policy Policy-Klassen werden bei der Übersetzung mittels Template-Parameter in die Host-Klasse eingebunden Beispiel WidgetManager: template <class CreationPolicy> class WidgetManager { public: void newwidget() { Widget *w = CreationPolicy::create();... } Produktlinien mit C++-Templates 16

17 Auswahl der Policy-Klasse Anwender von WidgetManager können die Creation Policy nun auswählen: Mit NewCreator: typedef WidgetManager<NewCreator<Widget> > WM; oder mit dem MallocCreator: typedef WidgetManager<MallocCreator<Widget> > WM; Problem: Man muss immer Widget mit angeben, obwohl klar ist, dass der WidgetManager Widgets anlegen will 06.2 Produktlinien mit C++-Templates 17

18 Template Template Parameter Lösung: Host-Klasse bekommt die Policy-Klasse als Template Template Parameter übergeben: einfacher zu lesen weniger fehleranfällig: Benutzer gibt den Objekttyp nicht selbst an flexibler: WidgetManager kann auch andere Objekte erzeugen template <template <class> class CreationPolicy> class WidgetManager { public: void newwidget() { Widget *w = CreationPolicy<Widget>:create();... }... // jetzt kompakter und einfacher: typedef WidgetManager<NewCreator> WM; 06.2 Produktlinien mit C++-Templates 18

19 Weitere Möglichkeiten die Struktur der Host-Klasse ist durch Erben von der Policy-Klasse erweiterbar Host erbt Member-Variablen von den Policies Policies können zusätzliche Methoden in die Host-Klasse einbringen ( Enriched Policies ) Policies sind so nicht nur auf Verhalten beschränkt 06.2 Produktlinien mit C++-Templates 19

20 Entwurf einer Klasse mit Policies Auswahl der Policies Entscheiden, welche Belange durch Policies realisiert werden Schwierige Entwurfsentscheidungen in Policies auslagern bei mehreren Policies: möglichst orthogonale Semantik definieren Konsequenzen Policies müssen beim Entwurf der Host-Klasse festgelegt werden! nachträgliche Einführung zusätzlicher Policies schwierig (im Gegensatz zum Erweitern durch Policy-Klassen) Policy ist im Code der Host-Klasse verankert - join points sind damit explizit vorgegeben - keine gute Möglichkeit zur Modularisierung quer schneidender Belange 06.2 Produktlinien mit C++-Templates 20

21 Fazit Policy-based Design... erlaubt die getrennte Realisierung konfigurierbarer Belange in Form von Policies ermöglicht flexible Klassen, deren Verhalten der Anwender an seine Bedürfnisse anpassen kann basiert auf Sprachelementen von C++ - Templates - Template Template Parameter ein größeres Anwendungsbeispiel jetzt: Synthesizing Objects 06.2 Produktlinien mit C++-Templates 21

22 Inhalt Motivation Templates für Fortgeschrittene Policy-Based Design Synthesizing Objects Zusammenfassung 06.2 Produktlinien mit C++-Templates 22

23 Synthesizing Objects [4] Welche Programmiersprachenmechanismen für die generische Programmierung können genutzt werden? C++ Templates! Wie beschreibt man Variabilität auf einem problemadequaten abstrakten Niveau? Merkmalmodelle! Merkmal-getriebene Generierung mittels Templates 06.2 Produktlinien mit C++-Templates 23

24 Beispielszenario - Merkmale eine Familie von Listen-Klassen List [ElementType] Ownership Morphology LengthCounter Tracing external reference owned reference copy polymorphic monomorphic [LengthType]... int short long 06.2 Produktlinien mit C++-Templates 24

25 Beispielszenario - Architektur... in Form einer (erweiterten) funktionalen Hierarchie optionale Merkmale werden optionale obere Schichten weitere Variabilität durch Konfigurierbarkeit der Schichten Basisschicht mit Konfigurationswissen Tracing Tracing Layer Layer Counter Counter Layer Layer BasicList BasicList TracedList LenList PtrList Config Config ElementType : [ElementType] Destroyer : EmptyDestroyer ElementDestroyer TypeChecker : DynamicTypeChecker EmptyTypeChecker Copier : PolymorphicCopier MonomorphicCopier EmptyCopier LengthType : int short long... ReturnType 06.2 Produktlinien mit C++-Templates 25

26 Beispielszenario - Architektur... in Form einer (erweiterten) funktionalen Hierarchie optionale Merkmale werden optionale obere Schichten weitere Variabilität durch Konfigurierbarkeit der Schichten Basisschicht mit Konfigurationswissen Tracing Tracing Layer Configuration Layer TracedList Repository: Stellt Konfigurationsinformationen in Counter Counter Layer Form von Typen zur Verfügung. Layer LenList Minimiert Abhängigkeiten zwischen den Schichten. BasicList BasicList PtrList Config Config ElementType : [ElementType] Destroyer : EmptyDestroyer ElementDestroyer TypeChecker : DynamicTypeChecker EmptyTypeChecker Copier : PolymorphicCopier MonomorphicCopier EmptyCopier LengthType : int short long... ReturnType 06.2 Produktlinien mit C++-Templates 26

27 PtrList (1) Daten und Typen template <class Config_> class PtrList { public: // Config als Member-Typ zur Verfügung stellen: typedef Config_ Config; private: // Weitere Typen aus dem Configuration Repository: typedef typename Config::ElementType ElementType; typedef typename Config::SetHeadElementType SetHeadElementType; typedef typename Config::ReturnType ReturnType; // Diese Typen repräsentieren Policies! typedef typename Config::Destroyer Destroyer; typedef typename Config::TypeChecker TypeChecker; typedef typename Config::Copier Copier; private: // Datenelemente ElementType *head_; // jede Liste speichert einen Zeiger auf 1 Element ReturnType *tail_; // weitere Elemente stecken in der Liste tail_ public: // Methoden (siehe nächste Folie) Produktlinien mit C++-Templates 27

28 PtrList (2) - Methoden // Konstruktor: erzeugt eine neue Liste PtrList(SetHeadElementType &h, ReturnType *t=0) : head_(0), tail_(t) { sethead(h); } // Destruktor: ggf. das referenzierte Element löschen ~PtrList() { Destroyer::destroy (head_); } // Initialisierung des Elements: ggf. Typprüfung und Kopie void sethead(setheadelementtype &h) { TypeChecker::check(h); head_ = Copier::copy(h); } // Setter und Getter Funktionen ElementType &head() { return *head_; } void settail(returntype *t) { tail_ = t; } ReturnType *tail() const { return tail_; } wozu eigentlich SetHeadElementType&? je nachdem, ob die Elemente kopiert werden, ist das ElementType& oder const ElementType& 06.2 Produktlinien mit C++-Templates 28

29 Policies (1) - Destroyer template <class ElementType> struct ElementDestroyer { static void destroy(elementtype *e) { delete e; // Heap speicher wird freigegeben, Destruktor ausgeführt } template <class ElementType> struct EmptyDestroyer { static void destroy(elementtype *e) { // NICHTS! } der ElementDestroyer muss verwendet werden, wenn die Liste Elemente vor dem Einfügen kopiert Aufrufe von EmptyDestroyer::destroy() kann der Optimierer komplett eliminieren! 06.2 Produktlinien mit C++-Templates 29

30 Policies (2) - TypeChecker template <class ElementType> struct DynamicTypeChecker { static void check(const ElementType &e) { // Typüberprüfung mittels RTTI zur Laufzeit (Debug-Modus) assert(typeid(e)==typeid(elementtype)); } template <class ElementType> struct EmptyTypeChecker { static void check(const ElementType &e) { // NICHTS } der DynamicTypeChecker sorgt dafür, dass alle Elemente der Liste den selben Typ haben (monomorphic list)... und noch eine Klasse, die NICHTS tut Produktlinien mit C++-Templates 30

31 Policies (3) - Copier template <class ElementType> struct PolymorphicCopier { static ElementType *copy(const ElementType &e) { return e.clone(); // Kopieren mittels einer virtuellen Methode } template <class ElementType> struct MonomorphicCopier { static ElementType *copy(const ElementType &e) { return new ElementType(e); // Kopieren mittels Copy-Konstruktor } template <class ElementType> struct EmptyCopier { static ElementType *copy(elementtype &e) { return &e; // liefert einfach das Original } 06.2 Produktlinien mit C++-Templates 31

32 Zwischenfazit Traits & Policies unser PtrList Template ist hochgradig generisch: variable Aktivitäten werden durch Policies realisiert der Zugriff auf die richtige Policy-Klasse wird über das Configuration Repository gesteuert: eine Traits-Klasse was sind Traits und Policies? Traits represent natural additional properties of a template parameter Policies represent configurable behavior for generic functions and types D. Vandevoorde and M. Josuttis C++ Templates: The Complete Guide 06.2 Produktlinien mit C++-Templates 32

33 LenList optionale Wrapper Klasse 1 template <class BaseList> class LenList : public BaseList { // Template Parameter wird Basisklasse public: // Ermittlung des Configuration Repository typedef typename BaseList::Config Config; private: // Ermittlung weiterer Typen aus dem Configuration Repository: typedef typename Config::ElementType ElementType; typedef typename Config::SetHeadElementType SetHeadElementType; typedef typename Config::ReturnType ReturnType; typedef typename Config::LengthType LengthType; private: // Datenelemente LengthType length_; // Anzahl der Elemente in der Liste public: // Methoden: Erweiterungen zur Verwaltung der Länge... LenList(SetHeadElementType &h, ReturnType *t=0) : BaseList(h,t), length_(computedlength()) {} void settail(returntype *t) { BaseList::setTail(t); length_ = computedlength(); } const LengthType &length() const { return length_; } LengthType computedlength() const { return tail()? tail()->length()+1 : 1; } 06.2 Produktlinien mit C++-Templates 33

34 TracedList optionaler Wrapper 2 template <class BaseList> class TracedList : public BaseList { // Template Parameter wird Basisklasse public: // Ermittlung des Configuration Repository typedef typename BaseList::Config Config; private: // Ermittlung weiteree Typen aus dem Configuration Repository: typedef typename Config::ElementType ElementType; typedef typename Config::SetHeadElementType SetHeadElementType; typedef typename Config::ReturnType ReturnType; public: // Methoden: Wrapper zur Ausgabe des Funktionsnamens TracedList(SetHeadElementType &h, ReturnType *t=0) : BaseList(h,t) {} void sethead(setheadelementtype &h) { cout << "sethead(" << h << ")" << endl; BaseList::setHead(h); } ElementType &head() { cout << "head()" << endl; return BaseList::head(); } void settail(returntype *t) { cout << "settail(t)" << endl; BaseList::setTail(t); } 06.2 Produktlinien mit C++-Templates 34

35 Konfigurierung Variante 1... erfolgt durch Anlegen eines Configuration Repository struct TracedCopyMonoPersonLenListConfig { // typedefs, die von den Komponenten benötigt werden typedef Person ElementType; typedef const ElementType SetHeadElementType; typedef int LengthType typedef ElementDestroyer<ElementType> Destroyer; typedef DynamicTypeChecker<ElementType> TypeChecker; typedef MonomorphicCopier<ElementType> Copier; // PtrList wird in LenList und TracedList verpackt typedef TracedList< LenList< PtrList<TracedCopyMonoPersonLenListConfig> > > ReturnType; // und nun noch ein kürzerer Name... typedef TracedCopyMonoPersonLenListConfig::ReturnType MyList1; 06.2 Produktlinien mit C++-Templates 35

36 Konfigurierung Variante 1... erfolgt durch Anlegen eines Configuration Repository struct TracedCopyMonoPersonLenListConfig { // typedefs, die von den Komponenten benötigt werden typedef Person ElementType; typedef const ElementType SetHeadElementType; typedef int LengthType typedef ElementDestroyer<ElementType> Destroyer; typedef DynamicTypeChecker<ElementType> TypeChecker; typedef MonomorphicCopier<ElementType> Copier; // PtrList wird in LenList und TracedList verpackt typedef Weg der Konfigurationsinformationen TracedList< LenList< PtrList<TracedCopyMonoPersonLenListConfig> > > ReturnType; // und nun noch ein kürzerer Name... typedef TracedCopyMonoPersonLenListConfig::ReturnType MyList1; 06.2 Produktlinien mit C++-Templates 36

37 Konfigurierung Variante 2... oder z.b. so: struct RefPolyPersonListConfig { // typedefs, die von den Komponenten benötigt werden typedef Person ElementType; typedef ElementType SetHeadElementType; typedef EmptyDestroyer<ElementType> Destroyer; typedef EmptyTypeChecker<ElementType> TypeChecker; typedef EmptyCopier<ElementType> Copier; // PtrList wird direkt verwendet typedef PtrList<RefPolyPersonListConfig> ReturnType; // und nun noch ein kürzerer Name... typedef RefPolyPersonListConfig::ReturnType MyList2; 06.2 Produktlinien mit C++-Templates 37

38 Zwischenfazit mit Hilfe von unterschiedlichen Configuration Repositories lassen sich 24 verschiedene Listentypen erzeugen wer erstellt die Configuration Repositories? der Listen-Entwickler - bei 24 Varianten gerade noch machbar, bei tausenden nicht! der Anwender der Listen - mühsam und fehlerträchtig - viel Wissen über interne Strukturen nötig Antwort: Konfigurierung durch den Anwender auf abstrakter Ebene mit Hilfe der Merkmale das Configuration Repository muss generiert werden; das ist die Aufgabe des Configuration Generator - Template Metaprogrammierung! 06.2 Produktlinien mit C++-Templates 38

39 Der Configuration Generator (1)... erwartet Merkmale als Eingabe: enum Ownership { ext_ref, own_ref, cp enum Morphology { mono, poly enum CounterFlag { with_counter, no_counter enum TracingFlag { with_tracing, no_tracing... basiert auf einem kleinen Hilfs-Template: template <bool cond, class ThenType, class ElseType> struct IF { typedef ThenType RET; // Spezialisierung für false template <class ThenType, class ElseType> struct IF<false, ThenType, ElseType> { typedef ElseType RET;... und wird so benutzt: ganz einfach! typedef LIST_GENERATOR<Person, ext_ref, poly>::ret MyList3; 06.2 Produktlinien mit C++-Templates 39

40 Der Configuration Generator (2) template < class ElementType_ = int, Ownership ownership = cp, Morphology morphology = mono, CounterFlag counterflag= no_counter, TracingFlag tracingflag = no_tracing, class LengthType_ = int> class LIST_GENERATOR { public: typedef LIST_GENERATOR<ElementType_, ownership,...> Generator; private: // Konfigurierungslogik wird durch IFs ausgedrückt... typedef IF<ownership==cp ownership==own_ref, ElementDestroyer<ElementType_>, EmptyDestroyer<ElementType_> >::RET Destroyer_; typedef IF<morphology==mono, DynamicTypeChecker<ElementType_>, EmptyTypeChecker<ElementType_> >::RET TypeChecker_;... typedef PtrList<Generator> List; typedef IF<counterFlag==with_counter, LenList<List>, List>::RET List_with_counter_or_not; typedef IF<tracingFlag==with_tracing, TracedList<List_with_counter_or_not>, List_with_counter_or_not>::RET List_with_tracing_or_not; // öffentliche Typen... (nächste Seite) 06.2 Produktlinien mit C++-Templates 40

41 Der Configuration Generator (3) public: // öffentliche Typen typedef List_with_tracing_or_not RET; struct Config { typedef ElementType_ ElementType; typedef SetHeadElementType_ SetHeadElementType;... typedef RET ReturnType; da Config jetzt eine generierte Klasse im Generator ist, muss die PtrList Klasse minimal angepasst werden. template <class Generator> class PtrList { public: typedef typename Generator::Config Config; // der Rest wie gehabt Produktlinien mit C++-Templates 41

42 Inhalt Motivation Templates für Fortgeschrittene Policy-Based Design Synthesizing Objects Zusammenfassung 06.2 Produktlinien mit C++-Templates 42

43 Zusammenfassung C++ Templates bilden das notwendige Handwerkszeug, um mit C++ generisch zu programmieren Merkmalmodelle bilden das Handwerkszeug, um Variabilität von Produktlinien zu beschreiben in Synthesizing Objects verbinden U. Eisenecker und K. Czarnecki beide Techniken Trennung der Belange durch Configuration Repositories und Configuration Generators Anwendung der Template-Metaprogrammierung und von Policy-Based Design der Ansatz erfordert, dass man die Nachteile der Programmierung mit C++ Templates in Kauf nimmt Fehlermeldungen, Übersetzungszeiten, Syntax, Produktlinien mit C++-Templates 43

44 Literatur [1] D. Vandevoorde, N.M. Josuttis, C++ Templates: The Complete Guide. Addison-Wesley, 2003, ISBN [2] The C++ Standard BS ISO/IEC 14882:2003 (Second Edition). John Wiley & Sons, Ltd., 2003, ISBN [3] A. Alexandrescu, Modern C++ Design Generic Programming and Design Patterns Applied. Addison-Wesley, 2002, ISBN [4] K. Czarnecki und U. Eisenecker, Synthesizing Objects. Concurrency: Practice and Experience, John Wiley & Sons, Ltd Produktlinien mit C++-Templates 44

C++ Templates. Betriebssystemtechnik. Motivation. Warum Templates? Überblick. Operating System Engineering (OSE)

C++ Templates. Betriebssystemtechnik. Motivation. Warum Templates? Überblick. Operating System Engineering (OSE) Betriebssystemtechnik Operating System Engineering (OSE) C++ Templates Motivation Produktlinienkomponenten müssen wiederverwendbar sein statisch/dynamisch konfigurierbar vom Anwendungsfall unabhängig (generisch)

Mehr

Objektorientierte Programmierung

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

Mehr

Objektorientierte Programmierung mit C++ SS 2007

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

Mehr

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg C vs. C++ Sebastian Meyer Universität Hamburg Proseminar C - Grundlagen und Konzepte 2013 1 / 31 Gliederung 1 Einführung 2 Vergleich der Spracheigenschaften 3 Neue Sprachelemente in C++ 4 Fazit 5 Zusammenfassung

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

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

Mehr

Objektbasierte Entwicklung

Objektbasierte Entwicklung Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit

Mehr

Abschnitt 9: Schnittstellen: Interfaces

Abschnitt 9: Schnittstellen: Interfaces Abschnitt 9: Schnittstellen: Interfaces 9. Schnittstellen: Interfaces 9.1 Die Idee der Schnittstellen 9.2 Schnittstellen in Java 9.3 Marker-Interfaces 9.4 Interfaces und Hilfsklassen 9.5 Zusammenfassung

Mehr

C++-Zusammenfassung. H. Schaudt. August 18, 2005

C++-Zusammenfassung. H. Schaudt. August 18, 2005 C++-Zusammenfassung H. Schaudt August 18, 2005 1 Datentypen 1.1 Grunddatentypen int (-32xxx bis +32xxx, implementerungs-abhängig) char -128 bis +128 float double bool (C++) int und char sind austauschbar:

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 11 Dynamische Feldvereinbarung... 11-2 11.1 Dynamische Vereinbarung von Vektoren... 11-3 11.2 Dynamische Vereinbarung von Matrizen... 11-5 11.3 Die Kommandozeile... 11-8 Propädeutikum 11-1/8 11

Mehr

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT

(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

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

1 Polymorphie (Vielgestaltigkeit)

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

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,

Mehr

Praktikum Betriebssysteme 1. Aufgabe (1)

Praktikum Betriebssysteme 1. Aufgabe (1) FG TECHNISCHE INFORMATIK U BS 041 01 TH 09 Praktikum Betriebssysteme 1. Aufgabe (1) Es wird ein unter LINUX lauffähiges C++-Programm ptab, mit dem Informationen über die Partitionierung von Festplatten

Mehr

Programmieren - Vererbung & Polymorphie

Programmieren - Vererbung & Polymorphie Programmieren - Vererbung & Polymorphie Reiner Nitsch r.nitsch@fbi.h-da.de Vererbung - Was ist das? Vererbung ist ein wichtiges Konzept zur Unterstützung der Wiederverwendbarkeit, wenn auch nicht das Wichtigste.

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

OO Softwareentwicklung

OO Softwareentwicklung OO Softwareentwicklung Objektorientierung Prof. Dr. Bernhard Schiefer 1 OO als Ansatz zur Verbesserung der Software-Qualität Modellierung der Welt als selbständig agierende Objekte. Gemeinsame Beschreibung

Mehr

2. Semester, 2. Prüfung, Lösung

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

Mehr

CORBA Implementierung von Client und Server

CORBA Implementierung von Client und Server CORBA Implementierung von Client und Server J. Heinzelreiter WS 2003/04 Implementierung des Clients Initialisierung und Freigabe des ORBs. Mapping von Interfaces. Behandlung von Objektreferenzen. Verwaltung

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

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

Mehr

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Meeting C++ C++11 R-Value Referenzen

Meeting C++ C++11 R-Value Referenzen Meeting C++ Detlef Wilkening http://www.wilkening-online.de 09.11.2012 Inhalt Motivation L-Values und R-Values R-Value Referenzen Move Semantik std::move Funktionen mit R-Value-Referenz Parametern Fazit

Mehr

Timo Wagner & Sebastian Kühn Entwurf einer Multi-Tier Anwendung in ASP.NET

Timo Wagner & Sebastian Kühn Entwurf einer Multi-Tier Anwendung in ASP.NET Timo Wagner & Sebastian Kühn Entwurf einer Multi-Tier Anwendung in ASP.NET Überblick 1.Einfürung in die Multi-Tier Architektur 2.Ausgangspunkt und Probleme 3.Rundgang durch die Architektur 4.Architektur

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

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

Mehr

Probeklausur: Programmierung WS04/05

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,

Mehr

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) 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!

Mehr

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008 PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 1 PIWIN I Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I Vorlesung 3 SWS WS 2007/2008 FB Informatik

Mehr

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04) 10. Klassen Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Objektorientierte Programmierung!Das Konzept der Klassen!Members!Objekte!Konstruktoren und Destruktoren!this-Pointer!Public und Private

Mehr

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung K05 Vererbung & Polymorphie in C++ 1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung 2 Vererbung in C++: Grundlagen Analog zu Java unterstützt C++ das Konzept der Vererbung:

Mehr

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Wozu objektorientiertes Programmieren? Die Welt besteht für den Menschen

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Programmierkurs C++ Kapitel 7:Objektorientierte Programmierung Seite 1 Objektorientierte Programmierung If programming in PASCAL is like put in a straightjacket, then programming in C is like playing with

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Funktionen und Parameter

Funktionen und Parameter Funktionen in C++ Funktionen und Parameter Wie in Java: Parameter sind lokale Variablen Argumente werden bei Aufruf zugewiesen Extras: Zeiger-Parameter für alle Typen: als Rückgabewerte um große Kopien

Mehr

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich: Source-Files Programm == Source-File nicht sinnvoll Unübersichtlich Bei jeder kleinen Änderung gesamtes File neu übersetzen Übersetzen dauert lange Keine Gruppenarbeit möglich Programm in Source-Files

Mehr

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Übung 1 mit C# 6.0 MATTHIAS RONCORONI Übung 1 mit C# 6.0 MATTHIAS RONCORONI Inhalt 2 1. Überblick über C# 2. Lösung der Übung 1 3. Code 4. Demo C# allgemein 3 aktuell: C# 6.0 mit.net-framework 4.6: Multiparadigmatisch (Strukturiert, Objektorientiert,

Mehr

Software-Entwurfsmuster

Software-Entwurfsmuster Software-Entwurfsmuster Prinzip von Entwurfsmustern und einige elementare Beispiele Malte Spiess malte@mathematik.uni-ulm.de Seminar Bildanalyse und Simulation mit Java im WS 2003/2004 Universität Ulm

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr

Klassenbeziehungen & Vererbung

Klassenbeziehungen & Vererbung Klassenbeziehungen & Vererbung VL Objektorientierte Programmierung Raimund Kirner teilweise nach Folien von Franz Puntigam, TU Wien Überblick Arten von Klassenbeziehungen Untertypen versus Vererbung in

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

Objektorientierte Programmierung mit C++ Vector und List

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

Mehr

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller Datum, Zeit, 08:00 09:30 Uhr (90 min) Aufgabenblätter 14 Seiten (einschl. Deckblatt) erreichbare Punktzahl 54 zugelassene

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Objektorientiertes JavaScript

Objektorientiertes JavaScript Objektorientiertes JavaScript Christoph Fabritz dm121506@fhstp.ac.at http://goo.gl/jzqxnw Inhalt JavaScript Objektorientierung OO in JavaScript Literatur JavaScript Interpretiert / gescriptet Dynamische

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Software ubiquitärer Systeme

Software ubiquitärer Systeme Software ubiquitärer Systeme Übung 3: Aspekte in Betriebssystemen und AspectC++-Tutorial Michael Engel und Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Mehr

Code-Erzeugung aus UML-Klassendiagrammen

Code-Erzeugung aus UML-Klassendiagrammen Dominik 09.03.2009 Universität Ulm Gessenharter Inst. f. Programmiermethodik und Compilerbau Code-Erzeugung aus UML-Klassendiagrammen Theorie und Praxis Seite 2 REConf 2009 München Dominik Gessenharter

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

Mehr

Effiziente Java Programmierung

Effiziente Java Programmierung Effiziente Java Programmierung Seminar Implementierung moderner virtueller Maschinen am Beispiel von Java SS 2009 von Reinhard Klaus Losse 20. Mai 2009 Gliederung Definition Effizienz Werkzeuge zum Messen

Mehr

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

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

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) 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,

Mehr

Kompaktkurs C-Programmierung

Kompaktkurs C-Programmierung Kompaktkurs C-Programmierung 26. 03. 2007 Franz Schenk Organisatorisches Vorlesung Accountvergabe Skriptverkauf Übungen: zwei Blöcke (13:15-14:45 / 14:45-16:15) Gruppenübung Rechnerübung Klausur Ferien:

Mehr

1. Von der Idee zur Software 2. Funktionen und Datenstrukturen Lehrbuch: 4.3 3. Organisation des Quellcodes 4. Werte- und Referenzsemantik

1. Von der Idee zur Software 2. Funktionen und Datenstrukturen Lehrbuch: 4.3 3. Organisation des Quellcodes 4. Werte- und Referenzsemantik Software-Technik: Vom Programmierer zur erfolgreichen Software-Technik: Vom Programmierer zur erfolgreichen 1. Von der Idee zur Software 2. Funktionen und Datenstrukturen Lehrbuch: 4.3 3. Organisation

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009

Mehr

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber 1) Welche Antworten zur Operatorüberladung sind richtig? (1) a) C++ - Operatoren können zusammen mit Objekten funktionieren b) C++ - Operatoren wird

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

12) Generische Datenstrukturen

12) Generische Datenstrukturen 12) Generische Datenstrukturen Prof. Dr. rer. nat. habil. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Version 09-0.2, 24.11.08 Softwaretechnologie, Prof. Uwe Aßmann 1 mpfohlene

Mehr

Real-Life Template Meta-Programmierung

Real-Life Template Meta-Programmierung Meeting C++ 2013 Real-Life Template Meta-Programmierung Detlef Wilkening http://www.wilkening-online.de 09.11.2013 http://www.wilkening-online.de 1 / 85 Einleitung Es geht los Typ-Container Typ-Funktionen

Mehr

4 Vererbung, Polymorphie

4 Vererbung, Polymorphie 4 Vererbung, Polymorphie Jörn Loviscach Versionsstand: 21. März 2014, 22:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work

Mehr

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten O Reillys Taschenbibliothek 3. Auflage C# 5.0 kurz & gut O REILLY Joseph Albahari & Ben Albahari Aktualisierung von Lars Schulten Inhalt C# 5.0 kurz & gut... 1 Ein erstes C#-Programm... 2 Syntax... 5 Typgrundlagen...

Mehr

C++ IN DER EMBEDDED-ENTWICKLUNG WAS DRAN IST AN DEN VORURTEILEN

C++ IN DER EMBEDDED-ENTWICKLUNG WAS DRAN IST AN DEN VORURTEILEN C++ IN DER EMBEDDED-ENTWICKLUNG WAS DRAN IST AN DEN VORURTEILEN Günter Obiltschnig Applied Informatics Software Engineering GmbH St. Peter 33 9184 St. Jakob im Rosental Austria guenter.obiltschnig@appinf.com

Mehr

Generische Datenstrukturen

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

Mehr

620.900 Propädeutikum zur Programmierung

620.900 Propädeutikum zur Programmierung 620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt Andreas.Bollin@uni-klu.ac.at Tel: 0463 / 2700-3516 Arrays Wiederholung (1/5) Array = GEORDNETE

Mehr

Zusammenfassung und Ausblick

Zusammenfassung und Ausblick Betriebssystemtechnik Operating System Engineering (OSE) Zusammenfassung und Ausblick Überblick Zusammenfassung: Software-Produktlinien Prinzipien Methoden Werkzeuge Herausforderungen für die Zukunft Automatische

Mehr

Einführung in OO PHP. Jan Burkl Solution Consultant Zend Technologies. All rights reserved. Zend Technologies, Inc.

Einführung in OO PHP. Jan Burkl Solution Consultant Zend Technologies. All rights reserved. Zend Technologies, Inc. Einführung in OO PHP Jan Burkl Solution Consultant Zend Technologies 2 Für wen ist dieses Webinar gemacht? Neu in PHP Neu in Object Oriented Design Offen zu neuen Ideen und Methoden Das ist kein DEEP DIVE

Mehr

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 1: Grundlagen

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 1: Grundlagen C# Programmierung Eine Einführung in das.net Framework C# Programmierung - Tag 1: Grundlagen 1/27/2012 1 Vorstellung Kursleiter Florian Rappl 9 Jahre Erfahrung mit C# Ausbildung zum Fachinformatiker bei

Mehr

Programmieren in C++ Arrays, Strings und Zeigerarithmetik

Programmieren in C++ Arrays, Strings und Zeigerarithmetik Programmieren in C++ Arrays, Strings und Zeigerarithmetik Inhalt Eindimensionale C-Arrays C-Strings und Strings (Mehrdimensionale C-Arrays) Arrays und Vektoren (C++) Unique Pointers (C++11) Zeigerarithmetik

Mehr

LavA OS: Ein Betriebssystem für konfigurierbare MPSoCs

LavA OS: Ein Betriebssystem für konfigurierbare MPSoCs LavA OS: Ein Betriebssystem für konfigurierbare MPSoCs Diplomarbeit Abschlussvortrag Stephan Vogt stephan.vogt@cs.uni-dortmund.de 1 Inhalt Einleitung Wiederverwendung von BS Arbeiten an CiAO Kommunikation

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 Die Vererbung ermöglicht es, neue Klassen auf der Basis von schon

Mehr

Von der UML nach C++

Von der UML nach C++ 22 Von der UML nach C++ Dieses Kapitel behandelt die folgenden Themen: Vererbung Interfaces Assoziationen Multiplizität Aggregation Komposition Die Unified Modeling Language (UML) ist eine weit verbreitete

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22 Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften

Mehr

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **

Mehr

Alltagsnotizen eines Softwareentwicklers

Alltagsnotizen eines Softwareentwicklers Alltagsnotizen eines Softwareentwicklers Entkoppeln von Objekten durch Callbacks mit c++-interfaces oder boost.function und boost.bind Tags: c++, entkoppeln, objekt, oop, callback, boost.bind, boost.function,

Mehr

Objektorientierung: Klassen und Objekte

Objektorientierung: Klassen und Objekte Vorlesung und Übung Universität Paderborn Wintersemester 2015/2016 Dr. Peter Pfahler Objektorientierung: Klassen und Objekte EWS, WS 2015/16, Pfahler L-1 Objektorientierung behandelt in "Einführung in

Mehr

Fortgeschrittene C++-Programmierung

Fortgeschrittene C++-Programmierung Vorlesung: "Fortgeschrittene C++-Programmierung" 16.04.2009 Fortgeschrittene C++-Programmierung SS 2009 Teil 1 Sandro Andreotti - andreott@inf.fu-berlin.de 1 Vorlesung: "Fortgeschrittene C++-Programmierung"

Mehr

12) Generische Datenstrukturen

12) Generische Datenstrukturen mpfohlene Literatur 12) Generische Datenstrukturen http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf rof. Dr. rer. nat. habil. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden

Mehr

Widmung... 5. Einleitung... 15. Vorwort 15 Übersicht zu diesem Buch 17. 1 Einführung in die Welt der Objektorientierung... 21

Widmung... 5. Einleitung... 15. Vorwort 15 Übersicht zu diesem Buch 17. 1 Einführung in die Welt der Objektorientierung... 21 Inhaltsverzeichnis Widmung........................................ 5 Einleitung...................................... 15 Vorwort 15 Übersicht zu diesem Buch 17 1 Einführung in die Welt der Objektorientierung.........

Mehr

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany C++ Programmierung Uwe Naumann LuFG Informatik 12, RWTH Aachen University, Germany Leave me alone world... Hauptprogramm int main(); return 0; Ausgabe auf Bildschrim #include std :: cout

Mehr

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Informatik I 2 Übung 9 Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Quellcode Strukturieren Wenn alle Funktionen in einer Datei zusammengefasst sind wird es schnell unübersichtlich Mehrere

Mehr

Angewandte IT-Sicherheit

Angewandte IT-Sicherheit Angewandte IT-Sicherheit Johannes Stüttgen Lehrstuhl für praktische Informatik I 30.11.2010 Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 1 / 28 Aufgabe 1 Betrachten sie folgendes Programm:

Mehr

SWIG Simplified Wrapper and Interface Generator. Christian Claus

SWIG Simplified Wrapper and Interface Generator. Christian Claus SWIG Simplified Wrapper and Interface Generator Christian Claus 1 Inhaltsübersicht 1. Einführung in SWIG 2. Funktionsweise von SWIG 3. Beispiel 4. SWIG im Detail 5. Fazit 2 Einführung in SWIG 3 Was ist

Mehr

C#Objektorientierte. Aleksandra Maj. Programmiersprachen. Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars. 15.

C#Objektorientierte. Aleksandra Maj. Programmiersprachen. Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars. 15. C#Objektorientierte Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars Programmiersprachen 15.Juli 2004 Aleksandra Maj 1 1.Einleitung Kurze Geschichte und Ziele der neuen Programmiersprache

Mehr

Übungsaufgabe Transaktion als Middleware

Übungsaufgabe Transaktion als Middleware Übungsaufgabe Transaktion als Middleware und Java Persistence API Client/Server Abstraktes Komponentenmodell Entscheidende Punkte Erweiterung der Invoke-Methode Context-Verwaltung Transaktionsbehandlung

Mehr

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Grundlagen. Die Komponenten eines C Programms. Das erste Programm Grundlagen 1. Die Komponenten eines C Programms 2. Ein Programm erzeugen und übersetzen 3. Variablen Deklarieren und Werte zuweisen 4. Zahlen eingeben mit der Tastatur 5. Arithmetische Ausdrücke und Berechnungen

Mehr

4. Objektorientierte Programmierung mit C++

4. Objektorientierte Programmierung mit C++ 4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung/ Sprachfamilie Nicht objektorientierte Erweiterungen von C Grundlagen des Typkonzepts von C++ Ziele der Objektorientierung Objekt

Mehr

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Funktionen Prof. Dr. Nikolaus Wulff Rekursive Funktionen Jede C Funktion besitzt ihren eigenen lokalen Satz an Variablen. Dies bietet ganze neue Möglichkeiten Funktionen zu

Mehr

Installation und Benutzung AD.NAV.ZipTools

Installation und Benutzung AD.NAV.ZipTools Installation und Benutzung AD.NAV.ZipTools Version 1.0.0.0 ALTENBRAND Datentechnik GmbH Am Gelicht 5 35279 Neustadt (Hessen) Tel: 06692/202 290 Fax: 06692/204 741 email: support@altenbrand.de Die Komponente

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Ulla Kirch Peter Prinz C+ + Lernen und professionell anwenden. mitp

Ulla Kirch Peter Prinz C+ + Lernen und professionell anwenden. mitp Ulla Kirch Peter Prinz C+ + Lernen und professionell anwenden mitp Inhaltsverzeichnis Einleitung 19 Grundlagen 21 Entwicklung und Eigenschaften von C++ 22 Objektorientierte Programmierung 24 Erstellen

Mehr

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

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr