Создать класс Табуретка со свойствами - 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
для вывода информации о табуретке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д