17 June, 2014

Итоги 4 и 5 занятий

На четвертом и пятом занятиях рассмотрены основные принципы ООП.
Детально прошлись по инкапсуляции
Кратко рассмотрели пакеты и путь поиска классов (classpath).

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

В качестве примера рассмотрели задачу о Ханойской башне

Для решения задачи логика программы разделена на два модуля - игрок и игра.
Вначале игрок создает новый экземпляр игры с указанием количества дисков в башне.
Игра предоставляет игроку возможность переместить диск с одного стержня на другой - метод move(), в аргументы которого передается имя диска-источника, и имя диска назначения.
Игрок, выполняя последовательные вызовы метода move(), перемещает башню с водного стержня на другой.

На занятии рассмотрели реализацию игры - класс Tower

Домашнее задание

Расширить логику класса Tower. Реализовать проверку правил игры - больший диск нельзя класть на меньший, с пустого стержня нельзя пытаться снять диск.
При попытке пользователя выполнить неправильное действие, нужно вывести на экран сообщение об ошибке.

Так как для реализации этой логики потребуется производить множество одинаковых проверок для каждого стержня, то следует всю логику, относящуюся к стержню, вынести в отдельный класс - Rod.
Стержень предоставляет для игры возможность поместить на стержень диск, и снять диск со стержня. Соответственно - метод putDisc, в аргумент метода передается размер диска, и takeOffDisc - не принимает аргументов, возвращает размер снятого диска.
При инициализации, игра создает три экземпляра класса Rod, и один из них наполняет дисками.
При вызове игроком метода move, игра должна снять диск с одного стержня и поместить его на другой.

Диаграмма классов:

Как вариант - реализовать в методах putDisc и takeOffDisc возврат кода ошибки, в случае неудачного помещения или снятия диска.

Реализовать логику игрока - запросить у пользователя высоту башни, и вывести трассировку решения задачи для указанной высоты.

No comments:

Post a Comment