💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №1
  • Регрессионное тестирование
  • Тестирование «белым ящиком»
  • Как делать оценку сложности?
  • Алгоритмы и сложность
  • Тестирование "белым ящиком" №2
  • Сложность алгоритмов
  • Тестирование "белым ящиком" №3
  • Тестирование "Чёрным ящиком»" №1
  • Тестирование "Черным ящиком" №2
  • Оценка сложности эвристических алгоритмов
  • Принципы ООП
  • Тестирование "Черным ящиком" №3
  • КТ - В3
  • Модульное тестирование
    • С кодами
  • Модульное тестирование
  • Абстрактные классы и интерфейсы в Python
  • Структуры в Python по аналогии с C++
    • Диалоги гениев
  • Делегаты в Python
    • Ещё более не смешные диалоги
  • Регулярные выражения в Python от простого к сложному
  • Python: Коллекции
  • Параметризованные классы (шаблоны)
  • Указатели и операции со списками в Python
  • Интеграционное тестирование
  • Работа с классами. Перегрузка методов
  • Определение операций в классе.
  • Создание наследованных классов
  • Интеграционное тестирование
  • Работа с объектами через интерфейсы
  • Использование стандартных интерфейсов
  • Работа с типом данных "Структура"
  • Коллекции. Параметризованные классы
  • Использование регулярных выражений
  • Операции со списками
  • Что такое паттерны проектирования?
  • Шпаргалка по шаблонам проектирования
    • [Habr] Шпаргалка
  • UML-диаграммы проектирования
  • Использование основных шаблонов.
  • Использование каких то там шаблонов
  • 15-я Практическая
  • 16-я Практическая
  • Graphviz Online
  • 17-я Практическая
  • Введение в теорию программирования: Объектно-ориентированный подход
  • Документирование софта и стандарты
  • C# Ввод и вывод
  • Оптимизация кода: просто о главном
  • Автоматизация разработки технической документации
  • Автоматизированное документирование и первичные данные
  • ADO.NET что это?
Powered by GitBook
On this page
  • Пример 1: Интерфейс для животных
  • Код
  • Объяснение
  • Тестирование
  • Пример 2: Интерфейс для операций с формами
  • Код
  • Объяснение
  • Тестирование
  • Пример 3: Интерфейс для работы с транспортом
  • Код
  • Объяснение
  • Тестирование
  • Итоговое объяснение

Работа с объектами через интерфейсы

27.01.2025 - Практическая работа №8. Работа с объектами через интерфейсы

Интерфейсы — это способ описать, какие методы или свойства должен реализовывать объект, чтобы считаться "совместимым" с определённым функционалом. В Python интерфейсы часто реализуют через абстрактные классы с помощью модуля abc (Abstract Base Class).


Пример 1: Интерфейс для животных

Код

from abc import ABC, abstractmethod

class Animal(ABC):  # Интерфейс "Животное"
    @abstractmethod
    def speak(self):  # Абстрактный метод
        pass

class Dog(Animal):  # Класс "Собака", реализующий интерфейс
    def speak(self):
        return "Гав-гав!"

class Cat(Animal):  # Класс "Кот", реализующий интерфейс
    def speak(self):
        return "Мяу!"

Объяснение

  • Animal — это интерфейс (абстрактный класс). Метод speak обязателен для всех классов, которые реализуют этот интерфейс.

  • Dog и Cat — классы, которые реализуют метод speak по-своему.

Тестирование

dog = Dog()
cat = Cat()

print(dog.speak())  # Ожидаем: "Гав-гав!"
print(cat.speak())  # Ожидаем: "Мяу!"

Пример 2: Интерфейс для операций с формами

Код

from abc import ABC, abstractmethod

class Shape(ABC):  # Интерфейс "Форма"
    @abstractmethod
    def area(self):  # Метод для расчёта площади
        pass

    @abstractmethod
    def perimeter(self):  # Метод для расчёта периметра
        pass

class Rectangle(Shape):  # Класс "Прямоугольник", реализующий интерфейс
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

Объяснение

  • Shape — интерфейс, определяющий, что любая форма должна иметь методы area и perimeter.

  • Rectangle — класс, реализующий интерфейс. В нём методы area и perimeter рассчитывают площадь и периметр прямоугольника.

Тестирование

rect = Rectangle(5, 3)

print("Площадь:", rect.area())  # Ожидаем: 15
print("Периметр:", rect.perimeter())  # Ожидаем: 16

Пример 3: Интерфейс для работы с транспортом

Код

from abc import ABC, abstractmethod

class Transport(ABC):  # Интерфейс "Транспорт"
    @abstractmethod
    def move(self):  # Метод "двигаться"
        pass

class Car(Transport):  # Класс "Машина"
    def move(self):
        return "Машина едет по дороге."

class Airplane(Transport):  # Класс "Самолёт"
    def move(self):
        return "Самолёт летит в небе."

Объяснение

  • Transport — интерфейс, указывающий, что любой транспорт должен реализовать метод move.

  • Car и Airplane — классы, реализующие метод move в зависимости от типа транспорта.

Тестирование

car = Car()
airplane = Airplane()

print(car.move())  # Ожидаем: "Машина едет по дороге."
print(airplane.move())  # Ожидаем: "Самолёт летит в небе."

Итоговое объяснение

  1. Интерфейс (ABC) — это "шаблон", описывающий, какие методы обязаны быть у класса.

  2. В каждом примере мы создаём интерфейс с одним или несколькими абстрактными методами.

  3. Классы, реализующие интерфейс, обязаны полностью переопределить эти методы, иначе программа выдаст ошибку.

  4. Благодаря интерфейсам, мы можем быть уверены, что все классы с определённым интерфейсом ведут себя одинаково.

PreviousИнтеграционное тестированиеNextИспользование стандартных интерфейсов

Last updated 4 months ago