面向对象分析与设计Part 5
UML面向对象分析、建模与设计课件第五章 类图
类——操作
操作是一个可以由类的对象请求以影响其行为的服务的实现,也即 是对一个对象所做的事情的抽象,并且由这个类的所有对象共享。
操作是类的行为特征或动态特征。 操作的语法格式为:
可见性OPT 操作名 ⌊(参数列表)⌋OPT ⌊:返回类型⌋OPT ⌊{特性}⌋OPT
操作名:操作的标识符。在描述操作时,操作名是必须的,其他部 分可选。
Student
+monitor 1
1..*
自关联
类图中的关系——关联关系
关联名称:放在关联路径的旁边,但远离关联端。 角色:放在靠近关联端的部分,表示该关联端连接的类在这一关联
关系中担任的角色。角色名上也可使用可见性修饰符号。 多重性:放在靠近关联端的部分,表示在关联关系中源端的一个对
象可以与目标类的多少个对象之间有关联。 导航性:一个布尔值,用来说明运行时刻是否可能穿越一个关联。 限定符:是二元关联上的属性组成的列表的插槽,其中的属性值用
/WorksForCompany
Department * +department 1 WorksForDepartment
* Person
类图中的关系——泛化关系
泛化关系定义为一个较普通的元素与一个较特殊的元素之间的类元 关系。其中描述一般的元素称为父,描述特殊的元素称为子。
通过泛化对应的继承机制使子类共享父类的属性和操作,小了模型 的规模,同时也防止了模型的更新所导致的定义不一致的意外。
法了,此时称之为N元关联。
类图中的关系——关联关系
class Logical View
ClassA
AssociationName
+rolename 0..*
面向对象程序设计5PPT教学课件
是指在类定义体中声明成员函数,而在类外定义成员函数。作用 域区分符::指明成员函数或数据成员所在的类。::前若不跟类名,则成为 全局数据或全局函数(非成员函数)。
在类外定义成员函数的具体形式为: 返回值类型 类名::成员函数名(形式参数表) {
// 函数体 }
外联函数的定义
{ private: // 私有数据成员和成员函数 public: // 公有数据成员和成员函数 protected: // 保护的数据成员和成员函数
};
有关类定义的几点说明1:
(1) class是定义类的关键字,类的命名须符合C++ 的命名规则。{ }内是类的定义体部分,说明该类 的成员,类的成员包括数据成员和成员函数。
};
(2) 使用关键字inline定义内联成员函数(显式声明)
inline void Tdate::Set(int m,int d,int y) {
month=m; day=d; year=y; }
或 void inline Tdate::Set(int m,int d,int y) {
month=m; day=d; year=y; }
有关类定义的几点说明3:
(8) 结构体和类的区别
– C语言中结构体只有数据成员,无函数成员。C++语言中 的结构体可有数据成员和函数成员。
– 缺省情况下,结构体中的数据成员和成员函数都是公有 的,而在类中是私有的。
– 结构体变量中的数据可随意修改,不利于数据的保护和 控制;结构体中数据及其操作是分离的,使程序的复杂 性难以控制;程序的可重用性不好,严重影响了软件的 生产效率。
类和对象
2020/12/09
软件工程面向对象的分析与设计
-
THANKS!
XX生活即将结束,在此,我要感谢所有教导我的老师和陪 伴我一齐成长的同学,他们在我的大学生涯给予了很大的帮助。本论 文能够顺利完成,要特别感谢我的导师XXX老师,XXX老师对该论文从选题,构
思到最后定稿的各个环节给予细心指引与教导,使我得以最终完成毕业论文设计! 最后,我要向百忙之中抽时间对本文进行审阅,评议和参与本人论文答辩的各位
识别类和继承
通过类和继承,我们可以组织具有相似属性和行为的对象。类 定义了一组对象的通用属性和行为,而继承则允许我们从一个 类派生出另一个类,从而共享和扩展其属性和行为
定义接口
接口定义了类或对象之间的交互方式。它描述了对象需要提供 的方法和需要遵守的协议
面向对象的分析
通过面向对象的分析, 我们可以更准确地理 解和描述软件系统的 需求,为后续的设计 和实现打下坚实的基 础
2
面向对象的 设计
面向对象的设计
面向对象的设计(Object-Oriented Design,OOD)是软件工程过程中的一个关键阶段 ,其目标是基于面向对象的分析结果,设计出满足系统需求的软件结构
识别类和对象:根据面向对象的分析结果,识别出系统中的主要类和对象。这些类和 对象应该能够准确地反映问题域的特征和需求
和操作方式
设计数据库:根据系统的数 据需求,设计出合适的数据 库结构。数据库应该能够有 效地存储和管理系统的数据
设计系统架构:根据系统的 功能需求和性能要求,设计 出合适的系统架构。系统架 构应该能够支持系统的可扩 展性、可维护性和可重用性
面向对象的设计
通过面向对象的设计,我们可 以设计出结构清晰、易于理解 和实现的软件系统,从而提高
面向对象的分析
面向对象分析与设计
面向对象分析与设计面向对象分析与设计(Object-Oriented Analysis and Design,OOAD)是一种在软件工程中常用的方法论,它以面向对象的思维方式来进行软件系统的分析和设计。
本文将对面向对象分析与设计的概念、主要步骤和设计原则进行详细介绍。
一、概念面向对象分析与设计是一种将实际问题抽象为对象和类的方法。
它将问题空间中的实体、行为和关系转化为软件系统中的对象、方法和类,并且通过封装、继承和多态等机制来实现软件系统的模块化和可维护性。
二、主要步骤1. 需求分析:通过与用户沟通,获取系统需求,并将需求转化为用例模型或用户故事。
在需求分析阶段,可以使用用例图、活动图等工具来描述系统的功能和用户的交互过程。
2. 领域建模:通过分析问题领域中的实体、行为和关系,构建领域模型。
领域模型可使用类图、状态图等工具来表示,它可以帮助开发团队更好地理解和把握系统的核心概念。
3. 概念架构设计:根据需求和领域模型,设计概念架构,也称为系统架构。
概念架构是一个逻辑上的模型,它描述了系统的整体结构和各个模块之间的关系。
常见的概念架构模式有层次结构、客户-服务器和发布-订阅等。
4. 详细设计:在概念架构的基础上,对系统进行详细设计。
详细设计包括定义类的具体属性和方法、设计模块之间的接口和通信方式等。
可以使用类图、时序图等工具来进行详细设计。
5. 编码和测试:根据详细设计文档进行编码,并编写对应的单元测试和集成测试。
编码应遵循面向对象的编程原则,例如封装、继承和多态等。
测试阶段需要验证代码的正确性和功能完整性。
三、设计原则1. 单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个引起它变化的原因。
这样可以降低类的复杂度,提高代码的可维护性。
2. 开闭原则(Open-Closed Principle,OCP):软件实体应该对扩展开放,对修改封闭。
通过使用抽象和接口,可以实现系统的可扩展性,而不需要修改已有的代码。
面向对象分析与设计习题及部分答案
《面向对象分析与设计》习题及部分答案第一章 概论1.什么是面向对象方法?面向对象的基本原则主要有哪些?答:面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。
面向对象方法的解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式来构造软件系统,这与传统的结构化方法从功能入手和信息工程化方法从信息入手是不一样的。
面向对象的基本思想主要有:1)从现实世界中客观存在的事物出发来建立软件系统,强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。
这可以使系统直接映射问题域,保持问题域中事物及其相互关系的本来面貌(对象)2)用对象的属性表示事物的性质;用对象的操作表示事物的行为。
(属性与操作)3)对象的属性与操作结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节。
(对象的封装)4)对事物进行分类。
把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。
(分类)5)复杂的对象可以用简单的对象作为其构成部分。
(聚合)6)通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。
特殊类继承一般类的属性与操作,从而简化系统的构造过程及其文档。
(继承)7)对象之间通过消息进行通讯,以实现对象之间的动态联系。
(消息)8)通过关联表示类(一组对象)之间的静态关系。
(关联)2.与传统开发方法比,面向对象方法有什么优点?答:面向对象方法的解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式来构造软件系统,这与传统的结构化方法从功能入手和信息工程化方法从信息入手是不一样的。
与传统方法相比,面向对象的方法主要优点有:1)从认识论的角度可以看出,面向对象方法改变了人们认识世界的方式;2)语言的发展——鸿沟变窄;3)面向对象方法使得从问题域到计算机间的鸿沟变窄;4)面向对象方法有助于软件的维护与复用;(1)把易变的数据结构和部分功能封装在对象内并加以隐藏,一是保证了对象行为的可靠性;二是对它们的修改并不会影响其他的对象,有利于维护,对需求变化有较强的适应性。
面向对象分析与设计(第二版)习题答案
面向对象分析与设计(第二版)习题答案第一章:面向对象基础知识1.1 什么是面向对象分析和设计?面向对象分析和设计(Object-Oriented Analysis and Design,OOAD)是软件工程中一种常用的方法论,通过将问题领域进行建模,通过对象、类、继承、封装等概念来描述现实世界中的实体、关系和行为。
面向对象分析和设计的目标是开发出可复用、可维护、可扩展、高质量的软件系统。
1.2 面向对象分析和设计的优势有哪些?面向对象分析和设计有以下优势: - 高度模块化:通过将系统划分为多个独立的对象,便于理解和设计系统的各个部分。
- 可复用性:面向对象设计强调对象的复用,通过定义通用的类和接口,可以提高代码的复用程度。
- 可维护性:面向对象的封装特性使得系统的各个部分具有独立性,便于维护和修改。
- 可扩展性:通过继承和多态等特性,可以方便地扩展和修改系统的功能。
- 高可靠性:面向对象的封装和隐藏特性可以减少系统中的错误和安全漏洞。
- 开发效率高:面向对象的分析和设计提供了一种更自然的思考和描述问题的方法,可以提高开发效率。
第二章:面向对象建模2.1 对象的特征有哪些?对象具有以下特征: - 状态(State):对象的状态是对象的属性值的集合,表示对象的某个时刻的状态。
- 行为(Behavior):对象可以执行的操作,描述了对象能够做什么。
- 身份(Identity):每个对象都有唯一的身份,可以通过身份来区分不同的对象。
2.2 类和对象之间的关系有哪些?类和对象之间有以下关系: - 实例化(Instantiation):类是对象的模板,对象是类的一个具体实例。
- 继承(Inheritance):一个类可以继承另一个类的属性和方法。
- 聚合(Aggregation):一个类可以包含其他类的对象作为成员变量。
- 关联(Association):两个类之间存在某种关系,一个类的对象可以访问另一个类的对象。
面向对象分析与设计
面向对象分析与设计一、引言面向对象分析与设计(Object-Oriented Analysis and Design,简称OOAD)是软件工程中的一种方法论,用于解决复杂系统的设计与开发问题。
本文将介绍面向对象分析与设计的概念、原则和过程,并结合实际案例说明其重要性和应用。
二、概念解析1. 面向对象分析(Object-Oriented Analysis,简称OOA):通过识别和描述系统所涉及的对象及其相互关系,以及对象的属性和行为,从而确定系统需求和问题领域的分析方法。
2. 面向对象设计(Object-Oriented Design,简称OOD):基于面向对象分析的结果,通过定义类、抽象数据类型、方法、接口等概念,设计出系统的结构和组织,以及类之间的关系和交互方式。
三、面向对象分析与设计的原则1. 单一职责原则(Single Responsibility Principle,简称SRP):一个类只负责一项职责,保证类的内聚性和高内聚性。
2. 开放封闭原则(Open-Closed Principle,简称OCP):系统中的类、模块等应该对拓展开放,对修改封闭,通过继承、接口等方式实现。
3. 里氏替换原则(Liskov Substitution Principle,简称LSP):所有引用基类的地方必须能透明地使用其子类的对象,即子类必须能够替换基类。
4. 依赖倒置原则(Dependency Inversion Principle,简称DIP):高层模块不应该依赖于底层模块,二者都应该依赖于抽象;抽象不应该依赖于具体,具体应该依赖于抽象。
5. 接口隔离原则(Interface Segregation Principle,简称ISP):客户端不应该依赖于它不需要的接口,接口应该进行细化拆分以适应不同的场景和客户端需求。
6. 迪米特法则(Law of Demeter,简称LoD):一个对象应该对其他对象有尽可能少的了解,减少耦合性,降低系统的复杂度。
第五讲 面向对象分析与设计(Object-oriented Analysis and Design)
4 面向对象软件工程
OOA强调直接针对问题域中客观存在的各项事物设立OOA模 型中的对象。另外,OOA模型也保留了问题域中事物之间关 系的原貌。 OOD包括两方面的工作,一是把OOA模型直接搬到OOD,作为 OOD的一个部分;另外是针对具体实现中的人机界面、数据 存储、任务管理等因素补充一些与实现有关的部分。这些 部分与OOA采用相同的表示法和模型结构。 在OOA->OOD->OOP这一软件工程的过程系列中,在OOA和OOD 阶段对系统需要设立的每个对象类及其内部构成与外部关 系都达到透彻的认识和清晰的描述, OOP工作就是用同一 种面向对象的编程语言把OOD模型中的每个成分书写出来: 用具体的数据结构来定义对象的属性,用具体的语句来实 现操作流程图所表示的算法。
第五讲 面向对象分析与设计 (Object-oriented Analysis and Design)
Welcome to Software Engineering Lecture 5 Zhang Jiannan jiannanz@
目标
熟悉面向对象方法的基本知识;
熟悉 UML的基础知识;
assemble() …
结构化设计中模块和模块之间的关系,被紧紧局限于 信息流,试图通过信息流及其转换来认识系统,这限 制了对模块之间众多关系的表达和体现,如继承、依 赖。
结构化与面向对象
流水线式的过程处理与人们日常处理问题的方式不一 致。随着时间流逝,软件工程师越来越注重系统整体 关系的表示和数据模型技术(把数据结构与过程看作 一个独立功能模块)。程序定律被重新认识: 程序 = (过程+数据结构) 这样的思想符合现实世界中的事物特征,我们区分事 务主要依靠就是事物各式各样的特征,包括事物不同 的属性和特定的行为。 集成化的软件开发方法--面向对象方法产生。
面向对象分析与设计
提高软件的可维护 性和可扩展性
面向对象分析与设计的基本原则
面向对象分析与设计遵循一些基本原则,比如封 装性、继承性、多态性和抽象性。封装性指隐藏 对象的内部细节,仅暴露有限的接口;继承性允 许子类继承父类的属性和方法;多态性允许同一 方法在不同对象上有不同行为;抽象性帮助提取
对象的共性特征,形成抽象类或接口。
观察者模式
概念
定义对象间的一种一对多的依赖关系
特点
主体对象状态改变时,依赖对象会自动更新
应用场景
当一个对象的改变需要同时改变其他对象,并且不知道具体有多少对象需要改变时
模板方法模式
模板方法模式是一种行为型设计模式,定义了一个算法的骨 架,允许子类为一个或多个步骤提供实现。这种模式在父类
中定义算法的步骤,而将一些实现延迟到子类。
设计模式应用
选择合适模式
根据实际情况选择 合适的设计模式
灵活性提升
通过设计模式提高 系统的灵活性和可
扩展性
●04 第四章 面向对象编程语言
Java
支持类
Java拥有丰富的类库,方便开发人员使用
继承
允许一个类继承另一个类的属性和方法
封装
将数据和方法封装在类中,提高安全性和模块性
C++
C++是一种多范式编程语言,支持过程化编程、 面向对象编程和泛型编程。它是继C语言后,一种
Eclipse IDE
集成开发环境
Visual Studio
强大的开发工具
IntelliJ IDEA
智能IDE
协作工具
Git版本控制
代码管理利器
JIRA项目管理
项目跟踪与管理
Confluence团队协 作
软件工程第五章面向对象分析与设计PPT课件
记录全部访谈内容 ④ 安排补充会议 访谈之后 ⑤ 根据标准模版撰写软件需求规格说明(SRS),
打客户需求草稿 ⑥ 通过电子邮件征求客户意见
对于不同类型的应用,用例方法是一种获取和 表达需求的有效方法。
某些需求需要通过数据流图或状态图与用户沟 通。
5.1.2 描述客户需求
需求可以看成是应用与应用的外部代理(如用户) 之间的交互。可利用用例作为表达工具。
3) 标识用例 当双方确定了一组场景后,开发人 员从该场景抽象出一组用例,描述所有可能的 情况。用力表达了系统的范围。
4) 求精用例 细化每一个用例。引入带有出错处 理或带有异常处理的用例,描述系统的行为, 保证需求的描述是完全的。
5) 标识用例之间的关系 描述用例之间的依赖关 系,提取相同功能,建立用例模型。
2. 访谈用户代表 识别各种需要与要求 使用工具帮助表达用户需求 绘制GUI草图 确定硬件环境
请用户评审
3. 用标准文档格式撰写客户需求
4. 核查用户需求 用户批准后
5. 构建详细需求(分析建模)
5.1.1 与用户交互
1) 需求的来源 不同类型应用能从人员处获取需求的比例:
不受限制的
应 用 的 类 型
馆藏图书(对象)的状态图
在架 报废
注销
丢失
出借
返还
上架
损坏
借出
修补
丢失
丢失
图书管理员借书操作的状态图
login (登录)
预约图书
借书
reserve
borrow
(预约)
(借阅)
检验图书 检验读者
借书
findTitle findBorrower (检索图书) (查找借阅者)
面向对象分析与设计——状态图
练习
以下是信用卡账户的状态的变迁:当一个顾客提 交申请信用卡并通过时,账户处于空状态,一旦顾 客收到信用卡并激活时,账户处于激活但无余额状 态。如果顾客在收到信用卡一个月内没有激活,那 么这个账户就作废了。如果顾客在一个月后还没有 向银行支付消费的额度,账户就处于拖欠财务状态, 但在信用卡允许的信用额度内仍可以使用。一旦顾 客支付了过去所拖欠的金额,账户就处于无余额或 结欠余额。
信号事件是指发送或接收信号的事件。信号是 对象间的消息,信号事件是指在某个时刻发生的 事情。
6
2.事件
2.1 信号事件(signal event) 每一次信号传输都是唯一事件,但可以
把它们组成信号类,并通过属性来指明传递 的数值。
7
2.事件
2.1 信号事件(signal event)
8
2.事件
内部迁移和自迁移的不同:自迁移是离开本 状态后重新进入该状态,它会触发入口动作和出 口动作;而内部迁移是没有离开过本状态,也就 不会触发入口动作和出口动作。
17
5.状态图建模
状态图的建模过程: 标识出需要建模状态图的实体 标识出实体的开始状态和结束状态 确定与实体相关的事件 从开始状态开始创建状态图 如果必要则指定合成状态
10
3.状态
状态(state)是对象取值和链接的抽象,它 是在对象的生命期中满足某些条件、执行某些活 动或等待某些事件的一个条件或情况。
在定义状态时,需要忽略那些不影响对象行 为(不影响控制序列)的属性,将在单个状态中 有相同事件响应的值和链接的所有组合合并在一 处。
对象可以拥有多个状态(但不是无限), 但某一时刻一个对象只能处于一种状态下。
19
练习
1.有一个简单的CD播放机,CD机中可以放 入多张碟片,当一张播放完成之后会自动的 换另外一张直到所有的碟片播放完,在播放 的过程中可以随时中断或暂停播放。
面向对象分析与设计第五章.2
实例
描述活动的顺序,展现从一个活 动到另一个活动的控制流
实例
控 制 流
分支
动作:原子性,动作不可打断 分岔
实例
泳道
顾客
运输部
财务部
实例
复杂转换
转换类型
描述
语法
外部转换
对事件做出响应,引起状态变化或自身
转换,同时引发一个特定动作,如果离开或 事件 ( 参数 )[ 监护条件 ]/ 动作 进入状态将引发进入转换、离开转换
内部转换
进入转换 退出转换
对事件做出响应,并执行一个特定的活
动,但并不引起状态变化或进入转换、离开 事件 ( 参数 )[ 监护条件 ]/ 动作 转换
当进入某一状态时,执行相应活动
entry/ 活动
当离开某一状态时,执行相应活动
exit/ 活动关系
包引入的可见性分为: Public : <<import>> Private : <<access>>
面向对象分析与设计第五章
所有面向对象的专家都相信,合适的方法学是软 件开发的基础,尤其是团队合作时,就更是如此 面向对象的方法学一般都包含如下内容
每个阶段的哲理 每个阶段的工作流和各个活动 应生产的制品(图、代码、文本说明) 制品之间的依赖关系 不同制品的表示法 需要给静态结构和动态行为建模
1
面向对象方法学
7
Ripple概述
交互总图使用顺序图显示活动的各个步骤 时间图显示消息和对象状态的准确时间限制 复合结构图显示对象在聚合或复合中的相互关系, 显示接口和协作对象。
8
Ripple概述
9
Ripple概述
10
用例图
用例是对客户、用户或系统使用另一个系统或业 务的方式的静态描述,显示了系统用例的相互关 系和用户了解它们的方式。 用例图中 :椭圆表示用例;小人表示用户或系统 下图描述了可通过Internet访问的汽车租用商店。
11
用例图
12
敏捷软件开发方法
敏捷方法概述 极限编程简介 敏捷实践案例
敏捷软件开发方法的介绍引用于morningspace 特向 morningspace致谢
13
敏捷方法概述
14
敏捷方法概述
15
敏捷方法概述
16
敏捷方法概述
17
敏捷方法概述
18
敏捷方法概述
19
敏捷方法概述
20
敏捷方法概述
6
Ripple概述
状态图是显示软件生命周期对象的各种状态。 通信图(协作图)是显示在某种情形下对象之间发 送的消息。 顺序图是显示与通信图类似的东西,但它强调顺 序,而不是连接 包图显示相关的类如何组合,对开发人员有用 部署图显示安装已完成系统的机器、过程和部署 制品。 组件图显示可重用的组件(对象或子系统)及其 接口
软考中级系统集成项目管理(5)面向对象系统分析与设计
软考中级系统集成项⽬管理(5)⾯向对象系统分析与设计1) ⾯向对象系统分析与设计① 对象:由数据及其操作所构成的封装体,是系统中⽤来描述客观事物的⼀个模块,是构成系统的基本单位。
对象是由⼀组属性和对这组属性进⾏的操作构成的。
② 类:实体的形式化描述。
类将该实体的属性(数据)和操作(函数)封装在⼀起。
③ 抽象:通过特定的实例抽取共同特征以后形成概念的过程。
抽象是⼀种单⼀化的描述,强调给出与应⽤相关的特性,抛弃不相关的特性。
对象是现实世界中某个实体的抽象,类是⼀组对象的抽象④ 封装:将相关的概念组成⼀个单元模块,并通过⼀个名称来引⽤它。
⾯向对象封装是将数据和基于数据的操作封装成⼀个整体对象,对数据的访问或修改只能通过对象对外提供的接⼝进⾏。
⑤ 继承:表⽰类之间的层次关系(⽗类和⼦类),使得某类对象可以继承另外⼀类对象的特征,继承分为单继承(java)和多继承(C++)⑥ 多态:使得在多个类中可以定义同⼀个操作或属性名,并在每个类中可以有不同的实现。
多态使得某个属性或操作在不同的时期可以表⽰不同类的对象特性。
⑦ 接⼝:描述对操作规范的说明,其只说明操作应该怎么做,并没有定义操作如何做。
可以将接⼝理解为类的⼀个特例,它规定了实现此接⼝的类的操作⽅法,细节由实现该接⼝的类去完成。
⑧ 消息:体现对象间的交互,通过它向⽬标对象发送操作请求。
⑨ 组件:表⽰软件系统可替换的、物理的组成部分,封装了模块功能的实现。
组件应当是内聚的,并具有相对稳定的公开接⼝。
⑩ 复⽤:指将已有的软件及其有效成分⽤于构造新的软件或系统。
组件技术软件复⽤实现的关键。
模式:描述了⼀个不断重复发⽣的问题,以及该问题的解决⽅案。
其包括特定环境、问题和解决⽅案三个部分组成,应⽤设计模式可以更加简单和⽅便地去复⽤成功的软件设计和架构,更快更好地完成系统设计。
2) 类和对象的关系:① 类是对象的集合,对象是类的⼀个实例。
Eg:动物是个类,狗啊猫啊是动物这个类的实例。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ProductSpecification SalesLineItem quantity : Integer getSubtotal() : Money Described-by 1 description : Text price : Money productSpec itemID : ItemID ...
引导思维,方便设计 作图工具
UML作为蓝图 UML作为蓝图
UML用于生成软件类的结构 UML用于生成软件类的结构 与编程语言开发工具的集成 在IDE中添加代码的细节 IDE中添加代码的细节
UML作为编程语言 UML作为编程语言
将UML写成的模型自动生成代码 UML写成的模型自动生成代码 详细的UML描述 详细的UML描述
②
any assertTrue statement does not evaluate to true.
使用Junit和TDD测试的例子 使用Junit和TDD测试的例子
测试方法的模式: 测试方法的模式:
Create the fixture. ② Do something to it (some operation that you want to test). ③ Evaluate that the results are as expected.
在编写Sale类之前编写TestSale类 并完成: 在编写Sale类之前编写TestSale类,并完成:
①
Create a Sale
the thing to be tested (also known as the fixture).
Add some line items to it with the makeLineItem method (the makeLineItem method is the public method we wish to test). ③ Ask for the total, and verify that it is the expected value, using the assertTrue method. JUnit will indicate a failure if
CH 19 对象的可见性
可见性:
一个对象可以看见另一个对象的能力 一个对象通过看见或者拥有另一个对象的引用
属性可见性
一个对象是另一个对象的属性
参数可见性
一个对象是另一个对象中的一个方法的参数
本地可见性
一个对象是另一个对象中的一个方法中的一个变量(本地对象)
全局可见性
一个对象在全局可见的
Hale Waihona Puke 为什么要有对象的可见性前面两种使用更普遍
*
属性名用的角色名字
从设计到代码的映射
容器类型的属性
从设计到代码的映射
方法的映射
从交互图中寻求方法体 进一步的扩充方法体的细节
从设计到代码的映射
方法的映射 另一个例子
代码实现的顺序— 代码实现的顺序—由低耦合开始
CH21 测试驱动开发和重构
测试驱动下的开发
(test(test-driven development (TDD) ) 测试为先的思想
这是一种相对临时的可见性,因为只有在方法的 生命周期 中B是可见的。 但是这种可见性是非常常见的。
参数可见性转换为属性可见性
局部可见性
从A到B的局部可见性是指B在A中的一个方法中被声明为 的局部可见性是指B 局部对象。 这也是一种相对临时的可见性。他只存在于方法的作用域 内。
public class A { … private int F(); … } int F() { B b; b = new B(); … delete b; }
①
使用Junit和TDD测试的例子 使用Junit和TDD测试的例子
测试类: 测试类:
public class SaleTest extends TestCase {
Sale fixture = new Sale(); total = new Money( 7.5 ); Money price = new Money( 2.5 ); ItemID id = new ItemID( 1 ); ProductDescription desc = new ProductDescription( id, sale.makeLineItem( desc, 2 ); assertTrue( sale.getTotal().equals( total )); }
交互图和设计类图中的代码信息
类的定义: (设计类图) 设计类图)
类名 属性 方法
类的交互:( 类的交互:( 交互图)
方法中与其他类的交互
不断求精和不断的改善
从设计到代码的映射
类、简单属性、方法架构的映射 引用属性
public class SalesLineItem { ... private int quantity; private ProductSpecification productSpec; }
全局可见性
从A到B的全局可见性是指B对A全局可见。 的全局可见性是指B 这也是一种相对持久的可见性。A 这也是一种相对持久的可见性。A和B同时存在。 这种方法并不常用。它需要使用全局实例变量。
可见性的UML表示 可见性的UML表示
CH20将设计映射成代码 CH20将设计映射成代码
实现模型:
源代码 数据库定义 JSP/ASP/HTML等页面定义 JSP/ASP/HTML等页面定义
// … // test the Sale.makeLineItem method public void testMakeLineItem() { // STEP 1: CREATE THE FIXTURE // -this is the object to test // -it is an idiom to name it 'fixture' // -it is often defined as an instance field rather than a local variable // set up supporting objects for the test Money // STEP 2: EXECUTE THE METHOD TO TEST // NOTE: We write this code **imagining** there // is a makeLineItem method. This act of imagination // as we write the price, "product 1"testof the detailed interface to ); tends to improve or clarify // our understanding // to the object. Thus TDD has the side-benefit of // clarifying the detailed object design. // test makeLineItem sale.makeLineItem( desc, 1 );
}
// STEP 3: EVALUATE THE RESULTS // there could be many assertTrue statements // for a complex evaluation // verify the total is 7.5
重构
重新构建代码
代码的重新组织
步步为营的策略
属性可见性
从A到B的属性可见性是指B是A的一个属性 的属性可见性是指B
public class Register { … private ProductCatalog catalog; // catalog属性 catalog属性 … }
参数可见性
从A到B的参数可见性是指B作为一个参数被传递给A中所 的参数可见性是指B作为一个参数被传递给A 定义的一个方法。
下例中,Register为了使用ProductCatalog的 下例中,Register为了使用ProductCatalog的 spec := getSpecification( itemID ) 必须保证在Register中对ProductCatalog是可见的 必须保证在Register中对ProductCatalog是可见的
重写--〉 重写--〉测试 每次进行少量代码的重构
重构
哪些代码需要重构?
大型方法 具有大量实例变量的类 具有大量代码的类 明显类似的类 设计中很少使用或没有使用的接口 耦合度高的对象
例子:P284 P285两个例子 例子:P284 和P285两个例子
CH22 UML工具 UML工具
UML作为草图 UML作为草图
先写测试后写产品
单元测试
部件的测试
测试工具
xUnit Java下的JUnit Java下的JUnit
TDD的意义 TDD的意义
单元测试的保障
产品开发成型后去写测试代码是很痛苦的 单元测试往往会被忽略
接口行为的细节优化
设计中的斜截缺失会暴露
后续迭代开发的基础
后续的开发可以沿用 便于发现变更的错误
使用Junit和TDD测试的例子 使用Junit和TDD测试的例子