文档章节

delphi 模式编程 第二章总结

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

本章重点摘要:


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

一、对象模型机制

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

     对象模型的一些概念:
  • 对象 问题域中有明确意义的事物
  • 类 描述了有共同属性、行为、特征的对象
  • 属性 数据值
  • 行为 功能
  • 联系 对象间的物理或概念上的联系
  • 关联 类之间的联系
  • 聚合 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
广州
程序员
分享51本关于JavaScript方面的学习书籍(免费下载)

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

邓剑彬
2012/12/02
1K
12
如何学习Javascript?你是入门,还是精通?

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

coffeescript
2014/07/23
242
0
OSC 第 88 期高手问答 —— 移动 Web 开发

OSCHINA 本期高手问答( 8月24日- 8月31日)我们请来了《JavaScript设计模式与开发实践》 的作者曾探以及他所在的团队@AlloyTeam 为大家解答关于移动 Web 开发方面的问题。 曾探,2007 年毕业于...

叶秀兰
2015/08/24
6.9K
50
现货!《PHP7实践指南:o2o网站与App后台开发》京东天猫有售

终于发售了,啥也不想说了,喜欢的或需要的就点击 链接 进去购买吧。 另外此书将作为 2017 PHP全球开发者大会 现场活动用书 天猫购书 包邮 PHP7实践指南:O2O网站与App后台开发 数据库设计 PH...

szxy1234
2017/11/02
0
0
Linux C编程如何使用联机帮助来解决编程问题?

1.背景 多次学习C语言一直无法踏入C语言的大门,每次都是在学习C语言中的那些系统调用库函数等望而却只,linux下的系统调用需要我们去记忆一些没有规律的结构体和一些大写的宏定义并且还有一...

Jeff_Linux
2014/07/06
0
0
【BS学习】ASP.NET北大青鸟视频总结

【背景】 前一段时间学习完了ASP.NET的北大青鸟视频,进行总结一下。 【内容】 第一章 Asp.net和Web窗体 第二章 ASP.NET中的对象 第三章 Web服务器控件 第四章 HTML控件和验证控件 第五章 Ap...

yym15732626210
02/11
0
0
《Django企业开发实战》大纲-草稿

《Django企业开发实战》大纲-草稿 the5fire的技术博客2017-07-2016 阅读 在国内写技术书籍可能是件吃力不讨好的事情,弄不好还会被骂,所以大部分有能力写书的人,不想在这个上面花那么多时间...

the5fire的技术博客
2017/07/20
0
0
Delphi 组件开发教程指南(4)组件生成过程(针对TWinControl继承而来的组件)

还记得在第二章的时候,我用到了procedure CreateParams(var Params: TCreateParams);这个函数的吧!为什么我会使用这个函数来实现那个对齐的问题呢!现在就来追根底的来看看!这个过程其实是...

技术小美
2017/11/12
0
0
Oracle数据库学习的福利来啦——最佳入门经验分享

适用人群:从事数据库技术实施或售后工程师,准备参加OCA,OCP认证考试 通过学习对Oracle数据库的相关基础知识进行梳理,最终共同提炼出必须最先掌握的那部分知识,无论你是数据库开发、管理、...

让往事随风
2016/04/13
34
0
《ARM处理器体系架构与软件编程》12.15-16上海

课程介绍 为期两天的线下课程。 本课程主要讲解ARM处理器的体系架构、指令集、模式、协处理器,ARM的各种模式切换、中断、Trustzone与虚拟化扩展,ARM下的VFP、NEON协处理器与MMU、总线等技术...

jus3ve
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

回想过往,分析当下,着眼未来

好久没有真正的在纸质笔记本上写过东西了,感觉都快不会写字了,笔画都不知道怎么写了。接下来就说说咱们的正事。 2018年7月22日,我做了一个决定,那就是去参加安全培训(可能是我职业生涯中...

yeahlife
30分钟前
1
0
关于工作中的人际交往

关于工作中的人际交往 Intro 写了篇发泄情绪的博客,但不会发布出来。 大概就是,要么忍,要么滚。 以及一些不那么符合社会主义核心价值观,不满于大资本家与小资本家剥削的废话。

uniqptr
35分钟前
0
0
springMVC的流程

1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(...

JavaSon712
51分钟前
0
0
大数据教程(3.2):Linux系统软件安装之自动化脚本

博主前面文章有介绍过软件的安装,可以帮助IT人员顺利的完成功能软件安装;但是,对于我们运维人员或者需要管理软件安装的项目经理来说,有些应用一次行需要搭建很多台相同的软件环境(如tom...

em_aaron
今天
0
1
Spring Boot 2.0.3 JDBC整合Oracle 12

整合步骤 1. Oracle驱动引入 Oracle驱动一般不能通过maven仓库直接下载得到,需自行下载并导入到项目的lib目录下,建议通过如下pom依赖引入下载的Oracle驱动 <!-- Oracle 驱动 -->...

OSC_fly
今天
0
0
java 8 并行流 - 1

下面创建一个并行流,与顺序流 //顺序流Stream.iterate(0L, i -> i + 1) .limit(Integer.MAX_VALUE) .reduce(0L, Long::sum);//并行流Stream.iterate(0L, i -> i......

Canaan_
今天
0
0
数据结构与算法5

二分法采用向下取整的方法 使用有序数组的好处是查找的速度比无序数组快的多,不好的方面是因为要将所有靠后的数据移开,所以速度较慢,有序数组和无序数组的删除操作都很慢。 有序数组在查找...

沉迷于编程的小菜菜
昨天
1
1
SpringBoot | 第十一章:Redis的集成和简单使用

前言 上几节讲了利用Mybatis-Plus这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb和redis进行这方面的需求。...

oKong
昨天
5
0
对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
昨天
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部