Проектирование (интерфейсы и наследование)
Спроектируйте простой API Shape с интерфейсом и небольшим базовым классом; решите, что относится к контракту, а что является деталью реализации.
«Проектирование (интерфейсы и наследование)» — бесплатный урок C# Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 3 уроков всего.
Обзор проекта
Цель: определить небольшой и понятный контракт для фигур.
- Используйте интерфейс для описания поведения
- Сведите внешний интерфейс к минимуму
- Позвольте подключать множество фигур
Сначала контракт
Создайте небольшой контракт IShape с методами Area() и Perimeter(). Вспомогательные средства могут зависеть от интерфейса.
using System;
// Interface: minimal behavior all shapes must provide
public interface IShape
{
double Area();
double Perimeter();
}
// A tiny helper to print any IShape
public static class ShapePrinter
{
public static void Print(IShape s)
{
Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
}
}
public class Program
{
public static void Main(string[] args)
{
// No concrete shapes yet; interface compiles and is ready.
Console.WriteLine("Shape API ready");
}
}
Необязательный базовый класс
Можно добавить небольшой abstract базовый класс для общих вспомогательных средств, но официальным контрактом должен оставаться интерфейс.
using System;
// Optional base for helpers; interface stays the main contract
public abstract class ShapeBase : IShape
{
public abstract double Area();
public abstract double Perimeter();
// Shared rounding helper
protected double Round2(double x)
{
return Math.Round(x, 2);
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Base class prepared for shared helpers");
}
}
Конкретные фигуры
Конкретные фигуры реализуют интерфейс. Клиенты могут работать с ними единообразно через IShape.
using System;
public interface IShape
{
double Area();
double Perimeter();
}
public class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public class Circle : IShape
{
private readonly double _r;
public Circle(double r) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
public static void Main(string[] args)
{
IShape a = new Rectangle(3, 4);
IShape b = new Circle(2);
Console.WriteLine("Rect A=" + a.Area() + " P=" + a.Perimeter());
Console.WriteLine("Circ A=" + b.Area() + " P=" + b.Perimeter());
}
}
Коллекции IShape
Используйте список <IShape>, чтобы хранить множество фигур и обрабатывать их одинаково.
using System;
using System.Collections.Generic;
public interface IShape
{
double Area();
double Perimeter();
}
public class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public class Circle : IShape
{
private readonly double _r;
public Circle(double r) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
public static void Main(string[] args)
{
List<IShape> shapes = new List<IShape>();
shapes.Add(new Rectangle(2, 5));
shapes.Add(new Circle(1.5));
foreach (IShape s in shapes)
{
Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
}
}
}
Контрольный список проектирования
Контрольный список:
- Интерфейс является контрактом (небольшим и понятным).
- Конкретные фигуры хранят поля как закрытые.
- Для простой математики используйте числа double, а константы оставляйте локальными.
- Отдавайте предпочтение полиморфизму, а не проверкам типов.
Выбор контракта
Повторение
Повторение: определите небольшой интерфейс IShape, оставьте внутренние детали закрытыми и используйте коллекции интерфейса для полиморфной обработки.
Часто задаваемые вопросы
Урок «Проектирование (интерфейсы и наследование)» бесплатный?
Да — полный текст урока «Проектирование (интерфейсы и наследование)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 3 уроков всего.
Чему я научусь в уроке «Проектирование (интерфейсы и наследование)»?
Спроектируйте простой API Shape с интерфейсом и небольшим базовым классом; решите, что относится к контракту, а что является деталью реализации. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Проектирование (интерфейсы и наследование)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проектирование (интерфейсы и наследование)
- Реализация и тесты
- Полиморфное поведение