Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дополнительные вопросы по ооп.docx
Скачиваний:
73
Добавлен:
01.04.2022
Размер:
76.51 Кб
Скачать

Что такое «абстракция»?

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

Расскажите про основные понятия ооп: «класс», «объект», «интерфейс».

Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт). С точки зрения программирования класс можно рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов). То есть, другими словами, класс является некоторым шаблоном для создания объектов. Допустим, у нас есть класс Dog, в нём определены поля возраста, породы и цвета. И по сути, возраст, порода и цвет собаки может быть различен. То есть, мы можем создать объект Шарик типа Dog, который будет содержать конкретные значения возраст, породу и цвет. И таких объектов может быть до бесконечности.

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

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

Чем различаются jre, jvm и jdk?

JVM, Java Virtual Machine (Виртуальная машина Java) — основная часть среды времени исполнения Java (JRE). Виртуальная машина Java исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java. JVM может также использоваться для выполнения программ, написанных на других языках программирования.

JRE, Java Runtime Environment (Среда времени выполнения Java) - минимально-необходимая реализация виртуальной машины для исполнения Java-приложений. Состоит из JVM и стандартного набора библиотек классов Java.

JDK, Java Development Kit (Комплект разработки на Java) - JRE и набор инструментов разработчика приложений на языке Java, включающий в себя компилятор Java, стандартные библиотеки классов Java, примеры, документацию, различные утилиты.

Коротко: JDK - среда для разработки программ на Java, включающая в себя JRE - среду для обеспечения запуска Java программ, которая в свою очередь содержит JVM - интерпретатор кода Java программ.

Classloader

Загрузчик классов является частью JRE, которая динамически загружает Java классы в JVM. Загрузчик классов отвечает за поиск библиотек, чтение их содержимого и загрузку классов, содержащихся в библиотеках. Эта загрузка обычно выполняется «по требованию», поскольку она не происходит до тех пор, пока программа не вызовет класс.

Загрузчик классов выполняет три основных действия в строгом порядке:

  • Загрузка: находит и импортирует двоичные данные для типа.

  • Связывание: выполняет проверку, подготовку и (необязательно) разрешение.

    • Проверка: обеспечивает правильность импортируемого типа.

    • Подготовка: выделяет память для переменных класса и инициализация памяти значениями по умолчанию.

    • Разрешение: преобразует символические ссылки из типа в прямые ссылки.

  • Инициализация: вызывает код Java, который инициализирует переменные класса их правильными начальными значениями.

Пользовательский загрузчик классов

Загрузчик классов написан на Java. Поэтому возможно создать свой собственный загрузчик классов, не понимая тонких деталей JVM. У каждого загрузчика классов Java есть родительский загрузчик классов, определенный при создании экземпляра нового загрузчика классов или в качестве системного загрузчика классов по умолчанию для виртуальной машины.

Что делает возможным следующее:

  • загружать или выгружать классы во время выполнения (например, динамически загружать библиотеки во время выполнения, даже из ресурса HTTP). Это важная особенность для:

    • реализация скриптовых языков;

    • использование bean builders;

    • добавить пользовательскую расширение;

    • позволяя нескольким пространствам имен общаться. Например, это одна из основ протоколов CORBA / RMI;

  • изменить способ загрузки байт-кода (например, можно использовать зашифрованный байт-код класса Java);

  • модифицировать загруженный байт-код (например, для переплетения аспектов во время загрузки при использовании аспектно-ориентированного программирования);