ООП. Общие понятия, синтаксис. Flashcards
(8 cards)
Абстракция
- Абстракция — это когда мы выделяем только значимые для решения задачи характеристики объекта и игнорируем всё остальное. Чем меньше характеристик, тем лучше абстракция, но ключевые характеристики убирать нельзя.
- Класс в ООП — это абстракция, благодаря которой вы можете объявлять объекты внутри программы, не описывая их подробно.
- Для работы с абстракциями используются интерфейсы.
- Абстракция делает процесс моделирования объектов более простым и менее трудоёмким, ведь разработчику не нужно учитывать все свойства объектов.
Интерфейс
- Интерфейс класса — это функциональная часть класса. В ООП интерфейсами называют свойства и методы класса, используя которые можно взаимодействовать с объектом этого класса из любого места в программе.
Наследование
Наследование — возможность описать новый класс на базе существующего. При этом дочерние классы могут заимствовать свойства и методы родительского класса.
super()
- super() в основном используется для расширения методов родительского класса в классах наследниках.
- Чтобы объявить свойство класса-родителя в классе-наследнике, используется функция super():
…
class Axe(MeleeWeapon):
# В классе-наследнике определяется конструктор # с собственным параметром material. def \_\_init\_\_(self, name, material): # Вызываем конструктор класса-родителя. super().\_\_init\_\_(name) # Передаём значение параметра в новое свойство. self.material = material
Теперь при создании объекта класса Axe
# нужно обязательно указывать два параметра:
# название и материал.
brodex = Axe(‘Верный’, “железо”)
…
- Функцию super() можно также использовать для того, чтобы в дочернем классе вызывать методы из класса-родителя:
…
class Axe(MeleeWeapon):
def \_\_init\_\_(self, name, material): super().\_\_init\_\_(name) self.material = material # Объявляем собственный для класса Axe метод. def slashing_blow(self): # Описываем логику работы метода дочернего класса. print('СОКРУШИТЕЛЬНЫЙ УДАР!') # Возвращаем результат выполнения метода slashing_blow() в родительском классе. return super().slashing_blow()
brodex = Axe(‘Верный’, ‘железо’)
print(brodex.slashing_blow())
…
Вывод в терминал:
# СОКРУШИТЕЛЬНЫЙ УДАР!
# Нанесён рубящий удар оружием Верный.
Инкапсуляция
- Инкапсуляция — объединение и скрытие методов и свойств, и предоставление доступа к ним через простой внешний интерфейс.
Ассоциация
- Традиционно в полях объекта могут храниться не только обычные переменные стандартных типов, но и другие объекты. А эти объекты могут в свою очередь хранить какие-то другие объекты и так далее, образуя дерево (иногда граф) объектов. Это отношение называется ассоциацией.
- Когда один объект стал составной частью другого это и есть ассоциация. Она бывает двух типов:
- Композиция — случай, когда на фабрике трансформеров, собирая Оптимуса, обе пушки ему намертво приколачивают к рукам гвоздями, и после смерти Оптимуса, пушки умирают вместе с ним. Другими словами, жизненный цикл дочернего объекта совпадает с жизненным циклом родительского.
- Агрегация — случай, когда пушка выдается как пистолет в руку, и после смерти Оптимуса этот пистолет может подобрать его боевой товарищ Олег, а затем взять в свою руку, либо сдать в ломбард. То бишь жизненный цикл дочернего объекта не зависит от жизненного цикла родительского, и может использоваться другими объектами.
Утиная типизация
Неявная типизация, латентная типизация или утиная типизация (англ. Duck typing) в ООП-языках — определение факта реализации определённого интерфейса объектом без явного указания или наследования этого интерфейса, а просто по реализации полного набора его методов.
Полиморфизм
- Полиморфизм — возможность взаимодействовать с объектами разных классов через одинаковые интерфейсы, обращаться к свойствам и методам, общим для всех объектов.