Главная страница

Ревью 2. Объектноориентированное программирование


Скачать 35.84 Kb.
НазваниеОбъектноориентированное программирование
Дата02.05.2023
Размер35.84 Kb.
Формат файлаdocx
Имя файлаРевью 2.docx
ТипДокументы
#1102914

«Объектно-ориентированное программирование – это набор правил программирования, в котором основной концепцией является понятие объекта. Основные принципы ООП: Абстракция, Инкапсуляция. Наследование. Полиморфизм.

Плюсы: Гибкость (можно изменять, добавлять), Модульность(легко разбираться в коде), Безопасность (из-за инкапсуляции код недоступен извне).
Инкапсуляция – сокрытие полей и реализации (методов) внутри объекта с целью защиты данных от внешнего, изменения со стороны других объектов. Пример, я могу смотреть телевизор, но не знать, как он сделан и как функционирует.

Инкапсуляция нужна для : Чтобы код оставался чистым и организованным. Для лучшего контроля доступа к инкапсулированным членам. Чтобы лучше понимать код.

Модификаторы доступа для регулирования доступности данных и методов.
Геттеры (получают значение поля) и Сеттеры (устанавливают значение) используются для организации доступа к закрытым данным.
Полиморфизм - принцип Одну задачу можно решить разными способами (Пример: разные методы или правила).

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

Класс – шаблон с набором общих действий. А объект конкретный экземпляр класса.

В правой части выражения происходит выделение памяти для нового экземпляра класса Cat и инициализируется экземпляр. Оператор присваивания присваивает переменной ссылку на только что созданный объект. 
Как передаются объекты в метод?

Создаётся экземпляр класса и передаются в метод в качестве параметра.

Путём передачи копии ссылки на область где находится объект.
Что такое переопределение метода в Java? Возможностей позволяющая подклассу обеспечивать специфическую реализацию метода, который уже существует в суперклассе. Всё общее – кроме внутренней реализации.

Спереди пишется @ Овверрайд.
Что такое перегрузка метода в Java?

Использование методов с одним именем, но с разными типами и/или количеством параметров. При вызове метода в зависимости от типа и количества параметров система выберет именно ту версию, которая наиболее подходит. Если метод с одним и тем же количеством и типом параметров определен несколько раз, то такая программа не скомпилируется.
Что такое нативные методы, их плюсы и минусы?

Это методы написанные на других языках. Обозначаются native.

Плюсы: метод уже написан, быстрая скорость работы,

Минусы: не безопасно, может быть не переносим Java языком
Какие модификаторы доступа могут быть у класса?

Паблик, и по умолчанию (дефолт)

А всего существует четыре доступа:

  • Видимый в пакете (стоит по умолчанию и модификатор не требуются).

  • Видимый только для класса (private).

  • Видимый для всех (public).

  • Видимый для пакета и всех подклассов (protected).


Что такое final? - Это ключевое слово, может применяться к классам, методам, переменным.

Для класса это означает, что класс не сможет иметь подклассов, т.е. запрещено наследование.

Для метода означает, что он не может быть переопределен в подклассах.

Для переменных примитивного типа это означает, что однажды присвоенное значение не может быть изменено.

Для ссылочных переменных это означает, что после присвоения объекта, нельзя изменить ссылку на данный объект.

Как реализована неизменность String?

Неизменность строк в Java достигается путем хранения строк в виде массива символов ( char[] ), который является неизменяемым объектом. При изменении строки создается новый массив символов с новым значением строки. Также Java использует кэширование строк, что позволяет экономить память.
Как реализовать свой Immutable тип данных?

Сделать класс final, Переменные константами. Выполнить клонирование объектов, что использовать копии вместо текущего состояния.
Что такое ключевое слово static?  Что может быть static?

Static — модификатор, применяемый к переменной, полю, методу, внутреннему классу. Статик указывает на принадлежность к текущему классу.

Если поле статично, значит оно принадлежит классу, если метод статичный — он принадлежит классу.

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

Да. В итоге получится два разных метода. Статический будет принадлежать классу и будет доступен через его имя, а нестатический будет принадлежать конкретному объекту и доступен через вызов метода этого объекта.
Пакет (package – ключевое слово) в Java — это способ объединить группу классов, интерфейсов. Имя пишут с маленькой буквы, чтобы не путать с классом
Что такое конструкторы? Конструктор по-умолчанию?

Конструктор — специальный метод, который вызывается при создании нового объекта и инициализирует его в момент создания.

Имя конструктора должно совпадать с именем класса. Конструктор не должен иметь возвращаемого типа.
Конструктор по умолчанию — не принимает никаких параметров, если мы не создаём сами то он будет создан компилятором, но мы его не увидим.

Расскажи, что такое this и super? Когда мы обязаны использовать this и super?

this и super - ключевые слова, используются в конструкторах и методах,

Главное отличие this и super в том, что this представляет текущий экземпляр класса, в то время как super - текущий экземпляр родительского класса.
this а также super ключевые слова связаны с экземпляром объекта, мы не можем использовать их внутри статического блока или статического метода.

Класс Object и все методы: главный класс фактически все классы наследуются от класса Object.
Метод toString служит для получения представления этого объекта в виде строки. 

Метод hashCode позволяет задать некоторое числовое значение, например, можно для сравнения объектов.

Метод getClass позволяет получить тип объекта.

Метод equals проверяет два объекта на равенство. Сравнивает по значению.

Метод clone создаёт копию объекта.

Метод finalize
Зачем нужен метод finalize? Для автоматического освобождения системных ресурсов, занимаемых объектом.
Из-за чего происходят коллизии? 

Ситуация, когда у разных объектов одинаковые хеш-коды называется — коллизией.

В чём разница между instanceOf и getClass?

getClass(), и оператор instanceof в Java могут использоваться в методе equals() для проверки типа объекта, который мы проверяем на равенство. 

Ключевое различие между ними заключается в том, что getClass() возвращает true если объект на самом деле является экземпляром указанного класса, но оператор instanceof может возвращать true, даже если объект является подклассом указанного класса или интерфейса в Java.
Перечислите методы именно класса Enum?

  • clone() – вызов метода предотвращает клонирование перечислений;

  • getDeclaringClass() – возвращает тип перечисления.

  • hashCode() – возвращает хэш-код объекта;

  • name() – возвращает имя именуемой константы;

  • ordinal() – возвращает позицию константы в списке констант перечисления;


Что такое интерфейс? - тип, который описывает поведение объекта, которое затем реализуют классы. При создании используют ключевое слово interface.
Один класс может применить множество интерфейсов. Для применения используется слово implements.
Интерфейс — это контракт, который должен быть реализован конкретным классом. Методы интерфейса неявно абстрактны и обязаны быть реализованы в классе, реализующем этот интерфейс.
Бывает Паблик,
Могут содержать методы по умолчанию, статик методы
Можно ли создать поля в интерфейсе? Да, они будут Паблик Статик Финал (константами).

Есть ли в Java множественное наследование? Зачем реализовывать интерфейс интерфейсу?

В Java множественное наследование не поддерживается в классах, но оно поддерживается в интерфейсах.

Один интерфейс может расширять множество других интерфейсов.
Можно ли создавать статик методы в интерфейсах?

Да с Java 8. Обращение к ним идет через: имя интерфейса.имя метода.
Что такое абстрактный метод?

Абстрактный метод - это метод без реализации, не имеет тела, является шаблоном для других методов из других классов.
Что такое абстрактный класс? Чем отличается от обычного?

Абстрактный класс похож на обычный класс. В абстрактном классе нельзя создать объект абстрактного класса.

Абстрактные классы призваны предоставлять базовый функционал для классов-наследников. А производные классы уже реализуют этот функционал.
Да, АК всегда имеет конструктор. Если вы не определите свой собственный конструктор, компилятор выдаст абстрактному классу конструктор по умолчанию.

  • Чтобы создать абстрактный класс, перед словом "class" нужно дописать модификатор "abstract"

  • Вы не можете создать объект абстрактного класса

  • В абстрактном классе можно создавать абстрактные методы, а можно и "обычные"

  • Абстрактные методы могут быть только в абстрактном классе!


Отличия АК и Интерфеса:

    1. АК связывает близкие по смыслу классы, а Интерфейс любые, в т.ч. статические.

    2. Интерфейс описывает поведение, а АК и поведение и состояние (в виде полей).

    3. Интерфейс имеют только финал статик поля(константы), а АК любые поля.

    4. Класс может реализовать много Интерфейсов, а множественное наследование классов запрещено.

    5. Интерфейс не может содержать конструктора а АК содержит.

    6. Интерфейс может быть реализован (implements) и АК может быть только расширен (extends).

    7. В интерфейсах могут быть Абстр.методы, дефолт и статик методы с Джава 8, могут быть приват методы (только с реализацией) с Джава 9.



Передача параметров по ссылке или по значению?

ВСЕГДА по значению. Для примитивных типов — передаете копию текущего значения, для объектов — вы передаете копию ссылки.
Можно ли использовать статические методы в обычных? Наоборот? Почему?

Нельзя. Наоборот можно.
Аннотации — это форма метаданных. Они предоставляют информацию о программе, при том сами частью программы не являются.
Т.к. массив – это объект, то final означает, что после присвоения ссылки на объект, уже нельзя ее изменить, но можно изменять состояние объекта.
Может ли быть конструктор у абстрактного класса? Для чего? Да!

this а также super ключевые слова связаны с экземпляром объекта, мы не можем использовать их внутри статического блока или статического метода.
Класс Сlass представляет характеристики класса, экземпляром которого является объект.

Он предоставляет информацию:

  • является ли класс интерфейсом, массивом или примитивным типом;

  • каков супер класс объекта;

  • каково имя класса;

  • какие в нем конструкторы, поля, методы и вложенные классы.

В классе Сlass нет конструкторов. Экземпляр этого класса создается исполняющей системой Java во время загрузки класса и предоставляется методом getClass() класса Object.

Контракт между equals hashcode

1) Повторный вызов hashCode для одного и того же объекта должен возвращать одинаковые хеш-значения, если поля объекта, участвующие в вычислении значения, не менялись.

2) Если equals() для двух объектов возвращает true, hashCode() также должен возвращать для них одно и то же число.

3) При этом неравные между собой объекты могут иметь одинаковый hashCode.


написать администратору сайта