61 lines
3.7 KiB
Markdown
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 - часть кучи)
|
|

|
|
|
|
## Методы
|
|
- Методы можно связать с классом
|
|
- Методы определяют поведение объектов класса
|
|
- Методы - множество операций над объектами
|
|
## Ссылка 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) |