我所理解的面向对象

来源:互联网 发布:远景能源 张雷 知乎 编辑:程序博客网 时间:2024/05/29 18:56

    刚开始接触面向对象的时候,从网上查了很多资料,也和其他人讨论了很多,究竟什么是面向对象,面向对象与面向过程有什么区别。由于开始没有实实在在的做过工程。一般教科书上都是写到:

    面向对象的核心就是封装、继承、多态。然后接着教科书就会举一个例子:定义一个学生类,然后定义这个学生的属性(姓名、性别、生日、学号等等),最后定义几个这个学生的方法,比如说话,学习等,然后在控制台程序中输出一个学生说话...
    这样说的很对,我也非常相信这个就是面向对象,但是这样的面向对象和我们工程中用到的似乎不一样。我们在三层架构中的DAL层一般只有几个方法,属性到哪里了?其他地方也是一样,每个类几乎都不是我们想象的面向对象。
    我思考了一下明白,其实这个就是工程和实验的区别,学生是在做实验,根本没有考虑效率、维护等,而工程师必须要考虑的。那么,三层架构中是如何诠释面向对象的呢?

面向对象第一步:抽象

    在三层设计中,最能体现面向对象的地方就是数据库的设计。在数据库的设计中,我们去提取对象,也就是对业务进行抽象。抽象成一个个的表,每一个表就是一个对象。这个是面向对象的第一步,也是最关键的一步,可以这么说,如果一个系统的数据库设计完成了,那么工作量也就完成了70%了,其他的基本上都是一个固定的东西。

面向对象第二步:封装

    一个完整的对象,应该有属性、方法,其中,我们的的三层架构中,如何去封装一个对象呢?在传统的教学中,习惯用我上面说到的例子。但是在工程中,我们通常把一个对象去拆分开来,把这个对象的属性放到实体类中,为的是方便各层吊桶,让一行记录作为一个对象。
    把这个对象的操作方法放到另一个类中,这样减少了耦合性,让类的职责更加明确。另外把与客户打交道的逻辑和显示,放到了BLL和UI里面,构成了三层架构,其实真正的对象应该就是DAL和Entity。
    这样就和我们传统的面向对象相符合了
    至于,继承和多态,只是一种对对象的提炼,让他们更加符合自然规律,让代码更加有效率,可靠。

    面向对象设计分成五个层次:选择面向对象模型技术(OMT),面向对象分析(OOA), 面向对象设计(OOD),面向对象测试(对此理解不是很深入) 

  • 一:面向对象模型技术(OMT):对象模型,动态模型,功能模型。
      对象模型中整体与部分是聚合,文件名与文件是限定,雇主与雇员是关联。
      动态模型一是状态图,一是事件追踪图。
      状态图是描述一个对象的个体行为,事件追踪图是多个对象所表现出来集体行为。
      功能模型有多个数据流图组成 ,允许加入控制流 
  • 二:面向对象分析OOA的五个层次:
     类与对象层:类与对象,解决中所有的类与对象
属性:对象属性和实例链接共同组成了OOA模型的属性层
服务层:对象的服务,对象实例之间的信息通信,共同组成OOA模型的服务层,消息链接有箭头表示
结构层:描述整体结构,泛化—特化结构表示类的继承性
主题层:对象归类到各个主题中,把有关的一个主题边框框起来; 主题可以看成是高层的模块或子系统,表示的是面向对象模型的整体框架
     消息链接:是从一个对象发送消息到另一个对象,属性层没有箭头指示,而服务层具  有箭头的标识。
  • 三:面向对象设计(OOD)
     设计分为两个阶段:高层设计(成组的类打包,高度内聚),类设计
  • 四:测试分为三种:单元测试,组装测试,确认测试
    单元测试的单位是类,而且组装测试所使用的方法不是自顶向下,也不是自底向上,而是依照类的特性的方式分为了:依据线索测试;依据应用测试,确认测试的目的是为了测试需求,看是否达到了用户的要求。

原创粉丝点击