Вопрос проверяет понимание двух фундаментальных принципов ООП и умение различать их на концептуальном уровне.
Абстракция и полиморфизм — это два разных, но взаимодополняющих принципа объектно-ориентированного программирования. Абстракция позволяет скрыть сложность реализации, предоставляя пользователю только необходимый интерфейс. Полиморфизм же позволяет одному интерфейсу работать с разными типами данных или объектами.
Представьте, что вы используете пульт от телевизора. Вы нажимаете кнопку "включить", и телевизор включается. Вам не нужно знать, как именно работает схема питания или как сигнал передается на экран. Это и есть абстракция — вы работаете с простым интерфейсом, не вникая в сложные детали.
// Пример абстракции на Python
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
return "Woof"
class Cat(Animal):
def make_sound(self):
return "Meow"Полиморфизм позволяет использовать объекты разных классов через единый интерфейс. Продолжая пример с животными, мы можем вызвать метод make_sound() для любого объекта, который наследуется от Animal, и каждый объект выполнит свою версию метода.
# Использование полиморфизма
def animal_sound(animal):
print(animal.make_sound())
dog = Dog()
cat = Cat()
animal_sound(dog) # Выведет: Woof
animal_sound(cat) # Выведет: MeowВывод: Абстракция и полиморфизм работают вместе для создания гибкого и поддерживаемого кода. Абстракция определяет контракт (интерфейс), а полиморфизм позволяет разным классам реализовывать этот контракт по-своему. Это особенно полезно при создании фреймворков, библиотек и при работе с коллекциями разнородных объектов.