You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## Einstieg in die objektorientierte Programmierung
27
27
28
28
---
29
29
hideInToc: true
@@ -35,69 +35,143 @@ hideInToc: true
35
35
36
36
---
37
37
38
-
# Warum brauchen wir Klassen?
38
+
# Klasse = der Bauplan 📝
39
39
40
-
Structs reichen für einfache Daten, aber sobald Dinge **Verhalten**haben (z. B. ein Auto, das fahren kann), brauchen wir **Klassen**.
40
+
Eine Klasse ist wie ein **Bauplan**für ein **Haus**.
41
41
42
-
-Klassen sind das Herz der objektorientierten Programmierung (OOP).
43
-
-Sie beschreiben wie etwas aussieht (Daten) und was es tun kann (Methoden).
42
+
-Der Bauplan beschreibt, welche Räume, Fenster und Türen das Haus hat.
43
+
-Aber solange der Plan nur auf Papier existiert, steht noch kein Haus.
44
44
45
+
```csharp {1-2,14}{lines:true}
46
+
classPlayer
47
+
{
48
+
publicintLebenspunkte; // Daten in Form von Feldern
49
+
50
+
publicPlayer(intlebenspunkte)
51
+
{
52
+
this.Lebenspunkte=lebenspunkte;
53
+
}
54
+
55
+
publicvoidAngreifen() // Methoden
56
+
{
57
+
Console.WriteLine($"Spieler greift an.");
58
+
}
59
+
}
60
+
```
45
61
<br>
46
62
47
-
**Beispiel:**
63
+
> 👉 Eine Klasse ist nur die Anleitung, kein echtes Objekt im Speicher.
48
64
49
-
```csharp
50
-
classHaus
65
+
---
66
+
67
+
# Warum brauchen wir Klassen ❓
68
+
69
+
Um **Daten und Verhalten logisch zusammenzufassen**, sodass wir **komplexe Dinge** aus der realen Welt als **strukturierte, wiederverwendbare Objekte** im Programm abbilden können.
70
+
71
+
- Klassen sind das Herz der **objektorientierten Programmierung (OOP**).
72
+
- Sie beschreiben wie etwas aussieht (**Daten**) und was es tun kann (**Methoden**).
73
+
74
+
```csharp {1-3,10-14}{lines:true}
75
+
classPlayer
51
76
{
52
-
publicintAnzahlFenster;
53
-
publicstringFarbe;
77
+
publicintLebenspunkte; // Felder = Daten
78
+
79
+
publicPlayer(intlebenspunkte)
80
+
{
81
+
this.Lebenspunkte=lebenspunkte;
82
+
}
54
83
55
-
publicvoidOeffneFenster()
84
+
publicvoidAngreifen() // Methoden
56
85
{
57
-
Console.WriteLine("Fenster geöffnet!");
86
+
Console.WriteLine($"Spieler greift an.");
58
87
}
59
88
}
60
89
```
61
90
91
+
62
92
---
63
93
64
-
# Klassen = der Bauplan 📝
94
+
# Der Konstruktor = der Baumeister 👷♂️
65
95
66
-
Eine Klasse ist wie ein **Bauplan** für ein **Haus**.
96
+
Damit aus einem Bauplan ein echtes Haus wird, braucht man jemanden, der es baut – den **Baumeister**.
67
97
68
-
- Der Bauplan beschreibt, welche Räume, Fenster und Türen das Haus hat.
69
-
- Aber solange der Plan nur auf Papier existiert, steht noch kein Haus.
98
+
In C# übernimmt das der **Konstruktor**.
70
99
71
-
```csharp
100
+
```csharp {5-8}{lines:true}
72
101
classPlayer
73
102
{
74
103
publicintLebenspunkte;
75
104
105
+
publicPlayer(intlebenspunkte) // Konstruktor mit einem Parameter
106
+
{
107
+
this.Lebenspunkte=lebenspunkte;
108
+
}
109
+
76
110
publicvoidAngreifen()
77
111
{
78
112
Console.WriteLine($"Spieler greift an.");
79
113
}
80
114
}
81
115
```
82
116
83
-
<br>
117
+
---
118
+
119
+
# Standardkonstruktor
120
+
121
+
Eine Klasse hat **immer** einen Standardkonstruktor, also einen Konstruktor ohne Parameter, der keine Felder setzt.
84
122
85
-
> 👉 Diese Klasse ist nur die Anleitung, kein echtes Objekt im Speicher.
123
+
```csharp {lines:true}
124
+
classPlayer
125
+
{
126
+
publicintLebenspunkte;
127
+
128
+
publicvoidAngreifen()
129
+
{
130
+
Console.WriteLine($"Spieler greift an.");
131
+
}
132
+
}
133
+
```
86
134
87
135
---
88
136
89
-
# Der Konstruktor = der Baumeister 👷♂️
137
+
# Standardkonstruktor überschreiben
90
138
91
-
Damit aus einem Bauplan ein echtes Haus wird, braucht man jemanden, der es baut – den **Baumeister**.
139
+
Man kann den Standarkonstuktor überschreiben, um Felder mit "Standardwerten" zu befüllen.
92
140
93
-
In C# übernimmt das der **Konstruktor**.
141
+
```csharp {5-8}{lines:true}
142
+
classPlayer
143
+
{
144
+
publicintLebenspunkte;
94
145
95
-
```csharp
146
+
publicPlayer()
147
+
{
148
+
this.Lebenspunkte=80;
149
+
}
150
+
151
+
publicvoidAngreifen()
152
+
{
153
+
Console.WriteLine($"Spieler greift an.");
154
+
}
155
+
}
156
+
```
157
+
158
+
---
159
+
160
+
# Mehrere Konstruktoren
161
+
162
+
Es ist auch möglich mehrere Konstruktoren zu definieren
163
+
164
+
```csharp {5-13}{lines:true}
96
165
classPlayer
97
166
{
98
167
publicintLebenspunkte;
99
168
100
-
publicPlayer(intlebenspunkte) // Konstruktor
169
+
publicPlayer()
170
+
{
171
+
this.Lebenspunkte=80;
172
+
}
173
+
174
+
publicPlayer(intlebenspunkte)
101
175
{
102
176
this.Lebenspunkte=lebenspunkte;
103
177
}
@@ -116,40 +190,93 @@ class Player
116
190
Wenn der Bauplan (Klasse) umgesetzt wird, entsteht ein konkretes **Objekt** – das „echte Haus“.
117
191
118
192
```csharp
119
-
Playerplayer=newPlayer(100);
120
-
Playerenemy=newPlayer(50);
193
+
Playerplayer=newPlayer(100); // neues Objekt ensteht
194
+
195
+
Playerenemy=newPlayer(50); // ein weiteres Objekt entsteht
121
196
122
-
Console.WriteLine(player.Lebenspunkte); // 100
123
-
Console.WriteLine(enemy.Lebenspunkte); // 50
197
+
Playerboss=newPlayer(); // ein weiteres Objekt, welches den Standardkonstruktor benutzt hat
124
198
```
125
199
126
200
<br>
127
201
128
-
> 💡 Merke: Objekt = Instanz der Klasse.
202
+
> 💡 Objekt = **Instanz der Klasse**.
129
203
130
204
---
131
205
132
-
# Objekte referenzieren
206
+
# Objekte referenzieren 👉
133
207
134
-
Eine Klasse erstellt ein Objekt, und ein Objekt ist ein **Referenztyp** (*"referenzieren"*).
208
+
Ein Objektist ein **Referenztyp**. Mit Variablen *referenzieren* (zeigen 👉) wir auf diese Objekte im Speicher.
135
209
136
210
**Stell dir ein Schulspind-System vor:**
137
211
- Der Spind (Objekt) steht irgendwo im Schulhaus → das ist der Speicher im Heap.
138
212
- Die Spindnummer (Referenz) steht auf deinem Schlüsselanhänger → das ist die Variable im Code.
139
213
140
214
```csharp
141
-
Hausa=newHaus("Weiß"); //a speichert die „Spindnummer“
142
-
Hausb=a; //b bekommt dieselbe Nummer
215
+
Playerplayer=newPlayer(100); //`player` speichert die "Spindnummer"
216
+
PlayersamePlayer=player; //`samePlayer` bekommt die selbe "Spindnummer"
0 commit comments