Informatik II Nutzen Objektorientierung, C++ (1)

Werbung
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:
Objektorientierung / C++
Zwang zur Modularisierung
 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
R. Grossmann / P. Sobe
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)
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
Objektorientierung
Spezieller Entwurfszyklus:
(1) Zuerst Objektmodell
(2) Definition der Schnittstellen
(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
C++ - ähnliche Sprachen (3)
Java:
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
Herunterladen