Д.з.№7 Открытое и закрытое наследование

Часть 1

Используя композицию для "наследования" реализации от класса Vector из д.з.№5, реализовать классы Stack и Queue.

1. Интерфейс класса Stack:

  • конструктор по умолчанию;
  • void push(double val);
  • double pop();
  • int getSize();
  • удалить все элементы: void clear();

2. Интерфейс класса Queue:

  • конструктор по умолчанию;
  • void enqueue(double val);
  • double dequeue();
  • int getSize();
  • удалить все элементы: void clear();

Технические подробности

  1. Все классы поместить в один файл. Один из них можно (но не обязательно) сделать public.
  2. Будет много методов, состоящих из одной строки.

Часть 2

Используя прямое наследование от класса Vector из из д.з.№5, реализовать классы Stack и Queue и объяснить почему так делать нельзя.

Технические подробности
  1. Состав public-методов классов такой же, как в "части 1".
  2. Все классы поместить в один файл. Один из них можно (но не обязательно) сделать public.

Примеры

Вход
Выход
Stack s = new Stack();

s.push(9); System.out.println("Pushed 9");
s.push(8); System.out.println("Pushed 8");
s.push(7); System.out.println("Pushed 7");
System.out.println("Size = " + s.getSize());
System.out.println();

System.out.println( "Popped " + s.pop() );
System.out.println( "Popped " + s.pop() );
System.out.println( "Size = " + s.getSize() );
Pushed 9
Pushed 8
Pushed 7
Size = 3

Popped 7.0
Popped 8.0
Size = 1

Контрольные вопросы

  • Что такое композиция? Привести пример "из жизни".
  • Что такое композиция? Объяснить на простом примере кода.
  • Где в данной программе Вы использовали делегирование? Зачем?
  • Что составляет интерфейс класса и почему при разработке класса Stack не следует наследовать интерфейс класса Vector?
  • Из каких частей программы видны, а из каких - не видны поля и методы класса с модификатором доступа private? protected? public? без модификатора доступа?
  • В каких случаях поля или методы класса помещают в protected-область? К каким последствиям это приводит?
  • Создается объект производного класса. В этом классе есть два конструктора - собственный и унаследованный от класса-родителя. Какой из них (а если оба - то в каком порядке?) будет вызван? Почему именно так? (проиллюстрировать примером кода)
  • Что такое переопределение методов (в производном классе)? Продемонстрировать его полезность на примере кода.
  • Как из метода производного класса вызвать метод базового класса с тем же именем? (привести пример кода)

Скачать Stack_Queue_Tests.java

Comments