64
Objektorientiert e Programmierung

Objektorientierte Programmierung

  • Upload
    karlyn

  • View
    38

  • Download
    1

Embed Size (px)

DESCRIPTION

Objektorientierte Programmierung. Datentyp. Variable. . In C:. In C++ darf man einen Datentyp selbst basteln Dieser heisst dann:. Klasse. . Objekt. ist eineVariable. Kurz: Eine Klasse ist ein höherer, selbstgebastelter Datentyp. Genauer:. - PowerPoint PPT Presentation

Citation preview

Page 1: Objektorientierte Programmierung

ObjektorientierteProgrammierung

Page 2: Objektorientierte Programmierung

In C:

Datentyp Variable<--->

Klasse <---> Objektist eineVariable

In C++ darf man einenDatentyp selbst basteln

Dieser heisst dann:

Page 3: Objektorientierte Programmierung

Kurz:Eine Klasse ist ein

höherer, selbstgebastelter Datentyp.

Page 4: Objektorientierte Programmierung

Genauer:

Page 5: Objektorientierte Programmierung

Eine Klasse ist ein Bauplan (vergleichbar: Backform) .

In diesem Bauplan steht genau beschrieben, wie ein konkretes Objekt, das nach diesem Bauplan gebastelt

wird, auszusehen hat.

Page 6: Objektorientierte Programmierung

Mit dieser Backform können dann ganz konkret z.B.

Marmorkuchen gebacken werden.

In der Fachsprache sagt man: Ein Objekt ist eine Instanz

einer Klasse.

Page 7: Objektorientierte Programmierung

Beispiel:

Page 8: Objektorientierte Programmierung

BackformMarmor-kuchen

Geburts-tagskuchen von Rolf

Klasse <---> Objekt

Page 9: Objektorientierte Programmierung

Eine Klasse enthält Daten und Funktionen.

Die Daten heissen Attribute, die Funktionen heissen

Methoden.Der Sammelbegriff für

Daten und Funktionen ist Member (Mitglieder).

Page 10: Objektorientierte Programmierung

Sinn:Mit Hilfe der Methoden soll

man auf die Attribute zugreifen (lesen bzw. ändern

der Attribute)

Page 11: Objektorientierte Programmierung

Beispiel in C++(genaue Diskussion):

Page 12: Objektorientierte Programmierung

class Punkt{ private: int x; int y; public: void set_xy(int px, int py){ x = px; y = py; } int get_x(){ return(x); } int get_y(){ return(y); } }; // class Punkt

Name der Klasse

privater Bereich: Auf die Member des privaten Bereichs kann außerhalb der Klasse nicht direkt, sondern

nur indirekt über Methoden des public Bereichs dieser Klasse zugegriffen werden.

öffentlicher Bereich: Auf die Member dieses Bereichs

kann man jederzeit zugreifen.

Bitte abschreiben !

Page 13: Objektorientierte Programmierung

class Punkt{ private: int x; int y; public: void set_xy(int px, int py){ x = px; y = py; } int get_x(){ return(x); } int get_y(){ return(y); } }; // class Punkt

px bzw. py sind selbstsprechende

Namen für Parameter x bzw.

Parameter y

Page 14: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

Tipp:Klassennamen immer mit einem

Großbuchstaben beginnen.(Zwar erlaubt der Compiler auch

einen Kleinbuchstaben, doch halten sich fast alle

Programmierer an diese Regel.

Page 15: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

Page 16: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

3 5 ? ?

Page 17: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

3 5 ? ?

Fehlermeldung:x ist private(ein privater Bereich)

Page 18: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

3 5 ? ?

Page 19: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

3 5 ? ?

7 9 ? ?

Page 20: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

3 5 ? ?

7 9 ? ?

Page 21: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

3 5 ? ?

7 9 ? ?

7 9 7 ?

Page 22: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

3 5 ? ?

7 9 ? ?

7 9 7 ?

Page 23: Objektorientierte Programmierung

#include "stdafx.h"#include <stdio.h>

class Punkt{//siehe oben};

int main(){ int kx, ky; Punkt p; p.set_xy(3,5); p.x = 12; p.set_xy(7,9); kx = p.get_x(); ky = p.get_y();}

p.x p.y kx ky

3 5 ? ?

7 9 ? ?

7 9 7 ?

7 9 7 9

Page 24: Objektorientierte Programmierung

Nochmals zu den Zugriffsrechten im

folgenden kleinen Demo-Programm

Page 25: Objektorientierte Programmierung

class Punkt{ private: int x; int y; public: void set_x(int px){ x = px; } void set_y(int py){ y = py; } void set_xy(int px, int py){ set_y(py); set_x(px); }}; int main(){ Punkt p; p.x = 12; p.set_xy(2,3);}

privater Bereich: Zugriff von außerhalb der Klasse: neinZugriff innerhalb der Klasse: ja

public (öffentlicher) Bereich : Zugriff von außerhalb der Klasse: jaZugriff innerhalb der Klasse: ja

// außerhalb, x private: nein

// innerhalb, set_xy public: ja

// innerhalb, x private: ja

// außerhalb, set_xy public: ja

// innerhalb, y private: ja

Page 26: Objektorientierte Programmierung

Aufgabe:Ergänzen Sie die Klasse Punkt mit weiteren Membern. (siehe Übungsaufgabenblatt)

Page 27: Objektorientierte Programmierung

Eine Klasse kann durch die sogenannte UML (Unified Modeling Language) beschrieben werden.

Page 28: Objektorientierte Programmierung

UML ist eine formale Sprache zur objektorientierten Spezifikation, Visualisierung, Konstruktion und Dokumentation von Softwaresystemen und Geschäftsmodellen.

Page 29: Objektorientierte Programmierung

Mit UML kann man z.B.die Klasse Punkt wie folgt darstellen:

Page 30: Objektorientierte Programmierung

Punkt - x: int

- y: int

+ set_x(int px): void

+ set_y(int py): void

+ set_xy(int px, int py): void

- bedeutet: Attribut bzw. Methode ist privat + bedeutet: Attribut bzw. Methode ist public

AttributeMethoden

Page 31: Objektorientierte Programmierung

Warum soll man folgende Aussage befolgen ?

“Mit Hilfe der Methoden soll man auf die Attribute

zugreifen (lesen bzw. ändern der Attribute)“

Page 32: Objektorientierte Programmierung

Warum macht man diesen Umweg über die Methoden ?

Warum greift man nicht direkt auf die Attribute zu ?

Page 33: Objektorientierte Programmierung

Schauen wir uns dazu ein paar Beispiele aus der

“täglichen“ Praxis an...

Page 34: Objektorientierte Programmierung

Schauen wir uns dazu ein paar Beispiele aus der

“täglichen“ Praxis an...

Page 35: Objektorientierte Programmierung

Warum benutzen wir an der Kasse im Supermarkt als “Werkzeug“ den Kassierer, um auf die Kasse zuzugreifen ?Warum machen wir das nicht direkt (ohne den Kassierer) ?

Page 36: Objektorientierte Programmierung

Weil man dann den Kassenstand auf einen unerwünschten Wert verändern und einen ungewollten Ortswechsel der Kasse veranlassen kann!

Page 37: Objektorientierte Programmierung

Warum benutzen wir am Bankschalter als “Werkzeug“ die EC-Karte, um auf die Kasse der Bank zuzugreifen ?Warum machen wir das nicht direkt (ohne Banker oder ohne EC-Karte) ?

Page 38: Objektorientierte Programmierung

Weil man dann den Kassenstand auf einen unerwünschten Wert verändern kann !

Page 39: Objektorientierte Programmierung

Warum wird in einigen Autos als “Werkzeug“ das ABS-System benutzt ?

Warum bremst man nicht direkt mechanisch (ohne Elektronik) ?

Page 40: Objektorientierte Programmierung

Weil man dann die Bremskraft auf einen unerwünschten Wert verändern kann (Bremsen blockieren)!

Page 41: Objektorientierte Programmierung

Warum wird in einigen Häusern als “Werkzeug“ ein Thermostat verwendet, um die Temperatur zu regeln ?Warum macht man dies nicht direkt (einfüllen von Heizöl in den Ölofen) ?

Page 42: Objektorientierte Programmierung

Weil man dann z.B. in kürzester Zeit zu viel Heizöl in den Ofen leeren kann und es dann zu nicht gewünschten Verbrennungseffekten (Ofen explodiert !) kommen kann.

Page 43: Objektorientierte Programmierung

Weitere Beispiele:

Page 44: Objektorientierte Programmierung

Im Airbus, dem vollelektronischen Flugzeug, greift der Pilot nur über die Elektronik auf das Höhenruder, usw. zu

Page 45: Objektorientierte Programmierung

Die Opferbüchse in der Kirche besitzt eine Vorrichtung, die den Geldfluß nur in eine Richtung zuläßt.

Page 46: Objektorientierte Programmierung

Der Zugriff über die Boxhandschuhe auf den Körper des Gegners schützt diesen zumindest in einem gewissen Maße.

Page 47: Objektorientierte Programmierung

Die Verheiratung von Ehepartnern geschieht durch eine untere Verwaltungsbehörde. Dadurch sollen unerwünschte Vermählungen der handelnden Subjekte (enge Verwandtschaft, Artenschrankenüberschreitung) verhindert werden.

Page 48: Objektorientierte Programmierung

Diese Werkzeuge (Kassierer, EC-Karte, ABS-System, usw.) werden so gebastelt, daß sie es nicht erlauben, bestimmte Systemparameter (Geldmenge in Kasse, usw.) auf unerwünschte Werte abzuändern.

Page 49: Objektorientierte Programmierung

In C++ sind diese Werkzeuge Methoden, die es dem Klassen-Programmierer(= Programmierer, der Klassen verwendet) nicht erlauben, die Attribute auf unerwünschte Werte abzuändern.

Page 50: Objektorientierte Programmierung

Wenn eine Methode dies garantiert, nennt man dies auch Zusicherung (englisch: constraint)

Page 51: Objektorientierte Programmierung

Beispiel in C++:

Page 52: Objektorientierte Programmierung

class Konto{ private: double stand;

public: void setKonto(double geld){ stand = geld; }

void abheben(double geld){ if(stand-geld > -5000) stand = stand - geld; }}; // class Konto

Name der Klasse

privater Bereich: Auf die Member des privaten

Bereichs kann außerhalb der Klasse nicht direkt, sondern nur indirekt über Methoden des public Bereichs dieser

Klasse zugegriffen werden.

öffentlicher Bereich: Auf die Member dieses Bereichs

kann man jederzeit zugreifen.

Page 53: Objektorientierte Programmierung

class Konto{ private: double stand; public: void setKonto(double geld){ stand = geld; } void abheben(double geld){ if(stand-geld > -5000) stand = stand - geld; }}; // class Konto

int main(){ Konto k; k.setKonto(1000); k.abheben(7000);}

k.stand : 1000

Page 54: Objektorientierte Programmierung

class Konto{ private: double stand; public: void setKonto(double geld){ stand = geld; } void abheben(double geld){ if(stand-geld > -5000) stand = stand - geld; }}; // class Konto

int main(){ Konto k; k.setKonto(1000); k.abheben(7000);}

k.stand : 1000

Zusicherung:Kontostand > -5000

Page 55: Objektorientierte Programmierung

In UML

Page 56: Objektorientierte Programmierung

Konto - stand: double

+ setKonto(double geld):void

+ abheben(double geld): void

- bedeutet: Attribut bzw. Methode ist privat + bedeutet: Attribut bzw. Methode ist public

{stand > -5000}

Zusicherung

Page 57: Objektorientierte Programmierung

Programmierstil

Page 58: Objektorientierte Programmierung

Eine Methode kann man (rein syntaktisch, ohne dass sich irgendetwas inhaltlich

ändert) auch ausserhalb einer Klasse implementieren.

Page 59: Objektorientierte Programmierung

Dies ist der bessere Programmierstil. Deshalb

werden wir diesen zukünftig immer verwenden !

Page 60: Objektorientierte Programmierung

Dazu muss man den aber den vollständig qualifizierten

Namen der Methode angeben.

Page 61: Objektorientierte Programmierung

Dies geschieht dadurch, dass man dem Methodenname den Klassennamen gefolgt von zwei Doppelpunkten

voranstellt.

Page 62: Objektorientierte Programmierung

Beispiel:

Page 63: Objektorientierte Programmierung

class Punkt{ private: int x; int y;

public: void set_xy(int px, int py){ x = px; y = py; } // ...}; // class Punkt

Dies ist der bisher bekannte Fall.

Eine Methode kann aber auch ausserhalb der Klasse

implementiert werden.

Page 64: Objektorientierte Programmierung

class Punkt{ private: int x; int y;

public: void set_xy(int px, int py);}; // class Punkt

void Punkt::set_xy(int px, int py){ x = px; y = py; }

... und außerhalb der Klasse definiert (implementiert) werden unter Angabe des

voll qualifizierten Namens.Dies ist ein der bessere Programmierstil !

Dazu muß die Methode in der Klasse deklariert

werden (ohne Methodenkörper).