OOAD设计模式
- 格式:doc
- 大小:50.50 KB
- 文档页数:3
什么是OOA和OODOOA-面向对象分析OOD-面向对象设计这两个都是指在软件开发过程中,需求分析和设计阶段中采用的一种方式。
即利用面向对象的思想对软件进行开发和设计。
设计模式则是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
说通俗点就是在设计过程中的经验和窍门。
OO设计原则就是面向对象的设计原则。
因为面向对象是将数据和行为封装在一起,更符合现实世界中的运行模式。
所以它是一种比较先进的设计原则。
当然,还有其他的设计原则,如结构化设计的设计原则。
综上,ooa和ood是在软件工程中,利用OO设计原则进行的软件工程的两个阶段,而在ood的中可以反复使用的就是设计模式了。
OOA = Object Oriented Analysis面向对象分析评估用户需求和需要解决的问题。
针对用户问题的静态、动态和功能等,输出会提供相应的概念设计。
分析对象的属性(attribute)、关联(association)、生命周期(lifecycle)和相关的域规则(domain rule)产生出的产品为域产品(domain model)OOD = Object Oriented Design面向对象设计将OOA的结果转化成与现实需求更贴切的系统和对象设计利用一系列相互协作的软件对象来进行软件设计,兼顾应用需要经典的OO概念,如多态(polymorphsim)、接口(interface)、消息(messaging)和继承(inheritance)。
工件为包图 (package diagram) ,类图 (class diagram ),交互图 (interaction diagram)。
第一章1、什么是分析与设计?1、分析强调对问题和需求的调查研究2、设计强调的是满足需求的概念上的解决方案2、什么是面向对象分析与设计?1、在面向对象分析过程中,强调的是在问题领域内发现和描述对象(或概念)2、在面对对象设计过程中,强调的是定义软件对象以及它们如何协作以实现需求。
3、简单示例:1、定义用例(use case)需求分析可能包括人们如何使用应用的情节或场景,这些情节或场景可以被编写成用例。
2、定义领域模型(domain model)面向对象分析的结果可以表示为领域模型,在领域模型中展示重要的领域概念或对象。
需要注意的是,领域模型并不是对软件对象的描述,它使真实世界领域中的概念和想象可视化。
(也被称为概念领域模型—conceptual object model)3、定义交互图关注的是软件对象的定义—它们的职责和协作。
顺序图(sequence diagram)是描述协作的常见方法。
它展示对象之间的信息流,和由消息引起的方法调用。
4、定义设计类图除了在交互图中显示对象协作的动态视图外,还可以用设计类图(design class diagram)来有效的表示类定义的静态视图。
这样可以描述类的属性和方法。
与领域模型表示的是真实世界的类,设计类图表示的是软件类要注意的是,尽管设计类图不同于领域模型,但是其中的某些类名和内容还是相似的。
第二章1、什么是UML?统一建模语言(UML)是描述、构造和文档化系统制品的可视化语言。
UML表示法的基础是UML元模型,它描述建模元素的语义,UML元模型对模型驱动架构(Model Driven Architecture, MDA)CASE工具供应商具有影响。
开发者并不需要对其进行学习。
2、三种UML应用方式1、UML作为草图—非正式的、不完整的图,借助可视化语言的功能,用于探讨问题或解决方案空间的负责部分。
2、UML作为蓝图—相对详细的设计图。
用于:①逆向工程;②代码生成。
OOAD基本概念学习⽬标:1.理解与掌握⾯向对象的概念与⽅法。
2.使⽤UML。
3.完成⾯向对象的分析与设计⼯作。
4.了解OO的设计原则及⼀些典型的设计模式什么是⾯向对象?1. ⾯向对象(Object-Orientation, 简称OO)是⼀种系统建模技术。
2. ⾯向对象编程(Object-Orientation Programming,简称OOP)是按照OO的⽅法学来开发程序的过程。
3. 通过分析系统内对象的交互来描述或建模⼀个系统。
4. 交互的对象最终以类的形式组织。
5. OO的⽅法由三部分组成:过程,标识,规则。
对象1. 是⼀个客观存在的、唯⼀的实体。
2. 是⾯向对象编程过程中分析与解决问题的出发点与基础。
3. 拥有⾃⼰的标识、数据与⾏为。
4. 可以简单或复杂。
5. 可以抽象或具体。
6. 在OOP中是⼀个类的动态实例。
7. 如Student—id,name,age(attribute)--setName,getName,countScore(methods)--new Student()类1. 类是对象的模板。
2. 对象通过类实例化产⽣。
3. ⼀个类可以创建多个对象OOADOOAD(Object Oriented Analysis and Design),⾯向对象的分析与设计。
OOAD是根据OO的⽅法学,对软件系统进⾏分析与设计的过程。
--OOA 分析阶段--OOD 设计阶段定义OOA阶段1. 分析阶段主要解决以下问题-- 建⽴针对业务问题域的清晰视图。
-- 列出系统必须完成的核⼼任务。
-- 针对问题域建⽴公共词汇表。
-- 列出针对此问题的最佳解决⽅案。
2.此阶段要解决的核⼼问题是“What to do?”定义OOD阶段1.设计阶段主要解决以下问题-- 如何解决具体的业务问题。
-- 引⼊系统⼯作所需的⽀持元素。
-- 定义系统的实现策略2. 此阶段要解决的核⼼问题是“How to do?”OOP的主要特征1 .抽象(abstract)2.封装(encapsulation)3.继承(inheritance)4.多态(polymorphism)5.关联(association)6.聚合(aggregation)7.组合(composition)8.内聚与耦合(cohesion & coupling)抽象1. 忽略掉⼀个对象或实体的细节⽽只关注其本质特征的过程。
面向对象分析与设计在软件开发过程中,面向对象分析与设计(Object-Oriented Analysis and Design,简称OOAD)是一种重要的方法论。
通过OOAD,开发者可以将现实世界中的概念和问题转化为软件系统的结构和行为。
一、什么是面向对象分析与设计?面向对象分析与设计是一种以对象为核心的开发方法。
它强调将问题领域的实体、关系和行为抽象为对象、类和方法。
面向对象的分析阶段主要关注问题领域的需求和约束,而设计阶段则更关注如何将需求转化为可执行的软件系统。
二、面向对象分析与设计的优势1. 模块化:面向对象的方法将复杂的系统拆分为多个独立的对象,每个对象都有清晰的职责和接口。
这种模块化可以提高代码的可维护性和可复用性。
2. 继承与多态:继承是面向对象编程中的重要特性,它允许新的类继承已有类的属性和方法。
多态则允许对象在不同上下文中表现出不同的行为。
这些特性使得代码更加灵活和易于扩展。
3. 封装与信息隐藏:面向对象的方法将数据和操作封装在对象内部,外界只能通过对象的接口进行交互。
这种封装和信息隐藏可以保护数据的完整性和安全性。
4. 规范化的开发流程:面向对象的分析与设计有一套规范的开发流程,包括需求分析、概念设计、详细设计和实现等阶段。
这种流程可以提高开发效率,并减少错误和重复工作。
三、面向对象分析与设计的过程1. 需求收集与分析:在这个阶段,开发者与用户密切合作,收集和分析系统的业务需求。
通过访谈、文档分析等方法,确定系统的功能、性能和约束等方面的要求。
2. 概念设计:在概念设计阶段,开发者将业务需求转化为概念模型。
通过绘制用例图、类图、状态图等工具,描述系统的结构和行为。
3. 详细设计:在详细设计阶段,开发者将概念模型进一步细化,确定具体的类和接口。
同时,还需要考虑系统的性能、安全和可维护性等方面的问题。
4. 编码与测试:在编码阶段,开发者根据详细设计的要求,使用具体的编程语言实现系统。
面向对象分析和设计方法的实践应用面向对象分析和设计方法(OOAD),是一种以对象为基础的软件开发方法。
通过面向对象的思想,将软件系统中的各个部分进行抽象化,并通过类与对象的关系构建软件系统的模型。
其主要的思想是将软件系统中的各个部分看作是对象,通过这些对象能够互相沟通与交互。
凭借其严密的实践应用,OOAD已成为日常软件开发中的事实标准。
1. OOAD的基本流程OOAD有自己的基本流程,其主要步骤包括需求捕捉、面向对象的域分析、面向对象的设计、面向对象的编程和测试。
通过这些步骤,软件开发人员可以有效地完成一个软件系统的开发过程。
2. OOAD在实践中的应用在实际的软件开发中,OOAD可以应用于各个方面。
例如,在设计一个可靠的银行账户管理系统时,SOAD就是一个非常实用的面向对象分析和设计模型。
该模型能够在一个对象模型中把系统中所有的角色和过程进行抽象化,并为每个角色和过程分配隶属关系。
这种模型可以帮助开发人员完成系统的编码和维护,同时也可以为银行的人员提供一个清晰的管理界面。
另一个例子是利用OOAD来设计制造业中的产品。
在这一领域,OOAD可以帮助设计人员创建一个稳固的产品模型。
通过这个模型,他们可以快速及准确地观察制造过程的各个方面,并对过程进行调整,确保这个模型最终能够成为一个理想的产品。
与此同时,这种模型也可以为制造企业提供支持,并协助其在全球市场上快速发展。
3. OOAD的优势与挑战虽然OOAD已经成为了软件开发的标准,但其仍然存在着一些挑战和缺陷。
其中最大的挑战之一便是如何确保开发人员始终保持该方法的高标准。
虽然OOAD可在企业中发挥强有力的作用,但开发人员必须始终处于高度专业的状态,才能充分利用OOAD的优势。
管理者也应该为此提供必要的支持,以确保接到的项目能够高效完成。
OCAD最大的优势在于其对软件开发过程的理解与体现。
其通过有效的面向对象的思想,将加速整个软件开发过程。
此外,它可以帮助开发人员更快地实现整体性能的调整和模型的优化。
1、构件是核心和基础,重用是必需的手段。
2、软件重用是指在两次或多次不同的软件软件开发过程中重复使用相同或相近软件元素的过程。
3、软件元素包括程序代码、设计文档、设计过程、需求分析文档甚至领域知识。
4、把可重用的元素称作软构件,简称为软构件。
5、可重用软件元素越大,就说重用的粒度越大。
6、构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上,它是语义描述、通信接口和代码实现的复合体。
7、面向对象技术达到类级重用,以类为封装的单位。
8、构件模型是对构件本质特征的抽象描述。
三个主要流派,分别是OMG(对象管理组织)的CORBA(通用对象请求代理结构)、Sun的EJB和Microsoft的DOM(分布式构件对象模型)。
9、获取构件的四个途径:(1)从现有构件中获得符合要求的构件,直接使用或作适应性修改,得到可重用构件。
(2)通过遗留工程,将具有潜在重用价值的构件提取出来,得到可重用构件。
(3)从市场上购买现成的商业构件,即COTS构件。
(4)开发符合要求的构件。
10、构件分类方法三大类:关键字分类、刻面分类法、超文本组织方法11、构件检索方法:基于关键字的检索、刻面检索法、超文本检索法和其他检索方法。
12、减少构件修改的工作量,要求工作人员尽量使构件的功能、行为和接口设计更为抽象画、通用化和参数化。
13、构件组装技术:基于功能的组装技术、基于数据的组装技术和面向对象的组装技术。
14、软件体系结构的定义:软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。
软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
软件体系结构的意义:(1)体系结构是风险承担者进行交流的手段;(2)体系结构是早期设计决策的体现--①软件体系结构明确了对系统实现的约束条件②软件体系结构决定了开发和维护组织的组织结构③软件体系结构制约着系统的质量属性④通过研究软件体系结构可能预测软件的质量⑤软件体系结构使推理和控制更改更简单⑥软件体系结构有助于循序渐进的原型设计⑦软件体系结构可以作为培训的基础;(3)软件体系结构是可传递和可重用的模型。
学习java的心得体会篇一:JAVA学习的心得体会国家队每一次踢球失败后都要说这么一句:我们回去后要好好总结,下次会打得更好!总结不代表就能改过原有的不足,也不代表就能进步了(一)充分利用MSDN因为我个人觉得它胜过任何一本编程参考书MSDN是 Microsoft 当前提供的有关编程信息的资,它包含微软最新的技术数据库,加上易学易用的全文检索功能,让您迅速找到任何您需要的技术参考数据(二)加强自我管理,善于作自我总结,分析^p 自已的优点及缺点中国境内百分之八十以上的领导人在百分之八十以上的场合的讲话中都有类似的观点,所以在这里我是不多说了,反正这一条用在什么行业什么地方都不会有错的,人生最大的敌人不是就是自已吗管好自已认清自已,那还有什么搞不定的(三)养成良好的文档习惯良好的文档是正规研发流程中非常重要的环节,一个好的程序是先写好文档再进行编程的,在设计文档的指导下,才能写出安全的代码。
如果你不写文档,一开始就写程序,这样你就不会按已设计好的路线走,而是想到哪写到哪。
小功能还好说,要是大功能,就容易混乱甚至失控.那么如何写文档呢其实我认为没有统一的标准,虽然国家及一些NB的人总结了很多的模板,但每个人的习惯不同,如果你不加以修改或创新,就套用某个标准,我相信写起来会很吃力及说不清的难受,因此我觉得只要能将你的设计思想及实现算法或步骤描述清楚就是好的文档,我强烈建议广大程序员朋友们在写文档时要善于用图表来说明你的思想,我们不是作家,也可能作文都经常性地不及格,写出五官端正的文章对我们来说可能不容易啊!好好地利用VISIO,ROSE或别的工具来表达你的思想吧!(五)代码风格要规范,严谨,效率要高。
(六)掌握好跟踪调试技巧.跟踪调试程序是一件繁琐而又复杂的事情,所以掌握必要的调试策略及技巧却可以使这些工作变得轻松起来.强烈建议你去看一下老美Everett N.McKay及Mike Wooding写的书Debugging Windows Programs,你一定受益匪浅.(七)养成自我测试的习惯测试工作应由测试工程师来做,但在你写完一个模块或一个软件时,还是要自已先测试一下,保证不要出现一些低级的错误.(八)善于交流善于沟通,特别是经常与一些高手交流一下学习的心得体会有人说,程序员的性格大多内向不喜欢说话,其实是有些误会了,不是不喜欢而是话不投机,我的脑袋一天到晚都在不停地转,函数,数据,算法啊充满了我的世界,我那还有时间与你谈一些无聊的话题,话要找对人了,才容易谈下去,书上说过听君一席话,胜读十年书,你要找的就是这种豁然开朗!(九)阶段性地做一下专题总结知识要温故而知新,因此我程序员要养成阶段性地做专题总结的习惯,比如你这个月学习或在做与多线程有关的模块或项目,那么在你做完后,你就可以好好地总结一下所有与多线程相关的技术,包括理论知识,实践方法以及各种技巧及优秀文章等等,这对你各种能力的提高将有很大的帮助,你试过了吗,如果没有,那就快点行动吧!(十)要有持之以恒的精神我只是想说明要学好任何一门技术,最好要有持之以恒精益求精的精神,特别是学一些比较抽象比较难的技术,除了思考一下你的学习方法以外,还必须坚定你的目标及信念!篇二:学习Java_的步骤和心得体会(杰瑞整理)学习java的步骤和心得体会很多同学都想要自己学习Java,但是应该如何学习,从何处着手却很迷茫.针对这些同学,烟台杰瑞教育资深Java讲师李老师说,学习Java最终的就是基础知识的学习和框架的掌握,基础知识掌握扎实以后,多多学习各种框架有助于自己少走很多弯路.最后,李老师结合杰瑞教育的Java学习课程为大家推荐了一篇网上的学习Java步骤, 大家一起来看一下吧: 第一步:首先要做好学习前的准备工作:java语言一般用于大型的服务器程序开发,所有有必要了解如下内容:Unix 开发环境Unix系统原理、Unix开发环境、Unix常用命令。
系统分析与设计复习提纲一、试题类型●选择题:基本概念, 见复习要点●填空题:基本概念, 见复习要点●判断题:基本概念, 见复习要点●名词解释:见下列复习题●简答题:见下列复习题●画图、程序题二、各章复习要点(完整叙述参见课本或PPT)OOADA分析:做正确的事(对问题需求调查研究)D设计:正确地做事(概念上的解决方案)OA面向对象分析:发现描述领域对象OD面向对象设计: 定义软件对象及如何协作关键技能:为软件对象分配职责统一过程UP核心思想: 短固迭代进化可适应6个主要科目(工作流):业务建模,需求,设计,实现,测试,部署4个阶段:初始、细化、构造、移交敏捷开发宣言:工、文、合、计需求定义:能力,条件分类:"FURPS+"模型制品:USGVR用例概念:参与者、场景、用例模型作用:捕获用户目标的最好办法;发现定义需求的核心机制;强调了F:功能需求;不是OO,是OOAD关键需求的输入表示法:摘要、非正式、详述How:选边界;定主参;定目标;以目标编用例细化阶段一句话:构核架,决高险,定需求,预进度领域模型What is:"可视化字典"/"概念模型"/"领域对象模型"/"分析对象模型"How to:寻找策略: 重用修改现有模型(首要); 常见分类列表; 名词短语(从详述用例)系统顺序图SSD作用:SSD是OC和OD的输入;SSD中的操作在OC中分析;SSD是协作对象设计的起点;UC文本是它的输入系统事件:特定场景, 跨系统边界的事件系统操作:对系统事件进行处理的系统行为或功能操作契约OC后置条件:三种状态变化:实例创建删除;属性修改;关联形成清除逻辑架构LALA:软件类宏观组织结构;组织为包、子系统、层等;对立术语:部署架构包图:描述LA; 能组织如何事物层:对类、包、子系统粗颗粒度分组;高层可调用低层,反之不然常见层:UADBTF交互图描述对象间消息交互, 比静态图价值更高种类:顺序图(栅栏式、顺序清晰); 通信图(网格式、空间效用)UML类图类属性:2种表示方式: 属性文本(内置属性);关联线(关联属性)。
1.1 设计正在“腐烂”的征兆(Symptoms of Rotting Design)有四个主要的征兆告诉我们该软件设计正在“腐烂”中。
它们并不是互相独立的,而是互相关联,它们是过于僵硬、过于脆弱、不可重用性和粘滞性过高。
1. 过于僵硬Rigidity Rigidity 致使软件难以更改,每一个改动都会造成一连串的互相依靠的模块的改动,项目经理不敢改动,因为他永远也不知道一个改动何时才能完成。
2. 过于脆弱Fragility Fragility 致使当软件改动时,系统会在许多地方出错。
并且错误经常会发生在概念上与改动的地方没有联系的模块中。
这样的软件无法维护,每一次维护都使软件变得更加难以维护。
(恶性循环)3. 不可重用性immobility immobility 致使我们不能重用在其它项目中、或本项目中其它位置中的软件。
工程师发现将他想重用的部分分离出来的工作量和风险太大,足以抵消他重用的积极性,因此软件用重写代替了重用。
4. 粘滞性过高viscosity viscosity有两种形式:设计的viscosity和环境的viscosity.当需要进行改动时,工程师通常发现有不止一个方法可以达到目的。
但是这些方法中,一些会保留原有的设计不变,而另外一些则不会(也就是说,这些人是hacks)。
一个设计如果使工程师作错比作对容易得多,那么这个设计的viscosity 就会很高。
环境的viscosity高是指开发环境速度很慢且效率很低。
2 面向对象的类设计原则2.1 开放关闭原则The Open Closed Principle (OCP)A module should be open for extension but closed for modification.一个模块应该只在扩展的时候被打开(暴露模块内部),在修改的时候是关闭的(模块是黑盒子)。
在所有的面向对象设计原则中,这一条最重要。
该原则是说:我们应该能够不用修改模块的源代码,就能更改模块的行为。
1、M VC模式
MVC模式就是边界、控制、处理三者相结合而形成的一种设计模式,其中涉及到的设计类包括边界类(V)、控制类(C)、实体类(M)。
在利用MVC 模式来设计软件系统时,对于每一个的用例都能够找到三个这样的类,他们的结构形式如下:
View:1、用户输入数据2、用于显示结果
Controller:从view接收数据,调用Model方法,将操作结果返回给view Model:处理数据
2、中介者模式
中介者封装了对象之间的交互,当多个对象分别于另外的多个对象之间进行自由的交互式,可能导致他们之间的耦合度变得更加的高,但是对于一个系统来说往往希望高内聚、低耦合。
所以就设计一个中介者来代替一些对象与另外的对象进行交互。
其结构形式如下:
这种设计模式简化了对象之间的交互复杂度,从而使得系统结构更加清晰明了。
3、外观模式
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
其结构形式如下:
外观模式往往在本系统设计的较为零散时,为了方便系统的扩展或者使用维护而增加了统一的接口以此来减少系统的复杂性。