Objektbasierte Entwicklung

Größe: px
Ab Seite anzeigen:

Download "Objektbasierte Entwicklung"

Transkript

1 Objektbasierte Entwicklung Die kanonische Form von C Strukturen und was haben Abstrakte Datentypen mit der JVM zu tun? Prof. Dr. Nikolaus Wulff

2 ADT in C Objekte mit gemeinsamen Attributen und Verhalten werden als Instanzen einer Klasse modelliert. Beispiele: Konto, Kunde, Buchung etc. C kennt zwar keine Klassen, es lassen sich jedoch mit Strukturen entsprechende Abstrakte Datentypen definieren. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 2

3 Klassen in C Gemeinsame Attribute lassen sich in C mit Hilfe einer Struktur in einer *.h Datei definieren: struct konto_struct { char* waehrung; char* kontonr; double saldo; }; Das gemeinsame Verhalten aller Konto Instanzen wird durch entsprechende Methoden abgebildet: extern double getsaldo(struct konto_struct* konto); Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 3

4 C Strukturen Die im Header deklarierten Strukturen und Methoden stellen die öffentliche Schnittstelle der modellierten Klasse da: Zwei Attribute kontonr, saldo sowie die Methode getsaldo. Damit die Methode auf dem jeweiligen Konto operieren kann wird eine Referenz auf die Struktur des Kontos übergeben. Die Implementierung in Konto.c ist trivial: #include "Konto.h" double getsaldo(struct konto_struct* konto) { return konto->saldo; } Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 4

5 Verwendung der C Klasse Die Verwendung dieses ADT könnte so aussehen: #include <stdio.h> #include "Konto.h" int main(int argc, char* argv[]) { struct konto_struct konto = {"Euro","08-a",10000}; printf("konto %s hat ein Saldo von %f %s\n", getkontonr(&konto), getsaldo(&konto), getwaehrung(&konto) ); } return 0; Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 5

6 Eigene Typen definieren Lästig ist die Pointer Arithmetik und das Offenlegen der Struktur. Hier erweist sich die Definition eines eigenen Typen per typedef als nützlich: typedef struct konto_struct* Konto; Die Methode double getsaldo(struct konto_struct* konto); kann dann prägnanter geschrieben werden als: double getsaldo(konto konto); Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 6

7 Verwendung des ADTs #include <stdio.h> #include <stdlib.h> #include "Konto.h" int main(int argc, char* argv[]) { Konto konto = newkonto(euro, " ", 10000); } printf("konto %s hat ein Saldo von %f %s\n", getkontonr(konto), getsaldo(konto), getwaehrung(konto) ); free(konto); return 0; Konten sind jetzt Pointer und erfordern malloc und free! Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 7

8 Klassen erweitern Die Methode getsaldo erscheint auf dem ersten Blick überflüssig, das Attribut saldo kann auch direkt der Struktur entnommen werden... Was ist jedoch bei unterschiedlichen Ausprägungen von Konto, z.b. einem Fremdwährungskonto bei dem der aktuelle Wert berechnet werden muss? Hierzu muss die Kontostruktur entsprechen erweitert werden. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 8

9 Vererbung in C Das Fremdwährungskonto ist eine Spezialisierung eines Kontos mit zusätzlichen Attributen und nach außen gleichem Verhalten: typedef struct fremdwaehrungs_konto_struct { char* waehrung; char* kontonr; double saldo; double konvertierung; } *FremdKonto; Ein solches Fremdkonto kann wie ein Konto verwendet werden. Es muß jedoch die getsaldo Methode anders darauf reagieren. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 9

10 Methoden erweitern Die Methode getsaldo reagiert je nach Kontoausprägung unterschiedlich: double getsaldo(konto konto) { double saldo = konto->saldo; if (!strcmp(euro, konto->waehrung)) { } saldo *= ((FremdKonto)konto)->konvertierung; } return saldo; Handelt es sich um ein Fremdwährungskonto wird entsprechend umgerechnet. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 10

11 Das Methoden Problem Es stört, das die Methode getsaldo für jede mögliche Kontoart anders reagieren muss. Die Alternative zwei unterschiedliche Methoden getsaldo und getsaldofremdwaehrung zu implementieren klingt auch nicht gut, denn der aufrufende Client sieht dann nicht mehr eine einheitliche Konto Schnittstelle. Hierzu bietet es sich an die Methoden zu überladen und an den jeweiligen Kontostrukturen zu verankern. C kennt hierzu das Konstrukt eines Pointers auf eine Methode. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 11

12 Function Pointer Die aufzurufende Methode wird direkt an der Struktur notiert: struct konto_struct { char* waehrung; char* kontonr; double saldo; double (*getsaldo)(konto konto); }; Beim Erzeugen der unterschiedlichen Konto Typen muß im newkonto Konstruktor der Pointer auf eine entsprechende Methode gesetzt werden. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 12

13 Überladene Methoden Die Methoden werden mit dem static Attribute auf private gesetzt und sind von außen nicht aufrufbar: static double geteurosaldo(konto konto) { double saldo = konto->saldo; return saldo; } static double getforeignsaldo(konto konto) { double saldo = konto->saldo; saldo *= ((FremdKonto)konto)->konvertierung; return saldo; } Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 13

14 Ein C Konstruktor Konto newkonto(char* waehrung, char* kontonr, double saldo) Konto konto; if (!strcmp(euro, waehrung) ) { konto = (Konto) malloc(sizeof(struct konto_struct)); konto->getsaldo = geteurosaldo; } else { konto = (Konto) malloc(sizeof(struct fremdwaehrungs_ konto->getsaldo = getforeignsaldo; Konto->konvertierung = getkonvertierung(waehrung); } konto->waehrung = waehrung; konto->kontonr = kontonr; konto->saldo = saldo; return konto; } Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 14

15 Transparenter Methodenaufruf Der Aufruf der unterschiedlichen Konten ist jetzt bis auf den Konstruktor identisch: Konto konto = newkonto(euro, " ",10000); Konto fremd = newkonto(usd, " ", 500); printf(" EuroKonto %f \n", konto->getsaldo(konto) ); printf(" FremdKonto %f \n",fremd->getsaldo(fremd) ); Beim Fremdkonto wird jedoch automatisch eine andere Implementierung der getsaldo Methode aufgerufen, ohne das der Aufrufer diese bemerkt! Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 15

16 Doppelte Verkettung Was stört, ist die doppelte Verwendung der Konto Struktur: konto->getsaldo(konto); Zum einen enthält die Kontostruktur den Pointer auf die zu verwendende Methode, zum anderen benötigt diese Methode genau die Attribute der Struktur zum Berechnen des Saldos... Hier kann der Präprozessor kosmetisch helfen: #define actualsaldo(k) (k)->getsaldo((k)) printf(" Saldo von %f \n", actualsaldo(konto) ); Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 16

17 Ein Diagramm Editor Ein Diagramm Editor soll generische 2D-Objekte zeichnen und verwalten können. Es gibt unterschiedliche 2D-Objekte, wie Rechtecke, Kreise, Textfelder, etc. Die 2D-Objekte werden durch den ADT Shape modelliert, der den abstrakten Oberbegriff und die gemeinsamen Attribute und Methoden bereitstellt. Shapes werden durch eine entsprechende C Struktur implementiert. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 17

18 Diagramm Editor Design Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 18

19 Verkettung von Strukturen Die Struktur eines Shapes ist für alle geometrischen Objekte einheitlich: #ifndef SHAPE_H_ #define SHAPE_H_ #include <assert.h> #include <stdarg.h> typedef struct shape_struct* Shape; struct shape_struct { int x; int y; void (*draw) (Shape ashape); }; Shape.h Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 19

20 Erweiterungen von Strukturen Die zusätzlichen Argumente des Rechtecks werden dann hinten angehängt : #ifndef RECT_H_ Rect.h #define RECT_H_ #include "Shape.h" typedef struct rect_struct* Rect; struct rect_struct { int x; int y; void (*draw) (Shape ashape); int w; int h; }; Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 20

21 Casting von Strukturen Die unterschiedlichen Pointer von Shape Strukturen lassen sich gefahrlos aufeinander casten, solange die Strukturen zueinander kompatibel sind: Shape int x; int y; draw Cast-Grenze Circle int x; int y; draw int r; drawcircle Rect int x; int y; draw int w; int h; drawrect Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 21

22 Gefährliches Casten Diese Art von Strukturvererbung ist zwar sehr elegant aber auch sehr gefährlich. Was ist wenn die Shape.h Struktur verändert wird ohne das Rect.h angepasst wird? Shape char t; int x; int y; draw Circle int x; int y; draw int r; xfe32 10 xfe32:drawcircle Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 22

23 Gefährliches Casten Wird ein solches Rect Struct auf ein Shape gecasted so ist dies auf Grund der Strukturveränderung nicht mehr konform. Der Methoden Pointer zeigt in den Datenbereich und wird zu einem Absturz führen. Circle Shape 10:Nirwana char int x; t; int y; x; draw inty; draw int r; xfe32 10 xfe32:drawcircle Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 23

24 Automatisierung der Vererbung Gesucht wird eine Möglichkeit diese gefährlichen Seiteneffekte zu verhindern: struct p2d { int x; int y; }; struct p2d { int x; int y; }; struct p3d { int x; int y; int z; }; struct p3d { struct p2d p2; int z; }; Die rechte Version garantiert, dass alle Änderungen von p2d automatisch auch für p3d gelten. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 24

25 Vererbung versus Aggregation Leider drückt die rechte Seite nicht dasselbe wie die linke Seite aus. Wir versuchen mit C Vererbung zu emulieren. Die rechte Seite modelliert jedoch keine Vererbung sondern eine Aggregation! Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 25

26 Verwendung von Point3D Der Unterschied wird sehr schnell deutlich, wenn die rechte Variante instanziiert und verwendet wird: struct p2d point2 = { 2, 4 }; struct p3d point3 = { {1, 4}, 5}; struct p3d another= { point2, 5}; point2.x = 1; point2.y = 0; point3.p2.x = 3; point3.p2.y = 4; point3.z = 3; point3 enthält eine Instanz von p2d. Er ist jedoch kein Subtyp von p2d. anonymous structs seit C11 können helfen Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 26

27 Automatisierung durch Macros Die einzige Chance hier weiter zu kommen ist es den C Präprozessor einzusetzen. #define ATTRIBUTE_2D() \ int x,y; #define ATTRIBUTE_3D() \ ATTRIBUTE_2D() \ int z; struct p2d { ATTRIBUTE_2D() }; struct p3d { ATTRIBUTE_3D() }; Änderungen an der 2D Struktur werden automatisch auch an die 3D Struktur propagiert. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 27

28 Operationen Bis lang konzentrierte sich alles auf die Attribute der mit C-Structs modellierten Shapes. Was ist wenn weitere Methoden hinzukommen? struct shape_struct { int x; int y; void (*draw) (Shape ashape); void (*moveto) (Shape ashape, int x, int y); void (*erase) (Shape ashape); }; Die Shapes unterscheiden sich nur durch ihre Attribute. Alle Shapes vom selben Typ müssen die gleichen Operationen und Methodenpointer haben. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 28

29 GTK Separationsansatz Das Linux Graphical Toolkit GTK ist ein gutes Beispiel für ein modulares Design. Es ist vollkommen in C programmiert, bietet jedoch eine objektorientierte API an. Jedes graphische Element ist als ein GtkWidget modelliert, dass entsprechende Methoden zur Verfügung stellt. Die Attribute und die zugehörigen Methoden werden in zwei getrennten Structs modelliert. => Der Speicherplatz für die Methoden wird nicht pro Instanz benötigt sondern geteilt. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 29

30 Shapes revisited Die Aufteilung in Methoden und Attribute erfolgt in zwei Structs XXX_Instance und XXX_Class: typedef struct shape_instance* Shape; typedef struct shape_class { void (*draw) (Shape ashape); void (*erase) (Shape ashape); void (*moveto) (Shape ashape, int x,int y); } ShapeClass; struct shape_instance { ShapeClass *class; int x; int y; }; Jede Instanz hat einen Pointer auf die Methoden. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 30

31 Der kanonische C ADT Die kanonische Form besteht aus zwei Strukturen: Eine Struktur für das Verhalten, sie repräsentiert die Methoden und stellt das Klassengerüst dar. Eine Struktur für den Zustand, sie repräsentiert die Attribute und stellt Instanzen dar. typedef struct ADT_Instance* ADTInstance; typedef struct ADT_Class { rettype (*adtmethod) (ADTInstance obj); } ADTClass; struct ADT_Instance { ADTClass *class; attrtype adtvariable; }; Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 31

32 Java Klassen und Objekte Die JVM verwaltet auf diese Art Klassen und ihre zugehörigen Instanzen/Objekte. Zu jedem Objekt kann mit obj.getclass() die Klasse ermittelt werden. Das class Objekt verwaltet u.a. alle Methoden. Per Reflection API kann auf diese Methoden Zeiger zugegriffen und das Objekt manipuliert werden. Diese API ist auch zum Verständnis von Java Native Calls per JNI wichtig. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 32

33 Shapes kanonische Form Die Aufteilung in Methoden und Attribute erfolgt in zwei Structs XXX_Instance und XXX_Class: typedef struct Shape_Instance_struct* Shape; typedef struct Shape_Class_struct { void (*draw) (Shape ashape); void (*erase) (Shape ashape); void (*moveto) (Shape ashape, int x,int y); } ShapeClass; typedef struct Shape_Instance_struct { ShapeClass *class; int x; int y; } ShapInstance; Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 33

34 Rect kanonische Form Die Rect Strukturen sind fast identische Kopien der Shape Strukturen: typedef struct Rect_Instance_struct* Rect; typedef struct Rect_Class_struct { void (*draw) (Shape ashape); void (*erase) (Shape ashape); void (*moveto) (Shape ashape, int x,int y); void (*resize) (Shape ashape, int w,int h); } RectClass; typedef struct Rect_Instance_struct { RectClass *class; int x; int y; int w; int h; } RectInstance; Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 34

35 Präprozessoroperatoren Der Präprozessor kann helfen solche generischen Strukturen, die fast identische Kopien sind und sich nur durch Namen entscheiden, zu generieren. Es lassen sich Macros definieren, die als Vorlagen ähnlich den C++ Templates dienen und den Quellcode durch Textersetzung erzeugen. Eine wichtige Rolle spielen hierbei die beiden Präprozessoroperatoren # und ##: # setzt den Parameter in Hochkomma als String ## konkateniert zwei Symbole zu Einem Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 35

36 Zeichen Macros #define makestr(x) #x #define concat(x,y) x ## y Der Ausdruck makestr(hello) wird dann zum String "hello" expandiert. Der Ausdruck concat(shape, Class) ergibt das Symbol ShapeClass (nicht als String!). Mit diesen beiden Operatoren lassen sich Quelltexte generieren. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 36

37 C Klassen per Makros Die kanonische Aufteilung in Instanz und Class Strukturen lässt sich per Coding by Convention durch Makros erzwingen und generieren. BEG_DEFINE_CLASS(T) generiert die Class Struktur zum Typen T. BEG_DEFINE_INSTANCE(T) generiert die Instanz Struktur zum Typen T und beinhaltet auch den Zeiger auf die Class Struktur. Ähnlich wie bei C++ Templates oder Java Generics ist T ein Platzhalter für den Typen, z.b. Shape. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 37

38 Shapes per Macro generieren #define BEG_DEFINE_CLASS(T) \ typedef struct T##_Instance_struct* T; \ typedef struct T##_Class_struct { #define END_DEFINE_CLASS(T) \ } T##Class; #define BEG_DEFINE_INSTANCE(T) \ typedef struct T##_Instance_struct { \ T##Class *clazz; #define END_DEFINE_INSTANCE(T) \ } T##Instance; \ extern T new##t(int* args); Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 38

39 Shape Attribute + Methoden #define SHAPE_METHODES \ void (*draw) (Shape ashape); \ void (*erase) (Shape ashape); \ void (*moveto) (Shape ashape, int x,int y); #define SHAPE_ATTRIBUTES \ int x; \ int y; Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 39

40 Cleveres malloc Mit dem Präprozessor lässt sich auch der malloc Aufruf vereinfachen und typsicher machen: #define alloc(t) (T) malloc( \ sizeof(t ## Instance)) Mit diesem Macro wird immer Code zum passenden ADT erzeugt und die Verwendung von malloc vereinfacht sich von: Rect obj = (Rect) malloc( sizeof(struct Rect_Instance_struct)); zu: Rect obj = alloc(rect); Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 40

41 Shape.h mit Macros BEG_DEFINE_CLASS(Shape) SHAPE_METHODES END_DEFINE_CLASS(Shape) BEG_DEFINE_INSTANCE(Shape) SHAPE_ATTRIBUTES END_DEFINE_INSTANCE(Shape) So einfach und aufgeräumt kann eine *.h Datei sein Allerdings sind die Strukturen schwieriger zu verstehen, da die Macros vieles verstecken. Rect.h wird mit genau den selben Macros erzeugt. Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 41

42 Rect.h mit Macros #ifndef RECT_H_ #define RECT_H_ #include "Shape.h" BEG_DEFINE_CLASS(Rect) RECT_METHODES SHAPE_METHODES void (*resize) (Rect r, int w, int h); END_DEFINE_CLASS(Rect) BEG_DEFINE_INSTANCE(Rect) SHAPE_ATTRIBUTES int w; RECT_ATTRIBUTES int h; END_DEFINE_INSTANCE(Rect) #define size(r,x,y) R->clazz->resize(R, (x), (y)) #endif /* RECT_H_ */ Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 42

43 Rect kanonische Form Diese einfachen Macro Templates generieren zur Compile Zeit die komplette Rect Header Datei: typedef struct Rect_Instance_struct* Rect; typedef struct Rect_Class_struct { void (*draw) (Shape ashape); void (*erase) (Shape ashape); void (*moveto) (Shape ashape, int x,int y); void (*resize) (Shape ashape, int w,int h); } RectClass; typedef struct Rect_Instance_struct { RectClass *class; int x; int y; int w; int h; } RectInstance; Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 43

44 Rect.c static void resize(rect obj, int h, int w) { obj->h = h; obj->w = w; } static RectClass rectclass = {draw, erase, moveto, resize }; Shape newrect(int args[]) { Rect obj = alloc(rect); obj->clazz = &rectclass; obj->x = args[0]; obj->y = args[1]; obj->h = args[2]; obj->w = args[3]; return (Shape) obj; } Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 44

45 Vererbung automatisieren Eine Vererbungshierarchie lässt sich durch zwei weitere Makros EXTENDS und INSTANCE_OF deklarativ implementieren: BEG_DEFINE_CLASS(Circle) EXTENDS(Shape) METHODS(Circle) END_DEFINE_CLASS(Circle) BEG_DEFINE_INSTANCE(Circle) INSTANCE_OF(Shape) ATTRIBUTES(Circle) END_DEFINE_INSTANCE(Circle) Wie sind EXTENDS und INSTANCE_OF definiert? Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 45

46 Kürzer geht es nicht... Wem selbst dies noch zu viel ist, der kann noch das Makro DEFINE_BASE_TYPE für eine Wurzelklasse wie z.b. Shape DEFINE_BASE_TYPE(Shape) und DEFINE_EXTENDED_TYPE für eine Kindklasse wie z.b. Rect definieren: DEFINE_EXTENDED_TYPE(Rect,Shape) Debugen wird schwieriger mit gcc save-temps kann der generierte Code gespeichert werden... Prof. Dr. Nikolaus Wulff Höhere Programmierkonzepte 46

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

Embedded Software. Der C Präprozessor. Sichere objektbasierte Entwicklung dank C Präprozessor. Prof. Dr. Nikolaus Wulff

Embedded Software. Der C Präprozessor. Sichere objektbasierte Entwicklung dank C Präprozessor. Prof. Dr. Nikolaus Wulff Der C Präprozessor Sichere objektbasierte Entwicklung dank C Präprozessor Prof. Dr. Nikolaus Wulff Shapes kanonische Form Die Aufteilung in Methoden und Attribute erfolgt in zwei Structs XXX_Instance und

Mehr

Java Native Calls. Einbinden von C Bibliotheken in Java Klassen. Prof. Dr. Nikolaus Wulff

Java Native Calls. Einbinden von C Bibliotheken in Java Klassen. Prof. Dr. Nikolaus Wulff Java Native Calls Einbinden von C Bibliotheken in Java Klassen Prof. Dr. Nikolaus Wulff GUI und Model Die GUI des DeviceEditors ist in Java implementiert. Die Anwendung ist allerdings ohne eine fachliche

Mehr

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind

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

Java Native Interface

Java Native Interface Java Native Interface Einbinden von nativen C/C++ Bibliotheken via JNI in Java Klassen. Prof. Dr. Nikolaus Wulff Java Erweiterungen Java lässt sich erweitern durch: Integration nativen C Codes und erlaubt

Mehr

Programmieren in Java

Programmieren in Java Einführung in die Objektorientierung Teil 4 Interfaces, innere Klassen und Polymorphie 2 Vererbung im Klassendiagram (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Ware

Mehr

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen

Mehr

4. Objektorientierte Programmierung mit C++

4. Objektorientierte Programmierung mit C++ 4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung der Sprachfamilie Erweiterungen der Sprache C: Ein- und Ausgabe, Referenzen, Speicherallokation und Freigabe Grundlagen des Typkonzepts

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff Java Idioms Basic und Advanced Java Coding Style Prof. Dr. Nikolaus Wulff Java Idiome Operator == versus equals Methode equals und hashcode Vermeide NullPointer Java Konstruktoren Function Pointers, Interfaces

Mehr

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

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Strukturen Prof. Dr. Nikolaus Wulff Rekursive Strukturen Häufig müssen effizient Mengen von Daten oder Objekten im Speicher verwaltet werden. Meist werden für diese Mengen

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Inhalt Compiler/Editor Klassendeklaration

Mehr

C++ - Objektorientierte Programmierung Polymorphie

C++ - Objektorientierte Programmierung Polymorphie C++ - Objektorientierte Programmierung Polymorphie hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen C++ - Objektorientierte Programmierung 21.06.16 Seite 1 Polymorphie

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

Programmieren in Java

Programmieren in Java Einführung in die Objektorientierung Teil 4 Interfaces, Polymorphie und innere Klassen 2 Vererbung im Klassendiagramm (Wiederholung) Vererbung repräsentiert eine ist ein Beziehung zwischen Klassen Object

Mehr

6. Globalübung (zu Übungsblatt 8)

6. Globalübung (zu Übungsblatt 8) 6. Globalübung (zu Übungsblatt 8) Inhalt: Klassenhierarchien Verdecken von Attributen Überschreiben von Methoden Codeanalyse Analyse von JAVA-Programmen Semestralklausur Klausurtermin: Mittwoch 11.01.2006

Mehr

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E. Objekte und Klassen INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1 Um was geht es? typedef struct Konto { double saldo; int id; Konto; Modul "konto" konto.h konto.c Prozedurale Programmierung:

Mehr

1 Einleitung Generizität Syntax... 2

1 Einleitung Generizität Syntax... 2 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 1 1.1 Generizität................................ 1 1.2 Syntax.................................. 2 2 Realisierung 2 2.1 Compilierung generischer Klassen...................

Mehr

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz Kapitel 13 Abstrakte Methoden und Interfaces 13. Abstrakte Klassen und Interfaces 1. Abstrakte Klassen 2. Interfaces und Mehrfachvererbung Folie 12.2 Abstrakte Methoden und Klassen Manchmal macht es überhaupt

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Einführung in die Systemprogrammierung

Einführung in die Systemprogrammierung Einführung in die Systemprogrammierung Virtuelle Methodentabellen Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 9. Juli 2015 Struktur der Objektorientierung Ein wenig Java: public

Mehr

Programmieren in C++ Templates

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

Mehr

Tag 7 Repetitorium Informatik (Java)

Tag 7 Repetitorium Informatik (Java) Tag 7 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

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

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2 Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom 29.10. Foliensatz 2 Modularisierung (T) Eigene Headerdateien und Bibliotheken (P) Arten der Parameterübergabe (P) Arrays und Strukturen

Mehr

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1) Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte

Mehr

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland. C++ Klassen, Vererbung Philipp Lucas phlucas@cs.uni-sb.de Sebastian Hack hack@cs.uni-sb.de Wintersemester 2008/09 saarland university computer science 1 Inhalt Klassen in C++ Sichtbarkeit Erzeugen von

Mehr

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen

Mehr

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!

Mehr

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

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

Mehr

Informatik III. Operatoren überladen am Beispiel des ADT Complex in C und Java sowie C++, C# und Groovy. Prof. Dr. Nikolaus Wulff

Informatik III. Operatoren überladen am Beispiel des ADT Complex in C und Java sowie C++, C# und Groovy. Prof. Dr. Nikolaus Wulff Informatik III Operatoren überladen am Beispiel des ADT Complex in C und Java sowie C++, C# und Groovy Prof. Dr. Nikolaus Wulff Komplexe Zahlen Komplexe Zahlen sind ein grundlegender Datentyp für mathematische

Mehr

Einführung in C# Teil 3. Matthias Nübling

Einführung in C# Teil 3. Matthias Nübling Einführung in C# Teil 3 Matthias Nübling Vorausgesetzte Grundkenntnisse Programmierung Typen, Variablen, Anweisungen, Funktionen, etc. Objektorientierte Programmierung Klassen, Vererbung, Polymorphismus,

Mehr

4. Objektorientierte Programmierung mit C++

4. Objektorientierte Programmierung mit C++ 4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung der Sprachfamilie Erweiterungen der Sprache C: Ein- und Ausgabe, Referenzen, Speicherallokation und Freigabe Grundlagen des Typkonzepts

Mehr

Prof. Dr. Uwe Schmidt. 17. August Aufgaben zur Klausur C und Objektorientierte Programmierung im SS 2010 (WI h103, II h105, MI h353)

Prof. Dr. Uwe Schmidt. 17. August Aufgaben zur Klausur C und Objektorientierte Programmierung im SS 2010 (WI h103, II h105, MI h353) Prof. Dr. Uwe Schmidt 17. August 2010 Aufgaben zur Klausur C und Objektorientierte Programmierung im SS 2010 (WI h103, II h105, MI h353) Zeit: 150 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre

Mehr

Programmierkurs C++ Kapitel 6 Module Seite 1

Programmierkurs C++ Kapitel 6 Module Seite 1 Programmierkurs C++ Kapitel 6 Module Seite 1 (Quell-)Module Unter einem Modul versteht man einen Teil des Programms, der eigenständig übersetzt werden kann. In der Syntax der Programmiersprachen werden

Mehr

Programmierkurs C/C++

Programmierkurs C/C++ Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Donnerstag Sandro Andreotti andreott@inf.fu-berlin.de WS 2008/09 1 Structs Blockkurs: "Einführung in C/C++" 2 Structs sind Bündel von Variablen (unter

Mehr

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3 Vorausgesetzte Grundkenntnisse Einführung in C# Teil 3 Matthias Nübling Programmierung Typen, Variablen, Anweisungen, Funktionen, etc. Objektorientierte Programmierung Klassen, Vererbung, Polymorphismus,

Mehr

Angewandte Mathematik und Programmierung

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

Mehr

Objektorientierung (OO)

Objektorientierung (OO) Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members

Mehr

Vokabeln. 4.1 Benutzer definierte Datentypen. Kapitel 4. Prof. Dr. Gerhard Berendt C++ oop? SS 2002 Arbeitsblatt 4

Vokabeln. 4.1 Benutzer definierte Datentypen. Kapitel 4. Prof. Dr. Gerhard Berendt C++ oop? SS 2002 Arbeitsblatt 4 4.1 Benutzer definierte Datentypen C++ unterstützt die Einführung benutzer definierter Datentypen (auch Abstrakte Datentypen (ADT) genannt). ADTs bieten einen guten Einstieg in das Paradigma der objekt

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Abstrakte Klassen und Methoden & Interfaces Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie

Mehr

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1 Kapitel 13 Definition von Klassen OOP Thomas Klinker 1 OOP Thomas Klinker 2 Datenabstraktion Der Mensch abstrahiert, um komplexe Sachverhalte darzustellen. Dinge und Vorgänge werden auf das wesentliche

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Abend 4 Übung : Erweitern von Klassen durch Vererbung

Abend 4 Übung : Erweitern von Klassen durch Vererbung Abend 4 Übung : Erweitern von Klassen durch Vererbung Ziel, Inhalt Wir erweitern die Klassen, die wir zum Zeichnen mit TsuZeichnen verwenden. Dabei wenden wir die Vererbung an um die Klassen zu spezialisieren

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

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

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

Mehr

Inhalte der Grundlagen

Inhalte der Grundlagen Inhalte der Grundlagen Programmieren mit Klassen Operatoren für Klassen Laufzeit- und Codeoptimierung Referenzen und Konstanten UGE - IPD Freunde und andere Typen Templates UGE - IPD UGE - IPD UGE - IPD

Mehr

Java I Vorlesung 6 Referenz-Datentypen

Java I Vorlesung 6 Referenz-Datentypen Java I Vorlesung 6 Referenz-Datentypen 7.6.2004 Referenzen this, super und null Typkonvertierung von Referenztypen Finale Methoden und Klassen Datentypen in Java In Java gibt es zwei Arten von Datentypen:

Mehr

Klausur Software-Entwicklung März 01

Klausur Software-Entwicklung März 01 Aufgabe 1: minimaler Punktabstand ( 2+5 Punkte ) Matrikelnr : In einem Array punkte sind Koordinaten von Punkten gespeichert. Ergänzen Sie in der Klasse Punkt eine Klassen-Methode (=static Funktion) punktabstand,

Mehr

A practical guide to C++

A practical guide to C++ A practical guide to Janis Fehr fehr@informatik.uni-freiburg.de SommerCampus2004 Janis Fehr A practical guide to Kapitel 2 Start Kurstag 2: Agenda Wiederholung der Themen von Tag 1 Codeoptimierung Namespace

Mehr

Repetitorium Informatik (Java)

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

Mehr

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff Programmieren in C Funktionen mit Zeigern und Adressen Prof. Dr. Nikolaus Wulff ByValue versus byreferenz C übergibt immer Kopien der Variablen an Funktionen. Es ist nur dann möglich die Werte von Variablen

Mehr

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

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

Mehr

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0 9 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Wiederholung: Gerüstbeispiel Ein Duo, Quarto oder Sexto ist ein Gerüst. Die Klassen Duo, Quarto und Sexto sollen durch Vererbung

Mehr

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung Studiengang Medieninformatik Objektorientierte Programmierung Studiengang Medieninformatik Hans-Werner Lang Hochschule Flensburg Vorlesung 1 15.03.2017 Objektorientierte Programmierung (Studiengang Medieninformatik) Form: Prüfung:

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm

Mehr

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

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

Mehr

Enhanced Collection API

Enhanced Collection API Enhanced Collection API Die default und static Methoden der Collection API des JDK 1.8 Prof. Dr. Nikolaus Wulff Schnittstelle und Implementierung Die Sprache Java trennte von Anfang an eine Schnittstelle

Mehr

Klassen und Objekte 1

Klassen und Objekte 1 Klassen und Objekte 1 Retrospektive Für die die Modellierung von Dingen oder Sachverhalten nutzt man in in c Strukturen. Strukturen sind dabei benutzerdefinierte Datentypen, die die Komponenten verschiedenen

Mehr

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ 1 Einleitung Vorteile von Java: gut strukturiert mit hohem Funktionsumfang (mächtige Standardbibliothek) weitestgehend

Mehr

Die abstrakte Klasse Expression:

Die abstrakte Klasse Expression: Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Generics Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Überblick Generics 2 Generische Klassen 3 Generische Methoden 4

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Musterübung 09: Vererbung und Dynamische Bindung

Musterübung 09: Vererbung und Dynamische Bindung Musterübung 09: Vererbung und Dynamische Bindung Abgabetermin: TT.MM.JJJJ Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Hofer) G4 (Angerer) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben

Mehr

7. Objektorientierung. Informatik II für Verkehrsingenieure

7. Objektorientierung. Informatik II für Verkehrsingenieure 7. Objektorientierung Informatik II für Verkehrsingenieure Klassen, Objekte und Attribute Buslinie und Haltestellen 3 Haltestellen und deren Eigenschaften Bauplan einer Haltestelle (Struktur) Konkrete

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots. falls Zeit: Scheduling 8.11.

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots. falls Zeit: Scheduling 8.11. IT I: Heute Nachbetrachtung Wissensüberprüfungen Einführung Vererbung Roboter in becker.robots falls Zeit: Scheduling 8.11.2016 IT I - VO 5 1 Organisatorisches VO nächste Woche im Peter-Tunner-HS! Tutorium

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden

Mehr

Programmierkurs. Steffen Müthing. November 30, Interdisciplinary Center for Scientific Computing, Heidelberg University

Programmierkurs. Steffen Müthing. November 30, Interdisciplinary Center for Scientific Computing, Heidelberg University Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University November 30, 2018 Objektorientiertes Programmieren Kapselung const und Klassen Initialisierung und

Mehr

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

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

Mehr

Programmierkurs C++ Abstrakte Klassen und Methoden

Programmierkurs C++ Abstrakte Klassen und Methoden Programmierkurs C++ Abstrakte Klassen und Methoden Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer #2 Vererbungshierarchie Obst double

Mehr

Crashkurs C++ Wiederholung

Crashkurs C++ Wiederholung Crashkurs C++ Wiederholung #include int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i

Mehr

Praxis der Programmierung

Praxis der Programmierung Liste, Ausnahmefehler, Template-Funktionen und -Klassen Institut für Informatik und Computational Science Henning Bordihn 1 Stack als einfach verkettete Liste 2 Aufgabe 1 1. Kopieren Sie aus /home/rlehre/w13

Mehr

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1) Grundelemente objektorientierter Sprachen (1) Objekt Repräsentation eines Objektes der realen Welt in der Terminologie objektorientierter Programmiersprachen besitzen Attribute (Eigenschaften), deren Werte

Mehr

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 1 für Nebenfachstudierende Grundmodul Java Methoden Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht Kapitel 3 - Java

Mehr

Musterlösung der Testklausur zur Vorlesung. Programmieren in C. Prof. Dr. Nikolaus Wulff WS/SS 2004/05

Musterlösung der Testklausur zur Vorlesung. Programmieren in C. Prof. Dr. Nikolaus Wulff WS/SS 2004/05 Musterlösung der Testklausur zur Vorlesung Programmieren in C Prof. Dr. Nikolaus Wulff WS/SS 2004/05 Juni 2005 1 Der Lottogewinn #define MAX_TIPS 6 typedef struct lotto_schein *LottoSchein; typedef struct

Mehr

Programmieren 2 Java Überblick

Programmieren 2 Java Überblick Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10

Mehr

Einführung in die Programmiersprache Java II

Einführung in die Programmiersprache Java II Einführung in die Programmiersprache Java II ??????????? UML OOP "Object oriented programming is bad" - professional retard 90s... UML Entwicklungsziele verschiedenen existierenden objektorienten Modellierungsmethoden

Mehr

1 Klassen und Objekte

1 Klassen und Objekte 1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

Mehr

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 Folie 1/35 GK C++: IDE, Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 IDE Integrated Development Environment

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default

Mehr

Java Closures. Prof. Dr. Nikolaus Wulff

Java Closures. Prof. Dr. Nikolaus Wulff Java Closures Die Entwicklung von C function-pointers, C++ function-templates, Java anonymos-functions, hin zu C# delegates und Java Closures. Prof. Dr. Nikolaus Wulff Funktionszeiger Zeiger auf Funktionen

Mehr

Algorithmen und Programmierung II

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

Mehr

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Exkurs: ANONYME KLASSEN Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Anonyme Klassen Eigenschaften 1 Häufigste Anwendung lokaler Klassen: anonyme Definition. Klasse erhält keinen eigenen

Mehr

10.4 Konstante Objekte

10.4 Konstante Objekte 10.4 Konstante Objekte Genau wie bei einfachen Datentypen (int,double,...) kann man auch Objekte als const deklarieren. Eine solche Deklaration bedeutet, daß alle Attribute so behandelt werden, als wären

Mehr

C-Kurs 2010 Pointer. 16. September v2.7.3

C-Kurs 2010 Pointer. 16. September v2.7.3 C-Kurs 2010 Pointer Sebastian@Pipping.org 16. September 2010 v2.7.3 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. C-Kurs Mi Konzepte, Syntax,... printf, scanf Next

Mehr

Allgemeines - Prinzipien

Allgemeines - Prinzipien OOP - Prinzipien Allgemeines - Prinzipien OO modelliert die reale Welt als System interagierender Objekte Objekt = gedankliche oder reale Einheit in der Umwelt und/oder in Software Klar definierte Schnittstellen

Mehr

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Gottwald und Stefan Röhrl 8 Mai 2019 Folie 1/34 GK C++: IDE, Klassenhierarchien Martin Gottwald und Stefan Röhrl 8 Mai 2019 IDE - Integrated Development Environment

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung C++ Objektorientierte Programmierung Erweiterung von selbstdefinierten Datentypen (struct) zu Klasse. Eine Klasse besteht dann aus - Attributen (Untertypen wie struct) und zusätzlich - aus Methoden (Funktionen

Mehr

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Generic Programming without Generics from JAVA5 Motivation Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Ein Bespiel: sie haben bereits eine Klasse zur Multiplikation von Matrizen

Mehr

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter}); S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht

Mehr

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Grundzüge der Programmierung. Wiederverwendung VERERBUNG Grundzüge der Programmierung Wiederverwendung VERERBUNG Inhalt dieser Einheit Syntax: Vererbung in Java Superklassen - Subklassen Konstruktorenaufruf in Subklassen super, abstract und final 2 Code-Reuse

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

DAP2-Programmierpraktikum Einführung in C++ (Teil 2) DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und

Mehr

einlesen n > 0? Ausgabe Negative Zahl

einlesen n > 0? Ausgabe Negative Zahl 1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen

Mehr

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen Prof. Dr. Wolfgang Schramm Vorlesung Exkurs: Anonyme Klassen Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm Vorlesung Exkurs: Anonyme Klassen Techniken der Programmentwicklung Anonyme Klassen

Mehr