cs

Polimorfizm i abstrakcja (klasy abstrakcyjne i interfejsy) w języku C#.

Polimorfizm

Zapoznaj się z artykułem a nastepnie odpowiedz na pytania.

Czym jest polimorfizm? Wymień różnice pomiędzy polimorfizmem statycznym a dynamicznym. Podaj przykłady kodu.

  1. Polimorfizm statyczny (rozstrzygany w czasie kompilacji):
  1. Polimorfizm dynamiczny (rozstrzygany w czasie wykonania programu):

Jakie słowo kluczowe w C# pozwala na przesłanianie metod w klasach pochodnych? Jakie warunki muszą być spełnione aby możliwe było przesłonięcie?

Jak działają słowa kluczowe virtual sealed override w C#

virtual -

sealed -

override -

Czym różni się new od override przy przesłanianiu metod?

Klasa abstrakcyjna

zapoznaj się z artykułami 1 oraz 2 i odpowiedz na pytania.

Czym jest klasa abstrakcyjna i kiedy należy jej używać? (podaj przykład)

Czy można utworzyć instancję klasy abstrakcyjnej? Jeśli nie, to dlaczego?

Jak działają metody abstrakcyjne i czym różnią się od metod wirtualnych?

Metody abstrakcyjne nie zawierają rzeczywistego kodu, a klasy pochodne MUSZĄ nadpisać metodę. Metody wirtualne mogą mieć kod, który zazwyczaj stanowi domyślną implementację czegoś, a klasy pochodne MOGĄ nadpisać ten kod (metodę), używając modyfikatora override i dostarczyć własną implementację.

Czy klasa abstrakcyjna może mieć metody z implementacją?

Stwórz abstrakcyjną klasę z metodą abstrakcyjną oraz virtualną. Spróbuj zaimplementować ciało obu metod. Następnie stwórz klasę dziedziczącą po stworzonej klasie abstrakcyjnej. Zaimplementuj metody które tego wymagają. Następnie stwórz obiekt i wywołaj obydwie metody.

Jaka jest różnica między klasą abstrakcyjną a interfejsem?

Interfejsy

Zapoznaj się z artykułem 12 a następnie odpowiedz na pytania.

Co to jest interfejs i do czego służy w C#?

Jakie słowo kluczowe definiuje interfejs w C#? Jaka jest konwencja nazewnictwa?

Czy interfejs może zawierać pola? Jeśli nie, to dlaczego?

Czy interfejsy mogą zawierać implementację metod? Jeśli tak, to od której wersji C#?

Stwórz projekt w .Net 8.0. Stwórz interfejs z dwiema metodami: pierwsza nie powinna mieć implementacji (metoda abstrakcyjna), w drugiej metodzie spróbuj zdefiniować implementację funckji. Następnie zmień wersję docelową frameworku: https://learn.microsoft.com/en-us/visualstudio/ide/visual-studio-multi-targeting-overview?view=vs-2022https://learn.microsoft.com/en-us/visualstudio/ide/visual-studio-multi-targeting-overview?view=vs-2022

Jak wygląda implementacja wielu interfejsów w jednej klasie? (po ilu interfejsach możliwe jest dziedziczenie)

Jak różni się interfejs od klasy abstrakcyjnej pod względem dziedziczenia?

Zadania

Zadanie 1

Napisz program, w którym zademonstrujesz przeciążanie metod oraz polimorfizm statyczny. Stwórz klasę Matematyka, która będzie zawierać przeciążoną metodę Dodaj, przyjmującą różne typy argumentów (np. int, double).

Zadanie 2

Napisz program, w którym zademonstrujesz polimorfizm dynamiczny. Zaimplementuj klasy Pojazd, Samochod, Motocykl, gdzie Pojazd będzie posiadać metodę Jazda(), którą klasy pochodne nadpiszą (override).

Zadanie 3

Stwórz klasy reprezentujące różne rodzaje zwierząt. Każde zwierzę ma metodę WydajDzwiek(), która generuje dźwięk charakterystyczny dla danego gatunku. Dodaj również metodę Jedz(), która nie będzie wirtualna.

Zadanie 4

Napisz program w C#, który symuluje różne typy pojazdów. Program powinien zawierać klasę abstrakcyjną Vehicle, która będzie podstawą dla konkretnych typów pojazdów, takich jak Car i Bike. Stwórz klasę abstrakcyjną Vehicle, która zawiera:

Zadanie 5

Napisz program w C#, który będzie zarządzał listą zadań. Użyj interfejsów do zdefiniowania podstawowej funkcjonalności, jaką musi spełniać każde zadanie, a następnie stwórz różne typy zadań. Stwórz interfejs ITask, który będzie zawierał: