- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十一章:Common Lisp 对象系统
第⼗⼀章:Common Lisp 对象系统
Common Lisp 对象系统,或称 CLOS ,是⼀组⽤来实现⾯向对象编程的操作集。由于
它们有着同样的 史,通常将这些操作视为⼀个群组。 λ 技术上来说,它们与其他部
分的 Common Lisp 没什么⼤不同: defmethod 和 defun ⼀样,都是整合在语⾔中
的⼀个部分。
11.1 ⾯向对象编程 Object-Oriented Programming
11.2 类与实例 (Class and Instances)
11.3 槽的属性 (Slot Properties)
11. 基类 (Superclasses)
11.5 优先级 (Precedence)
11.6 通⽤函数 (Generic Functions)
11.7 辅助⽅法 (Auxiliary Methods)
11.8 ⽅法组合机制 (Method Combination)
11.9 封装 (Encapsulation)
11.10 两种模型 (Two Models)
Chapter 11 总结 (Summary)
Chapter 11 练习 (Exercises)
11.1 ⾯向对象编程 Object-Oriented Programming
⾯向对象编程意味著程序组织⽅式的改变。这个改变跟已经发⽣过的处理器运算处理
能⼒分配的变化雷同。在 1970 年代,⼀个多⽤户的计算机系统代表著,⼀个或两个
⼤型机连接到⼤量的哑终端(dumb terminal) 。现在更可能的是⼤量相互通过⽹络连接
的⼯作站 (workstation) 。系统的运算处理能⼒现在分布⾄个体⽤户上,⽽不是集中在
⼀台⼤型的计算机上。
⾯向对象编程所带来的变⾰与上例⾮常类似,前者打破了传统程序的组织⽅式。不再
让单⼀的程序去操作那些数据,⽽是告诉数据⾃⼰该做什么,程序隐含在这些新的数
据“对象”的交互过程之中。
举例来说,假设我们要算出⼀个⼆维图形的⾯积。⼀个办法是写⼀个单独的函数,让
它检查其参数的类型,然后视类型做处理,如图 11.1 所⽰。
(defstruct rectangle
height width)
(defstruct circle
radius)
(defun area (x)
(cond ((rectangle-p x)
(* (rectangle-height x) (rectangle-width x)))
((circle-p x)
(* pi (expt (circle-radius x) 2)))))
(let ((r (make-rectangle)))
(setf (rectangle-height r) 2
(rectangle-width r) 3)
(area r))
6
图 11.1: 使⽤结构及函数来计算⾯积
使⽤ CLOS 我们可以写出⼀个等效的程序,如图 11.2 所⽰。在⾯向对象模型⾥,我们
的程序被拆成数个独⼀⽆⼆的⽅法,每个⽅法为某些特定类型的参数⽽⽣。图 11.2 中
的两个⽅法,隐性地定义了⼀个与图 11.1 相似作⽤的 area 函数,当我们调
⽤ area 时,Lisp 检查参数的类型,并调⽤相对应的⽅法。
(defclass rectangle ()
(height width))
(defclass circle ()
(radius))
(defmethod area ((x rectangle))
(* (slot-value x height) (slot-value x width)))
(defmethod area ((x circle))
(* pi (expt (slot-value x radius) 2)))
(let ((r (make-instance rectangle)))
(setf (slot-value r height) 2
(slot-value r width) 3)
(area r))
6
图 11.2: 使⽤类型与⽅法来计算⾯积
通过这种⽅式,我们将函数拆成独⼀⽆⼆的⽅法,⾯向对象暗指继承 (inheritance)
── 槽 (
您可能关注的文档
最近下载
- 《机械装调技术》电子教案 模块五 整机调试与运行任务一 齿轮啮合齿侧间隙的检测与调整.doc VIP
- 青花瓷 完美演奏版 周杰伦 钢琴谱 数字 简谱.pdf VIP
- 第38届物理竞赛决赛实验考试答题纸 .pdf VIP
- 现代医药物流交易的配送中心建设项目可行性研究报告.doc VIP
- 2025-2026学年初中生物学人教版2024八年级上册-人教版2024教学设计合集.docx
- 养生馆卫生管理制度(3篇).docx
- 健康管理师课件第一章--健康管理概论.ppt VIP
- JBT 4333.4-2013 厢式压滤机和板框压滤机 第4部分:隔膜滤板.pdf VIP
- 电信反诈骗演讲稿模板5篇.docx VIP
- 基于光纤布拉格光栅的温度测量系统设计与应用.docx VIP
文档评论(0)