N203 Leg med klasser
I denne opgave skal du blot lege med en allerede oprettede klasser.
- Start med at skabe en tom konsol applikantion
- Tilføj så NuGet pakken
MCronberg.Kursus
- Brug Visual Studio og højreklik på dit projekt og vælg Manage NuGet Packages
- Eller ved brug af Visual Studio Code brug dotnet CLI
dotnet add package MCronberg.Kursus
- Tilføj så følgende kode til din
Program.cs
fil
Terning og TerningBæger
Prøv eksempelvis at bruge mine klasser som repræsenterer en terning og et bæger med terninger:
using Dumpify;
using MCronberg.Kursus;
Terning t = new Terning();
Console.WriteLine("Værdi: " + t.Værdi);
t.Dump();
t.Ryst();
t.Dump();
TerningBæger bæger = new TerningBæger(5);
bæger.Dump();
bæger.Sorter();
bæger.Dump();
- Kør programmet og se hvad der sker.
- Her er et UML diagram over klasserne:
classDiagram
class TerningBæger {
- Terning[] Terninger
+ TerningBæger(int antalTerninger)
+ void Ryst()
+ string ToString()
+ void Sorter()
}
class Terning {
- int Værdi
+ Terning()
+ Terning(int værdi)
+ void Ryst()
+ string ToString()
}
TerningBæger --> Terning : contains
Overvejelser
-
Kan du se fordelene ved at bruge klasser til at organisere koden? Brugeren behøver ikke kende noget som helst til hvordan klassen er implementeret, blot hvordan den bruges.
-
Prøv at skrive din egen kode der benytter klasserne.
- Kan du komme i tanke om noget funktionalitet som kunne tilføjes til klassen
Terning
ellerTerningBæger
? - Se evt koden til klasserne her.
Kort og bunker
Prøv at erstatte koden med dette som nu leger med kort og bunker med kort:
using Dumpify;
using MCronberg.Kursus;
Spillekort s = new Spillekort();
s.Dump();
s.Vend();
s.Dump();
s.Vend();
s.Dump();
Spillekort s2 = new Spillekort(SpillekortKulør.Hjerter, SpillekortVærdi.Es);
s2.Dump();
SpillekortBunke b = new();
b.TilføjKort(s);
b.TilføjKort(s2);
b.Dump();
b.VendAlleKort();
b.Dump();
// Prøv også dette
// SpillekortBunke b2 = SpillekortBunke.OpretBunke();
// b2.Dump();
- Kør programmet og se hvad der sker.
- Her er et UML diagram over klasserne:
classDiagram
class Spillekort {
- SpillekortKulør Kulør
- SpillekortVærdi Værdi
- SpillekortRetning Retning
- int Point
- bool ErJoker
+ Spillekort()
+ Spillekort(SpillekortKulør kulør, SpillekortVærdi værdi)
+ Spillekort(SpillekortKulør kulør, SpillekortVærdi værdi, SpillekortRetning retning, int point)
+ Spillekort(int point, bool erJoker)
+ void Vend()
+ SpillekortFarve Farve()
+ string ToString()
+ static SpillekortKulør FindTilfældigSpillekortKulør()
+ static SpillekortVærdi FindTilfældigSpillekortVærdi()
+ static Spillekort FindTilfældigtKort()
}
class SpillekortBunke {
- List~Spillekort~ Kort
+ static SpillekortBunke OpretBunke(int antalKortspil, int antalJokere)
+ void FlytKortTilBunke(SpillekortBunke bunke, int antalKort)
+ void TilføjKort(Spillekort kort)
+ void FjernKort(Spillekort kort)
+ void Bland()
+ void Sorter()
+ void VendAlleKort()
+ void FjernAlleKort()
+ void FjernAlleKort(SpillekortKulør kulør)
+ void FjernAlleKort(SpillekortVærdi værdi)
+ void FjernAlleKort(SpillekortKulør kulør, SpillekortVærdi værdi)
+ void FjernAlleKort(SpillekortFarve farve)
+ string ToString()
}
class SpillekortKulør {
}
class SpillekortRetning {
}
class SpillekortVærdi {
}
class SpillekortFarve {
}
SpillekortBunke --> Spillekort : contains
Spillekort --> SpillekortKulør
Spillekort --> SpillekortRetning
Spillekort --> SpillekortVærdi
Spillekort --> SpillekortFarve
Overvejelser
-
Kan du se fordelene ved at bruge klasser til at organisere koden? Brugeren behøver ikke kende noget som helst til hvordan klassen er implementeret, blot hvordan den bruges.
-
Prøv at skrive din egen kode der benytter klasserne.
- Kan du komme i tanke om noget funktionalitet som kunne tilføjes til klassen
Spillekort
ellerSpillekortBunke
? - Se evt koden til klasserne her