Skip to content

Commit c7425b1

Browse files
committed
feat: add abstraction page
1 parent ce97c6b commit c7425b1

2 files changed

Lines changed: 70 additions & 2 deletions

File tree

docs/python/OOP.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@
3434
cat_object = Cat("Kitty", "black") # Object | Экземпляр класса
3535
print(cat_object.name) # Доступ к атрибуту
3636
print(cat_object.meow()) # Вызов метода
37-
```
37+
```
38+
39+
## Полезные источники
40+
41+
[Принципы ООП в примерах - Хабр](https://habr.com/ru/companies/otus/articles/764266/){.link-accent}

docs/python/abstraction.md

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,65 @@
1-
coming soon...
1+
## Определение
2+
!!! info ""
3+
**Абстракция** (Abstraction) — это принцип ООП, заключающийся в выделении главных характеристик объекта и скрытии второстепенных деталей. Абстракция показывает **что** делает объект, а не **как** он это делает.
4+
5+
## Зачем нужна
6+
<span class="badge">Абстракция</span> упрощает сложные системы, скрывая детали реализации и оставляя только самое важное. Она позволяет работать с объектом на уровне концепций, не вникая в технические подробности.
7+
8+
Внешний код взаимодействует с объектом через **упрощённый интерфейс**, не задумываясь о внутренней механике.
9+
10+
## Отличия Абстракции и Инкапсуляции
11+
- <span class="badge">Инкапсуляция</span> - контроль доступа к данным
12+
- <span class="badge">Абстракция</span> — упрощение интерфейса
13+
## Уровни абстракции
14+
15+
Абстракция работает на разных уровнях проектирования:
16+
17+
- Абстрактные классы — классы, которые нельзя создать напрямую; они служат шаблоном для наследников.
18+
- Интерфейсы — набор методов, которые обязан реализовать класс (в Python через протоколы или `ABC`).
19+
- Высокоуровневые функции — операции, которые скрывают сложную логику за простым вызовом.
20+
21+
## Абстракция в Python
22+
23+
В Python абстракцию реализуют через модуль `abc` (Abstract Base Classes):
24+
25+
| Инструмент | Суть | Применение |
26+
| :---------------- | :-------------------------------------------------------- | :---------------------------- |
27+
| `ABC` | Базовый класс для создания абстрактных классов | `class Shape(ABC):` |
28+
| `@abstractmethod` | Декоратор, помечающий метод как обязательный к реализации | `@abstractmethod def draw():` |
29+
| Протоколы | Неформальный способ задать интерфейс через duck typing | Просто наличие нужных методов |
30+
31+
Абстрактный класс нельзя создать, пока все его абстрактные методы не будут реализованы в подклассах.
32+
33+
## Пример
34+
```python
35+
from abc import ABC, abstractmethod
36+
37+
class Animal(ABC):
38+
@abstractmethod
39+
def make_sound(self):
40+
"""Каждое животное должно уметь издавать звук"""
41+
pass
42+
43+
class Dog(Animal):
44+
def make_sound(self):
45+
return "Гав!"
46+
47+
class Cat(Animal):
48+
def make_sound(self):
49+
return "Мяу!"
50+
51+
# animal = Animal() # Ошибка! Нельзя создать экземпляр абстрактного класса
52+
dog = Dog()
53+
print(dog.make_sound()) # Гав!
54+
```
55+
## Связь с другими принципами
56+
57+
- [Инкапсуляция](./encapsulation.md){:.link-accent} скрывает **данные и реализацию методов**, делая внутренности объекта недоступными.
58+
- [Абстракция](./abstraction.md){:.link-accent} скрывает **сложность логики**, оставляя только упрощённый интерфейс для работы.
59+
60+
Обе концепции работают на **сокрытие**, но инкапсуляция защищает данные, а абстракция упрощает использование.
61+
62+
## Ключевые мысли
63+
- Абстракция выделяет суть объекта, отбрасывая ненужные детали реализации [web:1228].
64+
- Она позволяет проектировать систему «сверху вниз»: сначала определить интерфейсы, потом реализовать конкретику.
65+
- В Python абстрактные классы через `ABC` гарантируют, что подклассы реализуют все обязательные методы [web:1228].

0 commit comments

Comments
 (0)