OOA/OOD/OOP细讲
面向对象分析(Object-Oriented Analysis,OOA) 面向对象设计(Object-oriented Design,OOD)面向对象编程(Object Oriented Programming,OOP) ————————————————————————————一、OOA的主要原则。1.抽象:从许多食物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫做抽象。愁乡石形成概念的必须手段。 二、面向对象分析产生三种模型1.对象模型:对用例模型进行分析,把系统分解成互相协作的分析类,通过类图对象图描述对象对象的属性对象间的关系,是系统的静态模型 三、OOA的主要优点1.加强了对问题域和系统责任的理解。 OOA方法的具体步骤在用OOA具体分析一个事物时。大致上遵循如下5个基本步骤; OOD面向对象设计(Object-oriented Design,OOD)方法是oo方法中一个中间过渡环节。其主要作用是对OOA分析的结构作进一步的规范化整理,以便能够被oop直接接受。 ####一,OOD背景知识 计算机硬件技术却在飞速发展。从几十年前神秘的庞然大物,到现在随身携带的移动芯片;从每秒数千次运算到每秒上百亿次运算。当软件开发者们还在寻找能让软件开发产力提高一个数量级的“银弹”时,硬件开发的生产力早已提高了百倍千倍。 硬件工程师们能够如此高效,是因为他们都很懒惰。他们永远恪守“不要去重新发明轮子”的古训。Grady Booch把这些黑箱称为类属(class category),现在我们则通常把它们称为“组件(component)”。 类属实由被称为类的实体组成的,类与类之间通过关联结合在一起。一个类可以把大量的细节隐藏起来,只露出一个简单的接口,着正好符合人们喜欢抽象的心理。所以,这是一个非常伟大的概念,因为它们给我们提供了封装和复用的基础,让我们可以从问题的角度来看问题,而不是从机器的角度来看问题。 软件的复用最初是从函数库和类库开始的,这两种复用形式实际上都是白箱复用。到90年代,开始有人开发并出售真正的黑箱软件模块:框架和控件。框架和控件往往还受平台和语言的限制,现在软件技术的新潮流是用SOAP作为传输介质的web service,它可以使软件模块脱离平台和语言的舒服,实现更高程度的复用。但是想一想,其实web service也是面向对象,只不过是把类与类之间的关联用XML来描述而已。 在过去的十多年里,面向对象技术对软件行业起到了极大的推动作用。在可以预测的将来,它仍将是软件设计的主要技术——至少我看不到有什么技术可以取代它的。 ####二,OOD到底从哪里来的? 有很多人都认为:OOD是对结构化设计(Structured Design,SD)的扩展,其实这是不对的。OOD的软件设计观念和SD完全不同。SD注重的是数据结构和处理数据结构的过程。而在OOD中,过程和数据结构都被对象隐藏起来,两者几乎是互不相关的。不过,追根溯源,OOD和SD有着非常深的渊源。 1967年前后,OOD和SD 的概念几乎同时诞生,它们分别以不同的方式来表现数据结构和算法。当时,围绕着这两个概念,很多科学家写了大量的论文。其中,由Dijkstra和 Hoare两人所写的一些论文讲到了“恰当的程序控制结构”这个话题,声称goto语句是有害的,应该用顺序、循环、分支这三种控制结构来构成整个程序流程。这些概念发展构成了结构化程序设计方法;而由Ole-Johan Dahl所写的另一些论文则主要讨论编程语言中的单位划分,其中的一种程序单位就是类,它已经拥有了面向对象程序设计的主要特征。 ####三,OOD和传统方法有什么区别? 还记得结构化设计方法吗?程序被划分成许多个模块,这些模块被组织成一个树形结构。这棵树的根就是主模块,叶子就是工具模块和最低级的功能模块。同时,这棵树也表示调用结构:每个模块都调用自己的直接下级模块,并被自己的直接上级模块调用。 那么,哪个模块负责手机程序最终的那些策略?当然是最顶端的那些。在底下的那些模块至关实现最小的细节,最顶的模块关系规模最大的问题。所以,在这个体系结构中越靠上,概念的抽象层次就越高,也越接近问题领域:体系结构中位置越低,概念就越接近细节,与问题领域的关系就越少,而与解决方案领域的关系就越多。 但是,由于上方的模块需要调用下方的模块,所以这些上方的模块就依赖与下方的细节。换句话来说,与问题领域相关的抽象要依赖于与问题领域无关的细节!这也就是说,当实现细节变化时,抽象也就会收到影响。而且,如果我们想复用某一个抽象的话,就必须把它依赖的细节都一起拖过去。 而在OOD中。我们希望倒转这种依赖关系。我们创建的抽象不依赖于任何细节,而细节则高度依赖于上面的抽象。这种依赖关系的倒转正事OOD与传统技术之间的根本性差异,也正是OOD思想的精华所在。 ####四,OOD步骤 细化重组类 细化和实现类之间关系,明确其可见 性 增加属性,指定属性的类型与可见性 分配职责,定义执行每个职责的方法 对消息驱动的系统,明确消息传递的方式 利用设计模式进行局部设计 画出详细的类图和时序图 ####五。OOD设计过程中要展开的主要几项工作 1,对象定义规格的求精过程 对于OOA所抽象出来的对象&类以及汇集的分析文档,OOD需要有一个根据设计要求整理和求精的过程,是指更能符合oop的需要。这个整理和求精过程主要有两个方面;一是根据面向对象的概念 模型整理分析所确定的对象结构、属性、方法等内容,改正错误的内容,删去不必要和重复的内容等。而是进行分类整理,以便于下一步数据库设计和程序处理模块设计的必要。整理的方法主要是进行归类,对类、对象、属性、方法和结构、主题进行归类。 2.数据模型和数据库设计 数据模型的设计需要确定类与对象属性的内容,消息连接的方式.系统访问.数据模型的方法等.最后每个对象实例的数据都必须落实到面向对象的库结构模型中. 3,优化: OOD的优化设计过程是从另一个角度对分析结果和处理业务过程的整理归纳,优化包括对象和结构的优化,抽象,继承. 对象和结构的模块化表示OOD提供了一种范式,这种范式支持对类和结构的模块化.这种模块符合一般模块化所要求的的所有特点,如信息隐蔽性好,内部聚合度强和模块之间耦合度弱等. 集成化使得单个构建有机的结合在一起,相互支持. 六.oo方法的特点和面临的问题.OO方法一对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换.这是OO方法最主要的特点和成就.OO方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的系统开发方法. 但是同原型方法一样,OO方法需要一定的软件基础支持才可应用,另外在大兴的Mis开发中个如果不经自顶向下的整体划分,而是一开始就自底向上的采用OO方法开发系统,同样也会造成系统结构不合理,各部分关系失调等问题.所以OO方法和结构化方法目前仍是两种在系统开发领域相互依存的,不可替代的方法,. OOP所谓的OOP就是指的面向对象编程.这是一种计算甲编程架构.OOP的一条基本准则是计算机程序是由单个能够引起子程序作用的单元或对象组合而成.OOP达到了软件工程的三个主要目标:重用性,灵活性和扩展性.为了实现整体运算,每个对象都能够接收消息,处理数据和向其它对象发送消息.OOP主要有以下的概念和组件. 组件;数据和功能一起在运行着的计算机程序中形成的单元,组件在OOP计算机称重是模块和结构化的基础. 抽象性;程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力 封装:也叫作信息封装:确保组件不会以不可预期的方式改变其它组件内部状态;只有在那些提供了内部状态改变方法的组建中,才可以访问其内部状态.每类组件都提供了一个与其它组件联系的接口.并规定了其它组件进行调用的方法. 多态性;组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的的结果得依据实际调用的类型. 继承性;允许在现存的组件基础上创建子类组件,着统一并强调了多态性和封装性.典型的来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性. 由于抽象性/封装性/重用性以及便于使用等方面的原因,以组件为基础的编程在脚本语言中已经变得特别流行.Python (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |