文档章节

delphi 模式编程 第二章总结

CODER-SU
 CODER-SU
发布于 2013/06/14 20:52
字数 1402
阅读 109
收藏 3

本章重点摘要:


  • 对象模型机制
  • 动态绑定机制
  • 类型转换机制
  • 接口抽象机制

一、对象模型机制

     对象本质:
  • 相关代码和数据的组合,是包含相互之间有联系的过程集和数据的软件包
  • 可以视为变量,其类型为“类”
  • 类是对象的模板或模型,对象是类的实例
  • 对象是服务提供者

     对象模型的一些概念:
  • 对象 问题域中有明确意义的事物
  • 类 描述了有共同属性、行为、特征的对象
  • 属性 数据值
  • 行为 功能
  • 联系 对象间的物理或概念上的联系
  • 关联 类之间的联系
  • 聚合 A "has a" B 
  • 继承 A "is a" B
     对象模型图:

     对象之间的关系:
  • 继承关系--保持对象之间的差异性的同时共享对象的相似性。继承关系分两种:类对对象接口的实现,即接口继承;类对类的继承,即实现继承。
  • 合成关系--新的对象由已有的对象组合而成,即单纯复用既有的功能,而非重复运用其形式。合成关系分两种:聚合关系,即部分和整体(has-a),并可传递;组合关系,即包含关系。
     如何用继承?
  • 派生类是基类的一个特殊种类
  • 不要出想需要将派生类换成另一个类的派生类的情况
  • 派生类具有扩展基类的责任,不要覆盖掉或注销掉基类的责任
  • 最好不要从工具类继承。
     继承和合成的比较:


优点 缺点
继承 新的实现比较容易;修改或扩展继承而来的实现比较容易 破环封装,基类的实现细节暴露给派生类;基类改变影响所有派生类;从基类继承而来实现时静态的,无法运行期间改变,不够灵活
合成 新对象存取组成对象的唯一方法是通过组成接口;组成对象的内部细节不为新对象所见;支持包装;依赖较少;运行期进行,新对象可动态引用与组成对象类型相同的对象。 要管理较多的对象;

二、动态绑定机制

     方法绑定:建立方法调用和方法本体之间关联,分为早绑定,即程序执行前绑定;晚绑定,即执行时根据对象类型进行绑定。

     如何动态绑定的途径:
  • 虚方法(virtual),允许对不同类中的同名方法有不同的实现,并在运行期进行绑定。使用规则:1)用关键字virtual声明;2)使用覆盖(override)替换或扩展虚方法;3)被覆盖的虚方法参数列表不能更改。
  • 动态方法(dymatic),和虚方法基本一致。

     多态需要具备的条件:
  • 基类定义了一个或多个虚方法
  • 一个或多个派生类覆盖那些虚方法
  • 一个实例变量(或参数),其类型是基类,但实际上它引用的是某个派生类的一个实例。
三、类型转换机制

     类型:分为值类型,是一些简单的数据类型,如Char;引用类型,是一些复杂的类型,如类,对象接口。

     向上转型:
  •      向上转型是安全的,因为任何派生类都继承自基类,拥有基类的接口(方法)。
  •      能够面向接口编程。

     向下转型:
  • 是一种强制转换,须指明确切类型。
  • 在对象参数传递中,通过向上转型传递一个派生类对象参数,在得到该对象后,往往需要向下转型,恢复原来的面貌
  • 在对象容器(TObjectList)中取出一个对象时,需要向下转型,否则得到TObject类型。

四、抽象接口机制

     接口:规定”做什么“而不管”怎么做“,即它关心的是方法定义的参数,而不是具体实现。它分为宽接口,即delphi的类(通常是抽象类)和对象接口所声明的方法;窄接口,即对象接口,依附于类,但是不能直接实例化,也不能自己实现方法。


     抽象类:为派生类定义公共接口,把方法的实现延迟到派生类中。不能实例化,用abstract 限定virtual,dynamic,或override。

     抽象类的使用原则:
  • 拥有尽可能多的公共代码。
  • 拥有尽可能少的数据,以区别具体类。

     接口对象的使用;
  • 通常继承一个已有的接口来声明一个新接口。
  • 接口继承自IInterface接口

相同点 不同点
抽象类 不能实例化;提供抽象方法 一个类只能继承一个抽象类;派生类可以部分实现;
对象接口 不能实例化;提供抽象方法 一个类可以继承多个接口;所有方法都是public;实现接口的类需要实现接口所有的方法;



     对接口而不是对实现编程:根据抽象类或对象接口中定义的接口来操纵对象。对象的类(class)定义了对象是怎样实现的,同时也定义了对象的内部状态和操作实现,而对象的类型只与它的接口相关。在delhi中,类既指对象的类型又制定了对象的实现,但对象接口仅指定对象的类型未指定对象的实现。


© 著作权归作者所有

共有 人打赏支持
CODER-SU
粉丝 3
博文 18
码字总数 15312
作品 0
广州
程序员
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
分享51本关于JavaScript方面的学习书籍(免费下载)

分享51本关于JavaScript方面的学习书籍(免费下载) 1、JavaScript面向对象15分钟教程 2、原型、作用域、闭包的完整解释 3、Javascript面向对象特性实现(封装、继承、接口) 4、JavaScript面向...

邓剑彬
2012/12/02
1K
12
JAVA区块链项目实战视频课程

课程介绍 全国首套,基于java的区块链实战教程。目的是让更多的java编程者了解区块链,掌握区块链开发。 1、区块链理论:以node.js例子区块链原理有深刻理解; 2、区块链java实战:深刻理解区...

小红牛
09/14
0
0
如何学习Javascript?你是入门,还是精通?

首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门。   谈不上经验,都是一些教训。   这个时候有人要说,“靠,你丫半桶水,凭啥教我们”。您先别急着骂,先听我说。...

coffeescript
2014/07/23
242
0
【我的新书】《良质!PHP企业级系统开发》- 图灵社区

前言 今年,花了近一年的时间编写了我的第二本书《良质!PHP企业级系统开发》,发表在图灵社区。 感兴趣的,可前往图灵社区阅读:http://www.ituring.com.cn/book/2664 目录 前言 献辞 第一部...

暗夜在火星
09/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
29分钟前
1
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
44分钟前
4
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
3
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
1
0
mixin混入

①新建mixin.js文件 const mixin = { methods: { /** * 分页公共方法 */ handleSizeChange(val) { this.pageData.size = val; this.query(); }, hand......

不负好时光
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部