第二章 面向对象分析

合集下载

面向对象的软件开发过程中的需求分析与建模研究

面向对象的软件开发过程中的需求分析与建模研究

面向对象的软件开发过程中的需求分析与建模研究第一章引言随着信息技术的快速发展,软件已逐渐成为了现代社会不可或缺的组成部分。

而软件开发过程中的需求分析与建模是确保软件开发质量的重要步骤,因此在面向对象的软件开发中,需求分析与建模研究具有重要的意义和价值。

本文将从面向对象的软件开发出发,介绍需求分析和建模的概念、方法和工具,并重点探讨基于面向对象的软件开发过程中的需求分析与建模研究。

第二章面向对象的软件开发面向对象的软件开发是一种软件开发方法,它以对象为中心,实现了软件的高内聚、低耦合和易维护性,具有较高的开发效率和软件重用性。

在面向对象的软件开发中,需求分析和建模是其中的关键环节。

基于面向对象的软件开发过程主要包括以下几个阶段:1.需求分析阶段。

在该阶段中,需求分析人员将收集和分析用户和系统需求,以确定软件开发的需求和目标。

2.设计阶段。

在设计阶段中,设计人员将根据需求分析阶段的结果,设计面向对象的软件系统架构和对象模型。

3.编码和测试阶段。

在这个阶段中,开发人员将根据设计人员的指示开发代码和进行测试,以确保软件能够按要求正确运行。

4.部署和维护阶段。

在这个阶段中,开发人员将软件部署到用户环境中,并进行维护和修复错误。

在整个软件开发过程中,需求分析和建模是相互关联、相互作用的关键环节。

第三章需求分析与建模基础知识3.1 需求分析需求分析是软件开发的首要任务,它是确保软件开发符合用户需求的前提条件。

需求分析包括两个方面,即功能需求和非功能需求。

1.功能需求功能需求是软件开发中最基本的需求,它是用户对软件功能的具体要求。

在软件开发中,功能需求可以通过用例图、活动图、状态图和顺序图等方法进行描述和分析。

2.非功能需求非功能需求是软件开发中的另一个重要因素,它主要描述软件的性能、可靠性、安全性、可维护性和可移植性等方面的要求。

常用方法包括场景模型、质量属性树和系统特征模型等。

3.2 需求建模需求建模是将需求分析的结果转换为相应的模型,以便于软件设计和开发人员的理解和使用。

面向对象的系统分析与设计1-2

面向对象的系统分析与设计1-2

系统的复杂性
例1:序列aaaaaaa…… 这是一个亚(准)复杂性系统,相应的程序为:在每一个a
后续写a。这个短程序使得这个序列得以随意复制到无穷。 例结2论::序列aabaabaabaab……
与一第旦1个一例个子程相序比的,大该小例与要试复图杂描一述些的,系但统仍相可提以并很论容时易,地则写 出无程法序编:程在。两或个者a说后,续当写系b并统重的复结这构一不操能作被。描述,或描述它的 例最为3小根:算本aa法复ba与杂a系系ba统统bb本。aa身在ba具达a有到ba相根bb同本…的复… 信杂息之比前特,数人时们,仍则可称以该编系写统出 能够这执个行例的子程与序例,2相否似则,,也做可不以到用。很短的程序来描述:在两个 a后续写b并重复。每当第三次重写b时,将第二个a替换为b。 这样的序列具有可定义的结构,有对应的程序来表示。 例4:aababbababbbabaaababbab……
软件开发的系统化方法遵循的原则
在软件中,存在着大量不能简化的实体,我们把这些实体 称之为元素,那么,软件系统就是由这些相互联系、相互作用 的若干元素组成的,具有特定功能的统一整体。而软件系统的 概念结构则是指系统内各组成部分(元素和子系统)之间相互 联系、相互作用的框架。
要使一个软件系统的复杂性下降,无非也就是分割,通俗 点讲,也就是将一个大系统划分为若干小的子系统,最终,使 人们易于理解和交流。下面,给出软件开发的系统化方法需要 遵循的几个基本原则:
结构化方法的产生和发展
3. 结构化分析方法的形成
结构化设计方法建立在系统需求明确的基础上。如何明确 系统的需求,就是结构化分析所要解决的问题。结构化分析方 法产生于20世纪70年代中期,最初的倡导者有Tom Demarco、 Ed Yourdon等人。结构化分析在20世纪80年代又得到了进一 步的发展,并随着Ed Yourdon于1989年所著的《现代结构化 分析》(Modern Structured Analysis)的出版而流行开来。现 代结构化分析更强调建模的重要性。

面向对象分析

面向对象分析

面向对象分析:是确定需求或者业务的角度,按照面向对象的思想来分析业务。

例如:OOA只是对需求中描述的问题,进行模块化的处理,描述问题的本质,区别每个问题的不同点相同点,确定问题中的对象。

OOA与结构化分析有较大的区别。

OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。

基本步骤:
在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:
第一步,确定对象和类。

这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。

类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。

第二步,确定结构(structure)。

结构是指问题域的复杂性和连接关系。

类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。

第三步,确定主题(subject)。

主题是指事物的总体概貌和总体分析模型。

第四步,确定属性(attribute)。

属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。

第五步,确定方法(method)。

方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。

对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。

软件工程面向对象的分析与设计

软件工程面向对象的分析与设计
软件的质量和开发效率
-
THANKS!
XX生活即将结束,在此,我要感谢所有教导我的老师和陪 伴我一齐成长的同学,他们在我的大学生涯给予了很大的帮助。本论 文能够顺利完成,要特别感谢我的导师XXX老师,XXX老师对该论文从选题,构
思到最后定稿的各个环节给予细心指引与教导,使我得以最终完成毕业论文设计! 最后,我要向百忙之中抽时间对本文进行审阅,评议和参与本人论文答辩的各位
识别类和继承
通过类和继承,我们可以组织具有相似属性和行为的对象。类 定义了一组对象的通用属性和行为,而继承则允许我们从一个 类派生出另一个类,从而共享和扩展其属性和行为
定义接口
接口定义了类或对象之间的交互方式。它描述了对象需要提供 的方法和需要遵守的协议
面向对象的分析
通过面向对象的分析, 我们可以更准确地理 解和描述软件系统的 需求,为后续的设计 和实现打下坚实的基 础
2
面向对象的 设计
面向对象的设计
面向对象的设计(Object-Oriented Design,OOD)是软件工程过程中的一个关键阶段 ,其目标是基于面向对象的分析结果,设计出满足系统需求的软件结构
识别类和对象:根据面向对象的分析结果,识别出系统中的主要类和对象。这些类和 对象应该能够准确地反映问题域的特征和需求
和操作方式
设计数据库:根据系统的数 据需求,设计出合适的数据 库结构。数据库应该能够有 效地存储和管理系统的数据
设计系统架构:根据系统的 功能需求和性能要求,设计 出合适的系统架构。系统架 构应该能够支持系统的可扩 展性、可维护性和可重用性
面向对象的设计
通过面向对象的设计,我们可 以设计出结构清晰、易于理解 和实现的软件系统,从而提高
面向对象的分析

第二部分面向对象分析

第二部分面向对象分析
@对象名 属性 ... 服务 ... @类名 属性 ... @服务 ... 主动类 发送者 类
m
(e) 关联
n

同步
接收者
普通对象
主动对象
普通类
异步
(f) 消息连接
(a) 类
一般类
(b) 属性与服务
整体对象类
m
n
特殊类 (c) 泛化 特殊类 部分对象问题 域和系统责任有 关的对象,用对 象类表示
问题域
人事管理 ……
系统责 任
金融业务 个人储蓄 国债发行 贷款业务 ….
信息备份 ……
困难所在: 软件开发人员与领域专家的技术背景不同*
现今的系统所面临的问题域比以往更为广阔和复杂,系统比以往更为庞大。
2、交流问题
如果分析所产生的文档使分析员以外的其他人员都很难读懂,那就很不 利于交流。这会使彼此的思想不易沟通,并容易隐藏许多错误。(分析 人员与客户**及领域专家,分析人员之间*,分析人员与设计人员)
3、需求的不断变化
引起需求变化的因素: 用户(主客观因素)、竞争因素、经费、技术因素* 操作〉接口〉属性 对象最稳定 软件开发者必须以合作的态度满足用户需求
4、软件复用的要求
初始为程序复用。 复用级别提高——分析结果复用 要求分析模型中的可复用部分用于多个系统 要求一个分析模型在多种条件下设计和实现
目标是建立一个符合问题域、满足用户需求的OOA模型。
2.2
分析面临的主要问题
问题域(problem domain):被开发系统的应用领域,即在现实世界 中由这个系统进行处理的业务范围。 系统责任(system responsibilities):所开发的系统应该具备的 职能。
1、问题域和系统责任复杂性日益增长

面向对象技术与UML

面向对象技术与UML

继承性举例
继承传递:大学生可以继承“人”和“学生”的特
征 父类 多重继承: 在职研究生既可以继承“学生”的特 征,又可以继承“教师”的特征 人
工人 学生 教师 农民
中学生 大学生 研究生 派生类
助教
讲师
具有继承关系的对象的特性
对象类间具有共享特征(包括数据和程序代
码的共享) 对象类间具有细微的差别或新增部分(包括 非共享的程序代码和数据) 对象类间具有层次结构。 继承所具有的作用有两个方面:
第二节 面向对象分析
本节要求了解面向对象分析的基本过程和基本原则 OOA: Object-oriented Analysis . 指利用面向对象的概念和方法构建软 件模型。 面向对象分析的基本过程 理解 表达
验证
对理解和表达进 行校验,以达到 理想效果。
需求
建立模型
在面向对象分析中,主要建立对象模型,动态模型和功能模型。 对象模型是最基本最重要的模型。
3) 可重用性好 有两种方法可以重复使用一个对象类:一种方法是创 建该类的实例,从而直接使用它;另一种方法是从它 派生出一个满足当前需要的新类。 4)较易开发大型软件产品 5)可维护性好
2.1.2 喷泉模型
“喷泉”这个词体现了面向对象软 件开发过程迭代和无缝的特性。 图中代表不同阶段的圆圈相互重 叠,这明确表示两个活动之间存 在交迭;而面向对象方法在概念 和表示方法上的一致性,保证了 在各项开发活动之间的无缝过渡, 事实上,用面向对象方法开发软 件时,在分析、设计和编码等项 开发活动之间并不存在明显的边 界。图中在一个阶段内的向下箭 头代表该阶段内的迭代(或求 精)。图中较小的圆圈代表维护, 圆圈较小象征着采用了面向对象 范型之后维护时间缩短了。

面向对象分析

面向对象分析

面向对象分析
面向对象分析是计算机科学领域中使用最广泛的一种分析技术,它是一种结构化的分析方法,是系统分析的更新与系统设计的预备工作。

面向对象分析可以帮助我们更好地理解和分析现有系统,并为系统重构提供指导。

面向对象分析是一种以对象为中心,以建模和分析实体、对象和对象之间的关系为主要任务的分析方法。

它的主要目的是将概念抽象为实体,然后利用视图及关系描述它们之间的关系。

面向对象分析包括分析、设计、建模过程,分析过程也称为面向对象分析(OOA)。

面向对象分析强调对对象的分析,对象可以看作对实际世界中的实际事物的抽象。

对象可以由属性和行为组成,属性描述了对象的内部状态,行为描述了它如何处理消息。

在面向对象分析中,这种抽象事物被描绘为类,每个类有一组共享的属性和行为。

面向对象分析和设计的主要工作是抽象建模,确定对象之间的关系,并利用抽象和关系建模系统。

建模可以帮助我们清楚地了解系统结构,以及每个系统元素之间的联系。

一旦建模完成,可以使用模型来设计、分析和实现高级的系统。

面向对象分析是一种结构化的分析方法,用于理解和描述系统的行为,从而有效地构建高质量的系统。

它的关键是建立系统的实体、关系和视图,从而提出系统的结构,并提出系统实现的可行方案。

总体而言,面向对象分析是一种重要而普遍应用的管理技术,它是系统分析和设计过程中的重要组成部分。

对对象的分析有助于进行
更好的系统设计,增强了系统容量,提高了系统灵活性和性能,为组建现代软件系统提供了可行的工具。

面向对象分析与设计

面向对象分析与设计

面向对象分析与设计面向对象分析与设计(Object-oriented analysis and design)是软件工程领域中的一种方法论,用于解决软件系统开发过程中的问题和需求。

本文将对面向对象分析与设计的基本概念、流程和常用方法进行介绍,并附带答案和解析。

第一部分:面向对象分析(Object-oriented analysis)面向对象分析是软件开发过程中的第一步,旨在理解问题域并建立领域模型。

面向对象分析有以下几个重要概念:1. 对象(Object):对象是系统中的一个实体,包含数据和方法。

对象可以是具体的实物、虚拟的概念或一组相关的数据和行为。

2. 类(Class):类是一种抽象的定义,描述了一组具有相同特征和行为的对象。

3. 属性(Attribute):属性是对象的特征,用于描述对象的状态。

4. 方法(Method):方法是对象的行为,用于描述对象可以执行的操作。

面向对象分析的主要流程包括以下步骤:1. 需求收集:收集系统的需求,与利益相关者沟通,了解系统的功能和性能要求。

2. 领域建模:对现实世界的问题域进行抽象和建模,识别出系统中的对象和它们之间的关系。

3. 需求分析与规约:通过使用用例、活动图和状态图等工具对需求进行分析和规约,明确功能和交互细节。

4. 领域模型验证:与利益相关者验证领域模型的准确性和实用性,确保模型能够满足系统需求。

第二部分:面向对象设计(Object-oriented design)面向对象设计是在面向对象分析的基础上,进一步细化领域模型,为系统的实现提供指导。

面向对象设计有以下几个常用方法:1. 类图(Class diagram):类图用于展示类、属性和方法之间的关系。

类图包括类的名称、属性和方法,并通过关联、继承和聚合等关系展示类之间的联系。

2. 对象图(Object diagram):对象图用于展示类的实例和对象之间的关系。

对象图是类图的实例化表示,展示了系统在某一时刻的对象及其特定的属性值。

C++程序设计04737 第2章 面向对象的基本概念

C++程序设计04737 第2章 面向对象的基本概念

void myDate::setDate(myDate oneD)
{year=oneD.year;month=oneD.month;day=oneD.day;return;}
myDate myDate::getDate()
{return *this;}
void myDate::setYear(int y)
例2-4单项选择题
下列关于类定义的叙述中,正确值 B.类中可以声明成员函数,并可以给出参数的默认值
C.类体不能为空,即必须定义成员变量及成员函数 D.类中仅能包含成员变量
答案:B
例2-5单项选择题
若Test类中的一个成员函数set的说明如下:void set (Test &a);
联函数。
如果成员函数定义在类体外,则类体内必须要有函数原型,类体外函数定义的前面必须用“类
名::”来限定,格式如下:
返回值类型 类名::成员函数名(参数列表)
{
成员函数的函数体
}
类名是成员函数所属类的名字,符号::是类作用域运算符,表明后面的成员函数是属于
类名标识的这个类的。返回值类型就是这个成员函数返回值的类型
第三节 类的初步知识
一、类的定义 面向对象方法中的类,是对具有相同属性和行为的同一类对象的抽象描述,其内部包
括属性(本类的成员变量)和行为(本类的成员函数)两个主要部分,即类以数据为 中心,把相关的一批函数组成为一体。 例2-2描述扑克牌的属性
扑克牌定义为Poker。每张牌由花色和点数描述,可以定义为类Poker的两个属性, suits和number。Poker类的操作,可以根据玩法确定。
获取函数。
类中的成员按功能划分,包括成员变量和成员函数;按访问权限划分,包括公有成员、私有成

面向对象系统分析与设计教学大纲

面向对象系统分析与设计教学大纲

《面向对象系统分析与设计》教学大纲一、课程的性质和任务面向对象系统分析与设计课程是计算机科学与技术本科专业的一门重要的专业课。

通过本课程的学习,使学生在已有的计算机软、硬件基础知识、程序设计知识、数据库和网络通信知识的基础上系统掌握面向对象系统分析与设计的基本方法和技术,并具有针对特定环境下的应用问题进行信息系统开发(包括系统分析、设计与实现)的能力。

二、课程的基本要求1.掌握系统分析与设计的基本概念和方法。

2.掌握面向对象的基本概念。

3.掌握面向对象系统分析与设计的常用方法和UML统一建摸语言。

4.能运用面向对象系统分析与设计的基本技术方法和开发工具,承当软件项目的开发,设计和管理。

三、课程的核心1.基本概念:系统、系统分析与设计、面向对象基本概念(对象和类、属性、消息、方法等)2.基本方法:面向对象系统分析与设计方法(包括OMT方法、UML统一建模语言等)、项目管理方法四、预备知识在学习本课程之前,应具有计算机、网络和数据库的基础知识、并应至少掌握一门面向对象程序设计语言(如VC++、JAVA或VB),至少掌握一种数据库管理系统(如ORACLE、SQL SERVER或ACCESS)的使用。

五、教学环节本课程由课堂教学、实验和课程设计等教学环节组成。

针对本课程的特点:技术新、外文资料多,课堂教学采用双语教学方式,使用多媒体教学手段,将理论教学与案例讲解、实际系统演示相结合,使学生系统掌握本课程的基本理论知识以及方法和技术;实验环节中要求学生学习并熟练掌握一种或几种流行的系统建模工具、数据库和编程语言以及项目管理软件的使用;课程设计环节包括设计题目的讨论、分析、设计和实现,通过课程设计使学生将理论应用于实践,加强学生对实际问题的分析和解决能力,以及团体协作和项目管理能力。

通过这些教学环节,将学生培养成为基础理论扎实、动手能力强,并且能力全面的综合型人才。

六、教学内容(一)课堂教学内容第一章系统分析与设计概论(Introduction to System Analysis and Design)1.1系统分析与设计基本概念(What is System Analysis and Design)1.1.1 系统和信息系统(System and Information System)1.1.2 系统分析与设计(System Analysis and Design)1.1.3信息系统生命期和信息系统开发生命期(System Life Cycle and the Process of System Development)1.1.4 信息系统分析和设计的基本原则(The Principles for System Analysis and Design)1.2系统开发模型和方法(System Development Models and Methods)1.2.1 常用模型:瀑布模型(Waterfall Model)螺旋模型(Spiral Model)喷泉模型(Fountain Model)1.2.2 结构化系统分析与设计方法(Structured System Analysis and Design)1.2.3 原型法(Prototyping)1.2.4 面向对象系统分析与设计方法(Object-Oriented System Analysis and Design)1.2.5 计算机辅助软件工程(CASE, Computer-Aided Software Engineering) 第二章面向对象的基本概念(Concepts of Object-Oriented Technology)2.1 对象和类(Objects and Classes)2.2 属性、消息、方法(Attributes、Messages、Methods)2.3 关系:关联(Associations)一般-特殊(is-a)整体-部分(part-of)2.4 状态、抽象化、封装、继承(Status、Abstraction、Encapsulation、Inheritance)第三章面向对象系统分析与设计方法(Object-Oriented System Analysis and Design Method)3.1 面向对象开发过程概述(The Process of Object-Oriented System Development)3.2 OMT方法3.3 Shlaer & Mellor法3.4 Coad & Yourdon法3.5 Booch法3.6 UML统一建模语言(Unified Modeling Language)第四章面向对象编程(Object-Oriented Programming)4.1分析、设计、编程的流程(The Process of Analysis, Design and Programming)4.2分析、设计、编程的关系(The Relationship of Analysis, Design and Programming)第五章UML面向对象设计基础(Object-Oriented Design with Unified Modeling Language)5.1用户模型视图:用例图(Use Case Diagram)5.2结构模型视图:类图(Class Diagram)对象图(Object Diagram)5.3行为模型视图:序列图(Sequence Diagram)协作图(Collaboration Diagram)状态图(State Diagram)活动图(Activity Diagram)5.4实现模型视图:组件图(Component Diagram)5.5环境模型视图:展开图(Deployment Diagram)第六章UML面向对象开发(Unified Modeling Language Development Method)6.1 UML系统分析和建模(UML System Analysis and Modeling)6.2 UML系统设计和建模(UML System Design and Modeling)第七章项目管理(Project Management)7.1项目和项目管理的概念(What is a Project and Project Management)7.2 项目管理知识体系(PMBOK , Project Management Body Of Knowledge)7.3两个工具:PERT图(PERT Chart)甘特图(Gantt Chart)(二)实验1.学习并使用系统建模工具(Rational Rose、Microsoft Visio等)2.学习并运用程序设计语言进行数据库编程,程序设计语言可选择VC++、JAVA或VB,数据库可选择ORACLE、SQL SERVER或ACCESS。

面向对象分析与设计基础知识讲解

面向对象分析与设计基础知识讲解

面向对象分析与设计基础知识讲解面向对象分析与设计(Object-oriented analysis and design,简称OOAD)是软件工程领域中重要的一部分。

它是指通过对现实世界的事物进行抽象和建模,以实现软件系统的开发和设计。

本文将介绍面向对象分析与设计的基础知识,包括面向对象的概念、面向对象分析和面向对象设计的过程。

一、面向对象的概念面向对象是一种软件开发方法,将现实世界抽象成为对象和对象之间的关系。

在面向对象的设计中,对象是系统中具体的实体,它包含了数据和操作数据的方法。

对象之间通过消息传递来完成协作和交互,从而实现系统的功能。

面向对象的四个基本概念:1. 类(Class): 类是对象的抽象,它定义了对象的属性和行为。

每个对象都是根据类的定义创建的。

2. 对象(Object): 对象是类的实例,它具有类定义的属性和行为。

每个对象都有唯一的身份,可以通过引用来访问。

3. 继承(Inheritance): 继承是指通过已有的类创建新的类,新类继承了原有类的属性和行为。

继承使得代码的复用更加方便,也提高了代码的可维护性。

4. 多态(Polymorphism): 多态是指同一个方法可以根据不同的对象产生不同的行为。

多态通过继承和接口实现。

二、面向对象分析(OOA)面向对象分析是软件开发中的第一步,它的目标是理解系统的需求,确定系统中的对象以及它们之间的关系。

面向对象分析主要包括以下步骤:1. 确定系统的边界和范围:明确系统要解决的问题和目标。

2. 确定系统的对象:从需求文档中提取对象,并识别它们之间的关系。

3. 定义对象的属性和行为:确定每个对象的属性和操作。

4. 划分对象的责任:将对象的操作分配到合适的对象上,确保每个对象的职责明确。

三、面向对象设计(OOD)面向对象设计是根据面向对象分析的结果,通过定义类和交互关系来实现系统的设计。

面向对象设计要考虑到系统的可扩展性、可维护性和可重用性。

面向对象分析与设计(第二版)习题答案

面向对象分析与设计(第二版)习题答案

面向对象分析与设计(第二版)习题答案第一章:面向对象基础知识1.1 什么是面向对象分析和设计?面向对象分析和设计(Object-Oriented Analysis and Design,OOAD)是软件工程中一种常用的方法论,通过将问题领域进行建模,通过对象、类、继承、封装等概念来描述现实世界中的实体、关系和行为。

面向对象分析和设计的目标是开发出可复用、可维护、可扩展、高质量的软件系统。

1.2 面向对象分析和设计的优势有哪些?面向对象分析和设计有以下优势: - 高度模块化:通过将系统划分为多个独立的对象,便于理解和设计系统的各个部分。

- 可复用性:面向对象设计强调对象的复用,通过定义通用的类和接口,可以提高代码的复用程度。

- 可维护性:面向对象的封装特性使得系统的各个部分具有独立性,便于维护和修改。

- 可扩展性:通过继承和多态等特性,可以方便地扩展和修改系统的功能。

- 高可靠性:面向对象的封装和隐藏特性可以减少系统中的错误和安全漏洞。

- 开发效率高:面向对象的分析和设计提供了一种更自然的思考和描述问题的方法,可以提高开发效率。

第二章:面向对象建模2.1 对象的特征有哪些?对象具有以下特征: - 状态(State):对象的状态是对象的属性值的集合,表示对象的某个时刻的状态。

- 行为(Behavior):对象可以执行的操作,描述了对象能够做什么。

- 身份(Identity):每个对象都有唯一的身份,可以通过身份来区分不同的对象。

2.2 类和对象之间的关系有哪些?类和对象之间有以下关系: - 实例化(Instantiation):类是对象的模板,对象是类的一个具体实例。

- 继承(Inheritance):一个类可以继承另一个类的属性和方法。

- 聚合(Aggregation):一个类可以包含其他类的对象作为成员变量。

- 关联(Association):两个类之间存在某种关系,一个类的对象可以访问另一个类的对象。

面向对象的分析方法

面向对象的分析方法

面向对象的分析方法面向对象的分析方法是一种软件开发方法,它的主要目标是通过识别和描述系统内部的对象,以及它们之间的关系和行为,来构建高质量的软件系统。

面向对象的分析方法常用于对系统进行分析和设计,能够提高系统的稳定性、可维护性和扩展性。

下面我将详细介绍面向对象的分析方法。

面向对象的分析方法主要包括以下几个方面:1. 抽象:面向对象的分析方法通过建立模型来描述系统中的对象及其特征。

在分析过程中,需要从现实世界中抽象出合适的对象,并确定它们的属性和行为。

通过抽象,可以将系统中的复杂问题简化,并提高对问题的理解和处理能力。

2. 继承:继承是面向对象的分析方法中的一个重要特性。

通过继承,可以在已有的类的基础上创建新的类,并从已有的类中继承属性和方法。

这样可以避免重复编码,提高代码的可重用性和维护性。

3. 封装:封装是面向对象的分析方法中的另一个重要特性。

通过封装,可以将类的属性和方法封装起来,只暴露必要的接口给外部。

这样可以降低系统的耦合度,提高系统的安全性和可靠性。

4. 多态:多态是面向对象分析方法的另一个重要特性。

多态通过将对象的具体类型隐藏起来,只保留对象的抽象类型。

这样可以实现程序的动态性和灵活性,提高系统的可扩展性和可维护性。

面向对象的分析方法是系统开发过程中的一个关键环节,它可以帮助开发者更好地理解和分析系统需求,并将其转化为可执行的软件系统。

在面向对象的分析方法中,常用到的建模工具有UML(统一建模语言),通过使用UML工具,可以将系统中的对象、类、关系和行为进行可视化描述,使开发者更易于理解和交流。

在面向对象的分析方法中,首先需要进行需求分析,明确系统的功能需求和非功能需求。

然后通过抽象、继承、封装和多态等方法,将需求转化为系统的类和对象,并描述它们之间的关系和行为。

在这个过程中,需要充分考虑系统的扩展性和灵活性,以及用户的使用习惯和需求变化。

在进行面向对象的分析方法时,还需要注意一些常见问题。

2面向对象的分析与设计课件-分析篇

2面向对象的分析与设计课件-分析篇
8 8
术语“use case”的准确含义——使用情况 是对一项系统功能使用情况的一般描述,它对于每一次使 用都普遍适应,既不是应用实例,也不是举例说明。 ——因此译为“用况”,而不是“用例”。
几点说明:
(1)一个用况只描述参与者对单独一项系统功能的使用情况;
(2)通常是平铺直叙的文字描述,UML也允许其他描述方式;
结构
其他
其他一切有助于发 现对象的事物
27 27
从结构得到启发, 联想到新的对象
(2)考虑系统边界:
考察在系统边界以外与系统交互的各类参与者 考虑通过哪些对象处理这些参与者的交互
人员
设备 外系统
(3)考虑系统责任:
检查每一项功能需求是否已有相应的对象提供, 发现遗漏的对象
收款 输入开始本次收款的命令; 作好收款准备,应收款总 数置为0,输出提示信息; for 顾客选购的每种商品 do 输入商品编号; if 此种商品多于一件 then 输入商品数量 end if; 检索商品名称及单价; 货架商品数减去售出数; if 货架商品数低于下限 then call 通知上货 end if; 计算本种商品总价并打印编号、 名称、数量、单价、总价; 总价累加到应收款总数; end for; 打印应收款总数; 输入顾客付款数; 计算应找回款数, 打印付款数及找回款, 应收款数计入账册。
需求说明 分析过程 需求分析
健壮分析
分析模型
2 2
需求模型
OOA是将问题域中的事物抽象为系统中的对象
抽象的目标是系统责任——需求 用况的概念解决了对需求的描述问题
系统责任
(抽象的目标)
需求模型 (用况图)
OOA模型 (类图)
问题域
(抽象的来源)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
一个可行的解决方案


重新根据问题的本质特性分解细节
忘掉:烧水壶、阀门、加热托盘、传感器等 专注本质问题: 怎样冲咖啡? 向咖啡粉上倒热水,然后将产生的液体收集到 某种容器内。 可设定为两个抽象类: HotWaterSource(烧水壶、阀门、传感器)加热水, 把热水送到咖啡粉,最后滴到ContainmentVessel (保温托盘、传感器演了这个角色)容器中,且保温。
7


其描述:
HotWater Source
CoffeeFlow 图 2 交叉线 Containment Vessel
这个关系是根据物理特性设定的,而不是根 据软件操作的控制设定的。
HotWater Source
start
Containment Vessel
图 3 开启热水水流
设计中的关联是在对象间发送消息的通道, 和物理对象的流程无关。
8

用户与系统是怎样交互的?
用类UserInterface(按钮、指示灯)来表示。

这三个类实例之间是怎样交互的? # 由哪个对象检测用户按下加热“Brew”按钮这一事件? UserInterface对象
# 加热按钮被按下时,这个对象应该做什么? 确认烧水壶满了,咖啡壶是空的,且放在保温托盘上。 UserInterface对象发送消息给: HotWaterSource ContainmentVessel,是否就绪。
9
User Interface
IsReady
HotWater Source
IsReady
Containment Vessel
图 4 加热按钮被按下,检查是否就绪 1a:IsReady User HotWater Interface Source 3a:Start
只要有一个 查询为false, 拒绝加热咖啡, 通知用户,请求 无效。 具体到咖啡机 上,可用指示灯闪 烁来表示。 两个查询的 结果都为true, 开始热水的流动。 具体到咖啡机上, 关闭阀门,打开烧 水壶。
1b:Pause 2b:Resume 1d:Done 2a:IsReady 图 7 检查加热的过程是否完成(done)
3a:Start 1c:Done Containment Vessel
12
咖啡倒空 加热过程结束后,咖啡机熄灭指示灯,空咖啡 壶放回到托盘上。谁来检查这种情况?
ContainmentVesselu检查,它还向UserInterface 发送一个Complete(完成)消息 2c:Done 1a:IsReady
3a:Start 2d:Done 1e:Complete 1c:Done Containment Vessel 2a:IsReady
User Interface
HotWater Source 1b:Pause 2b:Resume 1d:Done
13
4a:Start
图 8 咖啡倒空
如何在这种结构下实现Mark4咖啡机?
3


硬件由硬件工程师提供API实现。 软件如何设计?
Button 灯亮 Light CoffeeMaker
这个设计如何?
烧水壶
Boiler
咖啡壶
WarmePlate 保温托盘
BoilerSensor BoilerHeater Plate Sensor Plate Heater
传感器
Sensor
Heater 加热器
4
图 1 过于具体的咖啡机
解决思路
#1 向Light(灯亮)类添加方法,看看怎么样?
Light只有on(),off()两个方法
这段代码有什么问题? Light.java public class Light { 没有变量,奇怪,因为对象通常拥 public void on() { 有状态,且还操纵这些状态 CoffeeMakerAPI.api. 两个方法只是简单调用的一个转 setIndicatorState(CoffeeMakerAPI.INDICATOR_ON); 发者,没作任何事情,多余称为泡 泡类(Vapor Class) } //设置指示器状态 public void off() { Button,Boiler,WarmerPlate也 是如此 CoffeeMakerAPI.api. setIndicatorState(CoffeeMakerAPI.INDICATOR_OFF); } }
19
M4ContainmentVessel.java public class M4ContainmentVessel extends ContainmentVessel { public boolean isReady() { int plateStatus = CoffeeMakerAPI.api.getWarmerplateStatus(); return plateStatus == CoffeeMakerAPI. POT_EMPTY; } }
startBrewing();
} } }
16

UserInterface.java
public class UserInterface { private HotWaterSource hws; private ContainmentVessel cv; public void done() { } public void complete() { } protected void startBrewing() { if (hws.isReady() && cv. isReady()) { hws.start(); cv.start(); } } }
是否可实现这三个类中的方法,去调用相应的
x CoffeeMakerAPI? 是否将咖啡机的本质同Mark4机绑定在一起就 可以? 是个糟糕的设计 利用依赖倒置(DIP)进行设计
User Interface #startBrewing HotWater Source
startBrewing()? M4UserInterface 为什么要创建保护方法 当checkButton函数被调用 ,它就调用 对start(),isReady() 检测方法的调用都是 为什么不直接从 M4UserInterface调用 Containment +checkButton CoffeeMakerAPI.getBrewButtonStatus() UserInterface 应该处理的高级行为 ,不应 start() 函数机中。 ?Vessel 耦合到 Mark4 按钮己经被按下,它就调用UserInterface 图 9 检查加热按钮 中的保护方法 startBrewing() 14
一个设计的启发: Mark4 专用咖啡机
1
描述: Mark4专用咖啡机最多一次可煮好12杯咖啡。

使用者先将咖啡粉放入滤网(filtter holder)中, 将滤网支架滑入托盘中, 咖啡壶(pot)放在保温托盘(warmer plate上。 使用者向烧水壶(boiler)内加入最多12杯冷水, 按下加热(Brew)键,水被加热至沸腾,蒸气压力迫使水漫 过咖啡粉末,咖啡通过滤网的过滤,流入咖啡壶中,并保 持一定温度。壶中有咖啡时,保温托盘处于工作状态,若 将壶从保温托盘上拿开,水流将立刻停止,这样煮沸的咖 啡不会溢出到保温托盘上。
2
需要监控的硬件






用于烧水壶的加热部件,可以开启和关闭 保温托盘的加热部件,可以开启和关闭 保温托盘的传感器,有三个状态: warmerEmpty(温热装置空闲) potEmpty(壶空), potNotEmpty (壶不空) 烧水壶中的传感器,有二个状态: boilerEmpty, boilerNotEmpty 加热键指示加热过程,加热过程结束,咖啡 煮好,指示灯亮 压力阀门,有开启和关闭状态。当开启时,烧水 壶中的压力降低,使经过过滤网的水流立刻停止。
5
解决思路 #2 考虑抽象 图中有两个基类 Sensor,Heater
sensor.java public interface Sensor{ public int sense(); } Heater.java public interface Heater{ public void turnOn(); public void turnOff(); } 程序的这两个类有什么用? 一个类只包含抽象方法, 但没有使用者,返回值不确定, sense()方法返回什么? 在烧水壶的传感器中返回 值有两种可能. 在保温托盘的传感器中返 回值有三种可能. 无法在接口中表达传感器 的约定. Sensor,Heater没什么用.
15
检查加热按钮的状态
public int getBrewButtonStatus(); public static final int BREW_BUTTON_PUSHED = 0; public static final int BREW_BUTTON_NOT_PUSHED = 1
M4UserInterface.java public class M4UserInterface extends UserInterface{ private void checkButton() { int buttonStatus = CoffeeMakerAPI.api.getBrewButtonStatus(); if (buttonStatus == CoffeeMakerAPI.BREW_BUTTON_PUSHED) {
CoffeeMakerAPI.JAVA public interface CoffeeMakerAPI { public static CoffeeMakerAPI api = null;//由 main 设置 实现以下的函数: 返回加热托盘传感器的状态,该传感器检查咖啡壶否 在托盘上,其中是否有咖啡. 返回烧水壶开关的状态,检查壶中的存水是水多于1/2杯 检查开关烧水壶中的加热托盘 检查开关保温托盘中的加热托盘 检查开关指示灯 开关压力阀门,阀门关,烧水壶蒸气压力迫使开水流过 过滤器
相关文档
最新文档