ООП Flashcards

Ооп

1
Q

Объе́ктно-ориенти́рованное программи́рование (ООП)

A

методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Наследование

A

свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.
Класс, от которого производится наследование, называется предком, базовым или родительским. Новый класс – потомком, наследником или производным классом.
Следует принципу BisA - B является А.
Механически это дублирование кода.
Наследование является механизмом повторного использования кода, позволяет строить иерархии классов
Пример: животные -> кошки, собаки

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Объект

A

(экземпляр) – это отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом. Каждый объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Инкапсуляция

A

это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя, открыв только то, что необходимо при последующем использовании.
Цель инкапсуляции — уйти от зависимости внешнего интерфейса класса (то, что могут использовать другие классы) от реализации. Чтобы малейшее изменение в классе не влекло за собой изменение внешнего поведения класса. Упростить изменение, модификацию и тестирование.
ПРИМЕР: автомобиль(руль, тормоз, газ)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Полиморфизм

A

это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Преимуществом полиморфизма является то, что он помогает снижать сложность программ, разрешая использование одного и того же интерфейса для задания единого набора действий. Выбор же конкретного действия, в зависимости от ситуации, возлагается на компилятор языка программирования. Отсюда следует ключевая особенность полиморфизма - использование объекта производного класса, вместо объекта базового (потомки могут изменять родительское поведение, даже если обращение к ним будет производиться по ссылке родительского типа).
Полиморфизмом называют явление, при котором классы-потомки могут изменять реализацию метода класса-предка, сохраняя его интерфейс Полиморфизм позволяет обрабатывать объекты классов-потомков как однотипные объекты, не смотря на то, что реализация методов у них может различаться.
ПРИМЕР: Любой объект Java, который может пройти более одного теста IS-A, считается полиморфным. В Java все объекты являются полиморфными, поскольку любой объект будет проходить тест IS-A для своего собственного типа и для класса Object.
олень – это животное,
олень – это вегетарианец,
олень – это олень,
олень – это объект.
ПРИМЕР:
- животное: sound()
- кошка переопределяет ка мяу
- собака переопределяет ка гав

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Абстракция

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Суперкласс

A

В программировании суперклассом или родительским классом называют класс, на основе которого создаются другие классы. Классы, полученные на основе суперкласса, называются дочерними классами, производными классами или подклассами.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Подкласс

A

это класс, наследующий некоторые (или все) свойства от своего суперкласса.
производный класс (англ. derived class), дочерний класс (англ. child class), класс потомок, класс наследник или класс-реализатор — класс, наследуемый от суперкласса или интерфейса, т. е. класс определённый через наследование от другого класса или нескольких таких классов. Подклассом может быть суперкласс.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Базовый класс

A

это класс, находящийся на вершине иерархии наследования классов и в основании дерева подклассов, т. е. не являющийся подклассом и не имеющий наследований от других суперклассов или интерфейсов. Базовым классом может быть абстрактный класс и интерфейс. Любой не базовый класс является подклассом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Класс

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Объект

A

Объектом называется экземпляр класса Собака – это класс Собака Жучка из 3 подъезда – это объект, представитель или экземпляр класса «Собака».

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Класс

A

Пользовательский тип данных, объединяющий данные и методы их обработки

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Интерфейс

A

это набор методов класса, доступных для использования. Интерфейсом класса будет являться набор всех его публичных методов в совокупности с набором публичных атрибутов. По сути, интерфейс специфицирует класс, чётко определяя все возможные действия над ним.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Ассоциация

A

Обозначает связь между объектами
Позволяет экземпляру одного класса вызывать вызывать экземпляр другого.
Композиция и агрегация — частные случаи ассоциации «часть-целое».
Бывают бинарные, n-арные

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Генерализация(обобщение)

A

таксономическое отношение между более общим понятием и менее общим понятием.
(между абстрактным классом и наследниками)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Агрегация

A

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

17
Q

Композиция

A

разновидность отношения агрегации, при которой составные части целого имеют такое же время жизни, что и само целое. Эти части уничтожаются вместе с уничтожением целого.
Внутренний объект создается и уничтожается вместе с агрегатом, не может принадлежать другому агрегату и имеет то же время жизни.

18
Q

Является - “is a”, имеет - “has a”

A

«является» подразумевает наследование. «имеет» подразумевает ассоциацию (агрегацию или композицию).

19
Q

Какие преимущества у ООП?

A
  • Абстракция - разделение функциональности, использование понятий, близких к предметной области;
  • Инкапсуляция позволяет абстрагироваться от деталей реализации и защитить код от внешнего воздействия
  • Инкапсуляция: упрощение изменений, модификации и тестирования
  • Класс: локализация кода, свойства и поведение в одном месте
  • Наследование: повторное использование компонент
  • ООП дает возможность создавать расширяемые системы. Это одно из основных достоинств ООП. Расширяемость означает, что существующую систему можно заставить работать с новыми компонентами, причем без внесения в нее каких-либо изменений. Компоненты могут быть добавлены на этапе исполнения программы.
20
Q

Какие недостатки у ООП?

A
  • сложность в изучении и понимании
  • проектирование классов сложный процесс
  • снижение быстродействия
  • больший расход памяти
21
Q

Назовите основные принципы ООП.

A

абстрагирование, инкапсуляция, наследование и полиморфизм, ассоциация

22
Q

Расскажите про раннее и позднее связывание.

A

Статическая и динамическая типизация.

Присоединение вызова метода к телу метода называется связыванием.
Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (early binding).
В свою очередь, позднее связывание (late binding) это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта.
В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода.
Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).

23
Q

SOLID

A

S: Single Responsibility - Каждый класс должен решать лишь одну задачу. Если класс отвечает за решение нескольких задач, его подсистемы, реализующие решение этих задач, оказываются связанными друг с другом. Изменения в одной такой подсистеме ведут к изменениям в другой.
Проще говоря принцип предлагает нам проводить границы между модулями так, чтобы изменение в бизнес-правилах затрагивало как можно меньше модулей, в идеале — один.
O: Open/Close - Принцип открытости-закрытости - программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения.
Принцип открытости/закрытости означает, что программные сущности должны быть:
- открыты для расширения: означает, что поведение сущности может быть расширено путём создания новых типов сущностей.
- закрыты для изменения: в результате расширения поведения сущности, не должны вноситься изменения в код, который эту сущность использует.
L: Liskov substitution - Принцип подстановки Барбары Лисков - Наследующий класс должен дополнять, а не замещать поведение базового класса. - Необходимо, чтобы подклассы могли бы служить заменой для своих суперклассов.
Цель этого принципа заключаются в том, чтобы классы-наследники могли бы использоваться вместо родительских классов, от которых они образованы, не нарушая работу программы. Если оказывается, что в коде проверяется тип класса, значит принцип подстановки нарушается.
I: Interface segregation - Принцип разделения интерфейса - Программные сущности не должны зависеть от методов, которые они не используют.
Принцип разделения интерфейсов говорит о том, что слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы программные сущности маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении метода интерфейса не должны меняться программные сущности, которые этот метод не используют.
D: Dependency inversion - Принцип инверсии зависимостей -
Модули верхних уровней не должны импортировать сущности из модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
ПРИМЕР: использовать все классы через интерфейсы

24
Q

Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?

A

Ключевое слово interface используется для создания полностью абстрактных классов. Основное предназначение интерфейса - определять каким образом мы можем использовать класс, который его реализует. Создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не реализует их поведение. Все методы неявно объявляются как public.
Начиная с Java 8 в интерфейсах разрешается размещать реализацию методов по умолчанию default и статических static методов.
Интерфейс также может содержать и поля. В этом случае они автоматически являются публичными public, статическими static и неизменяемыми final.