Парадигма (стиль, шаблон) разработки ПО, основными понятиями которой являются классы и объекты. Говорят, что разработка в стиле ООП ведется с использованием классов объектов, которые обладают состоянием и поведением, зависящим от этого состояния.
- Класс – это «чертеж» (описание) сущности предметной области, позволяющий выделить некоторые общие характеристики, состояние и поведение, зависящее от состояния.
- Предметная область — множество всех предметов (явлений) решаемой проблемы.
- Экземпляр класса – отдельный представитель класса, имеющий КОНКРЕТНОЕ состояние и поведение, которое полностью определяется описанием класса.
- Состояние – набор данных (полей, атрибутов, членов класса).
- Поведение – функции для работы с данными и выполнения полезной работы.
● Поля ● Конструкторы
● Константы ● Методы
● События
- Инкапсуляция – это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, скрыв детали реализации и защитив от пользователя этого класса объектов.
public class Point2D {
int x;
int y;
}
- Наследование – это свойство системы, позволяющее
описать новый класс на основе уже существующего,
с частично или полностью заимствующейся
функциональностью.
- Класс, от которого производится наследование, называется базовым или родительским. Новый класс – потомком, наследником или производным классом
public class Point2D {
int x;
int y;
}
public class Point3D extends Point2D {
int z;
}
- Полиморфизм – это свойство системы, использовать
объекты с одинаковым интерфейсом без информации о
типе и внутренней структуре объекта.
- Полиморфизм - способность использовать объект вне зависимости от его реализации, благодаря, полиморфной переменной – это переменная, которая может принимать значения разных типов.
Point2D av = new Point3D();
- Абстракция – это свойство системы, позволяющее
описать общие характеристики базового класса
для всех его производных классов, а наполнение
деталями предоставляется каждому из этих классов.
- В абстрактном классе определяются лишь общие поля и характер методов, которые должны быть конкретно реализованы в производных классах, а не в самом базовом классе.
public abstract class Model {
public abstract void Method();
}
- interface - предназначен для описания исключительно
общего поведения сущностей.
Частный случай: для гарантии, реализации некоторого
поведения.
- Аналогичен абстрактному классу со всеми абстрактными методами, но допускается множественное наследование.
- расширение поведения
Разговор о SOLID…
Single responsibility principle Принцип гласит, что может быть только одна причина, приводящая к изменению класса. Другими словами, каждый класс должен иметь только одну ответственность, которая должна быть инкапсулирована в этом классе.
- тестируемость;
- читаемость;
- короткое и понятное описание класса;
- простота сопровождения.
Open-closed principle
классы должны быть открыты для расширения и одновременно закрыты для модификации. Иными словами, должна быть возможность добавлять новые свойства и расширять класс без изменения внутренней реализации существующих свойств. «закрыт для модификации» «Открыт для расширений»
Liskov substitution principle Требует возможности использования любых порожденных классов на месте родительских. При этом они должны обладать тем же поведением, что и родительские классы, без внесения изменений. Этот принцип гарантирует, что порожденный класс не изменяет определение типа родительского и его поведение
Interface segregation principle Клиенты не должны реализовывать интерфейсы, которые они не используют. Данный принцип требует разделения «толстых» интерфейсов на несколько специализированных, связанных общей функциональностью
Dependency inversion principle Принцип инверсии зависимостей
- модули высокого уровня не должны зависеть от модулей нижнего уровня. И те, и другие должны зависеть от абстракций.
- абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.