C Sharp Einfuehrung Teil 2
Upcoming SlideShare
Loading in...5
×
 

C Sharp Einfuehrung Teil 2

on

  • 232 views

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

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

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

Statistics

Views

Total Views
232
Views on SlideShare
224
Embed Views
8

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 8

http://www.draphony.de 8

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

C Sharp Einfuehrung Teil 2 C Sharp Einfuehrung Teil 2 Presentation Transcript

  • 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