Создать класс Табуретка со свойствами - Lisp
Формулировка задачи:
Создать класс Табуретка со свойствами: Высота (h, в см), Качествоизделия (низкое, среднее, высокое). Определить два виртуальных метода: «количество древесины», которое требует табуретка, по формуле4•h+12, если качество низкое, и 5•h+14, если качество среднее иливысокое, а также «стоимость», равная d•2, для низкого качест-ва, d•3, длясреднего качества, d•4, для высокого качества, где d — количество древесины, которое требует данный объект. Определить также метод «Информация», который возвращает строку, содержащую информацию обобъекте: Высоту, качество материала, количество древесины и стоимость.
Создать также класс наследник Стул с дополнительным свойством:высота спинки (hb, в см), и переопределить метод «количество древесины», по формуле d+2•hb+5, где d — количество древесины, которые требует табуретка с такими же параметра-ми (Метод «стоимость» непереопределять).
В главной программе (либо по нажатию на кнопку) создать экземплярыклассов Та-буретка и Стул, и напечатать информацию в таком виде:«табуретка» + информация о табуретке и «стул» + информация о стуле.
(Для реализации использовать классы и наследование.)
Решение задачи: «Создать класс Табуретка со свойствами»
textual
Листинг программы
- ; SLIME 2015-04-19
- INSOMNIA> (defclass tabouret ()
- ((h :initarg :h
- :accessor h
- :initform (error "Высота обязательна - h")
- :type fixnum
- :documentation "Это высота")
- (quality :initarg :quality
- :accessor quality
- :initform (error "Качество обязательно - quality")
- :type string
- :documentation "Это качество")))
- #<STANDARD-CLASS TABOURET>
- INSOMNIA> (defmethod amount-of-wood ((tabouret tabouret))
- (cond ((equal (quality tabouret) "low")
- (+ 12 (* 4 (h tabouret))))
- ((+ 14 (* 5 (h tabouret))))))
- #<STANDARD-METHOD AMOUNT-OF-WOOD (TABOURET) {100454DC63}>
- INSOMNIA> (defmethod cost ((tabouret tabouret))
- (let ((amount-of-wood (amount-of-wood tabouret)))
- (cond ((equal (quality tabouret) "low")
- (* amount-of-wood 2))
- ((equal (quality tabouret) "medium")
- (* amount-of-wood 3))
- ((equal (quality tabouret) "high")
- (* amount-of-wood 4)))))
- #<STANDARD-METHOD COST (TABOURET) {1004609893}>
- INSOMNIA> (defmethod info ((tabouret tabouret))
- (format
- t
- "Высота: ~A~%Качество материала: ~A~%Количество древесины: ~A~%Стоимость: ~A~%"
- (h tabouret)
- (quality tabouret)
- (amount-of-wood tabouret)
- (cost tabouret)))
- #<STANDARD-METHOD INFO (TABOURET) {10046C04A3}>
- INSOMNIA> (defparameter tabouret
- (make-instance 'tabouret :h 70 :quality "medium"))
- TABOURET
- INSOMNIA> (amount-of-wood tabouret)
- 364
- INSOMNIA> (cost tabouret)
- 1092
- INSOMNIA> (info tabouret)
- Высота: 70
- Качество материала: medium
- Количество древесины: 364
- Стоимость: 1092
- NIL
- INSOMNIA>
Объяснение кода листинга программы
- Создание класса
Табуретка
с двумя свойствами:Высота
иКачество
. - Дефиниция метода
amount-of-wood
, который возвращает количество древесины, использованной для создания табуретки, в зависимости от ее качества. - Дефиниция метода
cost
, который возвращает стоимость табуретки, в зависимости от ее качества и количества использованной древесины. - Дефиниция метода
info
, который выводит информацию о табуретке, включая ее высоту, качество, количество использованной древесины и стоимость. - Создание экземпляра класса
Табуретка
с заданными значениями высоты и качества. - Вызов метода
amount-of-wood
для определения количества древесины, использованной для создания табуретки. - Вызов метода
cost
для определения стоимости табуретки. - Вызов метода
info
для вывода информации о табуретке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д