D1. W nowym projekcie wykonaj poniższe czynności:
- Stwórz klasę
Osoba
z polamiimie
inazwisko
. Następnie stwórz klasę potomnąStudent
z polamirokStududiów
,numerGrupy
,numerAlbumu
. Dodaj w obu klasach konstruktory domyślne i parametryczne (można wykorzystać kod z jednych z poprzednich ćwiczeń). - W obu klasach stwórz metody
WypiszInfo()
wyświetlające wszystkie pola z klasy na konsoli (mają to być tylko instrukcjeConsole.WriteLine()
z parametrami). - Dodaj
new
, aby pozbyć się ostrzeżenia (warning) w Visual Studio. Czemu takie rozwiązanie nie jest najlepsze? - Wykonaj rzutowanie w górę (
Osoba student1 = new Student()
) i wywołaj dla tego obiektu metodęWypiszInfo()
. - Usuń
new
(dodane w trzecim podpunkcie). Następnie do metodyWypiszInfo()
w klasieOsoba
dodajvirtual
, a w klasieStudent
override
. Jaka jest różnica? - Zmodyfikuj metodę
WypiszInfo()
w klasieStudent
używającbase.WypiszInfo();
(o ile nie zrobiono tego wcześniej). - Narysuj diagram klas UML projektu.
D2. Zmodyfikuj kod z polecenia 1, by zamiast metody WypiszInfo()
przesłonić metodę ToString()
(zwróć uwagę na inny typ zwracany).
D3. Stwórz nowy projekt. A w nim wykonaj następujące czynności:
- Dodaj abstrakcyjną klasę
Figura
, a w niej polaa
,b
,c
(z modyfikatoremprotected
) i abstrakcyjną metodąObliczPole()
. - Stwórz dwie klasy potomne
Kwadrat
iTrojkat
dziedziczące z klasyFigura
. - Stwórz obiekty z klasy
Figura
,Kwadrat
,Trojkat
(w razie potrzeby stwórz konstruktory). Czy wszystko jest możliwe? - Dodaj w klasach
Kwadrat
iTrojkat
przesłoniętą metodęObliczPole()
i wywołaj ją dla stworzonych obiektów. - Stwórz listę obiektów z klas pochodnych do klasy
Figura
. Następnie za pomocą instrukcjiforeach
oblicz dla nich pola. - Narysuj diagram UML projektu.
D4. Wykonaj poniższe czynności:
- pobierz (sklonuj) repozytorium https://github.com/pjastr/Ex701
- przeanalizuj plik
Program.cs
i zbudowaną łamigłówkę dziedziczenia klas. - W metodzie
Main
stwórz dokładnie 6 obiektów, dla każdego z nich wywołaj po 2 metody tak, aby na konsoli wyjście wyglądało następująco:
A VirtualFun()
D VirtualFun2()
A NormalFun()
A VirtualFun()
B VirtualFun2()
A NormalFun()
B NormalFun()
C VirtualFun()
D VirtualFun()
D VirtualFun2()
B VirtualFun2()
C VirtualFun()
F VirtualFun()
F VirtualFun2()
D5. Na podstawie diagramu UML stwórz projekt. Następnie zaimplementuj wzorzec prototypu/głębokiej kopii. Stwórz co najmniej jeden przypadek testowy.
D6. Przeanalizuj przykłady dostępne na stronie https://refactoring.guru/design-patterns/singleton/csharp/example#example-1 Na podstawie tego przygotuj projekt z dwoma wersjami wzorca Singleton (z obsługą wątków i bez).
D7. Zmodyfikuj wzorzec singletonu tak, aby dopuszczał maksymalnie dwie instancje obiektów danego typu.
(*) czy jest możliwe aby były dokładnie dwie instancje albo zero?