Итоги: Калькулятор фигур
Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 30 из 70.
Задание
ЛегкоДавайте создадим калькулятор фигур, который объединит все, что вы узнали об интерфейсах и полиморфизме. Вы создадите систему, в которой различные фигуры могут обрабатываться единообразно через общий интерфейс, демонстрируя мощь полиморфизма времени выполнения.
Вы организуете свой код в четырех файлах:
IShape.cs: Определите интерфейс с именемIShapeв пространстве именShapes. Каждая фигура должна уметь вычислять свою площадь и описывать себя. Объявите два метода:CalculateArea(), возвращающийdouble, иGetDescription(), возвращающийstring.Circle.cs: Создайте классCircleв пространстве именShapes, который реализуетIShape. У круга есть свойствоRadius(double), устанавливаемое через конструктор. Формула площади —Math.PI * Radius * Radius. Описание должно возвращать"Circle with radius {Radius}".Rectangle.cs: Создайте классRectangleв пространстве именShapes, который реализуетIShape. У прямоугольника есть свойстваWidthиHeight(оба double), устанавливаемые через конструктор. Площадь — это просто ширина, умноженная на высоту. Описание должно возвращать"Rectangle {Width}x{Height}".Program.cs: В основном файле создайте круг и прямоугольник, используя входные значения, а затем сохраните их в массиве ссылокIShape. Пройдите циклом по массиву и для каждой фигуры выведите ее описание, а затем ее площадь, округленную до двух знаков после запятой. Это демонстрирует, как можно обрабатывать совершенно разные фигуры через один и тот же интерфейс!
Вы получите три входных значения:
- Радиус круга (double)
- Ширина прямоугольника (double)
- Высота прямоугольника (double)
Выводите результат в следующем формате для каждой фигуры:
{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}Например, если входные данные 5, 4 и 6, вывод должен быть таким:
Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00Обратите внимание, что вашему циклу не нужно знать, имеет ли он дело с кругом или прямоугольником — он просто вызывает методы интерфейса и позволяет полиморфизму сделать все остальное. В этом и заключается элегантность программирования через интерфейсы!
Попробуйте сами
using System;
using Shapes;
class Program
{
public static void Main(string[] args)
{
// Чтение входных значений
double circleRadius = Convert.ToDouble(Console.ReadLine());
double rectWidth = Convert.ToDouble(Console.ReadLine());
double rectHeight = Convert.ToDouble(Console.ReadLine());
// TODO: Создайте объект Circle с заданным радиусом
// TODO: Создайте объект Rectangle с заданными шириной и высотой
// TODO: Создайте массив IShape, содержащий обе фигуры
// TODO: Пройдите циклом по массиву и для каждой фигуры:
// - Выведите описание, используя GetDescription()
// - Выведите "Area: ", а затем результат CalculateArea(), округленный до 2 знаков после запятой
}
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов