Sie sind auf Seite 1von 42

sew htl krems

Grundlagen der Objektorientierung


Dipl.-Ing. Msc. Paul Panhofer Bsc.

15. September 2020


sew htl krems

1 Objekte und Klassen


Grundlagen
Polymorphie

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


2/41
sew htl krems

Objekte und Klassen

Die objektorientierte Programmierung basiert darauf, Soft-


ware in Anlehnung an die Gegebenheiten der realen
Welt als Objekte aufzufassen.

Ein objektorientiertes Programm stellt ein System von


Objekten dar.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


3/41
sew htl krems

Objekte und Klassen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


4/41
sew htl krems

Objekte und Klassen

Definition Objekt
Ein Objekt ist die Zusammenfassung von Funktionen und
Daten.

Ein Objekt ist die grundlegende Einheit eines Programms.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


5/41
sew htl krems

Objekte und Klassen

Definition Klasse
Eine Klasse beschreibt die Struktur eines Objekts. Sie
definiert die Implementierung eines Objekts.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


6/41
sew htl krems

Objekte und Klassen


public Point{

private int _x = 0;
private int _y = 0;

public int X {get; set;}


public int Y {get; set;}

public Point(int x, int y){


this._x = x;
this._y = y;
}

public Point(){}
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


7/41
sew htl krems

Objekte und Klassen


Instanzieren eines Objekts

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


8/41
sew htl krems

Objekte und Klassen

public PointTest{

[Test]
public void TestPointKonstruktor(){
Point p = new Point();
Assert.NotNull(p);

Point p2 = new Point(3,4);

Assert.AreEqual(3, p2.X);
Assert.AreEqual(4, p2.Y);
}
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


9/41
sew htl krems

Objekte und Klassen


Elemente einer Klasse

Eine Klasse unterscheidet mehrere Elemente:


• Variablen und Konstante
• Methoden

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


10/41
sew htl krems

Objekte und Klassen


Variablen

Die Werte der Variablen einer Klasse beschreiben den


Zustand eines Objekts.

Auf die Variablen eines Objekts sollte nie ein direkter Zu-
griff erlaubt werden. Der Zustand eines Objekts darf nur
über die Methoden des Objekts verändert werden.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


11/41
sew htl krems

Objekte und Klassen


Property

Definition Property
Mit Properties wird der Zugriff auf die Variablen eines
Objekts gesteuert.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


12/41
sew htl krems

Objekte und Klassen

public Point{

private int _x = 0;
private int _y = 0;

public int X {get; set;}


public int Y {
{ return _y; }
{ _y = value; }
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


13/41
sew htl krems

Objekte und Klassen


Konstruktor

Definition Konstruktor
Der Konstruktor ist eine Methode, die automatisch beim
Erzeugen eines Objekts aufgerufen wird.

In einer Klasse können mehrere Konstruktoren definiert


werden.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


14/41
sew htl krems

Objekte und Klassen


Methoden

Methoden bestimmen das Verhalten von Objekten.

Zum Aufruf einer Methode wird der Punktoperator


verwendet.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


15/41
sew htl krems

Objekte und Klassen


Speicherverwaltung: Stack und Heap

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


16/41
sew htl krems

Objekte und Klassen


Klassenobjekt

Das Klassenobjekt beschreibt das Verhalten und den


Zustand einer Klasse.

Um Variablen und Methoden dem Klassenobjekt


zuzuordnen wird der static Modifikator verwendet.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


17/41
sew htl krems

Objekte und Klassen


Objekt vs. Klassenobjekt

Objekt: Für eine Klasse kann eine beliebige Zahl von Ob-
jekten erstellt werden. Die Klasse wird definiert dabei die
Struktur der Objekte.

Klassenobjekt: Für eine Klasse existiert immer nur 1 Klassen-


objekt. Das Klassenobjekt beschreibt den Zustand und
das Verhalten einer Klasse.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


18/41
sew htl krems

Objekte und Klassen


Klassenobjekt

public Point{
public int _x, _y;

public static int COUNTER = 0;

public Point(int x, int y) {


_x = x;
_y = y;
++COUNTER;
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


19/41
sew htl krems

Objekte und Klassen


Klassenobjekt

public PointTest{

[Test]
public void TestClassObject(){
Point p1 = new Point(4, 5);
Point p2 = new Point(6, 2);
Point p3 = new Point(4, 2);

Assert.AreEqual(3, Point.COUNTER);
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


20/41
sew htl krems

1 Objekte und Klassen


Grundlagen
Polymorphie

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


21/41
sew htl krems

Polymorphie
Vererbung

Vererbung ist eines der grundlegenden Konzepte der


Objektorientierung.

Das Konzept der Vererbung erlaubt es das Verhalten einer


Klasse auf eine andere Klasse zu übertragen.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


22/41
sew htl krems

Polymorphie
Vererbung: Basisklasse und Subklasse

Die Vererbung beschreibt eine Beziehung zwischen 2


Klassen. Eine Subklasse erbt dabei ihr Verhalten von einer
Basisklasse.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


23/41
sew htl krems

Polymorphie
Vererbung: Basisklasse

public class Person{

protected string _firstName;

protected string _lastName;

public Person(string firstName, string lastName){


this._firstName = firstName;
this._lastName = lastName;
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


24/41
sew htl krems

Polymorphie
Vererbung: Subklasse

public class Student : Person {

protected string _studentCode;

public Student(string studentCode, string


firstName, string lastName) : base(firstName,
lastName){
this._studentCode = studentCode;
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


25/41
sew htl krems

Polymorphie
public class PersonTest{

[Test]
public void ExtensionTest(){
Person s = new Student("984321", "Fred"
,"Raunzer");
Assert.NotNull(s);

Student s2 = new Student("...", "...", "...");


Assert.NotNull(s2);

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


26/41
sew htl krems

Polymorphie
Implizite Vererbung

Klassen die nicht explizit von einer Klasse erben, erben


implizit von der Klasse Objekt

Damit steht jedem Objekt das Verhalten der Object


Klasse zur Verfügung.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


27/41
sew htl krems

Polymorphie
Implizite Vererbung - Methoden

Methoden der Object Klasse:


• ToString
• Equals

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


28/41
sew htl krems

Polymorphie
Implizite Vererbung - ToString

Die ToString Methode wird verwendet um eine String-


darstellung eines Objekts zu generieren.

public class Point{


...
public override string ToString(){
return $"x: {_x} y: {_y}";
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


29/41
sew htl krems

Polymorphie
Implizite Vererbung - Equals

Mit der Equals Objekte werden 2 Objekte auf Gleichheit


geprüft.

In der Objektorientierten Programmierung unterscheidet


man jedoch 2 Formen von Gleichheit: Referenzgleichheit
und Wertegleichheit.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


30/41
sew htl krems

Polymorphie
Implizite Vererbung - Referenzgleichheit

Wir sprechen bei Objekten von Referenzgleichheit wenn 2


Objektreferenzen auf dasselbe Objekt im Speicher
verweisen.

Referenzgleichheit wird mit der Hilfe des == Operators


geprüft.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


31/41
sew htl krems

Polymorphie
Implizite Vererbung - Referenzgleichheit
public class PointTest{

[Test]
public void TestSame(){
Point p1 = new Point(4, 5);
Point p2 = new Point(4, 5);
Point p3 = p1;

Assert.AreSame(p1, p3);
Assert.IsTrue(p1 == p3);

Assert.AreNotSame(p1, p2);
Assert.AreFalse(p1 == p2);
}
}
Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020
32/41
sew htl krems

Polymorphie
Implizite Vererbung - Wertegleichheit

Für 2 Objekte gilt Wertegleichheit, wenn der Zustand der


Objekte gleich ist.

Wertegleichheit wird mit der equals Methode geprüft.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


33/41
sew htl krems

Polymorphie
Implizite Vererbung - Wertgleichheit
public class PointTest{

[Test]
public void TestEqual(){
Point p1 = new Point(4, 5);
Point p2 = new Point(4, 5);
Point p3 = p1;

Assert.AreEqual(p1, p2);
Assert.IsTrue(p1.Equals(p2));

Assert.AreEqual(p1, p3);
Assert.IsTrue(p1.Equals(p3))
}
}
Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020
34/41
sew htl krems

Polymorphie
Implizite Vererbung - Wertegleichheit

Das Konzept der Referenz- und Wertegleichheit existiert in


selber Form in den Sprachwissenschaften.

Das Gleiche - Wertegleichheit - bedeutet, dass 2


unterschiedliche Dinge sich aufs Haar gleichen, während
dasselbe - Referenzgleichheit - bedeutet dass diese
identisch sind.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


35/41
sew htl krems

Polymorphie
Implizite Vererbung - Equals
public class Point{
...
public override bool Equals(object obj) {
if (ReferenceEquals(null, obj))
return false;

if (ReferenceEquals(this, obj))
return true;

if (obj.GetType() != this.GetType())
return false;

return Equals((Point) obj);


}
}
Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020
36/41
sew htl krems

Polymorphie
Implizite Vererbung - Equals

public class Point{


...
protected bool Equals(Point other) {
return _x == other._x &&
_y == other._y;
}

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


37/41
sew htl krems

Polymorphie
Interface

Die Methoden eines Objekts beschreiben das Verhalten


eines Objekts.

Bei der Definition von Methoden unterscheidet man


zwischen der Methodensignatur und der Methoden-
implementierung.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


38/41
sew htl krems

Objekte und Klassen

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


39/41
sew htl krems

Polymorphie
Interface

Ein Interface definiert eine Menge von Methodensigna-


turen, die in der Vertragsklasse implementiert werden
müssen.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


40/41
sew htl krems

Polymorphie
Implementierung vs. Vererbung

• Eine Schnittstelle ist ein Datentyp der unterschiedliche


Klassen zu einem Datentyp zusammenfasst.
• Eine Basisklasse ist ein Datentyp der gleichartige
Klassen zu einem Datentyp zusammenfasst.

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


41/41
sew htl krems

Polymorphie
Schnittstellen

public class Point{

Dipl.-Ing. Msc. Paul Panhofer Bsc. — SEW — 15. September 2020


42/41