SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
C# Einführung
- Einführung in die OOP Do, Hoang Viet (do@mi.fu-berlin.de)
Draphony Games (http://www.draphony.de)
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

04.12.2013

2
Demo: „e01_methods.cs“
Eigene Methode definieren

04.12.2013

3
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
04.12.2013

4
Rückgabewert eine Methode
• Allgemeine Syntax
static 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“

04.12.2013

5
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

04.12.2013

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

04.12.2013

7
Parameter
04.12.2013

8
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

04.12.2013

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

04.12.2013

10
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!

04.12.2013

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

04.12.2013

12
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:

04.12.2013

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

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

04.12.2013

14
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

04.12.2013

15
Demo: „e06_refactor.cs“

04.12.2013

16
Methoden überladen
static void swap(ref int a, ref int b) {
int t = a;
a = b;
b = t;
}

• Was passiert bei?
 swap(i1, i2);
 swap(d1, d2);

04.12.2013

// int i1 = 1, i2 = 2;
// double d1 = 1, d2 = 2;

17
Beispiel:
„e07_overload.cs“
04.12.2013

18
Methoden überladen
• Definition mehrere Methoden mit dem gleichem Namen aber unterschiedliche

Signatur
• Signatur:
 Parameterordnung:
 Parametertyp
 Parameteranzahl

swap(int i, double d)
square(int a)
max(int a1)

und swap(double d, int i)
und square(double d)
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)

04.12.2013

19
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)

04.12.2013

20
Beispiel:
„e08_recursive.cs“
Addition als Rekursion

04.12.2013

21
Demo: e00_motivation.cs
Wofür gibt es Klassen?

04.12.2013

22
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

04.12.2013

23
Demo: e01_classes.cs
Bekannte Klassen

04.12.2013

24
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
04.12.2013

25
Demo: e02_userdefine.cs
Eigene Klasse erstellen
Objekte der Klasse erzeugen

04.12.2013

26
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();

04.12.2013

27
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?“

04.12.2013

28
Datenmembers
04.12.2013

29
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

04.12.2013

30
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

04.12.2013

31
Demo: e03_field.cs
Auswirkungen von unterschiedlichen Zugriffsmodifizier

04.12.2013

32
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?

04.12.2013

33
Demo: e04_staticfield.cs
Auswirkungen von unterschiedlichen Zugriffsmodifizier

04.12.2013

34
Klassenvariablen
• Klassenvariablen gehören zu den Datenmembers

• Allgemeine Syntax
class ClassIdent {
static modifier type1 field1;
static modifier type2 field2;

expr
}

04.12.2013

35
Funktionalen Members

04.12.2013

36
Funktionen

04.12.2013

37
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

04.12.2013

38
Demo: e05_constructor.cs
Konstruktoren

04.12.2013

39
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
04.12.2013

40
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!

04.12.2013

41
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
}

04.12.2013

42
Demo:
e08_classconstructor.cs
04.12.2013

43
Eigentschaften (engl. Properties)
• „Virtuelle“ Datenmembers

• Datenmembers, die über 2 Methoden realisiert werden:
 Get-Accessor:
 Set-Accessor:

Wert eines Members lesen
Wert eines Members festlegen

• Eigenschaften sind Datenmember, die über Accessor zugegriffen realisiert

werden

04.12.2013

44
Demo: e06_properties.cs

04.12.2013

45
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!

04.12.2013

46
Demo: e07_readonly.cs

04.12.2013

47
Demo: e09_namespace.cs

04.12.2013

48
Vielen Dank für die
Aufmerksamkeit
http://www.draphony.de
facebook.com/DraphonyGames
04.12.2013

49

Weitere ähnliche Inhalte

Was ist angesagt?

Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Javatim
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to RubyJonathan Weiss
 
Metaprogrammierung mit Ruby
Metaprogrammierung mit RubyMetaprogrammierung mit Ruby
Metaprogrammierung mit RubyDario Rexin
 
Devs@Home - Einführung in Go
Devs@Home - Einführung in GoDevs@Home - Einführung in Go
Devs@Home - Einführung in GoFrank Müller
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureDr. Christian Betz
 

Was ist angesagt? (8)

Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to Ruby
 
Metaprogrammierung mit Ruby
Metaprogrammierung mit RubyMetaprogrammierung mit Ruby
Metaprogrammierung mit Ruby
 
Haxe & NME
Haxe & NMEHaxe & NME
Haxe & NME
 
OOP - Scala
OOP - ScalaOOP - Scala
OOP - Scala
 
Scala
ScalaScala
Scala
 
Devs@Home - Einführung in Go
Devs@Home - Einführung in GoDevs@Home - Einführung in Go
Devs@Home - Einführung in Go
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 

Ähnlich wie C Sharp Einfuehrung Teil 2

Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...André Krämer
 
Fundamentale Muster in Java
Fundamentale Muster in JavaFundamentale Muster in Java
Fundamentale Muster in Javatutego
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerNETUserGroupBern
 
Objektorientierte Techniken und UML
Objektorientierte Techniken und UMLObjektorientierte Techniken und UML
Objektorientierte Techniken und UMLSebastian Hempel
 
Multithreading in c# mit tpl
Multithreading in c# mit tplMultithreading in c# mit tpl
Multithreading in c# mit tplDavidT27
 
Sitzung 2
Sitzung 2Sitzung 2
Sitzung 2scuy
 
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAFH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAMarcus Riemer
 
Workshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAWorkshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAOliver Belikan
 
Python crash-kurs
Python crash-kursPython crash-kurs
Python crash-kursklausbremer
 
Python Bootcamp - Grundlagen
Python Bootcamp - GrundlagenPython Bootcamp - Grundlagen
Python Bootcamp - GrundlagenDatamics
 
Sitzung 9
Sitzung 9Sitzung 9
Sitzung 9scuy
 
2005 - .NET SummerCamp: C# 2.0
2005 - .NET SummerCamp: C# 2.02005 - .NET SummerCamp: C# 2.0
2005 - .NET SummerCamp: C# 2.0Daniel Fisher
 
Python Mike Müller
Python Mike MüllerPython Mike Müller
Python Mike MüllerAberla
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureSascha Koch
 
Gute Zeilen schlechte Zeilen, JUG Ostfalen 29.8.2013
Gute Zeilen schlechte Zeilen, JUG Ostfalen 29.8.2013Gute Zeilen schlechte Zeilen, JUG Ostfalen 29.8.2013
Gute Zeilen schlechte Zeilen, JUG Ostfalen 29.8.2013gedoplan
 

Ähnlich wie C Sharp Einfuehrung Teil 2 (20)

Scala Workshop
Scala WorkshopScala Workshop
Scala Workshop
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
 
Python
PythonPython
Python
 
Fundamentale Muster in Java
Fundamentale Muster in JavaFundamentale Muster in Java
Fundamentale Muster in Java
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
 
Objektorientierte Techniken und UML
Objektorientierte Techniken und UMLObjektorientierte Techniken und UML
Objektorientierte Techniken und UML
 
Multithreading in c# mit tpl
Multithreading in c# mit tplMultithreading in c# mit tpl
Multithreading in c# mit tpl
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
Sitzung 2
Sitzung 2Sitzung 2
Sitzung 2
 
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDAFH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
FH Wedel - SS11 - Seminar - Marcus Riemer - LEDA
 
Workshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GAWorkshop zu Hibernate 3.2.2 GA
Workshop zu Hibernate 3.2.2 GA
 
Python crash-kurs
Python crash-kursPython crash-kurs
Python crash-kurs
 
Python Bootcamp - Grundlagen
Python Bootcamp - GrundlagenPython Bootcamp - Grundlagen
Python Bootcamp - Grundlagen
 
Sitzung 9
Sitzung 9Sitzung 9
Sitzung 9
 
2005 - .NET SummerCamp: C# 2.0
2005 - .NET SummerCamp: C# 2.02005 - .NET SummerCamp: C# 2.0
2005 - .NET SummerCamp: C# 2.0
 
Python Mike Müller
Python Mike MüllerPython Mike Müller
Python Mike Müller
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit Clojure
 
Gute Zeilen schlechte Zeilen, JUG Ostfalen 29.8.2013
Gute Zeilen schlechte Zeilen, JUG Ostfalen 29.8.2013Gute Zeilen schlechte Zeilen, JUG Ostfalen 29.8.2013
Gute Zeilen schlechte Zeilen, JUG Ostfalen 29.8.2013
 
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen IBIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
 
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen IBit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
 

C Sharp Einfuehrung Teil 2

  • 1. C# Einführung - Einführung in die OOP Do, Hoang Viet (do@mi.fu-berlin.de) Draphony Games (http://www.draphony.de)
  • 2. 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 04.12.2013 2
  • 4. 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 04.12.2013 4
  • 5. Rückgabewert eine Methode • Allgemeine Syntax static 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“ 04.12.2013 5
  • 6. 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 04.12.2013 6
  • 7. Demo: „e02_returns.cs“ Fehler bei Umgang mit Rückgabewerten 04.12.2013 7
  • 9. 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 04.12.2013 9
  • 11. 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! 04.12.2013 11
  • 13. 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: 04.12.2013 getMax(1,2,3,4,5,6,7,8); 13
  • 15. 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 04.12.2013 15
  • 17. Methoden überladen static void swap(ref int a, ref int b) { int t = a; a = b; b = t; } • Was passiert bei?  swap(i1, i2);  swap(d1, d2); 04.12.2013 // int i1 = 1, i2 = 2; // double d1 = 1, d2 = 2; 17
  • 19. Methoden überladen • Definition mehrere Methoden mit dem gleichem Namen aber unterschiedliche Signatur • Signatur:  Parameterordnung:  Parametertyp  Parameteranzahl swap(int i, double d) square(int a) max(int a1) und swap(double d, int i) und square(double d) 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) 04.12.2013 19
  • 20. 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) 04.12.2013 20
  • 22. Demo: e00_motivation.cs Wofür gibt es Klassen? 04.12.2013 22
  • 23. 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 04.12.2013 23
  • 25. 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 04.12.2013 25
  • 26. Demo: e02_userdefine.cs Eigene Klasse erstellen Objekte der Klasse erzeugen 04.12.2013 26
  • 27. 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(); 04.12.2013 27
  • 28. 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?“ 04.12.2013 28
  • 30. 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 04.12.2013 30
  • 31. 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 04.12.2013 31
  • 32. Demo: e03_field.cs Auswirkungen von unterschiedlichen Zugriffsmodifizier 04.12.2013 32
  • 33. 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? 04.12.2013 33
  • 34. Demo: e04_staticfield.cs Auswirkungen von unterschiedlichen Zugriffsmodifizier 04.12.2013 34
  • 35. Klassenvariablen • Klassenvariablen gehören zu den Datenmembers • Allgemeine Syntax class ClassIdent { static modifier type1 field1; static modifier type2 field2; expr } 04.12.2013 35
  • 38. 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 04.12.2013 38
  • 40. 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 04.12.2013 40
  • 41. 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! 04.12.2013 41
  • 42. 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 } 04.12.2013 42
  • 44. Eigentschaften (engl. Properties) • „Virtuelle“ Datenmembers • Datenmembers, die über 2 Methoden realisiert werden:  Get-Accessor:  Set-Accessor: Wert eines Members lesen Wert eines Members festlegen • Eigenschaften sind Datenmember, die über Accessor zugegriffen realisiert werden 04.12.2013 44
  • 46. 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! 04.12.2013 46
  • 49. Vielen Dank für die Aufmerksamkeit http://www.draphony.de facebook.com/DraphonyGames 04.12.2013 49