Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 279

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 273 274 275 276 277 278 < 279 > 280 281 282 283 284 285 .. 316 >> Следующая

Типы в LISP есть, но они определяются динамически. В частности, если атому придано как значение действительное число, его тип будет float.
В CLOS могут задаваться методы, отличающиеся от функций тем, что их аргументы специфицированы, например,
802
14.
(defmethod inspectpet ((x pet) (y float))
(setf weightofanimal 3.5)) Как видно из примера, методы не обязательно связаны с классами. ни могут быть связан с лбми типами. етоды в языке LISP могут иметь дополнительные спецификации. О том, как эти спецификации взаимодейству т с упорядочением типов классов, мо но судить, рассмотрев следуу программу и генерируемый при ее исполнении результат.
Программа 14.3.1
(defclass thing ()
((weight :initform '(0 kg)
!accessor weightof
:initarg :weight))) (defclass animal (thing)
((specie :accessor specieof
:initarg :spec) (sex :accessor sexof
:initform 'm
:initarg :sex))) (defclass possession (thing) ((owner :accessor ownerof
:initform 'nnn) (cost :accessor costof
:initform '(0 bucks)
:initarg :cost))
)
(defclass person (animal)
((specie :initform 'human) (name :initarg :thename
:accessor nameof))) (defclass pet (animal possession) ((nick :initarg :thenick
:accessor nickof) (specie :initform 'cat)))
(defmethod act :before ((p pet)) (print "Cat mews"))
14.3.0БЪЕКТЫИЫБР
803
(defmethod act :after ((p pet))
(print "Cat turns")) (defmethod act :around ((p pet))
(progn (print "You have a cat") (call-next-method)))
(defmethod act ((p animal))
(progn (print "Animal is close to you") (call-next-method))) (defmethod act :before ((p animal))
(print "You see an animal")) (defmethod act :after ((p animal))
(print "You send the animal off")) (defmethod act :around ((p animal))
(progn (print "You don t like wild animals") (call-next-method)))
(defmethod act ((p possession))
(progn (print "You test your property") (call-next-method))) (defmethod act :before ((p possession))
(print "You see your property")) (defmethod act :after ((p possession))
(print "You are pleased by your property")) (defmethod act :around ((p possession))
(progn (print "You admire your property if it is in good state") (call-next-method)))
(defmethod act ((p thing))
(print "You take the thing")) (defmethod act :before ((p thing))
(print "You see something")) (defmethod act :after ((p thing))
(print "You identified this thing")) (defmethod act :around ((p thing))
(progn (print "You are not interested in strange things") (call-next-method)))
(act (make-instance 'pet :thenick "Viola" :cost '(25 kop)))
При загрузке этого файла происходит следующее: [1]> (load myclasses)
;; Loading file E:\clisp-2000-03-06\myclasses.lsp ...
804
ГЛАВА 14. ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
"You have a cat"
"You don't like wild animals"
"You admire your property if it is in good state"
"You are not interested in strange things"
"Cat mews"
"You see an animal"
"You see your property"
"You see something"
"Cat purrs"
"Animal is close to you"
"You test your property"
"You take the thing"
"You identified this thing"
"You are pleased by your property"
"You send the animal off"
"Cat turns"
;; Loading of file E:\clisp-2000-03-06\myclasses.lsp is finished. T
Как видите, упорядоченность классов по отношению наследования позволяет встраивать целые последовательности действий при взове одного метода.
Поскольку в CLOS нет ни механизмов скрытия конкретных представлений, ни механизмов замены прямого доступа к даннм на функции, ни других характерных особенностей , мы видим ее один пример того, как модным словом прикрывается совершенно другая (и на самом деле не менее интересная) сущность: начатки планирования действий по структуре типов данных.
Такое неадекватное теоретизирование, как мы уже не раз убеждались, заставляет впячивать слабейие места концепции и меает увидеть и развить ее реальне достониства.
Вопросы для самопроверки
1. Из примера 14.2.1 можно извлечь информацию о целых числах в языке LISP. Сделайте это.
2. з программ 14.2.1 установите, что является в LISP признаком комментария.
Глава 15 Моделирование
С самого своего отделения от прачеловека человек строил вычислительные модели. Лунно-солнечно-венерианские календари, видимо, знали уже в Гиперборее (или Арктиде: легендарной прародине цивилизации, далеко на Севере, там, где полгода день и полгода ночь); во всяком случае, они найдены на костях мамонтов в Сибири. Так что математическое моделирование и его вычислительная реализация —один из главных методов познания. Как следствие, он не мо ет быть и, разумеется, не был обделен вниманием тех, кто занимается проблематикой информатики и программирования.
дной из первичнх целей использования вчислительнх маин было и остается моделирование некоторх аспектов реального мира. бласть данных модели обычно называют предметной областью .при таком моделировании вычислительне маины использу тся как инструмент проецирования модели на оборудование: модель (как правило, математическая) здесь остается вне комплекса вычислительных средств, а задача программистов сводится к построени ее интерпретации на данном оборудовании. ругой вид моделирования — когда модель предметной области вкл чается в вычи-слительну систему. Это мо но делать по-разному, и компь терне модели можно подразделить на несколько классов, в зависимости от того, что требуется от моделирования.
Предыдущая << 1 .. 273 274 275 276 277 278 < 279 > 280 281 282 283 284 285 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100