Содержание
- Классы
- Инвариант класса
- Задачи инкапсуляции
- Интерфейсы
- Интерфейс как синтаксический контракт
- Интерфейс как семантический контракт
- Абстрактные базовые классы и наследование
- Устранение дублирования
- Вынос изменяемой логики в наследников
Домашнее задание 3. Очередь на массиве
-
Определите модель и найдите инвариант структуры данных
«очередь».
- Определите функции, которые необходимы для реализации очереди.
-
Найдите их пред- и постусловия, если очередь не может содержать
null
.
-
Реализуйте классы, представляющие циклическую очередь
на основе массива.
-
Класс
ArrayQueueModule
должен реализовывать один экземпляр очереди с использованием переменных класса. -
Класс
ArrayQueueADT
должен реализовывать очередь в виде абстрактного типа данных (с явной передачей ссылки на экземпляр очереди). -
Класс
ArrayQueue
должен реализовывать очередь в виде класса (с неявной передачей ссылки на экземпляр очереди). -
Должны быть реализованы следующие функции (процедуры) / методы:
enqueue
– добавить элемент в очередь;element
– первый элемент в очереди;dequeue
– удалить и вернуть первый элемент в очереди;size
– текущий размер очереди;isEmpty
– является ли очередь пустой;clear
– удалить все элементы из очереди.
- Модель, инвариант, пред- и постусловия записываются в исходном коде в виде комментариев.
- Обратите внимание на инкапсуляцию данных и кода во всех трех реализациях.
-
Класс
- Напишите простые тесты к реализованным классам.
Домашнее задание 4. Очереди
-
Определите интерфейс очереди
Queue
и опишите его контракт. -
Реализуйте класс
LinkedQueue
— очередь на связном списке. -
Выделите общие части классов
LinkedQueue
иArrayQueue
в базовый классAbstractQueue
.
Это домашнее задание связано с предыдущим.
Примеры
zipЭкзаменационные вопросы
- Пре- и постусловия, инварианты
- Интерфейсы
- Абстрактные базовые классы
- Принцип подстановки Лисков
Практические навыки
- Реализация программ на Java с применением интерфейсов и абстрактных базовых классов