ООП, утренние заметки.
Вчера посмотрел перед сном лекцию, которая уложила в моей голове непонятки про ООП. Делюсь тем, что получилось.
ООП - это про сложную промышленную разработку. Тысячи классов, распределенные на сотни разработчиков... Другие парадигмы не так удобны для этой цели. Хотя мое сердце принадлежит ФП, я признаю роль объектного проектирования.
Базовые концепции:
- Инкапсуляция. Это скрытие устройства класса от посторонних. Разработчик в команде не должен знать все классы - это контрпродуктивная трата времени. Каждый пишет свой модуль - остальные предоставляют интерфейсы и публичные методы.
- Абстракция. Суть почти та же, что у чистоты функций в ФП. Абстрактный класс описывает общие для наследников переменные и методы, но не определяет их все.
- Интерфейс. То же, что абстрактный класс, за одним "но": никаких определений. Интерфейс только описывает методы, но не содержит функциональности.
- Полиморфизм. Тесно связанный с абстракцией, полиморфизм указывает, что одни и те же методы могут работать по-разному. Один абстрактный метод в классах-наследниках может быть реализован с различиями, без необходимости придумывать новые методы.
- Наследование. Оно связывает классы в иерархии. Конкретные классы наследуют абстрактным, еще более определенные - им, и так далее. В JS пользуются кейвордом externds.
Проблема ООП - избыточность. Цепочка наследования тянет данные и методы, которые не используются. ФП свободно от таких проблем, но преимущества ООП не дают светлым силам функциональщины победить до конца. :)
#ООП
Вчера посмотрел перед сном лекцию, которая уложила в моей голове непонятки про ООП. Делюсь тем, что получилось.
ООП - это про сложную промышленную разработку. Тысячи классов, распределенные на сотни разработчиков... Другие парадигмы не так удобны для этой цели. Хотя мое сердце принадлежит ФП, я признаю роль объектного проектирования.
Базовые концепции:
- Инкапсуляция. Это скрытие устройства класса от посторонних. Разработчик в команде не должен знать все классы - это контрпродуктивная трата времени. Каждый пишет свой модуль - остальные предоставляют интерфейсы и публичные методы.
- Абстракция. Суть почти та же, что у чистоты функций в ФП. Абстрактный класс описывает общие для наследников переменные и методы, но не определяет их все.
- Интерфейс. То же, что абстрактный класс, за одним "но": никаких определений. Интерфейс только описывает методы, но не содержит функциональности.
- Полиморфизм. Тесно связанный с абстракцией, полиморфизм указывает, что одни и те же методы могут работать по-разному. Один абстрактный метод в классах-наследниках может быть реализован с различиями, без необходимости придумывать новые методы.
- Наследование. Оно связывает классы в иерархии. Конкретные классы наследуют абстрактным, еще более определенные - им, и так далее. В JS пользуются кейвордом externds.
Проблема ООП - избыточность. Цепочка наследования тянет данные и методы, которые не используются. ФП свободно от таких проблем, но преимущества ООП не дают светлым силам функциональщины победить до конца. :)
#ООП
Подробно о статике
- Статическая сущность - принадлжедит самому классу, а не его экземплярам.
- Статическими бывают переменные, методы, инициализаторы и даже вложенные классы.
- Класс со статическими методами можно воспринимать библиотекой с готовыми функциями. Пример - класс Math. Методы класса используются без создания нового объекта.
- Пример применения статической сущности - счетчик количества созданных объектов, использующий статическую переменную и инкрементирующийся в конструкторе.
- Статические инициализаторы выполняются только для самого первого объекта класса.
- Также они могут быть использованы для инициализации статических переменных.
- Статические методы работают только с другими статическими сущностями.
#ООП #Java
- Статическая сущность - принадлжедит самому классу, а не его экземплярам.
- Статическими бывают переменные, методы, инициализаторы и даже вложенные классы.
- Класс со статическими методами можно воспринимать библиотекой с готовыми функциями. Пример - класс Math. Методы класса используются без создания нового объекта.
- Пример применения статической сущности - счетчик количества созданных объектов, использующий статическую переменную и инкрементирующийся в конструкторе.
- Статические инициализаторы выполняются только для самого первого объекта класса.
- Также они могут быть использованы для инициализации статических переменных.
- Статические методы работают только с другими статическими сущностями.
#ООП #Java