ООП теория
Расскажи про принципы SOLID
1. Single Responsibility (Принцип единственной ответственности) - каждый класс должен иметь только одну ответственность. Это означает, что класс должен решать только одну задачу и не должен иметь множества различных функций, которые могут быть вынесены в другие классы. 2. Open/Closed (Принцип открытости/закрытости) - программные сущности должны быть открыты для расширения, но закрыты для модификации. Это означает, что вы должны использовать абстракции и интерфейсы, чтобы создавать гибкие и расширяемые системы. 3. Liskov Substitution Principle (Принцип подстановки Барбары Лисков) - объекты в программе могут быть заменены на экземпляры их подтипов без изменения корректности программы. Это означает, что вы должны проектировать классы так, чтобы их подклассы могли использоваться вместо них без изменения поведения программы. 4. Interface Segregation Principle (Принцип разделения интерфейса) - клиенты не должны зависеть от интерфейсов, которые они не используют. Это означает, что мы должны разделять интерфейсы на более мелкие, чтобы клиенты могли реализовывать только те интерфейсы, которые им нужны. 5. Dependency Inversion Principle (Принцип инверсии зависимостей) - зависимости должны быть направлены на абстракции, а не на конкретные реализации. Это означает, что вы должны использовать интерфейсы и абстрактные классы, чтобы уменьшить связность между классами и сделать ваш код более гибким и расширяемым.
Какие преимущества у ООП?
1. Лёгкость в переносе бизнес-логики в программный код, так как мы воспринимаем мир именно в "объектном" виде 2. Модульность кода позволяет сократить количество необходимого кода программы. 3. Удобно поддерживать и дополнять код, написанный по принципам ООП.
Какие недостатки у ООП?
1. Модульность требует больших затрат в начале, при проектировании приложения, а при неправильно составленной архитектуре масштабируемость значительно усложняется. 2. Плохая реализация может значительно повлиять на размер и скорость работы программы. 3. Если правила инкапсуляции нарушены, это может привести к проблемам с безопасностью.
Основные принципы ООП?
1. Наследование 2. Полиморфизм 3. Инкапсуляция
Что такое ассоциация, агрегация и композиция?
Ассоциация, агрегация и композиция - это три вида отношения между классами в ООП. 1. Ассоциация - это отношение между двумя классами, которое означает, что один класс использует другой класс в какой-то мере. Например, класс User может иметь ассоциацию с классом Role, что означает, что каждый каждый пользователь имеет какую-то роль. Ассоциация может быть однонаправленной или двунаправленной. 2. Агрегация - это отношение между двумя классами, которое означает, что один класс содержит другой класс в качестве части. Например, класс Car может содержать класс Engine в качестве своей части. В отличие от композиции, объекты, связанные агрегацией, могут существовать независимо друг от друга. 3. Композиция - это отношение между двумя классами, которое означает, что один класс является частью другого класса и не может существовать без него. Например, класс House может содержать класс Room в качестве его части. В отличие от агрегации, объекты, связанные композицией, не могут существовать независимо друг от друга.
Что такое инкапсуляция? Приведи пример инкапсуляции.
Инкапсуляция - это сокрытие реализации от внешнего мира. Используя модификаторы доступа, мы даём доступ к части кода только той части программы, которая в этом нуждается. Стандартным примером является POJO-класс, в котором есть приватные поля и публичные геттеры и сеттеры, позволяющие влиять на значение полей.
Что такое наследование? Приведи пример наследования.
Наследование - это принцип, благодаря которому каждый класс является наследником родительского класса и может использовать его поля и методы. Все объекты являются наследниками класса Object и могут вызывать его методы - equals, hascode, toString, clone, getClass и другие.
Что такое ООП?
ООП - объектно-ориентированное программирование, методология программирования, в которой программа представляется набором объектов, каждый из которых является экземпляром класса, а классы образуют иерархию наследования.
Что такое полиморфизм? Приведи пример полиморфизма.
Полиморфизм - принцип, благодаря которому мы можем использовать объекты разных классов одинаково, вызывая у них одни и те же методы. Пример - в метод передаётся объект интерфейса Collection, внутри метода вызываются методы этого класса. В метод могут прийти любые классы, которые имплементировали этот интерфейс, в которых должны быть реализованы методы класса Collection. Например ArrayList, HashSet.
Что такое раннее и позднее связывание?
Раннее и позднее связывание - это два подхода к связыванию переменных с их значениями. 1. Раннее связывание (или статическое связывание) - происходит на этапе компиляции программы. Это означает, что компилятор определяет типы переменных и резервирует необходимое количество памяти для каждой переменной в программе. Когда программа запускается, значения переменных уже определены и могут быть использованы. 2. Позднее связывание (или динамическое связывание) - происходит во время выполнения программы. В этом случае, типы переменных определяются во время выполнения программы, а память выделяется по мере необходимости. Это означает, что значения переменных могут изменяться во время выполнения программы.