Файл: Перечислите основные принципы ооп.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 26.10.2023

Просмотров: 12

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ООП

Что такое ООП? В чем его плюсы? это способ(метод) программирования, основанный на представлении программы в виде совокупности объектов, каждый из которых является экземпляром отдельного класса, а классы образуют иерархию наследования
Перечислите основные принципы ООП
Абстракция, инкапсуляция, наследование, полиморфизм

Что такое инкапсуляция? Приведите пример инкапсуляции?
Инкапсуляция — свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Для Java корректно будет говорить, что инкапсуляция это
«сокрытие реализации». переменные класса будут сокрыты от других классов. доступ же к ним будет через методы этого класса (гетеры и сеттеры)
Что такое полиморфизм? Приведите пример полиморфизма? это возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных наследованием
2. это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта ad hoc это полиморфизм, основанный на различении типов. Для различных типов аргументов используется разный код функции.(пример перегрузка методов)
параметрического полиморфизма: это ситуация, когда один и тот же метод работает с аргументами различных типов одинаково, не зависимо от их точного типа.
Что такое наследование? Приведите пример наследования? Зачем оно нужно? это свойство системы позволяющее описать новый класс на основе уже существующего с частично или полностью взаимствующейся функциональностью

Что такое класс? Объект?
Класс – это шаблон, описывающий общие свойства группы объектов. Объект это экземпляр класса.

Как передаются объекты в метод?
В джава в метод все передаётся по значению.
Вне зависимости от того, что передаëшь, примитив или объект.
Но у примитива метод просто копирует значение в свою локальную переменную, изначальная переменная никак не меняется. А если передать методу ссылку, то он еë тоже скопирует
И скопированная ссылка будет тоже указывать но тот же объект И объект соответственно вне метода тоже меняется
Что такое переопределение метода в Java? метод с другим функционалом (в классе наследнике от класса родителя)

Что такое перегрузка метода в Java?

метод с тем же именем, но с разными типами и разными параметрами (в своем классе)
Что такое нативные методы, их плюсы и минусы? это методы написанные на языках более низкого уровня, таких как С, С++, ассемблер.
ПЛЮСЫ выполнить какие то задачи, которые проще выполнить на низкоуровневом языке использование низкоуровневых функций для обращения к памяти(hashCode например)
МИНУСЫ утрачиваются свойства переносимости и безопасности
Невозможно использовать методы в коде предназначенном для работы с сетью и интернетом

Какие модификаторы доступа могут быть у класса?
Public and default

Что такое final? Что может быть final? Как они работают?
Final это модификатор для создания констант
Для класса. Класс помеченный при помощи final не может иметь наследников. Для метода. Метод помеченный при помощи final не может быть переопределен в классах наследниках. Для поля. Поле помеченное при помощи слова final не может изменить свое значение после инициализации
Как реализована неизменность String? записывает строку в свое поле charов value, которое имеет модификатор доспупа private и модификатор final
Как реализовать свой Immutable тип данных? объект immutable, используйте метод Object.freeze(). нужно зaпретить рaсширение клaссa и сделaть все поля финaльными необходимо не предостaвлять сеттеры
Что такое ключевое слово static? Что может быть static? говорит о том что метод или поле класса принадлежат не объекту а самому классу тот же класс. но может быть только вложенным и имеет доступ только с статическим полям

Могут ли нестатические методы перегрузить статические?
Да. В итоге получится два разных метода. Статический будет принадлежать классу и будет доступен через его имя, а нестатический будет принадлежать конкретному объекту

Что такое пакет? Как создать пакет?
Пакеты позволяют организовать классы логически в наборы надо использовать директиву package, названия пакетов соответствуют физической структуре проекта, то есть организации каталогов, в которых находятся файлы с исходным кодом

Что такое конструкторы? Конструктор по-умолчанию?

Это специальный метод который вызывается во время создания объекта. Конструктор инициализирует объект во время создания. Имеют имя класса.
Конструктор по умолчанию - без параметров

Расскажи, что такое this и super? Когда мы обязаны использовать this и super?
- это ссылка на объект в текущем классе
- это ссылка на объект в родительском классе
- вызов конструктор текущего класса
- вызов конструктор родительского класса
Класс Object и все методы кроме wait, notify, notifyAll toString - возвращает символьную строку описывающую объект
- equals() - сравнивает объекты
- hashCode() - возвращает хеш-код связанный с вызывающим обьектом
- clone() - создает объект не отличающийся от клонируемого
- getClass - получает класс объекта во время выполнения
- finalize() - вызывается при сборке мусора

Зачем нужен метод finalize?
Метод finalize()
вызывается перед тем, как объект будет удален сборщиком мусора помечает объекты, на которые больше не ссылаются другие объекты для их удаления.
Затем на одном из проходов помеченные объекты удаляются. можно отменить сборку объекта с помощью метода finalize()
, присвоив его ссылку какому- то статическому методу.
Из-за чего происходят коллизии? ситуация, когда у разных объектов одинаковые хеш-коды называется — коллизией.
Хеш код в java создается методом public int hashCode() А диапазон инт 4 миллиарда. А объектов в программе может быть 5-6-7 миллиардов.
В чём разница между instanceOf и getClass? instanceof проверяет, является ли ссылка на объект с левой стороны экземпляром типа с правой стороны или некоторым его подтипом. getClass() == ... проверяет идентичность типов.
То есть, если getClass() проверяет полную идентичность класса, то instanceof вернет true даже если объект будет всего лишь подтипом

Перечислите методы именно класса Enum?
Тип перечисления. Создает новый определенный тип - группу значений.
- Enum может наследовать интерфейсы. не может наследовать (extends) класс.
- ordinal() - индекс константы
- values() - массив констант
- valueOf() - возвращает элемент перечисления с названием в скобках



Что такое интерфейс? Когда использовать интерфейс?
Интерфейсы определяют некоторый функционал, не имеющий конкретной реализации, который затем реализуют классы, имплеметирующие интерфей
Если нам надо определить функционал для группы разрозненных объектов, которые могут быть никак не связаны между собой, создать шаблон для методов
Можно ли создать поля в интерфейсе? не можем напрямую создавать объекты интерфейсов, но можем создавать статические константы

Есть ли в Java множественное наследование? Зачем реализовывать интерфейс интерфейсу?
Можно ли создавать статик методы в интерфейсах?
Начиная с JDK 8 в интерфейсах доступны статические методы - они аналогичны методам класса

Что такое абстрактный метод?
Такие методы определяются с помощью ключевого слова abstract и не имеют никакой реализации:
Производный класс обязан переопределить и реализовать все абстрактные методы, которые имеются в базовом абстрактном классе. Также следует учитывать, что если класс имеет хотя бы один абстрактный метод, то данный класс должен быть определен как абстрактный.

Что такое абстрактный класс? Чем отличается от обычного?
В абстрактном классе также можно определить поля и методы, но в то же время нельзя создать объект или экземпляр абстрактного класса. Абстрактные классы призваны предоставлять базовый функционал для классов-наследников. А производные классы уже реализуют этот функционал.
Разница абстрактных классов и интерфейсов abstract - interface extends - implements конструктор - нет методы - с 8 java static и default любой модификатор доступа - public по умолчанию
Абстрактные классы используются только тогда, когда есть «is a» тип отношений; интерфейсы могут быть реализованы классами которые не связаны друг с другом.
Абстрактный класс может реализовывать методы; интерфейс может реализовывать статические методы начиная с 8й версии.
Интерфейс может описывать константы и методы. Все методы интерфейса по умолчанию являются публичными (public) и абстрактными (abstract), а поля — public static final. С java
8 в интерфейсах можно реализовывать default и статические методы.

В Java класс может наследоваться (реализовывать) от многих интерфейсов, но только от одного абстрактного класса.
С абстрактными классами вы теряете индивидуальность класса, наследующего его; с интерфейсами вы просто расширяете функциональность каждого класса.
Контракт equals() hashCode()
Если обьекты равны по equals() то их хеш-коды тоже равны
Если хеш-коды разные, то по equals() будет точно - false
Если обьекты не равны по equals(), их хеш-коды могут быть равны
А если хеш-коды равны. Обьекты могут быть равны, а могут и не равняться
Контракт equals()
Рефлексивность: для любого заданного значения x, выражение x.equals(x) должно возвращать true.Заданного — имеется в виду такого, что x != null
Симметричность: для любых заданных значений x и y, x.equals(y) должно возвращать true только в том случае, когда y.equals(x) возвращает true.
Транзитивность: для любых заданных значений x, y и z, если x.equals(y) возвращает true и y.equals(z) возвращает true, x.equals(z) должно вернуть значение true.
Согласованность: для любых заданных значений x и y повторный вызов x.equals(y) будет возвращать значение предыдущего вызова этого метода при условии, что поля, используемые для сравнения этих двух объектов, не изменялись между вызовами.
Сравнение null для любого заданного значения x вызов x.equals(null) должен возвращать false.
Где хранятся примитивы, ссылки и объекты в памяти
Примитивы и ссылки в стеке потоков, но так же могут и в куче
Объекты в куче(жава хип мемори)

В чем разница между передачей параметров по ссылке или по значению ?
Передача параметра по значению – это копирование значения в переменную-параметр метода. По ссылке – передача ссылки, то есть по сути использование той же самой переменной.