首页计算机计算机软件软件工程 09 第九章 面向对象方法学引论.pptx

09 第九章 面向对象方法学引论.pptx

页数:70页文件大小:681.2 KB来源: 软件工程ppt课件

本课件讲解面向对象方法学的出发点与主要优点,阐述对象、类、消息、封装、继承与多态等核心概念,并介绍UML建模语言与对象模型、动态模型、功能模型及其相互关系。

第9章章节页,指出面向对象方法学的基本原则是尽可能模拟人类习惯的思维方式
实体对比页,对比问题域中的对象与不同程序设计语言对应的解空间对象
面向对象方法说明页,指出其以数据为主线并把数据和操作方法封装在对象中通过消息请求操作
查看本课件的文字版(共 70 页,供检索与复制)

第1页:第9章 面向对象方法学引论

第9章 面向对象方法学引论:第9章:面向对象方法学引论9.1面向对象方法学概述9.1.1面向对象方法学的要点面向对象方法学的基本原则:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程

第2页:客观世界与计算机中的实体

客观世界与计算机中的实体:客观世界中的实体——问题域中的对象;计算机中的实体——解空间对象;解空间对象取决于程序设计语言:汇编语言的对象:存储单元;面向过程的高级语言的对象:变量、数组、记录、文件等;面向对象的高级语言的对象:除上述元素外,还包括窗体、菜单、按钮、等等

第3页:以数据为主线

以数据为主线:与传统方法不同,面向对象方法以数据为主线,将数据和操作方法封装在对象中,通过消息请求对象主动执行它的内部操作,改变其内部私有数据

第4页:面向对象方法的四个要点

面向对象方法的四个要点

  • 认为客观世界是由对象组成
  • 把所有对象都划分成各种对象类(Class)
  • 把若干对象类组成一个层次结构的系统(类等级)
  • 对象彼此间仅通过传递消息互相联系。OO=Objects+Class+Inheritance+Communicationwithmessage

第5页:面向对象方法的优点

面向对象方法的优点:1.与人们习惯的思维方法一致;2.稳定性好;3.可重用性好;4.较易开发大型软件产品;5.可维护性好

第6页:喷泉模型

喷泉模型

第7页:对象的形象表示

对象的形象表示:面向对象的概念9.2.1对象1、对象的形象表示状态S操作1操作2操作3界面操作1、2、3的实现图

第8页:对象的定义

对象的定义

  • 定义1:对象是具有相同状态的一组操作的集合
  • 定义2:对象是对属性值和操作的封装
  • 定义3:对象::=<ID,MS,DS,MI>其中,ID是对象的名字;MS是对象中的操作集合;DS是对象的数据集合;MI是对象受理的消息名集合(即对外接口)。2

第9页:用自动机模拟对象

用自动机模拟对象:状态S操作:f1,f2,…,fn转换:g1,g2,…,gn图9.3用自动机模拟对象转换:新状态S’=gi(X,S)输出fi(X,S)输入fi,X

第10页:对象的特点

对象的特点

  • 以数据为中心
  • 对象是主动的
  • 实现了数据封装
  • 本质上具有并行性
  • 模块独立性好

第11页:类(Class)

类(Class):其他概念1、类(Class)类就是对具有相同数据和相同操作的一组相似对象的定义。如:Circle类具有相同的数据(圆心坐标、半径、颜色)和相同的操作(显示自己、放大缩小半径、在屏幕上移动位置)

第12页:Queue类的定义

Queue类的定义:又如:下面C++语言定义的Queue类,可用于实现一个队列(即先进先出的表):ClassQueue{intq[100];intsloc,rloc;public:voidinit();//成员函数voidqput(inti);intqget();}

第13页:类的私有与公有变量

类的私有与公有变量:类有私有变量(Private)和公有变量(Public)。缺省时,都属于私有的,只能由类内部其他成员来访问,不能由程序的其他部分来访问。这是一种实现封装的方法

第14页:实例(Instance)

实例(Instance):实例就是由某个特定的类所描述的一个具体的对象。如:Circlea;//声明Circle类实例aQueueQ1,Q2;//声明Queue类实例Q1和Q22、实例(Instance)

第15页:消息(Message)

消息(Message):消息就是用来请求对象执行某个处理或回答某些信息的要求。消息既可以是数据流,也可以是控制流。一条消息可以发送给不同的对象,对消息的解释完全由接收信息的对象来完成,不同的对象对相同形式的消息可以有不同的解释。3、消息(Message)

第16页:消息的组成

消息的组成:与传统程序的“调用/返回”所不同的是,对于传来的消息,对象可以返回相应的回答信息,也可以不返回

  • 接收信息的对象
  • 信息选择符(即消息名)
  • 零个或多个变元(参数)。如:MyCircle.Show(GREEN)

第17页:方法(Method)

方法(Method):4、方法(Method)方法,是对象所能执行的操作。C++中把方法称为成员函数,如Circle类中定义的成员函数:Show(intcolor)

第18页:属性(Attribute)

属性(Attribute):5、属性(Attribute)属性,是类中定义的数据。C++中把属性称为数据成员

第19页:封装(Encapsulation)

封装(Encapsulation):6、封装(encapsulation)封装就是信息隐藏,通过封装对外界隐藏了对象的实现细节

第20页:继承(Inheritance)

继承(Inheritance):7、继承(Inheritance)继承,是指能够直接获得已有的性质和特征,而不必重复定义它们。A的操作A的变量类AA的实例变量从A的继承特性B的操作B的变量类B继承来的A的实例变量B的实例变量类AA的实例a1B的实例b1类B:A的子类图9.4实现继承机制的原理

第21页:多态性(Polymorphism)

多态性(Polymorphism):8、多态性(Polymorphism)多态性,指子类对象可以象父类对象那样使用,同样的消息既可以发送给父类对象,也可以发送给子类对象。即不同等级的类,可以公用一个方法的名字。C++中,多态性是通过虚函数来实现的。在不同层次的类中,虚函数实现算法不同,在运行时根据接收消息的对象所属于的类来决定执行虚函数的版本,称为动态联编

第22页:函数重载

函数重载:9、重载(Overloading)有两种重载:1)函数重载指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。如:Show(inta,intb)Show(intx)Show(intx,inty,intz)C++语言中函数重载是通过静态联编实现的。即编译时根据函数变元的个数和类型,决定函数版本

第23页:运算符重载

运算符重载:2)运算符重载指同一运算符可以施加于不同类型的操作数上面。当被操作数类型不同时,运算符的含义是不同的。编译时根据被操作数的类型,决定使用算符的哪种语义

第24页:类成员函数的实现

类成员函数的实现:另外,在实现一个类成员函数时,必须通过用类名限定函数名来告诉编译器这个函数属于哪个类。如,编写qput()函数:VoidQueue::qput(inti){if(sloc==100){cout<<“Queueiffull”;return;}sloc++;q[sloc]=i;}

第25页:调用成员函数

调用成员函数:从程序中调用一个类的成员函数,用对象和点运算符。如:Queueob1,ob2;ob1.init();//是对对象ob1的初始化函数init()的调用ob1,ob2之间的唯一关系是它们是同一类对象。ob1的初始化不影响ob2

第26页:面向对象建模

面向对象建模:用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是

  • 对象模型:描述系统的数据结构
  • 动态模型:描述系统的控制结构
  • 功能模型:描述系统的功能。3种模型必不可少,其重要程度不同,对象模型是最基本、最重要的

第27页:UML简介

UML简介:UML(UnifiedModelingLanguage)UML是面向对象的分析与设计(OOA&D)方法发展的产物

第28页:UML的出现

UML的出现:公认的面向对象建模语言出现于70年代中期。90年代中,一批新方法出现了,其中最引人注目的是Booch1993、OOSE和OMT-2等

第29页:统一建模语言的产生

统一建模语言的产生:众多的建模语言各有优点,大多类同,但仍存在某些细微的差别,妨碍了用户之间的交流。统一建模语言在这样的背景下产生

第30页:UML的发展与版本

UML的发展与版本:1995年10月:第一个公开版本UM0.8(UnifiedMethod)。1996年6月:UM改名为UML(UnifiedModelingLanguage),发布UML0.9。1996年底:UML占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。现最新版本:UML2.0

第31页:UML与开发过程

UML与开发过程:UML是标准的建模语言,而不是标准的开发过程。在不同组织和不同应用领域,UML应用需采取不同的开发过程。1998年:RUP(RationalUnifiedProcess)是一种典型的建模过程。2.标准建模语言UML的内容

第32页:UML的五类图

UML的五类图:UML的定义包括UML语义和UML表示法两部分。UML的重要内容可以由五类图(9种图形)来定义:1)用例图:从用户角度描述系统功能,并指出各功能

第33页:类图

类图:2)静态图:包括类图、对象图和包图

第34页:对象图与包图

对象图与包图:2)静态图:包括类图

第35页:行为图与交互图

行为图与交互图

  • 行为图:描述系统的动态模型
  • 交互图:描述对象间的交互关系

第36页:实现图

实现图:5)实现图:如配置图,定义系统中软硬件的物理体系结构

第37页:UML的应用领域

UML的应用领域:标准建模语言UML的应用领域UML适用于软件开发中从需求分析到测试的不同阶段:需求获取:用例图、活动图需求分析:类图、对象图和包图系统分析与设计:状态图、顺序图、合作图、活动图、部件图和配置图。测试:单元测试用类图、集成测试用部件图和合作图、确认测试用用例图等

第38页:UML用于描述非软件系统

UML用于描述非软件系统:UML常用于建立软件系统模型,但同样可用于描述非软件领域的系统,如:机械系统;企业机构或业务过程;处理复杂数据的信息系统;具有实时要求的工业系统或工业过程;…等

第39页:类图的基本符号

类图的基本符号:对象模型9.4.1类图的基本符号1.定义类类名属性服务图

第40页:定义属性

定义属性:UML描述属性的语法格式:可见性属性名:类型名=初值{性质串}可见性:公有(public)/+、私有(private)/-、保护(protected)/#(没有默认可见性){性质串}:可能枚举值或其它性质,如{只读}例:-管理员:String=“未定”类变量实例:-货单数:Integer(类变量在该类所有对象中的属性值相等)

第41页:定义服务(操作)

定义服务(操作):UML描述操作的语法格式:可见性操作名(参数表):返回值类型{性质串}参数的语法:参数名:类型名=默认值-Show(x:integer=0,y:integer,z:integer):integer

第42页:关联与普通关联

关联与普通关联:表示关系的符号1.关联1)普通关联作家计算机使用被使用*1…*图

第43页:重数的表示方法

重数的表示方法:重数(multiplicity)的表示方法:0…1表示0到1个对象;0…*或*表示0到多个对象;1+或1…*表示1到多个对象;1…15表示1到15个对象;3表示3个对象

第44页:关联的角色

关联的角色:2)关联的角色人结婚丈夫妻子图9.7关联的角色上图是一个递归关联的例子。这种情况下,标明角色名有助于理解类图

第45页:限定关联

限定关联:3)限定关联目录文件文件名图9.8限定关联目录文件保存被保存1…*普通关联利用限定词把一对多关系简化成了一对一关系

第46页:关联类

关联类:4)关联类队列电梯控制器电梯按钮4*图9.9关联类示例控制器对象和电梯对象之间的连接,对应着一个队列(对象),它存储着控制器和电梯内部按钮的请求信息

第47页:共享聚集

共享聚集:聚集表示类与类之间是整体与部分的关系。2.聚集1)共享聚集课题组人成员*1…*图9.10共享聚集示例处于部分方的对象可同时参与多个处于整体方对象的构成

第48页:组合聚集

组合聚集:部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也随之消失。2)

第49页:教材结构的对象模型

教材结构的对象模型:教材描绘教材结构的对象模型(组合聚集)封面前言1+1+目录章节习题包含包含例子

第50页:普通泛化

普通泛化

  • 3.泛化(继承)
  • 普通泛化抽象类:描述子类的公共属性和行为,不能生成具体对象的类

第51页:复杂类图

复杂类图:比较复杂的类图示例

第52页:受限泛化

受限泛化:2)受限泛化给泛化关系(继承关系)附加约束条件,说明该泛化关系的使用方法和扩充方法。约束有:多重、不相交、完全和不完全

第53页:多重继承与不相交继承

多重继承与不相交继承:多重继承:一个子类可以同时多次继承同一个上层基类。不相交继承:一个子类不能多次继承同一个上层基类。(默认为不相交继承)

第54页:完全继承与不完全继承

完全继承
指父类的所有子类都已经在类图中穷举出来了。不完全继承:指父类的所有子类并没有在类图中穷举出来了。随着对问题理解的深入,不完全继承中可以不断扩充子类。(默认为不完全继承)

第55页:依赖关系

依赖关系

  • 4.依赖和细化
  • 依赖关系类B类A《友元》图9.15友元依赖关系描述两个模型元素(类、用例)之间的关系,其中一个模型元素是独立的(被箭头指),另一个依赖于独立的模型元素。如,一个类使用另一个类的对象作为自己的函数的参数。(友元:依赖类可以使用独立类中私有的或保护的成员)

第56页:细化关系

细化关系:2)细化关系分析类设计类图9.16细化关系示例细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层次模型之间的相关性,通常用于跟踪模型的演变

第57页:一家公司的对象模型

一家公司的对象模型:例子:公司员工名字电话号码主要产品地址雇佣解雇姓名地址身份证号码工资1+职务部门名部门工人经理0…1管理产品产品名成本重量项目项目名预算优先级生产1+主持参加1+1+1+

第58页:动态模型的基本概念

动态模型的基本概念

  • 事件:事件是某个特定时刻所发生的事情。它是引起对象状态转换的控制信息
  • 状态:状态就是对象在其生命周期中的某个特定阶段所处的某种情形
  • 行为:行为是指对象达到某种状态时所做的一系列处理操作

第59页:状态图

状态图:通常用UML提供的状态图来描绘动态模型。注意:每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型

第60页:

第61页:电话的状态图

电话的状态图:实例

第62页:功能模型

功能模型:通常,功能模型由一组数据流图组成。UML提供的用例图也是进行需求分析和建立功能模型的有力工具。以用例图建立起来的系统模型称为用例模型,它描述的是外部行为者所理解的系统功能

第63页:用例图

用例图:1、系统2、用例(usecase)行为者感受到的一个完整的功能。用例是类,代表一类功能,用例的实例称为脚本。3、行为者(actor)与系统交互的人或其他系统。它代表一种角色

第64页:用例之间的关系

用例之间的关系

  • 扩展关系向一个用例中添加一些动作后构成另一个用例,它们之间构成扩展关系
  • 使用关系一个用例使用另一个用例

第65页:扩展与使用关系的用法

扩展与使用关系的用法:描述一般行为的变化时采用扩展关系;两个或多个用例中出现重复描述时可采用使用关系

第66页:用例建模

用例建模:一个用例模型由若干幅用例图组成。创建用例模型的工作包括:定义系统、寻找行为者、寻找用例、描述用例、定义用例之间的关系、确认模型

第67页:寻找行为者

寻找行为者:1、寻

  • 谁将使用系统的主要功能?
  • 谁需要借助系统的支持来完成日常工作?
  • 谁来维护和管理系统?
  • 系统控制哪些硬件设备?
  • 系统需要与哪些其他系统交互?
  • 哪些人或系统对本系统产生的结果感兴趣?

第68页:寻找用例

寻找用例:2、寻找用例可以通过每个行为者回答下述问题来获取用例

  • 行为者需要系统提供哪些功能?
  • 行为者自身需要做什么?
  • 行为者是否需要读取、创建、删除、修改或存储系统中的信息?
  • 系统中发生的事件需要通知行为者吗?
  • 行为者需要通知系统某些事情吗?
  • 系统需要哪些输入输出?
  • 当前使用的系统存在的主要问题是什么?

第69页:三种模型之间的关系(上)

三种模型之间的关系(上)

  • 针对每个类建立的动态模型,描述了实例的生命周期或运行周期
  • 状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应
  • 功能模型中的处理(或用例)对应于对象模型中的类所提供的服务

第70页:三种模型之间的关系(下)

三种模型之间的关系(下)

  • 数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象
  • 数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象
  • 用例图中的行为者,可能是对象模型中的对象
  • 功能模型中的处理(或用例)可能产生动态模型中的事件
  • 对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构
顶部目录