جار تحميل البيانات
جار تحميل البيانات
جار تحميل البيانات
class Животное: def издать_звук(self): raise NotImplementedError("Этот метод должен быть реализован в подклассе") class Кот(Животное): def издать_звук(self): print("Мяу!") class Собака(Животное): def издать_звук(self): print("Гав!") животные = [Кот(), Собака()] for животное in животные: животное.издать_звук() # Output: Мяу! Гав!В этом примере метод
издать_звуквызывается для объектов различных классов (
Коти
Собака), и каждый объект реализует этот метод по-своему. В Java полиморфизм достигается через интерфейсы и абстрактные классы:
abstract class Животное { abstract void издатьЗвук(); } class Кот extends Животное { @Override void издатьЗвук() { System.out.println("Мяу!"); } } class Собака extends Животное { @Override void издатьЗвук() { System.out.println("Гав!"); } } public class Main { public static void main(String[] args) { Животное[] животные = { new Кот(), new Собака() }; for (Животное животное : животные) { животное.издатьЗвук(); // Output: Мяу! Гав! } } }Здесь абстрактный метод
издатьЗвукреализуется в классах
Коти
Собака, и тот же метод вызывает различные реализации в зависимости от объекта. Давайте теперь посмотрим примеры кейсов, где может быть актуален полиморфизм: 1. Фигуры Предположим, у нас есть несколько различных фигур, и мы хотим рассчитать их площадь. Полиморфизм позволяет нам использовать один интерфейс для разных типов фигур.
class Фигура: def площадь(self): raise NotImplementedError("Этот метод должен быть реализован в подклассе") class Круг(Фигура): def __init__(self, радиус): self.радиус = радиус def площадь(self): return 3.14159 * self.радиус ** 2 class Прямоугольник(Фигура): def __init__(self, ширина, высота): self.ширина = ширина self.высота = высота def площадь(self): return self.ширина * self.высота фигуры = [Круг(5), Прямоугольник(3, 4)] for фигура in фигуры: print(f"Площадь: {фигура.площадь()}")2. Платежные системы Используем полиморфизм для различных способов проведения платежей.
class Платеж(ABC): @abstractmethod def провести_платеж(self, сумма): pass class КредитнаяКарта(Платеж): def провести_платеж(self, сумма): print(f"Платеж проведён на сумму {сумма} с кредитной карты") class PayPal(Платеж): def провести_платеж(self, сумма): print(f"Платеж проведён на сумму {сумма} через PayPal") платежи = [КредитнаяКарта(), PayPal()] for платеж in платежи: платеж.провести_платеж(100)Полиморфизм — ключевая концепция ООП. Он делает ваш код более универсальным и удобным для использования и расширения. Это особенно полезно, когда ваш проект растёт и требует поддержки различных типов объектов. #простымисловами #ооп #полиморфизм
class Животное: def издать_звук(self): raise NotImplementedError("Этот метод должен быть реализован в подклассе") class Кот(Животное): def издать_звук(self): print("Мяу!") class Собака(Животное): def издать_звук(self): print("Гав!") животные = [Кот(), Собака()] for животное in животные: животное.издать_звук() # Output: Мяу! Гав!В этом примере метод
издать_звуквызывается для объектов различных классов (
Коти
Собака), и каждый объект реализует этот метод по-своему. #### Пример 2: Полиморфизм в Java В Java полиморфизм достигается через интерфейсы и абстрактные классы.
abstract class Животное { abstract void издатьЗвук(); } class Кот extends Животное { @Override void издатьЗвук() { System.out.println("Мяу!"); } } class Собака extends Животное { @Override void издатьЗвук() { System.out.println("Гав!"); } } public class Main { public static void main(String[] args) { Животное[] животные = { new Кот(), new Собака() }; for (Животное животное : животные) { животное.издатьЗвук(); // Output: Мяу! Гав! } } }Здесь абстрактный метод
издатьЗвукреализуется в классах
Коти
Собака, и тот же метод вызывает различные реализации в зависимости от объекта. ### Применение полиморфизма #### Пример 1: Фигуры Предположим, у нас есть несколько различных фигур, и мы хотим рассчитать их площадь. Полиморфизм позволяет нам использовать один интерфейс для разных типов фигур.
class Фигура: def площадь(self): raise NotImplementedError("Этот метод должен быть реализован в подклассе") class Круг(Фигура): def __init__(self, радиус): self.радиус = радиус def площадь(self): return 3.14159 * self.радиус ** 2 class Прямоугольник(Фигура): def __init__(self, ширина, высота): self.ширина = ширина self.высота = высота def площадь(self): return self.ширина * self.высота фигуры = [Круг(5), Прямоугольник(3, 4)] for фигура in фигуры: print(f"Площадь: {фигура.площадь()}")#### Пример 2: Платежные системы Используем полиморфизм для различных способов проведения платежей.
class Платеж(ABC): @abstractmethod def провести_платеж(self, сумма): pass class КредитнаяКарта(Платеж): def провести_платеж(self, сумма): print(f"Платеж проведён на сумму {сумма} с кредитной карты") class PayPal(Платеж): def провести_платеж(self, сумма): print(f"Платеж проведён на сумму {сумма} через PayPal") платежи = [КредитнаяКарта(), PayPal()] for платеж in платежи: платеж.провести_платеж(100)### Чем полиморфизм отличается от других концепций? - **Наследование**: Позволяет классам наследовать свойства и методы от другого класса. - Инкапсуляция: Скрывает детали реализации и предоставляет доступ к данным через методы. - Абстракция: Скрывает сложную реализацию и предоставляет простой интерфейс. Полиморфизм: Фокусируется на способности использовать один и тот же интерфейс для различных типов объектов, что позволяет более универсально и гибко работать с кодом. ### Заключение