对象模型包含内容:
抽象,封装,模块化,层次结构和 类型,并发,持久化,前部分为关键特性。
对象模型演进
1、编程规模从小规模想大规模转变。
2、编程语言从低级语言向高级语言演进 ,程序语言越来越接近人类的思维方式。
程序语言发展过程
1、结构化程序
思维方式更接近计算机,问题的分解也是按照计算机处理过程来拆分(算法分解)。程序与数据分开,这是计算机喜欢的方式,因为计算机的执行过程就是将数据与指令分开管理的。子程序使用全局的数据,这样子程序就可能错误的修改和使用全局的数据,给其他部分造成毁灭性的影响。因为数据是全局可见,可写的。后来发展成子程序之间可以相互通信,比如一个子程序的输出是另一个子程序的输入,这样虽然减少了全局数据的引用,但是又有新的问题,模块接口语义不统一,很容易错误使用数据类型。没有对数据进行抽象,有时候数据的复杂度比程序的复杂度高,这样面对复杂的,大型的程序开发。用面向过程的思维很难完成。
面向过程.png
2、面向对象程序
思维方式转换:关注点由算法转变到对象(类)上面,转移到人类更容易理解的事物上面来。 基本单元为类或者对象,不再是子程序,物理视图上是一个图,不像面向算法是一棵树基本上没有全局数据,数据和操作都被放在一个单元中 。
面向对象.png
对象模型要素【重点】
1、初识对象
1、是一个可以触摸的实体,展示了某些定义良好的行为。— 真实世界
2、包括属性,过程,数据的实体,执行计算并保存局部状态。— 计算机世界
3、灵活的刻画物理系统或者抽象系统的组件,用一个程序系统来建模 —真实与抽象
2、主要特点:抽象、封装、模块化,层次
1)抽象
"抽象描述是一个对象的基本特征,可以将这个对象与其他所有类型区别开来,提供了清晰的概念边界,它有观察者的视图有关", 抽象是对一个对象基本特征进行描述,基本特征可以是 一些共性的,本质的,对象的外部外部视图等。这个过程中我们需要忽略 那些差异化的,细枝末叶的,对象内部的东西。这样才能找出基本特征。 还应该遵循 “最少承诺原则”(只提供最基本的行为),“最少惊奇原则”(捕捉对象全部行为,不会有对象之外的行为),我们还可以通过不同视角来进行抽象。这样抽象处理的模型更加准确。对问题域的抽象种类有,1、实体抽象 抽象模型来自于问题域的实体,实体(问题域词汇)对应与抽象模型)2、动作抽象 抽象模型来自于一组相似的操作 3、虚拟机抽象,集中了高层控制要用到的所有操作 4、偶然抽象,封装一组相互没有关系的操作。抽象的结果包含(如图):1、名称 区别其他类型抽象、2、特征:属性 3、责任:行为或者方法,提供的功能,契约
抽象结果.png
2)封装
定义:封装是一个过程,它包括结构和行为,作用是分离抽象概念和实现
1、抽象关注对象可以观察到的行为,封装关注这种行为的实现。 抽象一般先与实现
2、封装通常是通过隐藏信息来实现。java 语言通过访问限制来隐藏 ,比如private ,protected
隐藏细节可以降低复杂性,更容易理解和使用
3、可以隐藏数据结构,也可以隐藏实现方法
4、复杂的程序没没部分都依赖与其他部分的细节。原则:面向接口编程,而不是面向实现编程
5、封装可以让程序进行可靠的进行修改。封装使可能改变的设计决策局部化
6、封装在不同抽象间提供了明确的边界,封装提供了黑盒的效果。分离了关注。
7、要让抽象能够工作必须将实现封装起来,一个接口,一个实现
8、隐藏是为了防止事故不是为了欺骗,隐藏需要正确的实现抽象
3)模块化
定义:模块化是一个系统的属性,这个系统被分解为一组高内聚,底耦合的模块。
抽象,封装,模块化 的原则是相辅相成的,一个对象围绕单一的抽象提供了一个明确的边界,封装和模块化围绕这种抽象提供了屏障
java 的包就是一种模块化思想
怎么把类和对象放在合适的模块中,需要通过迭代的方式进行。
4)层次结构
1、定义:层次结构是抽象的一种分级或排序。
2、是一种,单继承,多继承
3、组成部分,聚合
对象模型使用
1、使用范围
对象模型 不只是面向对象程序设计,是计算机科学中一个统一的概念,适用于 程序设计语言,
用户界面设计,数据库,计算机架构的设计面向对象帮我们处理了不同系统中固有的复杂性。
2、软件开发过程
1、面向对象分析(OOA) - 需求分析
“面向对象分析是一种分析方法,这种方法利用从问题词汇表中找到类和对象来分析需求”,
将需求与模型关联起来,难点是 如何划分类,如何命名类,如何找到类的边界。
2、面向对象设计 (OOD) - 系统设计
“面向对象设计是一种设计方法,包括面向对象分解的过程和表示方法,
这种表示方法用于展示被设计系统的逻辑模型和物理模型,静态模型和动态模型”
设计包含两部分:对象分解(难点),模型表示
难点是如何分解,可以依靠设计原则来校验设计是否合理。表示方法可以灵活选取
至少大家沟通上面没有歧义。如果需要大范围沟通最好使用统一的表示方法如UML。
3、面向对象编程 (OOP) - 编码实现
1、利用对象作为编程的基本逻辑构建块
2、每个对象都是类的一个实例
3、类与类之间的关系可以通过继承在一起
4、面向对象语言应该用来面向对象编程,不然就大大减低了语言的威力,就像给你一把宝剑,却用来砍柴。
应用对象模型好处
1、对象模式鼓励软件复用,还鼓励整个设计复用。
2、对象模型构建在稳定的中间状态之上,这样系统更适合变化,不是一次需要改变就需要重新设计。
3、面向对象的思维方式更适合人类。
小结
1、面向对象技术的形成原因,为了解决大型复杂系统的设计与实现。
2、对象模型的关键特征 -抽象,封装,模块化,层次结构。
3、对象模式的使用 ,不局限与程序设计,还可以用于架构设计。
4、面向对象实现的过程与软件开发的过程一致, 分析(OOA),设计(OOD),实现(OOP) 。
网友评论