ООП - Основные понятия
- Объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
- Основные понятия
Класс
- абстрактное описание автомобиля. ЧертёжОбъект
- конкретная реализация автомобиля, данная машинаСвойства
- характеристики харакерные для всех машин. Количество колес, цвет, количество бензина...Методы
- команды, на которые может реагировать машина. По сути функции, которые может вызывать каждый объект.Геттеры и сеттеры
- спец. методы, для добавления/получения свойств объекта (чтоб не использовать приватные свойста)
- Разные модели (подходы) ООП
- Компонентно-ориентированное программирование
- Прототипно-ориентированное программирование
- Агентно-ориентированное программирование
- Шаблоны проектирования "банды четырёх" GoF
- Ссылки
ООП - Базовые принципы
Наследование
- механизм, который позволяет описать новый класс на основе существующего (родительского). При этом свойства и функциональность родительского класса заимствуются новым классом. Нужно, прежде всего, для повторного использование кода. Cвойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником, дочерним или производным классом.
Абстракция
- выделение главных, наиболее значимых характеристик предмета и отбрасывание второстепенных. Для каждого объекта мы задаём минимальное количество методов, полей и описаний, которые позволят решить задачу. Чем меньше характеристик, тем лучше абстракция, но ключевые характеристики убирать нельзя.
Инкапсуляция
- ограничение доступа к данным и возможностям их изменения. Свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе.
Полиморфизм
- возможность работать с несколькими типами так, будто это один и тот же тип. При этом поведение объектов будет разным в зависимости от типа, к которому они принадлежат.
- Свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
- Пример: реализуем в системе два разных класс, которые имеют метод getData - один с диска, другой из сети. При необходимости переключаем их. В других частях системы мы обращаемся к getData() и не думаем, как именно и откуда получаются данные — на этом уровне нам не важно. Интерфейс одинаковый, внутренняя релаизация разная.
- Способность объекта использовать методы производного класса, который не существует на момент создания базового.
ООП - Принципы SOLID
-
Single Responsibility Principle (Принцип единственной ответственности)
- Каждый класс должен решать лишь одну задачу.
-
Open-Closed Principle (Принцип открытости-закрытости).
- Программные сущности (классы, модули, функции) должны быть открыты для расширения, но не для модификации.
-
Liskov Substitution Principle (Принцип подстановки Барбары Лисков).
- Необходимо, чтобы подклассы могли бы служить заменой для своих суперклассов.
- Классы-наследники могли бы использоваться вместо родительских классов, от которых они образованы, не нарушая работу программы.
- Если оказывается, что в коде проверяется тип класса, значит принцип подстановки нарушается.
-
Interface Segregation Principle (Принцип разделения интерфейса).
- Создавайте узкоспециализированные интерфейсы, предназначенные для конкретного клиента.
- Клиенты не должны зависеть от интерфейсов, которые они не используют.
-
Dependency Inversion Principle (Принцип инверсии зависимостей).
- Объектом зависимости должна быть абстракция, а не что-то конкретное.
- Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.