Объектно-ориентированное программирование: - Объекты - программные модели реальных сущностей - Объект соединяет данные и код для обработки этих данных - Состояние объекта - его переменные (поля) - Поведение объекта - его функции (методы) - Объекты взаимодействуют, вызывая методы друг у друга - Объектно-ориентированное проектирование Класс - тип или шаблон, объект - конкретный экземпляр ## Принципы ООП 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 Дополнительно: [[Блоки инициализации]] [[Вложенные классы]]