4. ООП. Классы и инкапсуляция (+Enum) Flashcards
Назовите три кита ООП?
- Инкапсуляция - сокрытие деталей реализации за внешним интерфейсом
- Наследование - создание производных классов(subclass), наследующих свойства базового(superclass)
- Полиморфизм - программа может работать как с базовым классом, так и с производными
классами, не зная о конкретной реализации.
Что такое класс (class)?
Класс является шаблоном или описанием объекта
Что такое пакет (package)?
Обычные папки в проекте, позволяющие организовать классы в пространстве имен. В пакеты объединяют классы одной и той же категории, либо предоставляющие сходную функциональность.
Чем отличается класс от объекта?
Класс является шаблоном для объекта, а объект это экземпляр, который создается по этому шаблону
Что такое поле? Какие виды полей вы знаете? Чем они отличаются
Поле - переменная класса или объекта, но не метода . Бывают статические и не статические. Статические доступны без создания объекта, а для не статических требуется объект.
Из обычных методов можно получить доступ к статическим полям, а из статических к обычным нельзя. Статические поля должны быть проинициализированы при объявлении
Что такое инкапсуляция?
Инкапсуляция - сокрытие деталей реализации за внешним интерфейсом
За счёт чего в Java достигается инкапсуляция?
За счёт модификаторов доступа, использования геттеров и сеттеров и пакетов
Что такое модификатор доступа?
Ключевые слова определяющие область видимости
Перечислите их в порядке расширения видимости
private - Class default - Class, Package protected - Class, Package, Subclass public - Class, Package, Subclass, Global
Class - доступность члена в пределах данного класса(внутри {})
Package - доступность члена в пределах одного пакета
Subclass - доступность члена в пределах класса наследника
Global - доступность члена в произвольном пакете
Что обозначает и для чего применяется ключевое слово final?
final - модификатор, препятствующий изменению
значения или ссылки, после инициализации. Метод нельзя переопределить, а класс нельзя наследовать
Что такое конструктор? По умолчанию?
Конструктор — это метод класса, который инициализирует новый объект после его создания.
Конструктор по умолчанию - это конструктор без аргументов, автоматически генерируемый
Для чего применяется ключевое слово super?
В конструкторе - для обращения к конструктору суперкласса, и для обращения к переменным суперкласса
Что такое перечисление?
enum
Перечисление можно рассматривать как класс с фиксированным набором экземпляров.
Он представляет набор логически связанных констант. Объявление перечисления происходит с помощью оператора enum, после которого идет название перечисления. Затем идет список элементов перечисления через запятую.
Перечисления могут использоваться в классах для хранения данных или в виде отдельного файла
Может ли перечисление иметь конструктор и методы?
Они могут иметь только приватные конструкторы, статические и нестатические методы и переменные экземпляра.
Что такое перегрузка метода?
Имена методов (конструкторов) и тип возвращаемых данных одинаковые, с отличающимися параметрами, этот механизм называется перегрузка методов
(overloading).
Что такое рекурсия?
Рекурсия - это когда метод вызывает сам себя. Такой
метод называется рекурсивным.
Рекурсивный метод включает в себя:
— базовый случай, он же условие остановки;
— шаг рекурсии, он же условие продолжения.
Количество рекурсивных вызовов должно быть конечно.
Всегда должно быть условие остановки рекурсивных
вызовов(база рекурсии).
В противном случае программа упадёт с ошибкой
StackOverflowError.
Можно выделить следующие взаимосвязанные преимущества рекурсии:
естественность (натуральность) выражения сложных, на первый взгляд, алгоритмов.
рекурсивный алгоритм более читабелен в сравнении с итерационным;
для многих распространенных задач рекурсию более легче реализовать чем итерацию. Рекурсия хорошо подходит для реализации алгоритмов обхода списков, деревьев, графов и т.д.
Недостатки рекурсии состоят в следующем:
по сравнению с итерацией многократный вызов рекурсивной функции работает дольше. Это связано с тем, что при вызове рекурсивного метода его параметры копируются в стек. Также запоминаются временные значения локальных внутренних переменных. При завершении вызова рекурсивной функции предыдущие значения параметров вытягиваются из стека, что приводит к лишним операциям. Итерационный алгоритм для такой же задачи работает быстрее;
для рекурсивного процесса нужно больше памяти чем для итерации. Это связано с тем, что при рекурсивном вызове нужно сохранять предыдущее значение внутренних переменных вызывающей функции, чтобы по завершении рекурсивного вызова восстановить ее выполнение. Таким образом, если рекурсивная функция вызывается много раз, то это может привести к чрезмерно большому использованию памяти.