620 likes | 769 Views
Concerning Objects. 中国科学技术大学软件学院 孟宁. 2010年05月. previously on this course. Design is 设计是 The creative process to transform the problem into a solution将问题转化成解决方案的创造性的活动 The description of a solution对解决方案的的描述 Two stages of design设计的两个阶段 Conceptual Design概念设计 Technical Design技术设计
E N D
Concerning Objects 中国科学技术大学软件学院 孟宁 2010年05月
previously on this course • Design is 设计是 • The creative process to transform the problem into a solution将问题转化成解决方案的创造性的活动 • The description of a solution对解决方案的的描述 • Two stages of design设计的两个阶段 • Conceptual Design概念设计 • Technical Design技术设计 • Five ways to create designs • Architectural styles and strategies • Coupling耦合性与Cohesion内聚 • 提高模块独立性 • Documenting the Design
Agenda • Previously on this course • What is OO? • The OO Development Process • Use Cases • Representing OO:An Example Using UML • OO System Design • OO Program Design • OO Measurement
What is OO? • 面向对象Object Orientation是一种把问题和它的解决方案作为对象的集合组织在一起的软件开发方法;数据结构和操作都包含在对象的描述中。 • 面向对象描述OO Representation的七的特征:identity,abstraction,classification,encapsulation,inheritance,polymorphism,and persistence.
OO Representation的七的特征 • Identity标识 • 涉及将数据组成离散的、可辨别的称为对象的实体,单个对象有与它相关的状态和行为;在面向对象的系统中每一个对象通常都有一个名字,也叫做一个参考或句柄;名字用来区别不同的对象。 • Abstraction抽象 • 抽象形成了一个表示不同的系统全貌是怎样关联起来的分级结构。 • Classification分类 • 用来给某些有着共同属性和行为的对象分组 • Encapsulation封装 • 类封装了某个对象的行为和属性,隐藏了具体的实现 • Inheritance继承 • 一种类的层次结构,根据类之间的相同或差异来构造的 • Polymorphism多态 • 同样的行为在不同的类或子类中的不同表现 • Persistence持久性 • 某个对象的名称、状态和行为超越时间或空间的能力,换句话说,对象的名字,状态和行为在对象被改变时保存。
Examples of objects grouped into classes 框表示某个对象的名称、属性和行为
Objects and classes • Every object has a name (also called a reference or handle)每一个对象都有一个名称(也叫引用或句柄) • Objects can have attributes (such as color, size, location)对象具有属性(如颜色、大小、位置) • Objects can have operations or behaviors (such as takeoff, land, repair)对象具有作用或行为(如起飞,着陆、修理) • Each object is an instance of a class每一个对象都是某个类的实例 • A specific implementation of an operation for a certain class is called a method某个类的操作的特定实现称为方法
Object的特点 • 以数据为中心; • 对象是主动的; • 属性和操作封装,信息是隐蔽的。 • 对象独立处理自身的数据,并通过消息传递进行通信,具有并行的性质 • 高模块独立性,对象是OO软件的基本模块,低耦合,高内聚。 • 对象具有唯一识别的功能,行为比较丰富 • 对象必须参与一个或多个类
Class类 • 定义 • 具有相同结构、操作,并遵守相同约束规则的对象聚合成一组,这组对象集合称为对象类,简称类。 • 类层次(Hierarchy) • 子类、派生类 • 父类、基类、超类 • 类实例(Instance) • 由某个特定类所描述的一个具体对象。 • 如类抽象“中国人”的一个实例“王志东”
Forming a hierarchy 柴油 汽油 柴油 汽油
消息、方法与属性 • 消息就是某个操作的规格说明,其组成: • 接收消息的对象 • 消息名(消息选择符) • 零个、一个或多个变元 例如:对于类Circle的一个实例MyCircle,如果使其以绿色在屏幕上显示,MyCircle . Show ( GREEN ); • 方法(操作、服务) • 对象所能执行的操作,即类中所定义的服务。它是对操作算法和响应消息办法的描述。 • 在类Circle中给出成员函数Show (int color)的定义。 • 属性是类中所定义的数据,是实体性质的抽象 • 类实例都有其特有的属性值,如类Circle定义的圆心、半径和颜色。
Inheritance继承 • 继承性的含义 • 对象共享所在类的结构、操作和约束等语义特性 • 多层类层次的继承传递性 • 类的继承(多重继承) • 继承性的作用 • 继承性使所建立的软件系统具有开放性 • 继承是信息组织和分类的有效方法 • 提高代码可重用率和可靠性,降低开发工作量
多态与重载 • 多态性含义 • 把相同的操作施加于不同类型的对象,获得不同的结果 • 重载 Overloading • 运算符重载:同一运算符作用于多种数据类型上。 • 函数名重载:相同的方法作用于不同的对象类型产生不同的行为效果。 • 虚函数(Virtual)
The OO Development Process • 面向对象开发的一个优点是语言的一致性。我们可以用同样的方式来描述问题和解决方法:类,对象,方法,属性和行为。在整个开发过程中,我们应该具有术语和全局的一致性。 • 用面向对象表示法来描述类有三个概貌:静态,动态,限制。静态的视图包括对象的描述,属性,行为和相互之间的关系。动态的视图描述了通信,控制/定时,和状态及状态的变化。限制描述了结构上的限制和动态行为。 • OO Requirements • OO Design • OO Coding and Testing
OO Requirements • 面向对象的需求分析通常使用用户的语言来描述并且讨论了在应用领域中的概念和情况。 • 无论开发者打算怎样实现系统,需求的定义都可以作为一个对象来独立表示。
OO Design • Usually uses an OO requirements representation通常使用一种OO需求表达 • System design identifies and represents objects and classes, plus details of each objects attributes and behaviors系统设计确定和表示对象与类,加上每个对象的属性和行为的详细资料 • System design also identifies interactions and relationships系统设计也要确定(对象和类的)交互和关系 • Program design inserts computational features in the models程序设计插入计算特征到模块中 • Program design inserts class library details程序设计插入类库的细节 • Program design considers nonfunctional requirements to enhance design程序设计考虑非功能性需求以增强设计
OO Coding and Testing • 编码通过把模型翻译成一种面向对象变成语言来进行。 测试小组测试 编码人员测试
Use Cases • 确定系统边界 • 确定参与者(用户及其分组、外部系统等) • 尽可能多地发掘用例 • 各参与者如何分别使用系统提供的功能 • 将用例进行合并、分类、分层
进一步检查用例图,找出现有的和潜在的问题 • 用例是否使用了正确的术语? • 活动是否和观点匹配? • 对活动和执行者的描述是否清楚完整? • 是否遗漏了对候补参与者的描述? • 是否描述了某个外部系统或一组用户,但实际上没有参与系统的某个活动或交互? • 每个活动的开始和结束是否明确?
Representing OO: UML • UML融合了Booch、OMT和OOSE方法中的基本概念,而且这些基本概念与其他面向对象技术中的基本概念大多相同; • UML不仅仅是上述方法的简单汇合,而是扩展了现有方法的应用范围; • UML是标准的建模语言,而不是标准的开发过程。尽管UML的应用必然以系统的开发过程为背景,但由于不同的组织和不同的应用领域,需要采取不同的开发过程。
UML软件开发过程 • Rational公司1998年发布了名为Rational Unified Process的面向对象软件开发过程框架。 • 该框架将软件开发过程分为四各阶段: • 初始阶段 • 细化阶段 • 构造阶段 • 移交阶段 • 该过程框架强调的原则: • 用例驱动(Use Case Driven) • 以架构为中心(Architecture-Centric) • 迭代增量(Iterative and Incremental)
模型内容的组织和UML表述 • UML的用于描述模型的基本词汇(“构造块”): • 事物(Things) • 关系(Relationships) • 图 (Diagrames)
事物(Things) • 结构事物(Structure Thing) • UML中的静态元素:类、接口、协作等 • 行为事物(Behavioral Thing) • UML中的静态元素:交互(Interaction)、状态机(State Machine) • 组织事物(Grouping Thing) • UML的分组元素:包(Package) • 注释事物(Annotation Thing) • UML的分组元素:注释(Note)
关系(Relationships) • 关系(Relationships) • 关联关系(Association) • 元素间的结构化关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。 • 依赖关系(Dependency) • 元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A。 • 泛化关系(Generalization) • 归纳、类属关系,即通常所说的继承关系。 • 聚合关系(Aggregation) • 关联关系的一种特例,表示部分和整体(整体 has a 部分)的关系。 • 组合关系(Composition) • 组合是聚合关系的变种,表示元素间更强的聚合关系。对于组合关系,如果整体被破坏则个体一定会被破坏,而聚合的个体则可能是被多个整体所共享的,不一定会随着某个整体的破坏而被破坏。 • 实现关系(Realization) • 元素A定义一个约定,元素B实现这个约定,则B和A的关系是实现关系,B 实现 A。这个关系最常用于接口。
图(Diagrames) 包图: 包中的类以及包与包之间的关系(静态图)
UML 关系 图 事物 静态 图 动态 图 结构 事物 行为 事物 组织 事物 辅助 事物 关联 关系 依赖 关系 泛化 关系 聚合 关系 组合 关系 实现 关系 交 互 状 态 机 包 注 释 用 例 图 类 图 对 象 图 构 件 图 实 施 图 用 例 类 接 口 协 作 活 动 类 节 点 组 件 顺 序 图 协 作 图 状 态 图 活 动 图
UML的5种视图 • 在UML 中,系统的表示使用5种不同的“视图” ( UML定义的五类图,共 9 种图形),它们可以从软件开发的不同阶段、不同视角 和不同层次对所开发的系统进行描述。每个视图由一组图定义。 • 用户模型视图 - 用例图,从外部描述系统的功能 • 结构模型视图 - 类图和对象图,描述类、对象以及它们之间的关系等静态结构,用来支持系统的功能需求,即描述系统内部的功能是如何设计的。 • 行为模型视图 - 序列图、协作图、状态图和活动图,描述形成系统并发与同步机制的线程和进程,关注的重点是系统的性能、易伸缩性和系统吞吐量等非功能性需求。 • 实现模型视图 - 构件图,用来描述系统的实现模块、它们之间的依赖关系以及资源分配情况,主要用于系统的配置管理。 • 环境模型视图 - 部署图,用来描述物理系统的硬件拓扑结构,描述软件构件到物理节点的映射。
UML用于软件系统开发的不同阶段 • 用户需求: • 可使用用例图来捕获用户的需求,用例图从用户的角度来描述系统的功能,表示了操作者与系统的一个交互过程。 • 系统分析: • 可使用类图来描述系统的 静态模型,为了实现用例、类之间需要协作,可用动态模型的状态图、顺序图、协作图来描述。 分析阶段只考虑问题域的对象建模。需要通过静态模型和动态模型来描述系统结构和系统行为。 • 系统设计: • 对类进行细化,如引入人机交互的接口类、处理数据类、处理通信类。 • 系统实现: • 用构件图描述代码构件的物理结构以及构件之间的关系。用配置图来描述和定义系统中软硬件的物理通信结构。 • 测试: • 可使用类图进行单元测试;可使用构件图、协作图进行集成测试;可使用用例图进行确认测试。
UML and the OO process • Workflow diagrams 工作流图 • Object model 对象模型 • Sequence diagrams 顺序图 • Collaboration diagrams 协作图 • Package diagrams 包图 • Component diagrams 组件图 • Deployment diagrams 配置图
Class Attribute operation() UML class diagrams
帐单的类框图 继承关系
Royal Service Station Requirements • 1.皇家服务站为顾客提供三种类型的服务:加油,车辆管理和停车。也就是说,一个顾客可以向他自己车辆的槽中加油,可以进行车辆维护,或者能够在停车场中停放车辆。一个顾客可以选择在购买时自动付账或是按月账单付账。无论是那种情况,顾客都可以用现金,信用卡或个人支票支付。皇家服务站燃料出售时,根据每加仑价格,而这个价格又依赖于燃料是否是柴油的,标准的或是高级的。服务的价格是根据部件和劳动力的费用。停车的价格根据天,周和月的比率。燃料,服务维护,部件和停车的价格都可能变动;只有站长Manny 可以改动价格。根据他的决定权,可以指定给某一个顾客以打折的待遇;这个折扣也可能根据不同的顾客有所变动。而且所有的购买活动要缴纳5%的税。
Royal Service Station Requirements • 2. 系统必须跟踪每月的账单情况和加油站提供的产品和服务情况。跟踪的结果要报告给站管理员。 • 3. 站管理员使用系统控制清单。系统会在库存少的时候提出警告,并自动定购新的部件和燃料。 • 4. 系统将跟踪信用记录,并且对其过期的用户发出警告信。账单在顾客购买后的每个月的第一天发给顾客。任何的账单只要在期限后90 天没有付,就会取消顾客的会员资格。 • 5. 系统仅用于常规的重复顾客。常规的重复顾客意味着一个顾客可以通过姓名,地址和生日识别,并且他至少每个月在服务站消费一次。
Royal Service Station Requirements • 6. 系统必须处理和其他系统的接口的日期要求。一个信用卡系统用于处理产品和服务的信用卡交易。信用卡系统要使用如下信息:卡号,姓名,到期日期和购买量。在接受这些信息后,信用卡系统证实交易使被允许还是拒绝。部件订购系统接受部件码和数量。他返回部件发送的日期。燃料订购系统要求一个燃料定购的描述,包括燃料类型,加仑量,站名和站的识别码。它返回燃料将被发送的日期。 • 7. 系统必须纪录税和相关信息,包括每一个顾客付的税,和每项的税。 • 8. 站长必须能够按照要求复查税纪录。 • 9. 系统会为用户提供定期信息,提醒他们车辆到时候该维修了。通常,维护需要每六个月一次。
Royal Service Station Requirements • 10.顾客可以在站停车场中租车位。每位用户必须从系统中要求一个可获得的车位。站长能够查看有关车位的占用情况的月纪录。 • 11.系统维护一个统计信息库,可访问统计数和顾客姓名。 • 12.站长必须能够按照要求复查统计信息。 • 13.系统能够按要求报告价格的打折分析情况给站长。 • 14.系统可以自动通知休眠账目的所有者。也就是,如果顾客超过两个月没有在站内进行消费的话,会被通知。 • 15.系统不可用时间不能超过24 小时。 • 16.系统必须对顾客的信息进行保密。
Package diagrams • View the system as a small collection of the packages将系统看作是包的集合
Sequence diagram for the refuel use case Credit Card System Purchase Refuel Customer Service Station refuel( ) object Verify customer (credit_card_sum, amount ) start or end of a message message pay_by_cash( ) cancel credit card transaction new_purchase (customer, refuel, date, gallons) transaction okay new_refuel (customer, date, gallons) condition message name object’s lifeline
Collaboration diagram for the parking use case Customer 3: parking_at(location) 1: parking( ) 4: new_purchase(customer, parking, date, location) Service Station Purchase 2: next_available( ) 5: new_parking(customer, location) Parking Space Parking
Program design considerations • 如何将概念设计变成技术设计? • User interface requirements用户界面需求 • 将概念设计直观化 • Data structure and management details数据结构和管理细节 • 将概念设计可编程 • Nonfunctional requirements非功能性需求 • Reused components复用组件 • Reusable components可复用的组件
OO Measurement • 局域性(局部化) • 封装性 • 信息隐藏 • 继承性 • 抽象
Localization • 局域性(Localization)是指信息被集中在一个程序内的方式。 • (1)传统方法:数据与过程分离,功能分解和功能信息局域化。其典型的实现形式为过程模块,工作时用数据驱动功能。 • 此时的量度放在功能内部结构和复杂性上(如模块规模、聚合度、环路复杂性等)或放在该功能与其他功能(模块)的耦合方式上。 • (2)OO方法:局域性基于对象,因为类是OO系统的基本单元,对象封装数据和过程,因此应把类(对象)作为一个完整实体来量度。 • 另外,操作(功能)和类之间的关联是一对一的。因此,在考虑类合作中的量度时,必须能适应一对多和多对一的关联。
封装性 • 封装(Encapsulation)是指一个项集合的包装。 • (1)传统方法:记录、数组,只有数据没有过程,为低层次的封装;过程、函数、子例程和段,则只有过程没有数据,为中层次的封装。其量度的重点分别在代码行的数据和环路的复杂性。 • (2)OO方法:OO系统封装拥有类的职责(操作),包括类的属性、操作和特定的类属性值定义的类(对象)的状态。其量度和重点不是单一的模块,而是包含数据(属性)和过程(操作)的包。