61 lines
3.4 KiB
Markdown
61 lines
3.4 KiB
Markdown
Объектно-ориентированное программирование:
|
|
- Объекты - программные модели реальных сущностей
|
|
- Объект соединяет данные и код для обработки этих данных
|
|
- Состояние объекта - его переменные (поля)
|
|
- Поведение объекта - его функции (методы)
|
|
- Объекты взаимодействуют, вызывая методы друг у друга
|
|
- Объектно-ориентированное проектирование
|
|
Класс - тип или шаблон, объект - конкретный экземпляр
|
|
## Принципы ООП
|
|
1. Абстракция - не учитываем не нужное
|
|
2. [[Инкапсуляция]]
|
|
3. [[Наследование]]
|
|
4. [[Полиморфизм]]
|
|
## Создание объекта - new
|
|
- выделяет память для объекта
|
|
- инициализирует поля объекта
|
|
- вызывает [[Конструкторы|конструктор]]
|
|
- возвращает ссылку на готовый объект ([[Типы данных#Ссылочные типы данных]])
|
|
## Поля объекта
|
|
Объект (instance) имеет собственные значения полей
|
|
- Для разных объектов значения полей разные
|
|
- Это поля экземпляра (не статические)
|
|
Особый вид поля - статическое (static field)
|
|
- Статическое поле - общее для всех объектов класса
|
|
- Его значение - одно для всего класса
|
|
- Статическое поле - поле класса (в Metaspace - часть кучи)
|
|
![[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
|
|
|
|
Дополнительно:
|
|
[[Блоки инициализации]]
|
|
[[Вложенные классы]] |