objektorientierung - home | ifsrpublic kann von uberall zugri en werden, solange darauf verwiesen...
TRANSCRIPT
Objektorientierung
Marc Satkowski
20. November 2016
C# Kurs
Gliederung
1. Weiterfuhrende Verzweigungen
Tertiare-Verzweigung
switch case
2. Schleifen
Zahlschleife (for)
break & continue
3. Objektorientierung
Klassen
Objekte
Konstruktor
Felder & Eigenschaften
Zugriff von Objekteigenschaften
4. Zugriffsmodifikatoren/Sichtbar-
keiten
1
Weiterfuhrende Verzweigungen
Tertiare-Verzweigung
• Werden genauso genutzt wie eine if-else-Verzweigung
• Syntax:
• <Bedingung> ? <Dann-Pfad> : <Sonst-Pfad>;
• Das ? steht fur dann
• Das : steht fur sonst
1 bool variable = false;
2 // Hier beginnt die tertiaere -Verzweigung.
3 int zahl = variable ? 5 : -1;
2
switch case
• Hat ahnliches Verhalten wie die bedingte Verzweigung
• default verhalt sich wie else
• Jeder case pruft die Variable im switch auf Gleichheit und fuhrt den
darunterliegenden Code bis zum break aus
1 int note = 2;
2 string noteStr = "";
3 // Hier beginnt die switch -case -Verzweigung.
4 switch (note)
5 {
6 case 1:
7 noteStr = "Sehr gut";
8 break;
9 case 2:
10 noteStr = "Gut";
11 break;
12 // ...
13 default:
14 noteStr = "Diese Note gibt es nicht.";
15 break;
16 }3
Schleifen
Zahlschleife (for)
• Zahlt uber eine Zahlvariable in gewisser Schrittweite, bis die
Bedingung nicht mehr erfullt ist
• Syntax:
• for( <Zahlvariable>; <Bedingung>; <Schrittweite> )
{ <Code> }
1 int erg = 0;
2 // Hier beginnt die for -Schleife.
3 for(int zaehler = 0; zaehler < 5; zaehler ++)
4 {
5 erg += zaehler;
6 }
4
break & continue
break
• Beendet die direkt umschließende Schleife, in der die Anweisung
auftritt
• Beachtet dabei nicht wie viele Schleifendurchlaufe es eigentlich noch
geben wurde
continue
• Beendet den jetzigen Schleifen-Block-Durchlauf und geht zur
Bedingung der Schleife zuruck
• Daraufhin kann die Schleife mit dem nachsten Iterationsschritt
fortsetzen
5
break & continue
break & continue:
• Beide konnen und sollten mit Verzweigungen benutzt werden
1 int erg = 0;
2
3 for(int zaehler = 0; zaehler < 10; zaehler ++)
4 {
5 // Es werden nur ungerade Zahlen erlaubt.
6 if(zaehler % 2 == 0)
7 continue;
8 erg += zaehler;
9 // Falls die Variable erg 16 ist , wird die ganze
10 // Schleife beendet.
11 if(erg == 16)
12 break;
13 }
6
Objektorientierung
Objektorientierung
• Alles in C# ist ein Objekt, auch die Variablen von primitiven
Datentypen, wie z.B. int oder bool
• Damit kann alles in C# Felder und Methoden besitzen
7
Klassen
• Ist eine Vorlage oder ein Bauplan
• Kann Felder, Eigenschaften und Methoden besitzen
• Klassen werden durch das Schlusselwort class gekennzeichnet
1 class Klassenname
2 {
3 int EinFeld;
4 int EineEigenschaft
5 { get; set;}
6
7 int EineMethode ()
8 {
9 // Code
10 }
11 }
8
Objekte
• Werden anhand von Klassen erstellt und sind somit Instanzen einer
Klasse
• Dies geschieht mit dem Schlusselwort new und einem von der Klasse
definierten Konstruktor
• Die Felder und Member einer Klasse konnen durch Objekte befullt
werden
1 EineKlasse einObject = new EineKlasse ();
9
Konstruktor
• Sind spezielle Methoden die beim Erstellen einer Instanz einer Klasse
aufgerufen werden
• Sie besitzen keinen Namen und haben als Ruckgabetyp ein Objekt
der eigenen Klasse
• Es wird aber kein return benotigt
• Sollte sicherstellen, dass eine gultige Instanz einer Klasse erzeugt
wird
• Falls kein eigener Konstruktor deklariert wurde, existiert immer der
Standardkonstruktor (parameterlos und weist allen Feldern
Standardwerte zu)
1 class EineKlasse
2 {
3 // Das ist ein Konstruktor
4 EineKlasse ()
5 {
6 // Code
7 }
8 }
10
Konstruktor
Schlusselwort new
• Zur Erstellung einer Instanz einer Klasse
• Ruft immer einen Konstruktor der jeweiligen Klasse auf
1 EineKlasse variable = new EineKlasse ();
11
Felder & Eigenschaften
Felder
• Werden auch Attribute genannt
• Sind Variablen eines beliebigen Typs, welche direkt in einer Klasse
deklariert wurden und damit dieser Klasse zugehorig sind
Eigenschaften
• Bietet flexible Mechanismen zum Lesen, Schreiben und Berechnen
der Werte eines Feldes
• Es muss aber nicht zwangslaufig ein Feld abbilden
• Besitzen nach dem Namen einen Block in denen ein get und/oder
set definiert werden kann
12
Felder & Eigenschaften
Eigenschaften: get & set
• Diese agieren wie Methoden
• Sie konnen einen Korper haben, mussen es aber nicht
• Sobald einer der beiden einen Korper hat, muss der andere auch
einen haben (wenn sowohl get als auch set implementiert werden
sollen)
• Falls kein eigener Korper definiert wurde, wird die Variable wie ein
Feld benutzt
• Besitzen eigene Sichtbarkeiten (unterschiedlich vom Feld selbst)
• set hat dabei einen Ubergabeparameter, und zwar value
• Dieser ist vom selben Typ, wie die Eigenschaft
13
Felder & Eigenschaften
1 class EineKlasse
2 {
3 int einFeld;
4 int EineEigenschaft
5 {
6 get
7 {
8 return einFeld;
9 }
10 private set
11 {
12 // Moegliche Berechnungen
13 einFeld = value + 42;
14 }
15 }
16 }
14
Zugriff von Objekteigenschaften
Zugriff mit . (Punkt)
• Um auf Inhalte (Methoden, Eigenschaften, ...) eines Objektes
zugreifen zu konnen, nutzt man einen Punkt .
• Dahinter kommt der Member den man nutzen mochte
this
• Gibt die aktuelle Instanz der Klasse (in dem man gerade ist und
arbeitet) als Variable wieder
• Nutzen:
• Ubergabe der aktuellen Instanz der Klasse in Methoden
• Nutzung von Membern, die durch gleiche Kennzeichner ausgeblendet
werden (falls Member und Variablen den gleichen Namen haben)
• Und andere (wird spater erlautert)
15
Zugriffsmodifikatoren/Sichtbarkeiten
Zugriffsmodifikatoren/Sichtbarkeiten
• Geben an, ob der zugehorige Code von anderen Code-Abschnitten
verwendet werden kann
• Es gibt mehrere Arten
public kann von uberall zugriffen werden, solange darauf
verwiesen wird
private kann nur von Code in der eigenen Klasse benutzt
werden
protected kann nur von Code in der eigenen und von
abgeleiteten Klassen benutzt werden
( internal kann von uberall aus der eigenen Assembly heraus
benutzt werden )
16
Zugriffsmodifikatoren/Sichtbarkeiten
1 // Es kann jeder diese Klasse benutzen.
2 public class EineKlasse
3 {
4 public string einPublicFeld;
5 // Diese beiden koennen nur innerhalb der Klasse benutzt
6 // werden.
7 private int einFeld;
8 protected string einAnderesFeld;
9
10 // Jeder kann eine Instanz dieser Klasse erstellen.
11 public EineKlasse ()
12 { }
13
14 // Diese Methode kann von ueberall benutzt werden ,
15 // solange es einen Verweis auf eine Instanz dieser
16 // Klasse gibt.
17 public void EineMethode ()
18 { }
19 }
17