Informatik II. Nutzen Objektorientierung, C++ (1)



Ähnliche Dokumente
4. Objektorientierte Programmierung mit C++

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

4. Objektorientierte Programmierung mit C++

Objektorientierte Programmierung und Klassen

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Programmieren in Java

Vererbung, Polymorphie

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

4. Objektorientierte Programmierung mit C++

Einführung in die Programmierung mit C++

Überblick. R.Grossmann / P. Sobe 1

4. Objektorientierte Programmierung mit C++

Einstieg in die Informatik mit Java

4. Objektorientierte Programmierung mit C++

7. Objektorientierung. Informatik II für Verkehrsingenieure

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

Vererbung und Polymorphie

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

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

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Überblick. 5. Objekt und Klasse, Elementfunktionen

Repetitorium Informatik (Java)

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

Einstieg in die Informatik mit Java

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Einstieg in die Informatik mit Java

Informationsverarbeitung im Bauwesen

Institut für Programmierung und Reaktive Systeme. Java 1. Markus Reschke

Einführung in die Programmiersprache Java II

Polymorphie und UML Klassendiagramme

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

7. Übung Informatik II - Objektorientierte Programmierung

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

Algorithmen und Datenstrukturen

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

Manfred Schüttengruber. Objektorientierte Programmierung mit Visual Basic 2005

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Philipp Güttler Objektorientierung und komplexe Datentypen

Implementieren von Klassen

Erste Java-Programme (Scopes und Rekursion)

Vorkurs Informatik WiSe 16/17

C++ - Objektorientierte Programmierung Vererbung

Theorie zu Übung 8 Implementierung in Java

II.1.1. Erste Schritte - 1 -

II.1.1. Erste Schritte - 1 -

Klassen und Objekte (1)

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Klassen mit Instanzmethoden

Gliederung der Folien

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Umsetzung einer Klassenkarte in einer Programmiersprache

Objektorientierte Programmierung mit C++ SS 2007

11.3 Virtuelle Methoden

Prinzipien der objektorientierten Programmierung (OOP)

Probeklausur: Programmierung WS04/05

Vorkurs Informatik WiSe 17/18

Algorithmen und Programmierung II

Teil 2: OOP und JAVA (Vorlesung 11)

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Praxis der Programmierung

Objektorientierte Programmierung Studiengang Medieninformatik

Polymorphie. Überschreiben. Definition Eigene Methoden überschreiben Beispiele. Dr. Beatrice Amrhein

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

Die Programmiersprache C Eine Einführung

Objektorientierte Programmierung (OOP)

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierung (OO)

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

Grundlagen der Informatik Vererbung von Klassen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Informatik II Übung 6

Vererbung. Was versteht man unter dem Begriff Vererbung?

Transkript:

Informatik II Eine kurze Schlussvorlesung Wiederholung, Wertung Nutzen der Objektorientierung und C++ Abriss der wesentlichen C++-Features Wann C++ und wann nur C? Ausblick C und C++ -ähnliche Sprachen: JAVA, C# Peter Sobe 1 Nutzen Objektorientierung, C++ (1) Probleme bei prozeduraler, imperativer Programmierung: Software wird schnell groß (Anzahl Quellcodezeilen und Umfang der Funktionen) Möglicherweise ähnlicher oder gleicher Code an verschiedenen Stellen Datenspeicherung und Steuerfluss sind unterschiedliche Aspekte Änderungen sind oft aufwendig und fehleranfällig Fehlersuche schwierig Objektorientierung / C++ Zwang zur Modularisierung Zwang zu definierten Schnittstellen Gemeinsamer Code in Basisklassen und Templates Daten und Verarbeitungsfunktionen in den Klassen gekapselt, begrenzte Auswirkung einer Methode Besserer Überblick durch Struktur (Klassen, Objekte, Methodenaufrufe) R. Grossmann / P. Sobe 2

Nutzen Objektorientierung, C++ (2) Erweiterung der Sprache um eigene Ausdrucksmittel. C: Strukturen, benutzerdefinierte Typen und neue Funktionen person_t schulze, meier; InitPerson( Robert, Schulze,1956, Kaninchenzucht,&schulze); InitPerson( Klaus, Meier,1976, Schachspiel, &meier); Verein_temp = EntlasseMitglied(Verein_alt, schulze); Verein_neu = AufnahmeMitglied(Verein_temp, meier); C++ mit Operatoren: Klassen mit speziellen Operatoren Person schulze( Robert, Schulze,1956, Kaninchenzucht ); meier( Klaus, Meier,1976, Schachspiel ); Verein = (Verein-Schulze)+Meier; ;Verein.Aufloesung(); Programme werden kürzer und besser lesbar vorausgesetzt man gestaltet die Klassen und Objekte intuitiv. R. Grossmann / P. Sobe 3 Nutzen Objektorientierung, C++ (3) Polymorphie: Gleiche Methodenaufrufe bewirken bei Objekten spezifische (verschiedene) Funktionen Beispiel (aus letzter Vorlesung): figuren[0] = new punkt(100.0, 100.0); figuren[1] = new punkt(200.0, 200.0); figuren[2] = new punkt(300.0, 300.0); figuren[3] = new kreis(punkt(400.0,400.0),10.0); figuren[4] = new rechteck(450.0,250.0,80.0,150.0); figuren[5] = new kreis(punkt(400.0, 120.0), 80.0); figuren[6] = new dreieck(200.0, 100.0, 300.0, 100.0, 250.0, 180.0 ); anz_figuren=7; Die Klassen punkt, kreis, rechteck und dreieck sind von gleicher Basisklasse (geofigur) abgeleitet und besitzen einige Methoden als gemeinsame Schnittstelle (z.b. zeichne()) R. Grossmann / P. Sobe 4

Nutzen Objektorientierung, C++ (4) Polymorphie (Fortsetzung): for(int i=0; i<anz_figuren; i++) figuren[i]->zeichne(hdc); // figuren[i] ist ein geofigur* Die Methode zeichne() wurde von punkt, rechteck, etc. spezifisch implementiert. Durch den automatischen Aufruf der objektspezifischen Methoden, wird das C++ Programm von Verwaltungsaufwand befreit. Man baucht sich nicht mehr zu merken, welche Klasse durch ein Objekt instanziiert wird. Gleicher Code, zur Handhabung verschiedenartiger Objekte (z.b. Grafische Objekte, Simulationsobjekte, Datenobjekte) kürzer, eleganter und weniger fehleranfällig bei Änderungen R. Grossmann / P. Sobe 5 Wesentliche C++ Features (1) Variablen- und Objekt-Referenzen Klassen Datenkapselung zusammen mit Funktionen (Methoden) Zugriffsspezifizierer: public, private, protected Konstruktoren und Destruktor mit automatischem Aufruf bei Erzeugung und Vernichtung eines Objekts Elementobjekte und Elementobjekt-Konstruktoren (Syntax und Automatismus des Aufrufs) R. Grossmann / P. Sobe 6

Wesentliche C++ Features (2) Vererbung Basisklassen und spezialisierte abgeleitete Klassen, C++ auch mit Mehrfachvererbung Basisklassenkonstruktoren Automatischer Aufruf des Basisklassendestruktors Polymorphie Template-Funktionen und Template-Klassen R. Grossmann / P. Sobe 7 Spezieller Entwurfszyklus: (1) Zuerst Objektmodell (2) Definition der Schnittstellen Objektorientierung (3) Entwurf der Prozesse und Anwendungsfälle (4) Verfeinerung, zyklische Revision durch Zurückgehen auf (1), (2) oder (3) R. Grossmann / P. Sobe 8

Wann C++ und wann nur C? (1) C++ ist eine gute Wahl, wenn das Programm eine Nachbildung oder Verwaltung von Entitäten (Dinge mit Eigenschaften und einem Verhalten) vornehmen muss. Entitäten sind z.b.: elektr. Bauelemente, Waren und Lager, Mitarbeiter, u.v.a.m. wenn der erstellte Code wiederverwendbar sein soll. zur Speicherung und Handhabung von Daten mit z.t. unterschiedlicher Struktur: objektorientierte Datenbanken zum Aufbau von Simulationssoftware: Simulationsobjekte mit unterschiedlichem Verhalten. R. Grossmann / P. Sobe 9 Wann C++ und wann nur C? (2) Auf Objektorientierung kann man verzichten: bei kleinen Programmen, die nur eine geringe Diversität/ Strukturierung der gehandhabten Daten aufweisen, z.b. digitale Filter in der Signalverarbeitung Wenn fest programmierte Sequenzen durchlaufen werden müssen und diese im C-Quelltext sichtbar sein sollen. Dennoch ist eine Mischung mit objektorientiert erstellten Komponenten immer möglich. R. Grossmann / P. Sobe 10

C++ - ähnliche Sprachen (1) Java: ca. 1995 von SUN (jetzt von Oracle übernommen) initiiert Java basiert syntaktisch stark auf C++, insbes. bei Datentypen, Operatoren und Klammersetzung. Es wurden aber nicht alle Spracheigenschaften übernommen: keine Zeiger, stattdessen Referenzen keine Mehrfachvererbung keine Header-Dateien, kein Präprozessor (#ifdef u.ä.) Neu ist eine s.g. Garbage Collection: Dynamisch Allokierter Speicher (per new) wird immer dann zur Freigabe vorgemerkt, wenn die letzte auf ihn verweisende Referenz verschwindet (z.b. Überschreiben einer Referenz). Die Speicherfreigabe erfolgt im Hintergrund ohne Zutun des Programmierers. R. Grossmann / P. Sobe 11 C++ - ähnliche Sprachen (2) Java-Beispiel: public class Fakultaet { static int fak(int n) { int i, f=1; for (i=2;i<=n;i=i+1) f= f * i; static void ausgabe(int n) { string s; s = Fakultaet( + n + )= +fak(n); System.out.println(s); public static void main(string[] args ) { ausgabe(12); R. Grossmann / P. Sobe 12

Java: C++ - ähnliche Sprachen (3) Java läuft auf einer s.g. Java Virtual Machine Unterschied zu C++: Java wird nicht direkt in Maschinencode übersetzt, sondern in einen Zwischencode, der zur Laufzeit interpretiert wird. Optimierung und Binden erfolgt erst zur Laufzeit. Komponenten können zur Laufzeit ausgetauscht werden Verteiltes Programmieren mittels RMI (Remote Method Invocation) R. Grossmann / P. Sobe 13 C++ - ähnliche Sprachen (4) C# (C-sharp) Von Microsoft entwickelt (strategisch als Java-Pendant) und auf.net-plattform ausgerichtet. CLR Common Language Runtime eine komponentenorientierte Umgebung zur Ausführung von Software Ähnlich wie Java werden Programme in einen Zwischencode (CIL) übersetzt und erst zur Laufzeit interpretiert. CLR mit Garbage Collector, der auch von C++ Programmen (Managed C++) genutzt werden kann R. Grossmann / P. Sobe 14

C++ - ähnliche Sprachen (5) C# Beispiel angelehnt an: openbook.galileocomputing.de/csharp using System; class Punkt { public Punkt(int x, int y) { this.x = x; this.y = y; public void LeseKoordinaten(out int x, out int y) { x = this.x; y = this.y; int x; int y; class Test { public static void Main() { Punkt meinpunkt = new Punkt(10, 15); int x; int y; meinpunkt.lesekoordinaten(out x, out y); Console.WriteLine( meinpunkt({0, {1)", x, y); R. Grossmann / P. Sobe 15