
- •Разработка формализованной объектной модели и её программная реализация.
- •Классы в Java
- •Управление доступом к членам класса
- •Члены класса. Свойства (поля) класса
- •Методы класса
- •Конструкторы класса
- •Полиморфизм. Перегрузка и переопределение методов и конструкторов
- •Статические члены класса
- •Наследование.
- •Абстрактные классы
- •Интерфейсы
- •Приложение 1. Методы класса Object. Сборщик мусора.
Интерфейсы
Интерфейс — не что иное, как именованное множество абстрактных полей и методов, которые лишь объявляются, но не определяются.
Интерфейсы предназначены для объявления типов, состоящих только из абстрактных методов и констант; они позволяют задать для этих методов произвольную реализацию. Интерфейс является выражением чистой концепции проектирования, тогда как класс представляет собой смесь проектирования и конкретной реализации.
Разработчик интерфейса решает, какие методы должны поддерживаться в классах, реализующих данный интерфейс, и что эти методы должны делать.
В языке Java новый класс может расширять всего один суперкласс — такая модель носит название одиночного наследования. Расширение класса означает, что новый класс наследует от своего суперкласса не только контракт, но и реализацию. В некоторых объектно-ориентированных языках используется множественное наследование, при котором новый класс может иметь два и более суперклассов.
Класс может реализовать произвольное количество интерфейсов. Интерфейсы, подобно классам, могут расширяться посредством ключевого слова extends. Интерфейс может расширить один или несколько других интерфейсов, добавить к ним новые константы и методы, которые должны быть реализованы в классе, реализующем расширенный интерфейс.
Множественное наследование оказывается полезным в тех случаях, когда требуется наделить класс новыми возможностями и при этом сохранить большую часть (или все) старых свойств. Однако при наличии нескольких суперклассов возникают проблемы, связанные с двойственным наследованием.
Например:
public interface IGod
{
void CreateHuman();
void CreateHuman(String sex);
void CreatePair(Human man);
}
Все классы, которые наследуют интерфейс IGod, обязаны реализовать все три метода, описанных в интерфейсе.
Контрольные вопросы
Что такое ООП?
Что такое наследование?
Что такое инкапсуляция?
Что такое полиморфизм?
Что такое пакет в Java?
Что такое Интерфейс в Java?
Что такое статические члены класса? Чем они отличаются от не статических?
Что такое абстрактный класс?
Что такое суперкласс?
Для чего используется ссылка this?
Для чего используется ссылка super?
Что такое модификаторы доступа?
Чем отличаются атрибуты (модификаторы) доступа: public, private, protected?
Для каких конструкций языка в Java разрешено множественное наследование?
Дополнительные вопросы
Что такое «сборщик мусора» в Java?
Для чего используется метод finalize?
Когда вызывается и как работает метод finalize?
Варианты стандартных (префикс - «с») заданий
Вариант № c_1.
Разработать иерархию людей, начиная от общего понятия «Человек» (абстрактный класс):
Студент
Родитель
Ботаник
Крутой родитель (выдает карманные деньги)
Переопределить для каждого класса метод toString, возвращающий соответствующее описание человека (имя, возраст, пол, карманные деньги, среднюю оценку за сессию)
Для каждого из классов сделать правильную реализацию метода CreatePair, создающего пару для данного человека по следующим правилам:
По студенту — родителя (имя родителя берется из отчества студента)
По родителю — студента (отчество студента берется из имени родителя)
По ботанику — крутого родителя (количество карманных денег = 10 ^ (средняя оценка за сессию)
По крутому родителю — ботаника (средняя оценка за сессию равна десятичному логарифму от карманных денег).
Разработать программу для демонстрации классов.
Вариант № c_2.
Разработать модель леса, в котором присутствуют следующие классы: лес, растения, животные. Растения подразделяются на деревья и траву различных видов. Животные подразделяются на хищников и травоядных различного размера.
Реализовать у животного метод поиска в лесу пропитания с последующим поеданием (уничтожением).
Разработать программу для демонстрации классов.
Необходимо учесть, что травоядные питаются только определенным видом растений, а хищники могут съесть только животных меньше себя.
Вариант № с_3.
Разработать иерархию из следующих классов, необходимых для реализации модели загрузки железнодорожного состава со склада:
Классы вагонов 4-х разных типов: платформа для контейнеров, цистерны для жидкостей, для сыпучих грузов и автомобильная платформа;
Классы продукции 4 разных типов: контейнеры, жидкости, сыпучие грузы и автомобили;
Класс – железнодорожный состав, состоящий из вагонов разного типа;
Класс – склад продукции
Создать метод загрузки ж/д состава товарами со склада.
Разработать программу, демонстрирующую описанную модель: загрузить со склада в состав следующую продукцию: нефть, дизельное топливо, мазут, зерно, уголь, песок, контейнеры и автомобили.
Вариант № с_4.
Разработать иерархию классов – коктейлей. Коктейль определяется ингредиентами, их количеством, а так же последовательностью действий по приготовлению (налить, размешать, взболтать, добавить). Действие необходимо реализовать в виде класса-перечисления.
У класса коктейля предусмотреть метод, вычисляющий крепость коктейля.
Разработать программу, демонстрирующую модель 1—2 коктейлей.
Вариант № с_5.
Разработать иерархию классов – транспортных средств: мотоцикл, автомобиль, грузовик, автобус, прицеп. У объектов – ТС имеются следующие свойства: марка, модель, максимальная допустимая масса перевозимого груза, кол-во пассажиров, максимальная скорость.
Задать методы, с помощью которых можно получить значения свойств.
Разработать программу для демонстрации классов.
Необходимо учесть, что у ТС с прицепом общая допустимая снаряженная масса состоит из суммы значений буксирующего ТС и прицепа. Так же необходимо учесть, что по ПДД максимальная разрешенная скорость ТС с прицепом по на 20км/ч чем без него.
Вариант № с_6.
Разработать иерархию из следующих классов, необходимых для реализации модели зоопарка:
Вольеры 4 типов: аквариумы, вольеры покрытые сеткой, открытые вольеры, вольеры с инфракрасным освещением.
Животные 4 типов: водоплавающие, пернатые, копытные, хладнокровные.
Для каждого из классов реализовать переопределенный метод Move() абстрактного класса «Животное» (обладающего общими параметрами: вес, возраст), который будет расселять животных в соответствующие вольеры.
Разработать программу для демонстрации описанных классов.
Вариант № с_7.
Разработать модель пропускного автомобильного пункта из следующих классов:
Машина: марка машины, максимальная скорость, радио, метод Move.
Радио: текущая станция, статус работы (вкл/выкл), метод PlayTunes.
Грузовик: вес, высота кузова.
Пункт ДПС, пропускающий определенные машины.
Определить метод Pass, при вызове которого будет производиться анализ, пройдет ли контроль данный класс машины (Пункт ДПС пропускает легковые и грузовые машины, едущие с определенным лимитом скорости; грузовые машины должны соответствовать максимальным параметрам веса и высоты кузова).
Разработать программу для демонстрации описанных классов.
Вариант № с_8.
Разработать модель прачечной, состоящей из следующих классов:
Белье: температура стирки, температура глажения.
Цветное белье: цвет белья (перечисление: светлое, темное, цветное).
Стиральная машина: тип порошка и кондиционера, цвет стираемого белья, температура стирки.
Определить метод Load, который будет заполнять стиральную машину одним типом белья (с одинаковыми параметрами стирки).
Переопределить метод toString у белья.
Разработать программу для демонстрации описанных классов.