Files
obsidian/Программирование на Java/ООП/ООП.md
T
roma-dxunvrs 0e6e583e6d
deploy / Pull and Restart (push) Successful in 17s
refactor: wiki links -> md links
2026-09-22 08:52:23 +03:00

61 lines
3.7 KiB
Markdown

Объектно-ориентированное программирование:
- Объекты - программные модели реальных сущностей
- Объект соединяет данные и код для обработки этих данных
- Состояние объекта - его переменные (поля)
- Поведение объекта - его функции (методы)
- Объекты взаимодействуют, вызывая методы друг у друга
- Объектно-ориентированное проектирование
Класс - тип или шаблон, объект - конкретный экземпляр
## Принципы ООП
1. Абстракция - не учитываем не нужное
2. [Инкапсуляция](Инкапсуляция/Инкапсуляция.md)
3. [Наследование](Наследование/Наследование.md)
4. [Полиморфизм](Полиморфизм/Полиморфизм.md)
## Создание объекта - new
- выделяет память для объекта
- инициализирует поля объекта
- вызывает [конструктор](Конструкторы.md)
- возвращает ссылку на готовый объект ([](../Синтаксис%20и%20типы/Базовый%20синтаксис/Типы%20данных.md#Ссылочные%20типы%20данных))
## Поля объекта
Объект (instance) имеет собственные значения полей
- Для разных объектов значения полей разные
- Это поля экземпляра (не статические)
Особый вид поля - статическое (static field)
- Статическое поле - общее для всех объектов класса
- Его значение - одно для всего класса
- Статическое поле - поле класса (в Metaspace - часть кучи)
![Metaspace](../../Attachments/Metaspace.png)
## Методы
- Методы можно связать с классом
- Методы определяют поведение объектов класса
- Методы - множество операций над объектами
## Ссылка this
```Java
class Rectangle {
double width; // неявно this.width
double height; // неявно this.height
double area() { // неявно double area(Rectange this) {}
}
}
```
this - ссылка на текущий объект, у которого вызван метод
Неявно передается первым параметром во все методы (кроме статических)
Можно обращаться:
- к полям класса
- к методам класса
- к конструкторам класса
## Статический контекст
Статические методы (методы класса)
- Не получают ссылку this
- Можно вызывать по имени класса (без объекта)
- Нельзя вызывать из нестатических методов
- Не могут менять состояние объектов
Статические поля и методы относятся к классу и не требуют наличия объекта
Отсюда простые правила: static может обращаться только к static, non-static может и к non-static, и к static
Дополнительно:
[Блоки инициализации](Блоки%20инициализации.md)
[Вложенные классы](Вложенные%20классы.md)