补充-面向对象技术-综合_第1页
补充-面向对象技术-综合_第2页
补充-面向对象技术-综合_第3页
补充-面向对象技术-综合_第4页
补充-面向对象技术-综合_第5页
已阅读5页,还剩86页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程面向对象基础2主要内容一、面向对象基本概念的应用二、基于UML的面向对象软件开发三、

基于UML的面向对象分析、设计过程

(以ATM系统为例)3一、面向对象基本概念的应用主要内容:介绍面向对象的基本概念、特征及要素学习目标:了解面向对象的基本概念及面向对象技术的主要特征,学会用面向对象的思想去思考软件问题。4重要的面向对象概念-类和对象面向对象起源于哲学观点。

"面向对象”是一种认识客观世界的世界观,这种世界观将客观世界看成是有许多不同种类的对象构成的,每个对象有自己的内部状态和运动规律,不同对象之间的相互联系、相互作用就构成了完整的客观世界。万事万物都是对象。

5面向对象重要概念-对象对象是现实世界中客观存在的一个实体。对象不仅能表示具体的事物,还能表示抽象的规则、计划或事件,如:飞机、车辆、计算机、飞行、事故、演出等。对象也是计算机程序设计的核心。

面向对象重要概念-对象在面向对象的系统中,对象是一个封装了数据属性和操作行为的实体。数据属性:数据描述了对象的状态操作行为:操作可操纵私有数据,改变对象的状态7重要的面向对象概念——类和对象在客观世界中,有一些对象具有相同的特征,将他们称之为同类对象。于是出现了类的概念。

8面向对象重要概念-类类是具有相同属性和方法的一组对象的集合,它为属于该类的全部对象提供了统一的对象描述。同类对象具有相同的属性和方法,是指它们的定义形式是一样的,而不是说每个对象的属性值相同。例:汽车、手机、洗衣机9类的作用:分类:用于区分不同事物。是创建对象的模板:产生对象。10利用这种"面向对象”认知的世界观来进行软件开发。程序由类和对象组成。

classTree{…………}TreeaTree=newTree();“面向对象”运用到软件中-面向对象软件工程(OOA/OOD/OOP)11怎么得到类和对象?-抽象把事物共同点抽取出来,以统一的方式进行概要描述的过程;从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征;过滤掉对象的一部分特征和操作直到只剩下你所需要的属性和操作。12抽象的例子-洗衣机类WashingMachine类,它是创建新的洗衣机实例的模板。

属性

brandNamemodelNameserialNamecapacity操作acceptClothes()acceptDetergent()turnOn()turnOff()13抽象的例子-洗衣机类模型中的属性和操作越多,模型就越接近实际。

属性

brandNamemodelNameserialNamecapacitytrapmotormotorSpeed操作

acceptClothes()acceptDetergent()turnOn()turnOff()acceptBleach()controlWaterLevel()14是不是现实世界中类的所有属性和方法都需要在系统中进行抽象呢??当然不是啦!作为一个分析人员,要根据用户实际的业务情况进行选择。例如在《课堂考勤系统》中,教师类只需要有姓名、职称、性别这些属性,因为这些是用户需要的。而在《教职工人事管理系统》中,教师类就需要姓名、出生年月、入职时间、所属单位、职称、性别、婚姻状况等属性。

1.从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征;2.过滤掉对象的一部分特征和操作直到只剩下你所需要的属性和操作。

15面向对象重要概念-封装封装是把对象的属性和方法结合成一个独立的系统单位,并尽可能地隐藏对象的内部细节,避免了外部的干扰和不确定性。封装是一个对象形成两个部分:接口部分和实现部分。接口部分对用户是可见的,而实现部分是用户不可见的,它对外界隐藏了操作的细节。16封装的好处保护对象,防止用户直接存取对象的内部细节。保护客户端,防止对象实现部分的影响的客户端的变化。封装防止了程序相互依赖而带来的变动影响。

2009-0917让对象细节受到保护——封装当一个对象执行自己的操作时。它对外界隐藏了操作的细节。封装可以提高重用性,并且让程序易于维护18封装的程度问题以诗《春晓》为例,在每一句前面加"**”。假设将产生**的方法写在了类ChunXiao2中,根据前面所讲,类中的方法代表的是类的操作,而产生**和春晓没有

直接关系,这样的封装看起来好像不合理,怎么改进一下呢

?StarFactoryStringbuild()ChunXiao3【代码】StarFactory.javaChunxiao3.java19封装的不同,重用也不同了现在我们不仅可以在《春晓》里面用**了,还可以在《静夜思

》里面用**了StarFactoryStringbuild()ChunXiao3JingYeSi【代码】JingYeSi.java20面向对象重要概念-消息传递对象之间通过消息进行通信。21面向对象重要概念——继承在客观世界中,类是有着层次关系的,那么程序世界中,也要能够表现这种层次。于是,有了继承。

22面向对象重要概念-继承继承是让某个类型的对象获得另一个类型的对象的特征。一个类如果继承了另一个类的一般特征,则被称为后代类/子类/一般类。而被继承的类就称为祖先类/父类/特殊类。利用继承,子类可以继承父类的属性和方法23

当一个类只允许有一个父类时,也就是说,当类等级为树形结构时,类的继承是单继承;当允许一个类有多个父类时,类的继承是多重继承。类举例:学生、图书、运输工具等继承举例:某专业的学生、外文版图书等单继承与多重继承24

继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。因此,一个类实际上继承了它所在的类等级中在它上层的全部基类的所有描述。

继承性是面向对象程序设计语言不同于其它语言的最主要的特点,也是面向对象技术和非面向对象技术的一个很明显的区别。

继承的传递性25继承的好处可使所建立的软件具有开放性、可扩充性,增加了代码的可重用性通过继承关系,使公共的特性能够共享,提高软件的可重用性,降低开发和维护费用

26多态性不同的类具有相同名称的操作。在面向对象中,每个类都能够自己知道如何执行自己的操作。多态性增加了软件的灵活性和重用性27面向对象其它概念-关联单向关联在现实世界中,对象之间通常会发生某种联系,程序世界中用"关联”来表示。

28面向对象其它概念-关联对象之间还可以以多种方式发生关联29面向对象其它概念-关联类也可以发生关联:一个类可以和多个类关联30对象的多重性在关联中一个类的对象可以对应另一个类的多少个对象。一个教师——多个学生一门课程——多个教师一辆轿车——4个车轮31聚集计算机系统计算机由许多不同类型的构件组成,它是一个聚集体。

聚集是对象之间的另外一种关联,表示类之间是整体与部分的关系32组成聚集对象和它的组成对象之间有强关联时,我们把这种聚集叫做组成。在组成关系中,整体拥有个部分,部分与整体共存。

33小结一下类和对象抽象封装继承多态关联、聚合、组成34了解这些概念的意义运用面向对象的概念可以帮助我们:理解客户的领域知识用客户能够理解的术语来说明你对问题的理解准确的建立模型35通过一个例子复习面向对象的概念引入问题:现在让我们来编写一个java小程序,实现在命令行模式下输出以下形式的著名诗词《春晓》,你会怎么做?**春晓**春眠不觉晓,**处处闻啼鸟。**夜来风雨声,**花落知多少。

36你可能会这么写publicclassChunXiao1{publicstaticvoidmain(String[]args){System.out.println("**春晓");System.out.println("**春眠不觉晓,");System.out.println("**处处闻啼鸟。");System.out.println("**夜来风雨声,");System.out.println("**花落知多少。");}}很简单,但是有时候并不是越简单越好!现在,如果想把**改变为*,该怎么办?改5次吗?【代码】Chunxiao1.java37你可能还会这么写publicclassChunXiao2{publicStringbuildStar(){ return"**";}publicstaticvoidmain(String[]args){ChunXiao2c=newChunXiao2();System.out.println(c.buildStar()+"春晓");System.out.println(c.buildStar()+"春眠不觉晓,");System.out.println(c.buildStar()+"处处闻啼鸟。");System.out.println(c.buildStar()+"夜来风雨声,");System.out.println(c.buildStar()+"花落知多少。");}}利用方法buildStar()来产生**,这样每次只用修改一个地方了。我们把产生**的功能封装了起来,对外界使用者来讲,不需要知道方法内部的细节,只需要知道调用这个方法可以产生**就行了。

【代码】Chunxiao2.java38给对象发消息,让它做的更多-消息传递有些同学不喜欢刚才的排版,全部是**,没有创意。既然StarFactory类是制造*的工厂,那么它应该有更多的产品啊,不能一直是**吧。怎么办?改良版StarFactory2StarFactory2Stringbuild(inti)ChunXiao4【代码】StarFactory2.javaChunxiao4.java39封装的程度问题刚才我们将产生**的方法写在了类ChunXiao2中,根据前面所讲,类中的方法代表的是类的操作,而产生**和春晓没有

直接关系,这样的封装看起来好像不合理,怎么改进一下呢?StarFactoryStringbuild()ChunXiao3【代码】StarFactory.javaChunxiao3.java40封装的不同,重用也不同了现在我们不仅可以在《春晓》里面用**了,还可以在《静夜思

》里面用**了StarFactoryStringbuild()ChunXiao3JingYeSi【代码】JingYeSi.java41用继承改变刚才的《春晓》自从有了StarFactory,《春晓》的世界变得丰富起来。既然**可以创造,那么★★也应该可以吧。还有△△、■■、

呢?全部都可以。那么让我们创建GraphicFactory类吧。它表示创造上述图形的总厂,而它的子类用来创造每一种图形。

42StarFactoryStringbuild()GraphicFactoryStringbuild()PentacleFactoryStringbuild()SquareFactoryStringbuild()DiamondFactoryStringbuild()所有的子类都有build()方法,代表创造不同图形的操作创造**创造★★创造■■创造

43【代码】GraphicFactory.javaStarFactory.javaDiamondFactory.javaPentacleFactory.javaChunxiao5.java44多态性的表现StarFactoryStringbuild()GraphicFactoryStringbuild()PentacleFactoryStringbuild()SquareFactoryStringbuild()DiamondFactoryStringbuild()45扩充知识:面向对象软件工程主要内容:介绍面向对象的基本概念、特征及要素学习目标:了解面向对象的基本概念及面向对象技术的主要特征,学会用面向对象的思想去思考软件问题。46面向对象技术(面向对象方法OOSD)软件工程方法学传统方法学SA+SD+SP面向对象方法学OOA+OOD+OOP开发软件的方法不同47传统方法学(结构化方法学)的缺点结构化方法要么面向操作,要么面向属性(数据),但却没有同时面向着两者。然而,软件系统本质上是信息处理系统,离开了操作便无法改变数据,而脱离了数据的操作又毫无意义。因此,结构化方法学存在的问题:软件重用性差软件可维护性差开发出的软件不能满足用户需要48面向对象方法学在面向对象方法学中,数据和行为同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合在一起的方法。

例:银行账户49OOSD的优点面向对象的系统分析和设计方法与其他方法不同之处在于,它使人们分析、设计一个系统的方法尽可能接近人们认识一个系统的方法。其基本思想为:对问题域进行自然分割,以接近人类思维的方式建立问题域模型,从而使设计出的软件尽可能地描述现实世界,构造出模块化、可重用的、可维护性好的软件,并能控制软件的复杂性和降低开发维护费用。

50二、基于UML的面向对象软件开发OOAOODOOP512.2面向对象分析(OOA)面向对象分析方法是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想分析问题。

52OOA的主要原则抽象封装继承分类聚合关联消息通信粒度控制行为分析形成概念的必需手段抽取关心的抽取共同的过程抽象数据抽象信息隐蔽使模型更简练、清晰抽象的表现形式复杂问题简单化事物间的联系对象间的动态联系53OOA中的三种基本模型功能模型:即用例模型对象模型:构建分析类,使用类图、对象图描述对象、对象属性、对象之间的关系,是系统静态模型。动态模型:利用活动图、时序图、协作图等描述系统动态行为。

54如何进行OOA?OOA的基本方法和步骤:识别对象标识对象属性识别对象行为识别对象所属的类定义主题词1.识别潜在对象2.筛选对象识别与当前问题相关的属性提取外部服务标识消息传递标识所属的类并建立类之间的关系552.3面向对象设计(OOD)面向对象设计方法是面向对象方法中的一个中间过渡环节。其主要作用是对OOA分析的结果做进一步的规范化整理,以便能够被OOP直接接受。在OOSE中,OOD的目标是建立可靠和实现的系统模型。具体而言,就是根据需求决定所需的类、类的操作以及类之间关联的过程。

562.3.2面向对象设计的准则模块化抽象信息隐藏低耦合高内聚通过抽象,得到类和对象。

内聚指的是对象内部信息关联的程度,尽可能让对象内部关联程度高。操作内聚类内聚一般——具体内聚不同对象之间相互关联的紧密程度叫做耦合度。低耦合就是指,使对象之间的关联程度低利用封装,将对象某些信息隐藏起来。

利用类和对象将数据结构和操作紧密的结合在一起,形成尽可能独立的模块57面向对象设计原则设计结果应该清晰易懂一般-具体结构的深度应当适当(抽象粒度适当)设计简单类使用简单的协议使用简单的操作把设计变动减至最少用面向对象方法设计软件,原则上也是先进行总体设计(即系统设计),然后再进行详细设计(对象设计)。系统设计——概要设计体系结构设计选择软件控制机构数据存储管理人机交互设计对象设计——详细设计对象设计算法设计优化设计58面向对象设计内容59对象设计的几个原则开闭原则(OpenClosedPrinciple,OCP)一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此,在进行面向对象设计时要尽量考虑结构封装机制、抽象机制和多态技术。替换原则(LSP)子类应该可以替换父类,并出现在父类能够出现的任何地方。依赖原则(DIP)在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。接口分离原则(ISP)如果拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所用方法更有效。

60面向对象设计过程中的主要工作对象定义规格的求精过程数据模型和数据库设计优化请思考以下问题:什么是UML?为什么需要建模?UML的结构中包括哪些内容?UML中主要有哪些图?用于静态建模的有哪几种图?用于动态建模的有哪几种图?

三、

基于UML的面向对象分析、设计过程63面向对象分析过程用户开发者管理者用户知识领域知识现实世界经验一般需求问题陈述建模对象模型功能模型动态模型64开始进行基于UML的OOA/OOD步骤1:陈述需求。与客户访谈,了解用户需求情况65ATM系统ATMATMATM中央计算机柜员终端分行计算机分行计算机账户账户账户账户66案例需求陈述某银行拟开发一个自动取款机系统,它是一个由自动取款机、中央计算机、分行计算机及柜员终端组成的网络系统。ATM和中央计算机由总行投资购买。总行拥有多台ATM,分别设在全市各主要街道上。分行负责提供分行计算机和柜员终端。柜员终端设在分行营业厅及分行下属的各个储蓄所内。该系统的软件开发成本由各个分行分摊。银行柜员使用柜员终端处理储户提交的储蓄事务。储户可以用现金或支票向自己拥有的某个账户内存款或开新账户。储户也可以从自己的账户中取款。通常,一个储户可能拥有多个账户。67案例需求陈述(续)柜员负责把储户提交的存款或取款事务输进柜员终端,接收储户交来的现金或支票,或付给储户现金。柜员终端与相应的分行计算机通信,分行计算机具体处理针对某个账户的事务并且维护账户。拥有银行账户的储户有权申请领取现金兑换卡。使用现金兑换卡可以通过ATM访问自己的账户。目前仅限于用现金兑换卡在ATM上提取现金(即取款),或查询有关自己账户的信息(例如,某个指定账户上的余额)。将来可能还要求使用ATM办理转账、存款等事务。68案例需求陈述(续)所谓现金兑换卡就是一张特制的磁卡,上面有分行代码和卡号。分行代码唯一标识总行下属的一个分行,卡号确定了这张卡可以访问哪些账户。通常,一张卡可以访问储户的若干个账户,但是不一定能访问这个储户的全部账户。每张现金兑换卡仅属于一个储户所有,但是,同一张卡可能有多个副本,因此,必须考虑同时在若干台ATM上使用同样的现金兑换卡的可能性。也就是说,系统应该能够处理并发的访问。69案例需求陈述(续)当用户把现金兑换卡插入ATM之后,ATM就与用户交互,以获取有关这次事务的信息,并与中央计算机交换关于事务的信息。首先,ATM要求用户输入密码,接下来ATM把从这张卡上读到的信息以及用户输入的密码传给中央计算机,请求中央计算机核对这些信息并处理这次事务。中央计算机根据卡上的分行代码确定这次事务与分行的对应关系,并且委托相应的分行计算机验证用户密码。如果用户输入的密码是正确的,ATM就要求用户选择事务类型(取款、查询等)。当用户选择取款时,ATM请求用户输入取款额。最后,ATM从现金出口吐出现金,并且打印出账单交给用户。70开始进行基于UML的OOA/OOD(续)步骤2:建立对象模型面向对象分析首要的工作,是建立问题域的对象模型。这个模型描述了现实世界中的"类与对象”以及它们之间的关系,表示了目标系统的静态数据结构。静态数据结构对应用细节依赖较少,比较容易确定。

71步骤2:建立对象模型(续)步骤2.1:确定类和对象类与对象是在问题域中客观存在的,系统分析员的主要任务,就是通过分析找出这些类与对象。首先,找出所有候选的类与对象;然后,从候选的类与对象中筛选掉不正确的或不必要的。用自然语言书写的需求陈述为依据,把陈述中的名词作为类与对象的候选者,用形容词作为确定属性的线索,把动词作为服务(操作)的候选者。

选取名词消除假的类需求说明暂定的类类72从需求陈述中找出名词,作为类和对象的候选者银行、自动取款机(ATM)、系统、中央计算机、分行计算机、柜员终端、网络、总行、分行、软件、成本、市、街道、营业厅、储蓄所、柜员、储户、现金、支票、账户、事务、现金兑换卡、分行代码、卡号、用户、副本、信息、密码、类型、取款额、账单、访问73步骤2:建立对象模型(续)筛选时主要依据下列标准,删除不正确或不必要的类与对象:冗余(储户=用户,现金兑换卡=磁卡=副本)无关(成本、市、街道、营业厅、储蓄所)笼统(银行、访问、网络、系统、软件、信息)属性(现金、支票、取款额、账单、余额、…)操作实现74从需求陈述中找出名词,

作为类和对象的候选者银行、自动取款机(ATM)、系统、中央计算机、分行计算机、柜员终端、网络、总行、分行、软件、成本、市、街道、营业厅、储蓄所、柜员、储户、现金、支票、账户、事务、现金兑换卡、分行代码、卡号、用户、副本、信息、密码、类型、取款额、账单、访问75步骤2:建立对象模型(续)步骤2.2:准备数据字典为所有建模实体准备一个数据字典。准确描述各个类的精确含义,描述当前问题中的类的范围,包括对类的成员、用法方面的假设或限制。

76步骤2:建立对象模型(续)步骤2.3:确定关联关联常用描述性动词或者动词词组来表示。在陈述中,某些动词词组表述的关联是不明显的,需要分析发现。某些关联与客观世界或者人的假设有关,必须同用户一起核实这种关联性。

77步骤2:建立对象模型(续)经过对需求陈述的分析,可以确定银行系统具备以下关联。得到初步的类和对象图78步骤2:建立对象模型(续)步骤2.4:确定属性79步骤2:建立对象模型(续)步骤2.5:完善对象模型80开始进行基于UML的OOA/OOD步骤3:建立动态模型建立动态模型的第一步,是编写典型交互行为的脚本。接下来从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象。81步骤3:建立动态模型步骤3.1:准备脚本编写脚本时,首先编写正常情况的脚本。然后,考虑特殊情况,例如输入或输出的数据为最大值(或最小值)。最后,考虑出错情况。82步骤3:建立动态模型-正常情况脚本ATM请储户插卡;储户插入一张现金兑换卡ATM接受该卡并读它上面的分行代码和卡号ATM要求储户输入密码;储户输入自己的密码"1234”等数字ATM请求总行验证卡号和密码;总行要求"39”号分行核对储户密码,然后通知ATM说这张卡有效ATM要求储户选择事务类型(取款、转账、查询等);储户选择"取款”ATM要求储户输入取款额;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论