C Sharp Einfuehrung Teil 2

188
-1

Published on

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

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

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
188
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×