C Sharp Einfuehrung Teil 2
Post on 12-Nov-2014
258 Views
Preview:
DESCRIPTION
Transcript
C# Einführung
- Einführung in die OOP -
Do, Hoang Viet (do@mi.fu-berlin.de)
Draphony Games (http://www.draphony.de)
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
304.12.2013
Demo: „e01_methods.cs“Eigene Methode definieren
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
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“
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
704.12.2013
Demo: „e02_returns.cs“Fehler bei Umgang mit Rückgabewerten
804.12.2013
Parameter
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
1004.12.2013
Demo: „e03_scope.cs“Gültigkeitsbereich von Variablen
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!
1204.12.2013
Demo: „e04_paramdef.cs“Parameterübergabe: Passing by Reference
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);
1404.12.2013
Demo: „e05_params.cs“Parameterübergabe: Passing by Reference
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
1604.12.2013
Demo: „e06_refactor.cs“
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;
1804.12.2013
Beispiel: „e07_overload.cs“
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)
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)
2104.12.2013
Beispiel: „e08_recursive.cs“
Addition als Rekursion
2204.12.2013
Demo: e00_motivation.csWofür gibt es Klassen?
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
2404.12.2013
Demo: e01_classes.csBekannte Klassen
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
2604.12.2013
Demo: e02_userdefine.csEigene Klasse erstellen
Objekte der Klasse erzeugen
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();
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?“
2904.12.2013
Datenmembers
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
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
3204.12.2013
Demo: e03_field.csAuswirkungen von unterschiedlichen Zugriffsmodifizier
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?
3404.12.2013
Demo: e04_staticfield.csAuswirkungen von unterschiedlichen Zugriffsmodifizier
3504.12.2013
Klassenvariablen
• Klassenvariablen gehören zu den Datenmembers
• Allgemeine Syntax
class ClassIdent {
static modifier type1 field1;
static modifier type2 field2;
expr
}
3604.12.2013
Funktionalen Members
3704.12.2013
Funktionen
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
3904.12.2013
Demo: e05_constructor.csKonstruktoren
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
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!
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
}
4304.12.2013
Demo: e08_classconstructor.cs
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
4504.12.2013
Demo: e06_properties.cs
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!
4704.12.2013
Demo: e07_readonly.cs
4804.12.2013
Demo: e09_namespace.cs
4904.12.2013
http://www.draphony.de
facebook.com/DraphonyGames
Vielen Dank für die Aufmerksamkeit
top related