Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники 2020-2021 / Билеты.docx
Скачиваний:
71
Добавлен:
15.06.2021
Размер:
1.2 Mб
Скачать

Ооп в Java. Классы и объекты. Синтаксис. Понятие членов класса.

Классы в Java поддерживают:

1. Наследование от классов и интерфейсов

2. Идентификаторы доступа (инкапсуляция)

3. Абстрактные классы и методы

4. Вложенные и внутренние классы

5. Параметризованные перегружаемые конструкторы и методы с переменным числом аргументов

6. Передача и возврат объектов в конструкторы и методы

7. Динамическую диспетчеризацию методов

8. Метод finalize(), который вызывается перед окончательным удалением объекта из памяти

9. Ключевое слово this для разрешения ситуации сокрытия одноименных переменных

10. Ключевое слово final для запрета переопределения метода и/или наследования класса

11. Ключевое слово static для определения свойств и методов доступных без создания объекта

12. Статические блоки кода, для выполнения операций перед созданием объекта класса

//Предыдущий код класса

//Возвращает имя автора

public String getName() {

return Name;

}

//Возвращаем код организации, в которой работает автор

abstract public int getWorkPlace();

//Промежуточный код класса

/**

* Устанавливаем все поля/свойства автора

* @param dataInit

*/

public boolean setAuthor(Map <String, String> dataInit) {

return setAllset(dataInit);

}

/**

* Устанавливаем все поля/свойства устанавливаемые через get

* @param dataInit

*/

public boolean setAllset(Map <String, String> dataInit)

{

boolean Result = false;

if( !validator.isNullEmpty(dataInit) ) {

if(!this.setName(dataInit.get("Name")) )

Result = false;

if(!this.setAnnot(dataInit.get("Annot")))

Result = false;

if(!this.setLand(dataInit.get("Land")))

Result = false;

if(!this.setWorkPlace(Integer.parseInt(dataInit.get("WorkPlace"))))

Result = false;

if(!this.setDateBirth(LocalDate.parse(dataInit.get("DateBirth"))))

Result = false;

if( !this.setNumberPublication(Integer.parseInt( dataInit.get("NumberPublication"))) )

Result = false;

}

return Result;

}

//Дальнейший код класса

С помощью this можно обратиться к методу или свойству (полю) текущего объекта

This позволяет разрешать ситуации совпадения имен локальных переменных и переменных свойств класса

Билет 6.

Операторы сравнения.

Тип boolean – простой тип, принимающий значения true или false.

С данным типом допустимы следующие логические операции.

Оператор Описание

& Логическое AND (И)

&& Сокращённое AND

| Логическое OR (ИЛИ)

|| Сокращённое OR

^ Логическое XOR (исключающее OR (ИЛИ))

! Логическое унарное NOT (НЕ)

&= AND с присваиванием

|= OR с присваиванием

^= XOR с присваиванием

== Равно

!= Не равно

?: Тернарный (троичный) условный оператор

Сокращенные формы && и II позволяют не вычислять все условия, когда результат от этого уже не может измениться.

Операторы == и != можно применять только для сравнения переменных простых типов. При сравнении переменных ссылочных типов они по сути сравнивают адреса, по которым записаны переменные в памяти.

Ооп в Java. Интерфейсы. Синтаксис, допустимые операции.

Интерфейсы один из основных инструментов реализации полиморфизма в Java.

До Java8 методы интерфейса не могли иметь «тела» т.е. все методы интерфейса были абстрактными. В Java8 появилась возможность определять два вида методов с «телом»:

1. методы «по умолчанию» с помощью ключевого слова default

2. статические методы с помощью ключевого слова static

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

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

package study.interfaces;

import java.time.LocalDate;

public interface human {

/**

* Установить имя автора

* @return boolean. Если false - смотреть содержимое err

* @param initValue

*/

boolean setName(String initValue);

/**

* Установить дату рождения

* @return boolean

* @param initValue

*/

boolean setDateBirth(LocalDate initValue);

//Другие объявления методов интерфейса human

//Пример определения метода по умолчанию checkData

//Данная реализация checkData вызывается, если она не определена в наследниках

/**

* Проверить все данные на корректность

* @return true, если все данные корректны

*/

default boolean checkData() {

boolean Result = true;

//Код проверки значений свойств: Name, Annot и т.  д. c записью true или false в Result

return Result;

}

//Пример статического метода checkDateBirth. Метод checkDateBirth может быть вызван без создания объекта

//например, вот так: human.checkDateBirth(agrument)

/**

* Проверка корректности даты рождения

* @param initValue - дата, типа LocalDate

* @return true, если дата - корректна

*/

static boolean checkDateBirth(LocalDate initValue) {

boolean Result = true;

//Код проверки значения даты рождения.

//Например, что переданная дата не превосходит текущую

return Result;

}

}

Билет 7.

Массивы (Коллекции простых типов)

Массивы в Java — это структура данных, которая хранит упорядоченные коллекции фиксированного размера элементов нужного типа. В Java массив используется для хранения коллекции данных, но часто бывает полезно думать о массиве как о совокупности переменных одного типа.

Вместо объявления отдельных переменных, таких как number0, number1, ..., и number99, Вы объявляете одну переменную массива, например, numbers и используете numbers[0], numbers[1], ..., и numbers[99], для отображения отдельных переменных.

ООП в Java. Инкапсуляция

Инкапсуляция:

Защита переменных

Экономия имен (не нужное не видно)

Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое. В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных.

Для достижения инкапсуляции в Java:

Объявите переменные класса как private.

Предоставьте public к методам установки и получения (сеттеру и геттеру) для изменения и просмотра значений переменных.

Билет 8.

Инструменты ООП в Java. Совпадения и отличия от других языков (известных вам).

1. Отказ от множественного наследования в Java

Проблема «ромба» B и C наследник A, D наследник B и C. У всех есть метод test. Какой выполнять в D?

Эта проблема разрешается в C++ с помощью применения оператора «::» для «ручного» указания версии базового класса метод или свойство которого используется. Например так: D.A::test(). Это требует внимательности. Неоднозначность всегда приводит к повышению сложности понимания кода программы.

2. Отказ от явных встраиваемых функций

В C++ существует понятие встраиваемых функций (inline). Это такие функции, вызовы которых в коде при компиляции заменяется на код функций. Программа в этом случае будет работать несколько быстрее.

В Java нет конструкции, которая бы позволяла разработчику рекомендовать компилятору сделать метод «встраиваемым» по аналогии с inline в C++. Компилятор Java самостоятельно определяет заменять ли в программе вызов функции её кодом или нет на основании своих внутренних инструкций. Известно, что можно увеличить вероятность того, что компилятор сделает метод встроенным, если он объявлен как static или final. Однако гарантии тут нет.

Соседние файлы в папке Заочники 2020-2021