|
1 | | -# Object-Oriented Programming |
2 | | - |
3 | | -!!! danger "GPT ALERT!!!" |
4 | | - Эта страница была сгенерирована и ещё не была отредактирована. Качество содержания под вопросом! |
| 1 | +# OOP |
5 | 2 |
|
6 | 3 | ## Определение |
7 | 4 | !!! info "" |
8 | | - **ООП (Object-Oriented Programming)** — это парадигма программирования, в которой программа строится вокруг **объектов** (данные + поведение), а не вокруг “голых” функций и структур данных. |
9 | | - Класс в таком подходе служит “шаблоном”, по которому создаются объекты (экземпляры). |
| 5 | + **ООП (Object-Oriented Programming)** — методология программирования, в которой система строится вокруг объектов (данные + поведение), где каждый объект является экземпляром определенного класса, а классы образуют иерархию [наследования](./inheritance.md){:.link-accent}. |
10 | 6 |
|
11 | 7 | ## Как это работает |
12 | 8 | ООП опирается на несколько базовых сущностей: |
13 | 9 |
|
14 | | -- <span class="badge">Class</span> (класс) — описание типа: какие данные и методы будут у объектов. |
15 | | -- <span class="badge">Object</span> (объект) — конкретный экземпляр класса. |
16 | | -- <span class="badge">Attribute</span> (атрибут/поле) — данные объекта. |
17 | | -- <span class="badge">Method</span> (метод) — функция, “живущая” в классе и работающая с данными объекта. |
18 | | - |
19 | | -Обычно “ядро” ООП объясняют через 4 принципа: |
20 | | -- [Encapsulation](./encapsulation.md){:.link-accent} |
21 | | -- [Inheritance](./inheritance.md){:.link-accent} |
22 | | -- [Polymorphism](./polymorphism.md){:.link-accent} |
23 | | -- [Abstraction](./abstraction.md){:.link-accent} |
24 | | - |
25 | | -## Пример |
26 | | -!!! note "Пример:" |
27 | | - Минимальный пример класса и объекта в Python: создаём класс, инициализируем объект, вызываем методы. |
28 | | - |
29 | | - :::python |
30 | | - class BankAccount: |
31 | | - def __init__(self, owner: str, balance: int = 0): |
32 | | - self.owner = owner |
33 | | - self.balance = balance |
34 | | - |
35 | | - def deposit(self, amount: int) -> None: |
36 | | - self.balance += amount |
| 10 | +- <span class="badge">Class</span> — языковая конструкция, определяющий структуру (атрибуты) и поведение (методы) для создаваемых на его основе объектов. |
37 | 11 |
|
38 | | - def withdraw(self, amount: int) -> None: |
39 | | - if amount > self.balance: |
40 | | - raise ValueError("Not enough money") |
41 | | - self.balance -= amount |
| 12 | +- <span class="badge">Attribute</span> — переменная, принадлежащая экземпляру или классу и содержащая данные, описывающие его состояние. <span class="badge">self.name = name</span> |
42 | 13 |
|
43 | | - # Object (instance) |
44 | | - acc = BankAccount("Alice", 100) |
| 14 | +- <span class="badge">Method</span> — функция, объявленная в составе класса, которая вызывается у объекта (через self) и работает с его данными/атрибутами. <span class="badge">def meow(self):</span> |
45 | 15 |
|
46 | | - acc.deposit(50) |
47 | | - acc.withdraw(30) |
| 16 | +- <span class="badge">Object</span> — конкретный экземпляр класса со своими значениями атрибутов и возможностью вызывать методы класса. |
48 | 17 |
|
49 | | - print(acc.owner, acc.balance) # Alice 120 |
| 18 | +4 основных принципа ООП: |
| 19 | +- Инкапсуляция ([Encapsulation](./encapsulation.md){:.link-accent}) |
| 20 | +- Наследование ([Inheritance](./inheritance.md){:.link-accent}) |
| 21 | +- Полиморфизм ([Polymorphism](./polymorphism.md){:.link-accent}) |
| 22 | +- Абстракция ([Abstraction](./abstraction.md){:.link-accent}) |
50 | 23 |
|
51 | | -!!! info "" |
52 | | - В этом примере объект `acc` хранит состояние (`owner`, `balance`) и умеет выполнять действия (методы `deposit`, `withdraw`) — это и есть базовая идея ООП. |
| 24 | +## Пример |
| 25 | +```python |
| 26 | + class Cat: |
| 27 | + def __init__(self, name, color): |
| 28 | + self.name = name # Attribute | Данные объекта |
| 29 | + self.color = color |
| 30 | + |
| 31 | + def meow(self): # Method | Поведение объекта |
| 32 | + return f"{self.name}: meow!" |
| 33 | + |
| 34 | + cat_object = Cat("Kitty", "black") # Object | Экземпляр класса |
| 35 | + print(cat_object.name) # Доступ к атрибуту |
| 36 | + print(cat_object.meow()) # Вызов метода |
| 37 | +``` |
0 commit comments