Перейти к содержанию

ООП

Краткий справочник вопросов по объектно-ориентированному программированию для самопроверки.

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())                     # цикл событий запускает колбэки

См. также