1、面向对象的分析与设计简介&:摘要引言如何发现“类”如何设计“类”小结摘要引言引言如何发现如何发现“类类”如何设计如何设计“类类”小结小结面向对象软件工程问题域问题域需求分析需求分析总体设计总体设计详细设计详细设计计算机计算机问题域问题域编程编程测试测试计算机计算机自然语言自然语言自然语言自然语言分析与设计的鸿沟分析与设计的鸿沟编程语言编程语言自然语言自然语言面向对象的编程语言面向对象的编程语言面向对象软件工程面向对象方法真正意义深远的目标是它适合于解决分析与设计期间的复杂性并实现分析与设计的复用。面向对象的开发不仅仅是编程,必须在整个软件生命周期采用一种全新的方法:在软件开发过程所有阶段都运用
2、面向对象的方法,将有机地集成在一起,这样有利于系统的稳定性。面向对象软件工程喷泉模型以用户需求为动力,以对象为驱动各阶段是相互迭代和无间隙的使用相同的描述方法和模型,使得软件生存期各阶段所使用的方法、技术具有高度的连续性。面向对象方法:对象模型,功能模型,动态模型l三种基本活动三种基本活动l识别类和对象识别类和对象l描述对象和类之间描述对象和类之间的关系的关系l通过描述每个类的通过描述每个类的功能定义对象的行功能定义对象的行为为面向对象方法 ()统一开发过程迭代式的增量开发用例驱动以软件体系结构为核心面向对象的分析与设计方法强调开发过程的连续性构造一系列不断精化的面向对象的模型实际上目前大多倾
3、向于采用迭代式开发类成为分析、设计和实现的基本单元核心问题:(不同层面的类)?推荐:面向对象分析是软件开发过程中的问题定义阶段领域分析():抽取和整理用户需求并建立问题域精确模型的过程。以公共对象、类和框架等形式在特定应用领域中标识、分析和规约公共的可复用的软件成分的能力。抽象出目标系统的本质属性,建立问题领域模型。应用分析():将领域分析建立起来的问题领域模型,用某种基于计算机系统的语言来表示。响应时间需求、用户界面需求和数据安全等特殊的需求也都在这一层分解抽出。面向对象分析领域分析领域领域知识知识源源领域领域分析分析模型模型领域领域分析分析技术文件技术文件专家建议专家建议已有应用已有应用客
4、户考察客户考察目前目前/未来的需求未来的需求类的分类类的分类复用标准复用标准功能模型功能模型领域语言领域语言面向对象分析具体步骤获取用户基本需求获取用户基本需求标识类和对象标识类和对象定义类的结构和层定义类的结构和层次次表示类(对象)间表示类(对象)间的关系的关系常用用例来收集和描述用常用用例来收集和描述用户的需求户的需求标识类及类的属性和服务标识类及类的属性和服务描述系统的静态结构描述系统的静态结构需求分析,.,.“+”:,,:,“5”:,:,.:,“”+:“”面向对象分析模型基本模型(类图)基本模型(类图)对象层对象层特征层特征层关系层关系层交交互互图图主主题题图图详细说明详细说明面向对象
5、设计是面向对象方法在软件设计阶段应用与扩展的结果,通常分为两个阶段高层设计:建立应用的体系结构低层设计:集中于类的详细设计的准则抽象,信息隐藏,模块化,弱耦合,强内聚,可重用面向对象设计具体内容按实现条件对模型进行调整,并补充几个新的组成部分:设计问题域组元设计人机交互组元设计任务管理组元设计数据管理组元摘要引言如何发现“类”如何设计“类”小结回顾:三个世界现实世界现实世界问题世界问题世界软件世界软件世界抽象抽象问题:?基于需求文档:用例()用例是一个叙述性文档,用来描述参与者使用系统完成某个过程时的事件发生顺序。用例乃是对过程的描述。过程描述事件、动作和事务处理自始至终的发生顺序。,.例子:
6、:A a .a .,.a .,简单地说,,a (),;,a.A a ;a .a,;,a .a a a a.,a :有:A ,a a a .软件工程师容易犯的错误:自认为所做的是客户/用户需要的。不能代替客户/用户假想其价值所在。创建 的一些原则用例可以是一个场景,包括动作和交互。用例可以是一组场景,描述不同场景下的行为。这种书写格式可以在任何时候描述有变体的行为,例如黑盒需求,业务流程,系统设计说明。用例里不要有系统设计,用例里不要有界面设计,用例里不要有特性列表,用例里不要有测试。用例应该描述行为需求。用例的主场景不要超过九步。可以在适当的层次上得到子目标和移除设计说明。用例的最大价值不在于
7、主场景,而是在于备选行为。主场景可能只占用例长度的四分之一到十分之一。用例的识别界定系统边界基于参与者先识别参与者对每个参与者,找出其所发起和参与的过程基于事件识别系统必须响应的外部事件把事件与参与者和用例联系起来边界,识别及其除了明显的之外,还要问问诸如以下这些问题:?a?a?,?a !“,a.”.,.此外还要对照检查其他需求“”启发:类与方法;但是“.”有的名词不是类;有的类不表现为名词;基本原则:没有机械的办法。基于经验的启发性、指导性的原则:哪些东西是可能的类;哪些形式的类不理想,可考虑从模型中去除;明确的抽象类名是名词或形容词,刻画该抽象形容词 常用于 表达接口代表一系列运行时刻的对
8、象。(允许特意的)有修改操作(或作用式操作)形式或非形式地刻画性质:不变式 前后置断言三种 类分析类直接对应于问题域设计类为得到优雅的、可扩展的结构而引入实现类满足软件系统实现算法所需。如;等分析类 .a,.分析类 :()()()behaviour寻找分析类 .不一定是客观实体,也可能是抽象概念寻找实现类实现难多复用数据结构与算法知识延迟实现类如“”类层次 组织 多种不同实现寻找设计类创造性工作设计模式的用武之地其他途径旧系统 领域模型A a a .a ,.A a a 95,96 ,a .,a a .:,a ,.,a ,95.;()a .,.,.A :().A a 识别系统事件定义系统操作给出
9、这些操作的 2:(:,:):a .:-A ().-().-().-a,().接下来建立系统类模型 类图在类之间分配职责摘要引言如何发现“类”如何设计“类”小结设计是一个迭代的过程!把分析类直接带入设计阶段如果在设计阶段合并了分析模型,那么在演化的时候,保持分析和设计模型的一致性会更容易类设计:增加细节和执行精细决策填补从高层需求到低层服务之间的空白用操作实现用例阐述每个操作的算法选择算法;数据结构;设计内部类和操作向下递归到支持更高层操作的设计操作功能分层;机制分层把模型重构成更简洁的设计优化数据的访问路径效率问题具体化必须操作的行为,模式调整类的结构以增加继承重新调整类和操作;提取公共行为;使用委托来共享行为组织类和关联信息隐藏;内聚性;微调包创建初始设计类定义操作定义方法定义状态定义属性定义依赖定义关联?大部分,简单的类意味着每一个类封装较少的整个系统的智能更易被复用更易实现少部分,复杂的类意味着每个类封装较多的整个系统的智能不太会被复用更难实现小结面向对象分析和设计特点,过程,任务如何发现类用例领域模型如何设计类-?作业(本次作业不用提交)复习UML,学习使用一种UML工具