ООП

ООП #

1. Что такое ООП? #

это парадигма программирования, центральное место в которой занимает объект. Программа - совокупность объектов (экземпляров класса). Класс - шаблон для создания объекта, характеризующийся полями и методами


2. Плюсы и минусы ООП #

Плюсы:

  • разделение на модули-классы, каждый из которых отвечает за отдельную часть работы
  • удобство декомпозиции объектов реального мира на модели в коде (код легко читается и быстро пишется)
  • возможность переиспользования кода (экономия времени на однотипных функциях)
  • возможность создавать расширяемые системы (extensible systems), это отличает ООП от других парадигм программирования

Минусы:

  • снижение производительности приложений, рост потребляемой памяти (“размазывание” логики по множеству объектов -> увеличение ссылок друг на друга)


3. Принципы ООП (наследование, инкапсуляция, полиморфизм, абстракция) #

Наследование - принцип расширения возможностей базового (родительского класса) дочерним с возможностью переиспользовать и/или переопределить методы родителя.

Инкапсуляция - принцип “упаковки” и сокрытия внутренних свойств и логики поведения объекта от пользователя. При этом пользователю предоставляются API - внешние ручки для взаимодействия.

Полиморфизм (от лат. “поли” - много и “морф” - форма) - это способность объектов принимать разные “формы”, т.е. объект одного может выступать как объект другого класса (за счёт наследования или реализации интерфейса).

  • динамический (рантайм) - достигается путём переопределения методов в подклассах (@Override в Java), решение о том, какая именная реализация метода будет вызвана, принимается во время выполнения программы
  • статический (на этапе компиляции) - достигается путём перегрузки методов (разные сигнатуры метода с одним именем) или использованием дженериков

Абстракция - это выделение общих свойств сущностей в отдельный класс.


4. Класс, объект, интерфейс #

Класс - это шаблон/спецификация, по которым должен создаваться объект, описание его свойств и методов. Состоит из:

  • методов (в т.ч. конструктора)
  • полей Объект - экземпляр класса. Интерфейс - контракт/спецификация, которой должен следовать реализующий класс и, соответственно, объекты этого класса.


5. Ассоциация, агрегация, композиция #

Ассоциация - означает, что объекты двух классов могут ссылаться один на другой, иметь связь друг с другом. Один класс включает в себя другой класс в качестве одного из полей. Агрегация и композиция являются частными случаями ассоциации.

Агрегация - отношение, когда один объект является частью другого (двигатель поставили в одну машину, потом в другую).

Композиция - это более жёсткое отношение, когда объект не только является частью другого объекта, но и вообще не может принадлежать кому-то (страница принадлежит только одной книге).


6. Статическое и динамическое связывание #

Связывание - процесс, в ходе которого программа решает, какой метод или переменная должна быть вызвана или использована. Связывание бывает:

  • Раннее статическое. Если метод известен компилятору, то происходит на этапе компиляции. Применяется для дженериков, перегруженных, private, final и static методов. Используются не объекты, а информация о типе, то есть ссылка
  • Позднее динамическое. Происходит во время выполнения программы JVM. Используется для абстрактных и переопределенных методов


7. Является – «is a», имеет – «has a» #

Наследование («is a» - ЯВЛЯЕТСЯ) - обобщение/расширение, очень сильная связь. Ассоциация («has a» ИМЕЕТ) - объекты имеют ссылки друг на друга