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 (...
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 mnam...
Rückgabewert eine Methode
• Allgemeine Syntax
static ret_type square(type1 p1, type2 p2, …) {
expr
}

• Rückgabewert: ret_...
Rückgabewerte
• Was passiert wenn eine Funktion einen Rückgabewert spezifiziert (sprich nicht

mit void definiert wurde) a...
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

• Paramete...
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
ge...
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(i...
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 L...
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)...
Beispiel:
„e07_overload.cs“
04.12.2013

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

Signatur
• Signatur:
 Para...
Anmerkung
• Rekursion
 Aufruf einer Funktion in sich selbst
 Beispiel: Addition über Rekursion
static int add(int a, int...
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 Validieru...
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 v...
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 Mem...
Analogie zur echten Welt
• Zur welche Klasse gehören wir?
 Klasse Mensch

• Was bin ich?
 Ein Objekt

• Und was bist du?...
Datenmembers
04.12.2013

29
Objektvariablen (engl. Field)
• Variablen einer Klasse, die an das Objekt gebunden sind, werden

Objektvariablen genannt.
...
Objektvariablen
• Allgemeine Syntax
class ClassIdent {
modifier type1 field1;
modifier type2 field2;
expr
}

• Zugriffsmod...
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
• Klas...
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 ty...
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...
Demo: e05_constructor.cs
Konstruktoren

04.12.2013

39
Konstruktoren
• Syntax
modifier ClassIdent(type1 p1, type2 p2, …) {
expr
}

• Standardkonstruktor
 Hat keine Parameter
 ...
Konstruktoren
• Jeder Klasse besitzt mindesten einen Konstruktor

• Konstruktoren können sich über die colon – Syntax gege...
Klassenkonstruktor
• Zweck:
 dürfen nicht explixit aufgerufen!
 Sondern wenn die Klasse zum erst referrenziert wird.

• ...
Demo:
e08_classconstructor.cs
04.12.2013

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

• Datenmembers, die über 2 Methoden realisiert werden:
 Get...
Demo: e06_properties.cs

04.12.2013

45
Warum Eigentschaften?
• Erweiterte Zugriffskontrolle
 Nur Lesezugriff (engl. read-only)
 Nur Schreibzugriff (engl. write...
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
Nächste SlideShare
Wird geladen in …5
×

C Sharp Einfuehrung Teil 2

350 Aufrufe

Veröffentlicht am

Folien vom C# Einführungskurs: Einführung in OOP

http://www.draphony.de/veranstaltungen/2013-winter/c-sharp-einfuehrung/

Veröffentlicht in: Bildung
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
350
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
19
Aktionen
Geteilt
0
Downloads
2
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

C Sharp Einfuehrung Teil 2

  1. 1. C# Einführung - Einführung in die OOP Do, Hoang Viet (do@mi.fu-berlin.de) Draphony Games (http://www.draphony.de)
  2. 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
  3. 3. Demo: „e01_methods.cs“ Eigene Methode definieren 04.12.2013 3
  4. 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. 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. 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. 7. Demo: „e02_returns.cs“ Fehler bei Umgang mit Rückgabewerten 04.12.2013 7
  8. 8. Parameter 04.12.2013 8
  9. 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
  10. 10. Demo: „e03_scope.cs“ Gültigkeitsbereich von Variablen 04.12.2013 10
  11. 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
  12. 12. Demo: „e04_paramdef.cs“ Parameterübergabe: Passing by Reference 04.12.2013 12
  13. 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
  14. 14. Demo: „e05_params.cs“ Parameterübergabe: Passing by Reference 04.12.2013 14
  15. 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
  16. 16. Demo: „e06_refactor.cs“ 04.12.2013 16
  17. 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
  18. 18. Beispiel: „e07_overload.cs“ 04.12.2013 18
  19. 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. 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
  21. 21. Beispiel: „e08_recursive.cs“ Addition als Rekursion 04.12.2013 21
  22. 22. Demo: e00_motivation.cs Wofür gibt es Klassen? 04.12.2013 22
  23. 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
  24. 24. Demo: e01_classes.cs Bekannte Klassen 04.12.2013 24
  25. 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. 26. Demo: e02_userdefine.cs Eigene Klasse erstellen Objekte der Klasse erzeugen 04.12.2013 26
  27. 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. 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
  29. 29. Datenmembers 04.12.2013 29
  30. 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. 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. 32. Demo: e03_field.cs Auswirkungen von unterschiedlichen Zugriffsmodifizier 04.12.2013 32
  33. 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. 34. Demo: e04_staticfield.cs Auswirkungen von unterschiedlichen Zugriffsmodifizier 04.12.2013 34
  35. 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
  36. 36. Funktionalen Members 04.12.2013 36
  37. 37. Funktionen 04.12.2013 37
  38. 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
  39. 39. Demo: e05_constructor.cs Konstruktoren 04.12.2013 39
  40. 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. 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. 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
  43. 43. Demo: e08_classconstructor.cs 04.12.2013 43
  44. 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
  45. 45. Demo: e06_properties.cs 04.12.2013 45
  46. 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
  47. 47. Demo: e07_readonly.cs 04.12.2013 47
  48. 48. Demo: e09_namespace.cs 04.12.2013 48
  49. 49. Vielen Dank für die Aufmerksamkeit http://www.draphony.de facebook.com/DraphonyGames 04.12.2013 49

×