c sharp einfuehrung teil 2

49
C# Einführung - Einführung in die OOP - Do, Hoang Viet ( [email protected]) Draphony Games (http://www.draphony.de )

Upload: draphonygames

Post on 12-Nov-2014

261 views

Category:

Education


2 download

DESCRIPTION

Folien vom C# Einführungskurs: Einführung in OOP http://www.draphony.de/veranstaltungen/2013-winter/c-sharp-einfuehrung/

TRANSCRIPT

Page 1: C Sharp Einfuehrung Teil 2

C# Einführung

- Einführung in die OOP -

Do, Hoang Viet ([email protected])

Draphony Games (http://www.draphony.de)

Page 2: C Sharp Einfuehrung Teil 2

204.12.2013

Methoden

• Beispiele:

Console.WriteLine(…)

Console.ReadLine(…)

• Warum benutzt man Methoden?

Wiederverwendung von (Teil-)Lösungen.

Zerlegung von komplexen Abläufen in Teilaufgaben („Methoden“)

• Wodurch ist eine Methode charakterisiert?

Name

Parameter

Verarbeitung

Rückgabe

Page 3: C Sharp Einfuehrung Teil 2

304.12.2013

Demo: „e01_methods.cs“Eigene Methode definieren

Page 4: C Sharp Einfuehrung Teil 2

404.12.2013

Eigene Methoden erstellen

• Beispiel:

static int square(int x) {

return x * x;

}

• Allgemeine Syntax

static ret_type mname(type1 p1, type2 p2, …) {

expr

}

• Name: mname

gleiche Regeln wie bei Variablen

• Parameter: p1, p2, …

0 bis „unendlich“ Parameter möglich! Ist fest

• Anweisungen: expr

Page 5: C Sharp Einfuehrung Teil 2

504.12.2013

Rückgabewert eine Methode

• Allgemeine Syntaxstatic ret_type square(type1 p1, type2 p2, …) {

expr

}

• Rückgabewert: ret_type Ergebnis der gesamten Verarbeitung / Durchführung

Rückgabewert wird durch return „markiert“.

• Analogie: Funktion ist ein Automat. Nur das Ergebnis (vgl. Rückgabewert) ist für den Aufrufer

sichtbar. Lediglich die nötigen Eingaben/Einstellung (vgl. Parameter) wie zum Beispiel Münzen sind notwendig für die Betriebsaufnahme!

• Spezialfall: void

• Englische Begriff: „invoke“ „call“

Page 6: C Sharp Einfuehrung Teil 2

604.12.2013

Rückgabewerte

• Was passiert wenn eine Funktion einen Rückgabewert spezifiziert (sprich nicht mit void definiert wurde) aber keinen Rückgabewert zurückgibt?

Antwort: Compilerfehler

• Was passiert wenn Anweisungen nach der return Anweisungen stehen?

Antwort: Warnung vom Compiler.

• Was passiert wenn nicht jeder Ausführpfad (zum Beispiel durch if-else) einen Rückgabewert liefert?

Antwort: Compilerfehler

Page 7: C Sharp Einfuehrung Teil 2

704.12.2013

Demo: „e02_returns.cs“Fehler bei Umgang mit Rückgabewerten

Page 8: C Sharp Einfuehrung Teil 2

804.12.2013

Parameter

Page 9: C Sharp Einfuehrung Teil 2

904.12.2013

Gültigkeitsbereich von Variablen

• Lokalen Variable der Methode

Ist nur gültig innerhalb des Methodenrumpfes

• Parametervariable

Äquivalent zu lokalen Variablen

• Variable, die übergeben werden

Ist innerhalb der Methode nicht definiert!

• Rückgabewert

Ist nur an der Rücksprungadresse gültig

Page 10: C Sharp Einfuehrung Teil 2

1004.12.2013

Demo: „e03_scope.cs“Gültigkeitsbereich von Variablen

Page 11: C Sharp Einfuehrung Teil 2

1104.12.2013

Möglichkeiten der Übergabe

• Passing by value

Für jeden Parameter wird eine Copy erstellt. Veränderungen werden nicht gespeichert.

Standardmethode

• Passing by Reference mit ref

Änderungen werden beibehalten

Parameter muss zuvor initialisiert werden!

• Passing by Reference mit out

Änderungen werden beibehalten

Keine Initialisierung nötig!

Page 12: C Sharp Einfuehrung Teil 2

1204.12.2013

Demo: „e04_paramdef.cs“Parameterübergabe: Passing by Reference

Page 13: C Sharp Einfuehrung Teil 2

1304.12.2013

Variable Parameterliste

• Wie könnte man variable Parameterlisten realisieren?

Array

Zum Beispiel: static int getMax(int[] p) {}

• Komfortabler: „params“

Variable Parameterliste mit params

Zum Beispiel: static int getMax(params int[] p) {}

Aufruf: getMax(1,2,3,4,5,6,7,8);

Page 14: C Sharp Einfuehrung Teil 2

1404.12.2013

Demo: „e05_params.cs“Parameterübergabe: Passing by Reference

Page 15: C Sharp Einfuehrung Teil 2

1504.12.2013

Refactoring

• Refactoring

Antwort auf „Mein Code ist häßlich“

Formal: Teilaufgabe vom Codewartung zur Steigerung der Lesbarkeit vom Code

• Methoden extrahieren

Neue Funktion anhand von Codeblock extrahieren

• Methodenstub

Neue Funktion anhand eines Prototyps definieren

• Variablen umbenennen (engl. Rename)

Umbenennung mit Kontextinformation

• Parameter umordnen (engl. Reorder Parameters)

Parameterreihenfolge

Page 16: C Sharp Einfuehrung Teil 2

1604.12.2013

Demo: „e06_refactor.cs“

Page 17: C Sharp Einfuehrung Teil 2

1704.12.2013

Methoden überladen

static void swap(ref int a, ref int b) {

int t = a;

a = b;

b = t;

}

• Was passiert bei?

swap(i1, i2); // int i1 = 1, i2 = 2;

swap(d1, d2); // double d1 = 1, d2 = 2;

Page 18: C Sharp Einfuehrung Teil 2

1804.12.2013

Beispiel: „e07_overload.cs“

Page 19: C Sharp Einfuehrung Teil 2

1904.12.2013

Methoden überladen

• Definition mehrere Methoden mit dem gleichem Namen aber unterschiedliche Signatur

• Signatur:

Parameterordnung: swap(int i, double d) und swap(double d, int i)

Parametertyp square(int a) und square(double d)

Parameteranzahl max(int a1) und max(int a1, int a2)

• Was ist aber mit variable Parameterliste?

max(int a1, int a2) und max(params int[] a)

Aufruf: max(1, 2)

Page 20: C Sharp Einfuehrung Teil 2

2004.12.2013

Anmerkung

• Rekursion

Aufruf einer Funktion in sich selbst

Beispiel: Addition über Rekursion

static int add(int a, int b) {

return b == 0 ? a : add(a, b-1) + 1;

}

Übermäßige Nutzung von Rekursionen führen zum „Stack Overflow“

Anwendung: Teilen und Herrschen (Devide & Conquer)

Page 21: C Sharp Einfuehrung Teil 2

2104.12.2013

Beispiel: „e08_recursive.cs“

Addition als Rekursion

Page 22: C Sharp Einfuehrung Teil 2

2204.12.2013

Demo: e00_motivation.csWofür gibt es Klassen?

Page 23: C Sharp Einfuehrung Teil 2

2304.12.2013

Warum gibt es Klassen?

• Verbinden von Daten und Funktionen

„Array von Personen mit Namen und PLZ“

• Stärkere Validierung der Daten

„Das alter einer Person kann nicht negativ sein“

„Die Note einer Klausur liegt zwischen 1 und 5“

• Sichere Programmausführung

• Leichte Wiederverwertbarkeit

Eine Methode für Ganze Zahlen: int, uint, ulong, long, usw.

• Gute Wartbarkeit

Page 24: C Sharp Einfuehrung Teil 2

2404.12.2013

Demo: e01_classes.csBekannte Klassen

Page 25: C Sharp Einfuehrung Teil 2

2504.12.2013

Klassen

• Beispiel:

Console, ADO.NET

• Was ist eine Klasse

Datentyp, dass Objekte beschreibt (Bauplan)

Verknüpfen von Daten und Funktionen

• Objekt

Instanzen einer Klasse werden Objekte genannt.

Eine Klasse kann beliebig viele Objekte erzeugen

• Members

Elemente einer Klasse werden Members genannt.

Es gibt funktionale Members und Datenmembers

Page 26: C Sharp Einfuehrung Teil 2

2604.12.2013

Demo: e02_userdefine.csEigene Klasse erstellen

Objekte der Klasse erzeugen

Page 27: C Sharp Einfuehrung Teil 2

2704.12.2013

Wie erstellt man eine Klasse

• Allgemeine Syntax

class identifier {

expr

}

• Innerhalb des Klassenrumpfes können die Members definiert werden

Datenmembers wie Felder, etc.

Funktionalen Members wie Methoden, Konstruktoren, etc.

• Objekte einer Klasse erzeugen

Allgemeine Syntax: cname oname = new cname();

Beispiel: Random rnd = new Random();

Page 28: C Sharp Einfuehrung Teil 2

2804.12.2013

Analogie zur echten Welt

• Zur welche Klasse gehören wir?

Klasse Mensch

• Was bin ich?

Ein Objekt

• Und was bist du?

Ein Objekt

• Welche Members hätte eine Klasse Mensch? (Auszug)

„Es sind Merkmale, die wir alle haben worin wir uns auch unterscheiden?“

Page 29: C Sharp Einfuehrung Teil 2

2904.12.2013

Datenmembers

Page 30: C Sharp Einfuehrung Teil 2

3004.12.2013

Objektvariablen (engl. Field)

• Variablen einer Klasse, die an das Objekt gebunden sind, werden Objektvariablen genannt.

• Objektvariablen sind objektgebunden

Jedes Objekt kann unterschiedliche Werte für seine Feld setzen haben.

Technische Hinweis: bei der Erstellung eines Objektes, wird für jedes definierte Feld Speicher reserviert.

Beispiel:

• Klasse Mensch

• Hans heißt „Hans“, während Klaus „Klaus“ heißt

• Unterschiedliche Werte für das Feld „Vornamen“.

• Objektvariablen gehören zu den Datenmembers

• Synonym: Felder

Page 31: C Sharp Einfuehrung Teil 2

3104.12.2013

Objektvariablen

• Allgemeine Syntax

class ClassIdent {

modifier type1 field1;

modifier type2 field2;

expr

}

• Zugriffsmodifizierer

Regulieren den Zugriff auf Members einer Klasse. Sie gilt nur für das jeweilige Member.

Weitere Members (später)

Zugriffmodifiziere Beschreibung

public Zugriff außerhalb der Klasse ist erlaubt

private (default) Zugriff außerhalb der Klasse ist nicht erlaubt

Page 32: C Sharp Einfuehrung Teil 2

3204.12.2013

Demo: e03_field.csAuswirkungen von unterschiedlichen Zugriffsmodifizier

Page 33: C Sharp Einfuehrung Teil 2

3304.12.2013

Klassenvariablen

• Variablen einer Klasse, die an die Klasse selbst gebunden sind, werden Klassenvariablen genannt

• Klassenvariablen klassengebunden

Der Wert einer Klassenvariable ist für alle Objekt gleich. Er kann von jedem Objekt gelesen und geschrieben werden.

Technische Details: Für die Klasse selbst wird auch Speicher reserviert

Beispiel:

• Anzahl der lebenden Menschen in der Klasse Mensch

• Bei der Geburt eines Menschen (Erstellung eines neuen Objektes) wird die Zahl erhöht

• Wenn der Mensch (Objekt wird gelöscht) stirbt, wird die Zahl verringert

• Der Wert bleibt aber für alle gleich.

• Hans und Klaus würden denselben Wert besitzen

Was wären weitere mögliche Klassenvariablen für Klasse Mensch?

Page 34: C Sharp Einfuehrung Teil 2

3404.12.2013

Demo: e04_staticfield.csAuswirkungen von unterschiedlichen Zugriffsmodifizier

Page 35: C Sharp Einfuehrung Teil 2

3504.12.2013

Klassenvariablen

• Klassenvariablen gehören zu den Datenmembers

• Allgemeine Syntax

class ClassIdent {

static modifier type1 field1;

static modifier type2 field2;

expr

}

Page 36: C Sharp Einfuehrung Teil 2

3604.12.2013

Funktionalen Members

Page 37: C Sharp Einfuehrung Teil 2

3704.12.2013

Funktionen

Page 38: C Sharp Einfuehrung Teil 2

3804.12.2013

Konstruktoren (engl. Constructor)

• Beispiel: Aufruf eines Konstruktors

static void Main(string[] args) {

...

Person meier = new Person();

...

}

• Was ist ein Konstruktor?

Eine spezielle Methode der Klasse ohne Rückgabewert, die beim Erzeugen eines Objektes automatisch aufgerufen wird.

Hauptfunktion: Initialisierung der Datenmembers

• Konstruktoren haben immer den selben Namen wie die Klasse

Page 39: C Sharp Einfuehrung Teil 2

3904.12.2013

Demo: e05_constructor.csKonstruktoren

Page 40: C Sharp Einfuehrung Teil 2

4004.12.2013

Konstruktoren

• Syntax

modifier ClassIdent(type1 p1, type2 p2, …) {

expr

}

• Standardkonstruktor

Hat keine Parameter

Wird automatisch erzeugt, wenn kein andere Konstruktor definiert ist

• Sobald ein Konstruktor definiert wurde, verschwindet die Definition.

• Soll dennoch ein Standardkonstruktor angeboten werden, muss dieser explizit definiert werden.

• Konstruktoren mit Parametern

Haben Parameter

In der Praxis werden immer mehrere Konstruktoren dieser Art definiert

Page 41: C Sharp Einfuehrung Teil 2

4104.12.2013

Konstruktoren

• Jeder Klasse besitzt mindesten einen Konstruktor

• Konstruktoren können sich über die colon – Syntax gegenseitig aufrufen:

modifier ClassIdent(paramlist1) : this (paramlist2) {

expr

}

• Was passiert, wenn modifier nicht public definiert ist?

Es können keine Objekte von aussen definiert werden.

„Design Pattern“: Factory

• Hinweis:

Es gibt auch Destruktoren!

Page 42: C Sharp Einfuehrung Teil 2

4204.12.2013

Klassenkonstruktor

• Zweck:

dürfen nicht explixit aufgerufen!

Sondern wenn die Klasse zum erst referrenziert wird.

• Besonderheiten

Keine accessibility

Keine Parameter

Können nicht überladen werden

• Syntax:

static ClassIdent(paramlist1) {

expr

}

Page 43: C Sharp Einfuehrung Teil 2

4304.12.2013

Demo: e08_classconstructor.cs

Page 44: C Sharp Einfuehrung Teil 2

4404.12.2013

Eigentschaften (engl. Properties)

• „Virtuelle“ Datenmembers

• Datenmembers, die über 2 Methoden realisiert werden:

Get-Accessor: Wert eines Members lesen

Set-Accessor: Wert eines Members festlegen

• Eigenschaften sind Datenmember, die über Accessor zugegriffen realisiert werden

Page 45: C Sharp Einfuehrung Teil 2

4504.12.2013

Demo: e06_properties.cs

Page 46: C Sharp Einfuehrung Teil 2

4604.12.2013

Warum Eigentschaften?

• Erweiterte Zugriffskontrolle

Nur Lesezugriff (engl. read-only)

Nur Schreibzugriff (engl. write-only)

• GANZ WICHTIG!

Datenabstraktion

Direkte Zugriff auf Daten wird unterbunden: Validierung & Modellierung

• Vererbarkeit (später)

Anpassung in den „Kinderklassen“

• Reine Lesezugriff ist bei den Felder auch möglich!

Page 47: C Sharp Einfuehrung Teil 2

4704.12.2013

Demo: e07_readonly.cs

Page 48: C Sharp Einfuehrung Teil 2

4804.12.2013

Demo: e09_namespace.cs

Page 49: C Sharp Einfuehrung Teil 2

4904.12.2013

http://www.draphony.de

facebook.com/DraphonyGames

Vielen Dank für die Aufmerksamkeit