Powtórka — kalkulator kształtów
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 30 z 70.
Wyzwanie
ŁatwyStwórzmy kalkulator kształtów, który łączy wszystko, czego nauczyłeś się o interfejsach i polimorfizmie. Utworzysz system, w którym różne kształty można przetwarzać w jednolity sposób za pomocą wspólnego interfejsu, demonstrując możliwości polimorfizmu czasu wykonywania.
Rozmieścisz swój kod w czterech plikach:
IShape.cs: Zdefiniuj interfejs o nazwieIShapew przestrzeni nazwShapes. Każdy kształt musi umieć obliczyć swoje pole i opisać siebie. Zadeklaruj dwie metody:CalculateArea()zwracającą wartość typudoubleorazGetDescription()zwracającą wartość typustring.Circle.cs: Utwórz klasęCirclew przestrzeni nazwShapes, która implementujeIShape. Okrąg ma właściwośćRadius(double) ustawianą za pomocą konstruktora. Wzór na pole toMath.PI * Radius * Radius. Opis powinien zwracać"Circle with radius {Radius}".Rectangle.cs: Utwórz klasęRectanglew przestrzeni nazwShapes, która implementujeIShape. Prostokąt ma właściwościWidthiHeight(obie typu double), ustawiane za pomocą konstruktora. Pole to po prostu iloczyn szerokości i wysokości. Opis powinien zwracać"Rectangle {Width}x{Height}".Program.cs: W pliku głównym utwórz okrąg i prostokąt na podstawie wartości wejściowych, a następnie umieść je w tablicy referencji typuIShape. Przejdź przez pętlę po tablicy i dla każdego kształtu wypisz jego opis, a następnie pole zaokrąglone do dwóch miejsc po przecinku. To pokazuje, jak możesz przetwarzać zupełnie różne kształty za pomocą tego samego interfejsu!
Otrzymasz trzy dane wejściowe:
- Promień okręgu (double)
- Szerokość prostokąta (double)
- Wysokość prostokąta (double)
Wypisz wynik dla każdego kształtu w następującym formacie:
{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}Na przykład, jeśli dane wejściowe to 5, 4 i 6, wynik powinien wyglądać tak:
Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00Zauważ, że pętla nie musi wiedzieć, czy przetwarza okrąg, czy prostokąt — po prostu wywołuje metody interfejsu, a polimorfizm zajmuje się resztą. Na tym polega elegancja programowania z użyciem interfejsów!
Spróbuj swoich sił
using System;
using Shapes;
class Program
{
public static void Main(string[] args)
{
// Wczytaj wartości wejściowe
double circleRadius = Convert.ToDouble(Console.ReadLine());
double rectWidth = Convert.ToDouble(Console.ReadLine());
double rectHeight = Convert.ToDouble(Console.ReadLine());
// TODO: Utwórz obiekt Circle o podanym promieniu
// TODO: Utwórz obiekt Rectangle o podanej szerokości i wysokości
// TODO: Utwórz tablicę IShape zawierającą oba kształty
// TODO: Przejdź przez tablicę i dla każdego kształtu:
// - Wypisz opis za pomocą GetDescription()
// - Wypisz "Area: ", a następnie wynik CalculateArea() zaokrąglony do 2 miejsc po przecinku
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online