0Pricing
C# Academy · Урок

Проектирование (интерфейсы и наследование)

Спроектируйте простой 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 — локальная установка не требуется.

Все уроки этого курса

  1. Проектирование (интерфейсы и наследование)
  2. Реализация и тесты
  3. Полиморфное поведение
← Назад к C# Academy