ООП¶
Краткий справочник вопросов по объектно-ориентированному программированию для самопроверки.
1. Базовые понятия ООП (объект, его свойства/атрибуты и методы, класс, экземпляр, интерфейс)¶
Объект — это сущность, объединяющая состояние (свойства, или атрибуты — данные) и поведение (методы — функции, работающие с этими данными). Класс — это шаблон (тип), описывающий, какие атрибуты и методы будут у объектов; конкретный объект, созданный по классу, называют экземпляром (instance). Интерфейс — это контракт, набор методов, которые объект обязуется предоставить, не раскрывая их реализацию (в Python — через утиную типизацию или abc/Protocol, в Go — через interface).
class Server:
def __init__(self, host):
self.host = host # атрибут
def ping(self): # метод
return f"pong from {self.host}"
s = Server("10.0.0.1") # экземпляр класса Server
2. Основные принципы ООП (инкапсуляция, наследование, полиморфизм; кратко про абстракцию)¶
Инкапсуляция — сокрытие внутреннего состояния объекта и доступ к нему только через методы; в Python это соглашение через префиксы _name (внутреннее) и __name (с искажением имени). Наследование — создание нового класса на основе существующего с переиспользованием и расширением его поведения. Полиморфизм — возможность работать с разными типами через единый интерфейс: один и тот же вызов метода ведёт себя по-разному в зависимости от класса объекта. Абстракция — выделение существенных свойств и сокрытие деталей реализации, чтобы оперировать понятиями, а не их внутренним устройством.
class Node:
def status(self): return "ok"
class DBNode(Node): # наследование
def status(self): return "replicating" # полиморфизм: переопределение
for n in (Node(), DBNode()):
print(n.status()) # ok / replicating
3. Событийно-управляемая модель программирования (event-driven: события, обработчики/колбэки, цикл событий; где применяется — GUI, серверы)¶
В событийно-управляемой модели поток выполнения определяется не последовательным кодом, а наступлением событий (клик, входящий запрос, готовность сокета). На каждое событие регистрируется обработчик (колбэк) — функция, которую система вызовет при наступлении события. Координирует всё цикл событий (event loop): он ждёт события, складывает их в очередь и поочерёдно запускает соответствующие колбэки. Модель широко применяется в GUI (реакция на действия пользователя) и в серверах с высокой конкурентностью (асинхронный ввод-вывод, например asyncio в Python или event loop в Node.js).
import asyncio
async def handle(name): # обработчик события
print(f"event: {name}")
async def main():
await asyncio.gather(handle("a"), handle("b"))
asyncio.run(main()) # цикл событий запускает колбэки