oop Flashcards
Что такое ООП?
Методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, классы образуют иерархию наследования.
Преимущества ООП
- легкая модификация
- возможность отката
- легкая расширяемость
- слабая связанность кода
- сокращение межмодульных вызовов
- увеличение повторного использования кода
Недостатки ООП
- увеличение времени на проектирование и анализ
- увеличение размера кода
- скорость
Принципы ООП
- Инкапсуляция
- Наследование
- Полиморфизм
- Абстракция
Инкапсуляция
Свойство, позволяющее скрыть детали реализации данных и методов от пользователя, открыв только то, что необходимо при последующем использовании.
С помощью модификаторов доступа и геттеров и сеттеров.
Цель - уйти от зависимости внешнего интерфейса класса от реализации.
Состояние объекта( значения его полей) не должны изменяться чём-то извне, кроме своих методов.
Наследование
Свойство, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствованной функциональностью.
Класс наследника является классом предка, но класс предка не является классом наследника.
Виды наследования:
- множественное( недостаток - ромбовидное наследование)
- одиночное
Запрет наследования - final
Наследование в Java - extends
Полиморфизм
Свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Полиморфная переменная - это переменная, которая может принимать значения разных типов.
Полиморфная функция - функция, у которой хотя бы один аргумент является полиморфной переменной.
Виды полиморфных функций :
- ad hoc - поведение разное для разных типов аргументов
- параметрический - поведение одинаковое для разных типов аргументов
Абстрагирование
Способ выделить набор общих характеристик объекта, исключая частные и не значимые.
Абстракция - набор всех таких характеристик.
Ассоциация, агрегация, композиция
Ассоциация - связь между объектами. Композиция и агрегация - частные случаи ассоциации «часть-целое».
Агрегация предполагает, что объекты связанны взаимоотношением «part-of”(экземпляр части может входить в несколько целых). Композиция более строгий вариант «part-of “(экземпляр части может входить в одно целое).
Книга состоит из страниц, страницу нельзя вырвать и положить в другую. Страницы четко привязаны к книге - это композиция.
Можно перенести книгу из одной библиотеки в другую - это агрегация.
Связывание
Присоединение вызова метода к телу метода.
Виды:
- раннее (статическое) - проводится компилятором перед запусти программы ( перегрузка методов, приватные, статические, final методы)
- позднее (динамическое) - непосредственно во время выполнения программы (runtime), в зависимости от типа объекта (переопределение методов).
SOLID
Single Responsibility Principle(Принцип единой ответсвенности) - класс должен отвечать за одну какую-то логику.
Open Closed Principle(Принцип открытости/закрытости) - программные сущности должны быть открыты для расширения, но закрыты для изменения. Расширение с помощью наследников (не меняя сущности родителя).
Liskov’s Substitution Principle( Принцип подстановки Барбары Лисков) - объекты в программе можно заменить их наследниками без изменения свойств программы.
Interface Segregation Principle (Принцип разделения интерфейса) - клиенты не должны быть вынуждены реализовывать интерфейсы, в которых они не будут использовать.
Dependency Inversion Principle( Принцип инверсии зависимостей) - зависимости внутри системы строятся на основе абстракций.