我所理解的面向对象
来源:互联网 发布:远景能源 张雷 知乎 编辑:程序博客网 时间:2024/05/29 18:56
刚开始接触面向对象的时候,从网上查了很多资料,也和其他人讨论了很多,究竟什么是面向对象,面向对象与面向过程有什么区别。由于开始没有实实在在的做过工程。一般教科书上都是写到:
面向对象的核心就是封装、继承、多态。然后接着教科书就会举一个例子:定义一个学生类,然后定义这个学生的属性(姓名、性别、生日、学号等等),最后定义几个这个学生的方法,比如说话,学习等,然后在控制台程序中输出一个学生说话...
这样说的很对,我也非常相信这个就是面向对象,但是这样的面向对象和我们工程中用到的似乎不一样。我们在三层架构中的DAL层一般只有几个方法,属性到哪里了?其他地方也是一样,每个类几乎都不是我们想象的面向对象。
我思考了一下明白,其实这个就是工程和实验的区别,学生是在做实验,根本没有考虑效率、维护等,而工程师必须要考虑的。那么,三层架构中是如何诠释面向对象的呢?
面向对象第一步:抽象
在三层设计中,最能体现面向对象的地方就是数据库的设计。在数据库的设计中,我们去提取对象,也就是对业务进行抽象。抽象成一个个的表,每一个表就是一个对象。这个是面向对象的第一步,也是最关键的一步,可以这么说,如果一个系统的数据库设计完成了,那么工作量也就完成了70%了,其他的基本上都是一个固定的东西。
面向对象第二步:封装
一个完整的对象,应该有属性、方法,其中,我们的的三层架构中,如何去封装一个对象呢?在传统的教学中,习惯用我上面说到的例子。但是在工程中,我们通常把一个对象去拆分开来,把这个对象的属性放到实体类中,为的是方便各层吊桶,让一行记录作为一个对象。
把这个对象的操作方法放到另一个类中,这样减少了耦合性,让类的职责更加明确。另外把与客户打交道的逻辑和显示,放到了BLL和UI里面,构成了三层架构,其实真正的对象应该就是DAL和Entity。
这样就和我们传统的面向对象相符合了
至于,继承和多态,只是一种对对象的提炼,让他们更加符合自然规律,让代码更加有效率,可靠。
面向对象设计分成五个层次:选择面向对象模型技术(OMT),面向对象分析(OOA), 面向对象设计(OOD),面向对象测试(对此理解不是很深入)
- 一:面向对象模型技术(OMT):对象模型,动态模型,功能模型。
对象模型中整体与部分是聚合,文件名与文件是限定,雇主与雇员是关联。
动态模型一是状态图,一是事件追踪图。
状态图是描述一个对象的个体行为,事件追踪图是多个对象所表现出来集体行为。
功能模型有多个数据流图组成 ,允许加入控制流
- 二:面向对象分析OOA的五个层次:
类与对象层:类与对象,解决中所有的类与对象
属性:对象属性和实例链接共同组成了OOA模型的属性层服务层:对象的服务,对象实例之间的信息通信,共同组成OOA模型的服务层,消息链接有箭头表示结构层:描述整体结构,泛化—特化结构表示类的继承性主题层:对象归类到各个主题中,把有关的一个主题边框框起来; 主题可以看成是高层的模块或子系统,表示的是面向对象模型的整体框架
消息链接:是从一个对象发送消息到另一个对象,属性层没有箭头指示,而服务层具 有箭头的标识。
- 三:面向对象设计(OOD)
- 四:测试分为三种:单元测试,组装测试,确认测试
单元测试的单位是类,而且组装测试所使用的方法不是自顶向下,也不是自底向上,而是依照类的特性的方式分为了:依据线索测试;依据应用测试,确认测试的目的是为了测试需求,看是否达到了用户的要求。
阅读全文
0 0
- 我所理解的面向对象思想
- 我所理解的面向对象
- 我所理解的js面向对象
- 我所理解的面向过程与面向对象
- 面向对象0--我所理解的对象
- 我所理解的面向对象概念技术
- 简谈我所理解的面向对象
- 我理解的面向对象
- 黑马程序员:我理解的面向对象
- 我理解的面向对象-1
- 我对JAVA面向对象的理解
- 我所理解的AOP,面向切面编程
- 我所偏爱的 C 语言面向对象编程范式
- 我所偏爱的 C 语言面向对象编程范式
- 我所偏爱的 C 语言面向对象编程范式
- 我理解的什么是对象,什么是面向对象。
- 我所理解的Cocos2d-x 实时更新游戏对象
- 我个人理解的C++面向对象的类
- 贪心,暴力,网络流,匹配(MZL's City,HDU 5352)
- jetty9 websocket发送消息死锁,引发内存溢出
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- Java读取txt文件和写入txt文件
- 什么是SCM?
- 我所理解的面向对象
- [SourceInsight]打开当前文件目录
- 漫谈操作系统7 -- 一切皆为文件
- Android_实现水滴效果
- PLC寻址应注意的问题
- angular2概述
- Visual Studio2017中编写ASP.NET程序时使用C# 7.0元组Tuple新特性的一点注意事项
- 自定义注解的步骤
- springmvc-学习总结-拦截器