3-面向对象软件开发技术(OOA-OOD-OOP)
OOA与OOD
交互界面子系统的设计:与界面有关的类及类间结构的设计,以及有关算法的设计。.
交互界面子系统和应用之间接口的设计。.
应用控制部分的设计:这部分对象主要完成应用的驱动工作。这部分对象不同于从现实
世界中抽象出来的对象,在现实世界和问题域中没有原型,它们同界面子系统中的对象及问题
OOA和OOD方法,Shlaer&Mellor的OOA方法,Rumbaugh的OOAD方法等。不同的方法
体系都分别体现了人们对OOA、OOD,以及面向对象软件开发过程的不同认识。本文的主要
目的就是,试图通过对现有OOA与OOD方法的共性进行纵观分析,弄清二者之间的边界问
题,评析从OOA到OOD过渡的难易,并讨论实现这种过渡所涉及的主要工作。
了理解问题;而在OOD阶段,它们的引入则主要是针对软件的构造和实现。分类结构通过继
承机制来实现,因而代码得到了有效地复用;组装结构则将一些类组合在一起构成较大的软件
构件。
7)OOA并没有考虑对象的产生问题,当其对应的实体在现实世界中出现时,它也就在问
题域中产生了。OOA也不考虑对象属性的取值和服务算法的实现。而在OOD阶段这些问题
要求进行这方面的工作,有的则将它放到设计阶段去完成,这主要是由OOA、OOD阶段划分
的不同所造成的。动态模型一般由一组状态转换图构成,从这组状态转换图可以映射到对象模
型。系统的动态模型从对象行为的角度刻划了系统功能,方便了从OOA到OOD的过渡。有的
方法虽未提供动态模型,但也提供了表示对象行为的类似方法。早期的OOA方法对建立系
什么是OOA/OOD
Object Oriented Analyzing
浅谈OOA,OOD,OOP的理解
浅谈OOA,OOD,OOP的理解OOA(⾯向对象分析)、OOD(⾯向对象设计)、OOP(⾯向对象编程),这3个概念,对于我们JAVA程序员来讲,或多或少应该都有所了解,或者说⾄少都听说过。
但是要谈到对其理解,可能对于多数⼊⾏不深的从业者来说,确实不是那么容易做到。
特别是对于绝⼤多数的3年以内的低中级软件⼯程师⽽⾔。
因为他们的⼯作更多是需要按照项⽬经理分配的任务来编写功能代码,很少有多余的时间去阅读或者思考⼀些概念性的东西。
说起这个问题,我也在⽹络上也搜索过很多的资料,⼤多摘录⾄书籍,⽐较官⽅化。
让初学者⽆从理解。
为了⼴⼤的新从业者或者应聘者,在这⾥,我们以⼀种实例的⽅式来对这3个概念进⾏重新的阐述:业务场景:建⾏卡持有者,张三与李四两⼈,现在需要张三给李四转账⼈民币5000元整。
按照业务分析后的流程图如下:对于分析业务流程,常见的2种:⾯向过程分析(POA),⾯向对象分析(OOA)⾯向过程分析(Procedure Oriented Analysis):是⼀种以过程为中⼼的编程思想,以数据流向为主要导向。
为了解决问题,将解决问题的业务过程,按照⼀定的顺序划分成为⼀个⼜⼀个的事件,然后再封装成⼀个⼜⼀个的函数,最后由⼀个函数统⼀的按照顺序⼀步⼀步的调⽤即可。
在⾯向过程分析中,顺序很重要,要实现功能只需要按照⼀定的顺序相互调⽤函数即可。
上述业务场景按照⾯向过程分析出来的结果就是:1. 程序检查张三卡中余额是否⾜够5000元⼈民币(事件1,满⾜则调⽤事件2)2. 程序从张三卡中扣除5000元⼈民币(事件2)3. 程序向李四卡中加⼊5000元⼈民币(事件3)4. 程序检测李四卡中是否正常⼊账(事件4,满⾜则结束整个业务)5. 程序向张三卡中加⼊5000元⼈民币(事件5)在上述过程中,我们将这个业务过程,分成了5个步骤,也叫做5个事件,那么如果需要在程序中完成该转账业务的话,那么我们只需要按照1-2-3-4-5这样的顺序依次调⽤函数⽅法即可。
什么是面向对象程序设计
什么是面向对象程序设计面向对象程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它使用“对象”来设计软件。
对象可以包含数据和代码,能够以一种直观和模块化的方式组织程序。
面向对象程序设计的核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。
类与对象类是创建对象的蓝图或模板,它定义了对象的属性(数据)和方法(行为)。
对象是根据类创建的具体实例,每个对象都有其自己的状态和行为。
封装封装是将对象的实现细节隐藏起来,只暴露出一个可以被外界访问的接口。
这样做的好处是增加了代码的安全性和易于维护性,因为对象的内部状态不能被外部代码直接访问或修改。
继承继承允许新创建的类(子类)继承现有类(父类)的属性和方法。
这使得代码重用成为可能,并且可以创建层次结构,其中子类可以扩展或修改父类的行为。
多态多态是指允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。
这通常是通过方法重载(Overloading)和方法重写(Overriding)来实现的。
面向对象的优点1. 代码重用:通过继承和多态,可以减少代码的重复编写。
2. 模块化:每个对象都是自包含的,这有助于模块化设计。
3. 易于维护:封装使得修改一个对象的内部实现不会影响使用该对象的其他部分。
4. 易于扩展:继承允许在不修改现有代码的情况下扩展功能。
5. 提高可读性:面向对象的代码通常更接近自然语言,因此更容易理解。
面向对象的缺点1. 性能开销:面向对象的程序可能比过程式代码运行得慢,因为需要更多的内存和处理时间来管理对象。
2. 设计复杂性:对于简单的问题,面向对象的设计可能会过于复杂。
3. 过度设计:有时开发者可能会过度使用面向对象的特性,导致设计过于复杂,难以理解和维护。
面向对象的实现面向对象程序设计可以在多种编程语言中实现,包括但不限于Java、C++、Python、C#等。
第10章 面向对象分析
第10章 面向对象分析
第10章 面向对象分析
• 面向对象软件开发技术
– 面向对象分析(OOA) – 面向对象设计(OOD) – 面向对象实现(OOP)
面向对象技术是一个有全新概念 的开发模式,其特点是:
(1)方法是对软件开发过程所有阶段进 行综合考虑而得到的; (2)从生存期的一个阶段到下一个阶段 所使用的方法与技术具有高度的连 续性;
取消交易
顾客可在按下选择键前任何一个时刻,拉动退币杆取 消交易收回硬币。
自动售货系统系统
-端1 * -端2
自动售货系统::售货
*
顾客
-端2
-端1 *
自动售货系统::供货
*
供货人
-端1 * -端2
自动售货系统::取货款
*
收银员
自动售货系统系统
-端1 *
-端2
售货
*
<<extends>>
售散装饮料
顾客
• 业务中的执行者扮演什么角色?这些角色可以 看作类,如客户、操作员等。
(2)筛选对象类,确定最终对象类 我们可以用以下选择特征来确定最终的对象: 1) 保留的信息:仅当必须记住有关潜在对象的 信息,系统才能运作时,则该潜在对象在分 析阶段是有用的; 2) 需要的服务:潜在对象必须拥有一组可标识 的操作,它们可以按某种方式修改对象属性 的值; 3) 多个属性:在分析阶段,关注点应该是“较 大的”信息(仅具有单个属性的对象在设计 时可能有用,但在分析阶段,最好把它表示 为另一对象的属性);
定义服务
• 对象=属性+操作(服务) • 因为在动态模型和功能模型中更明确地描 述了每个类中应该提供哪些服务,所以在 建立了这两个模型后才能最终确定类中应 有的服务。 • 事实上,在确定类中应有的服务时,既要 考虑该类实体的常规行为,又要考虑在本 系统中特殊需要的服务。
最新C++语言程序答案第四版清华大学汇总
最新C++语言程序答案第四版清华大学汇总C++语言程序答案第四版清华大学第一章概述1-1 简述计算机程序设计语言的发展历程。
解:迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。
1-2 面向对象的编程语言有哪些特点?解:面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。
面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。
通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。
因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。
C++语言是目前应用最广的面向对象的编程语言。
1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点?解:结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。
结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。
当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。
软件工程填空题(18套试题与答案)
《软件工程》填空题二、填空题(请把答案写在相应的横线上,每小题1.5分)1、软件是数据、计算机程序及其说明程序的各种文档。
2、概要设计主要是把各项功能需求转换成系统的体系结构。
3、面向对象开发方法包括OOA 、OOD 、OOP 三部分。
4、结构化设计中以数据流图为基础的两种具体分析设计方法是变换分析、事物分析设计。
5、在单元测试时,需要为被测模块设计驱动模块和桩模块。
6、CMM把软件过程从无序到有序的进化分成5个阶段,排序而形成5个逐层提高的等级,分别是初始级、可重复级、已定义级、已管理级和可优化级。
7.子类自动共享父类的属性和操作的机制称为继承。
8. 软件工程管理的具体内容包括对开发人员、组织机构、用户、文档资料等方面的管理。
9、可行性研究的三个方面是技术可行性、社会可行性和__经济可行性__。
10、在软件概要设计阶段,建立软件结构后,还应为每个模块写一份处理说明和_接口说明__。
11、在画分层的DFD时,父图与子图的输入输出数据流要__平衡__。
12、在详细设计阶段,除了对模块内的算法进行设计,还应对模块内的__数据结构_进行设计。
13. 对象的抽象是___类___。
14. 基线的作用是把各阶段的开发工作划分得更加明确,便于检查与确认阶段成果。
因此,基线可以作为项目的一个___检查点__。
15. 软件工程包括软件开发技术和__软件工程管理__两大部分内容。
16、开发过程管理包括项目计划、控制和___任务管理__等。
17、CASE是多年来在软件开发管理、软件开发方法、软件开发环境和__软件工具__等方面研究和发展的产物。
18、数据字典中有四类条目,分别是___数据流、数据项、数据存储、基本加工。
19、用于描述基本加工的小说明的三种描述工具是结构化语言、判定表、判定树_。
20、子类只继承一个父类的属性和操作,这称为__单重继承__。
21、McCabe复杂性度量又称__环路度量_。
22、喷泉模型是一种以用户需求为动力,以__对象__为驱动的模型。
面向对象的软件测试技术(转)
面向对象的软件测试技术(转)面向对象的软件测试技术相关知识点-面象对象(=objectoriented)技术1.对象和类l面象对象的编程语言:以对象为中心,以消息为驱动,程序=对象+消息l类就是一种代莱数据类型,就是设计的核心,就是通过抽象数据类型的方法去同时实现的一种数据类型l类是对某一对象的抽象,对象是某一类的实例,两者密切相关2.PCB、承继和多态性(1)封装:把数据和操作结合一体,使程序结构更加紧凑,避免了数据紊乱带来的调试与维护的困难(2)承继:可以从一个类衍生至另一个类,派生类承继了父类和祖先类的数据成员和函数,减少了软件的可扩充性,并为代码器重提供更多了强有力的手段(3)多态性:多种表现形式,可以用‘一个对外接口,多个内在实现方法’表示。
一.面向对象测试模型1.面向对象测试的分类依据面向对象研发模型(面向对象分析、面向对象设计、面向对向编程),分成:(1)面向对象分析的测试(ooatest)、面向对象设计的测试(oodtest):是对分析结果和设计结果的测试,主要对分析设计产生的文本进行的,是软件开发前期的关键性测试(2)面向对象编程的测试(ooptest):对编程风格和程序代码同时实现展开测试,主要的测试内容在oounittest和oointegratetest中彰显(3)面向对象单元测试(oounittest):对程序内部具体单一的功能模块的测试,主要对类成员函数的测试,是oointegratetest的基础(4)面向对象内置测试(oointergratetest):对系统内部的相互服务展开测试,例如成员函数间的相互作用,类间的消息传递。
不仅必须基于oounittest,还要参照ood、oodtest的结果(5)面向对象确认测试(oosystemtest)、面向对象系统测试(oosystemtest):最后阶段的测试,以用户需求为测试标准,借鉴ooa、ooatest的结果二.面向对象软件的测试策略1.面向对象分析的测试(1)面向对象分析是把e-r图和语义网络模型,即信息造型中的概念,与面向对象程序设计语方中的重要概念结合在一起而形成的分析方法。
12 第十二讲 OOA OOD OOP
阶段主要输出物:代码和开发文档
本次课程小结及上机安排
重点 了解并基本掌握OOA/OOD/OOP的思想
上机练习
1
n
概念模型
Account Userid Accountid Balance Currency Password Type InterestRate LastModified
概念类
面向对象分析OOA
需求 分析
查询 ATM 图形界面
插入银行卡
帐户
数据访问接口
…… ……
输入密码 提示输入密码 验证用户密码 读取帐户信息
Account 1 -Accountid:string -password:string -count:int +validate(accountno,pass) +getBalance()
软件类
DAO +getAccountInfo(accountno)
面向对象分析OOD
Customer Userid Username Address Phone Mobile Email Idtype IDNum 1 n Account Userid Accountid Balance Currency Password Type InterestRate LastModified
查询
1.客户插入银行 卡 2.系统提示客户 输入密码 3.客户输入密码 4.系统验证 ……
点击查询按钮
提示选择功能 读取帐户余额
显示帐户余额
序列图
面向对象分析OOD
OOD:Object-Oriented Design,面向对象设计 设计阶段则主要是确定实现用户需求的方法,即怎样做才 能满足用户需求,并构造出系统的实现蓝图。 面向对象设计引入了面向对象的概念和原则来指导设计工 作。OOD首先从OOA的结果开始,并将其从问题域映射到实现域, 为满足实现的需要,还要增加一些类,并对原有类及属性进行调 整。此外,还要完成应用控制、人机交互界面的设计等。 OOD的主要工作有: 1)问题域部分的设计主要是对OOA结果进行改进和精化,有 以下几个方面:
面向对象的软件开发过程(精品)
第5章面向对象的软件开发过程5.1软件开发过程软件开发过程指开发软件产品的一整套活动,其中主要包括软件描述、软件开发、软件有效性验证和软件演化。
不同的软件开发商,针对不同的开发项目可能会采用不同的方式组织上述4项活动的实施。
软件开发模型软件开发模型是对软件开发的全过程、活动和任务的抽象描述。
选择合适的软件开发模型将有利于提高软件开发的效率、软件产品的质量,以及日后的软件维护能力。
5.1.1软件开发面临的主要问题软件开发主要面临以下几个迫切需要解决的问题:1.软件可靠性软件可靠性是指软件系统能否在既定环境下运行并达到预期的结果。
尽管通过对软件进行调试和测试可以排除大约40%的错误,任何人也不能保证任何一个软件产品没有错误。
2.软件生产率计算机硬件的迅猛发展,带动了人们对软件需求的急剧增长。
与计算机硬件的发展速度相比,软件的生产效率极其低下。
3.软件重用性不同的应用领域要开发不同的应用软件,既使相同的应用目的也会由于需求上的微小差别,导致重新开发整个应用软件。
4.软件维护性多么优秀的软件开发队伍也无法保证软件产品在使用过程中不会出现任何错误,因此,日后的维护工作将显得格外重要,而修改和完善软件产品在使用过程中显现出来的错误和不足之处是软件维护阶段的主要任务。
5.1.2软件的生命周期软件工程将按照工程化的方法组织和管理软件的开发过程,具体地说,它将软件开发过程划分成若干个阶段,每个阶段按照制定的规范标准完成相应的任务。
软件的生命周期是指从某个软件的需求被提出并开始着手开发到这个软件被最终废弃的整个过程。
通常在这个过程中,应该包括制定计划、需求分析,系统设计、程序编码、系统测试、系统运行及维护阶段。
1.制定计划在正式开始开发软件项目之前,充分地研究、分析待开发项目的最终目标,整理出其功能、性能、可靠性及接口等方面的需求,计算出所需人力、物力的资源开销,推测日后可能获取的经济效益,提供支持该项目的技术能力以及给出开发该项目的工作计划。
面向对象oop编程
面向对象oop编程摘要:一、面向对象编程概述二、面向对象编程的基本概念1.对象2.类3.封装4.继承5.多态三、面向对象编程的优势四、面向对象编程的应用实例五、面向对象编程的注意事项正文:一、面向对象编程概述面向对象编程(Object Oriented Programming,简称OOP)是一种编程范式,它强调将复杂的问题分解为多个简单的对象,并让这些对象之间相互协作来解决问题。
面向对象编程是一种抽象的编程方法,它要求程序员从对象的角度出发,考虑问题的解决方案。
二、面向对象编程的基本概念1.对象对象是面向对象编程的基本单元,它是现实世界中某一具体事物在计算机中的抽象表示。
对象具有状态、行为和身份等属性。
状态是对象的数据,行为是对象的操作,身份是对象的类型。
2.类类是对象的抽象描述,它是一组具有相同属性和行为的对象的集合。
类定义了对象的属性和方法,是面向对象编程的基本构建块。
3.封装封装是将数据和操作数据的方法捆绑在一起的过程,它是面向对象编程的基本原则之一。
封装有助于提高代码的可维护性和安全性。
4.继承继承是一种机制,使得一个类可以继承另一个类的属性和方法。
继承有助于减少代码重复,提高代码的重用性。
5.多态多态是指同一操作在不同的对象上具有不同的行为。
它有助于提高代码的灵活性和可扩展性。
三、面向对象编程的优势面向对象编程具有以下优势:1.可维护性:面向对象编程有助于提高代码的可维护性,因为它可以将复杂的问题分解为多个简单的对象,每个对象具有独立的功能和职责。
2.可重用性:面向对象编程有助于提高代码的可重用性,因为它可以通过继承、组合和多态等机制实现代码的重用。
3.可扩展性:面向对象编程有助于提高代码的可扩展性,因为它可以通过添加新的对象来扩展系统的功能,而不需要修改现有的代码。
4.可靠性:面向对象编程有助于提高代码的可靠性,因为它可以通过封装、继承和多态等机制来降低代码之间的耦合度,提高代码的独立性。
面向对象程序设计
面向对象程序设计(Object-oriented Programming,简称OOP)是一种程序设计的思想,指的是将数据和操作数据的方法(函数)封装起来,变成“对象”,以处理问题。
OOP的出现为软件开发提供了一种新的思路和范式,它能够有效地提高程序的可维护性、可重用性、可扩展性和可靠性。
一、类和对象OOP的核心是“类”和“对象”。
类是抽象的,是描述对象共同特征形成的概念;而对象则是具体的、实实在在存在的东西。
一个类可以被看做是一组具有相似特征的对象的模板。
在面向对象的编程语言里,一个类拥有属性和方法,它们被用来描述类的特性和操作。
二、封装封装是OOP中的另一个重要特性,指的是将数据和代码封装在一个单元内,使得数据和方法只能通过对象来访问。
封装的好处是明确了每个类的职责和功能,将实现细节与外部接口分离,避免了不必要的干扰和错误。
三、继承继承是OOP中的一个基本概念,它可以实现代码复用并增加代码的可扩展性。
继承意味着一个子类可以继承父类的属性和方法,并且可以添加自己的属性和方法。
这样,子类可以“重写”父类的方法,从而实现类的个性化特征。
四、多态多态是指不同的对象通过同一个引用来调用它们自己的方法时,实现不同的行为,以使得代码更加灵活和可扩展。
多态在OOP中发挥了重要作用,使得程序可以根据需要而动态的创建不同类的对象,并进行不同的操作。
面向对象的程序设计是一种先进、灵活和高效的编程思想,它已经成为了主流的编程范式。
OOP能够提高程序的可维护性、可重用性、可扩展性和可靠性,以使得软件开发更加高效、快捷和质量更加稳定。
因此,学习面向对象的程序设计已经成为现代软件工程教育的重要组成部分,对于各种领域的软件工程师来说,都是不可或缺的技能。
面向对象设计OOD
1.4 类设计方法
• 实现描述必须包含充足的信息,以提供对协议描述中所描述的所有消息的适当 处理。接受一个类所提供服务的用户必须熟悉执行服务的协议,即定义“什么” 被描述;而服务的提供者 (对象类本身) 必须关心:服务如何提供给用户,即 实现细节的封装问题。
1.4 类设计方法
• (1) 界面 • 类的界面构成了类的规格说明,定义了与其他类的交互。界面包括操作特征及
– 6) 显式信息传递。除了依赖于最少的类外,还应该明确在这些类之间的信息流。在类之间 全局变量的共享隐含了信息的传递,并且是一种依赖形式。因此,两个类之间的交互应当 仅涉及显式信息传递。显式信息传递是通过参数表来完成的。
1.2 类设计的目标和方针
– 7) 派生类当作派生类型。继承结构的使用是面向对象开发方法的一大特色。每个派生类应 该当做基类的特殊化来开发,而基类所具有的公共界面成为派生类的共有界面的一个子集。 C++允许设计者选择类的基类是共有的或私有的。如果基类是共有的,则其共有界面将成 为新的派生类的共有界面部分,这表明基类的行为成为派生类的行为部分。这类似于类型 与派生类型之间的关系。如果基类是私有的,它的行为将不是继承类的公共行为部分而是 实现部分。对基类的划分是为了实现新类中的服务。
1.2 类设计的目标和方针
– 8) 抽象类。某些语言提供了一个类,用它作为继承结构的开始点,所有用户定义的类都直 接或间接以这个类为基类。C++支持多重继承结构,每种结构都包含了一组类,它们是某 种概念的特殊化。这个概念应抽象地由结构的根类来表示。因此,每个继承结构的根类应 当是目标概念的一个抽象模型。这个抽象模型生成一个类,它不用于产生实例。它定义了 一个最小的共有界面,许多派生类可以加到这个界面上以给出概念的一个特定视图。
C++语言程序设计课后答案(郑莉第4版)
第一章概述1-1 简述计算机程序设计语言发展历程。
解:迄今为止计算机程序设计语言的发展经历机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。
1-2 面向对象的编程语言有哪些特点?解:面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。
面向对象编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。
通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。
因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。
C++语言是目前应用最广的面向对象的编程语言。
1-3 什么是结构化程序设计方法?这种方法有哪些优点和缺点?解:结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。
结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。
当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。
1-4 什么是对象?什么是面向对象方法?这种方法有哪些特点?解:从一般意义上讲,对象是现实世界中一个实际存在的事物,它可以是有形的,也可以是无形的。
面向对象编程(oop)名词解释
面向对象编程(Object-Oriented Programming, OOP)是一种程序设计范式,它将现实世界中的事物抽象为程序中的对象,并通过对象之间的交互来实现各种功能。
在面向对象编程中,对象可以是具体的实体,也可以是抽象的概念,它们都可以拥有属性和方法,通过这些属性和方法可以描述和操作对象的特性和行为。
面向对象编程是现代软件开发中最常用的编程范式之一,它具有高内聚、低耦合的特点,能够提高代码的复用性、可维护性和可扩展性。
面向对象编程的核心思想包括封装、继承和多态。
1. 封装(Encapsulation)封装是面向对象编程的重要特性之一,它通过将数据和方法封装在对象内部,隐藏对象内部的实现细节,只暴露特定的接口给外部使用,从而保护数据的安全性和完整性。
封装可以使对象的内部状态只能通过指定的方法进行访问和修改,提高了程序的安全性和稳定性。
2. 继承(Inheritance)继承是面向对象编程中的另一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法,并且可以对其进行扩展或修改。
通过继承,可以减少重复的代码,提高代码的复用性和可维护性,同时也能够构建出更加抽象和通用的数据模型。
3. 多态(Polymorphism)多态是面向对象编程的另一个重要特性,它允许不同的对象对同一个消息做出不同的响应,即同一操作作用于不同的对象上可以有不同的结果。
通过多态,可以实现更加灵活的程序设计,减少代码的复杂度,提高程序的可扩展性和可维护性。
面向对象编程是软件开发中非常重要的一部分,它已经广泛应用于各种编程语言和评台上。
通过面向对象编程,可以更加方便地描述和模拟现实世界中的问题,提高程序的抽象能力和可扩展性,减少程序设计和开发的复杂度,从而提高软件开发的效率和质量。
面向对象编程是一种强大而灵活的编程范式,它通过封装、继承和多态等特性,使代码更加具有可读性、可维护性和可重用性,是现代软件开发不可或缺的一部分。
面向对象方法
面向对象方法面向对象方法是当前的主流开发方法,拥有大量不同的方法,主要包括OMT(Object Model Technology,对象建模技术)方法、Coad/Yourdon方法、OOSE(Object-Oriented Software Engineering,面向对象的软件工程)及Booch方法等,而OMT、OOSE及Booch最后统一成为UML(United Model Language,统一建模语言)。
1.Coad/Yourdon方法Coad/Yourdon方法主要由面向对象的分析(Object-Oriented Analysis, OOA)和面向对象的设计(Object-Oriented Design, OOD)构成,特别强调OOA和OOD采用完全一致的概念和表示法,使分析和设计之间不需要表示法的转换。
该方法的特点是表示简练、易学,对于对象、结构、服务的认定较系统、完整,可操作性强。
在Coda/Yourdon方法中,OOA的任务主要是建立问题域的分析模型。
分析过程和构造OOA概念模型的顺序由5个层次组成,分别是类与对象层、属性层、服务层、结构层和主题层,它们表示分析的不同侧面。
OOA需要经过5个步骤来完成整个分析工作,即标识对象类、标识结构与关联(包括继承、聚合、组合及实例化等)、划分主题、定义属性和定义服务。
OOD中将继续贯穿OOA中的5个层次和5个活动,它由4个部分组成,分别是人机交互部件、问题域部件、任务管理部件和数据管理部件,其主要的活动就是这4个部件的设计工作。
2.Booch方法Booch认为软件开发是一个螺旋上升的过程,每个周期包括4个步骤,分别是标识类和对象、确定类和对象的含义、标识关系、说明每个类的接口和实现。
Booch方法的开发模型包括静态模型和动态模型,静态模型分为逻辑模型(类图、对象图)和物理模型(模块图、进程图),描述了系统的构成和结构。
动态模型包括状态图和顺序图。
面向对象的OOA_OOD软件开发技术分析
第25卷 第5期2009年10月 忻州师范学院学报JOURNAL OF X I N ZHOU TE ACHERS UN I V ERSI TY Vol.25 No.5 Oct.2009 面向对象的OOA、OOD软件开发技术分析任胜兰(太原师范学院,山西太原030012)摘 要:面向对象是当前计算机界关心的重点,是上个世纪90年代软件发展的主流,实际上,面向对象的概念和应用已经超越程序设计和软件开发,而且已经渗透到了系统模拟、数据库、多媒体、图形技术、网络管理系统、CAD技术、人工智能等多个领域。
文章主要讨论面向对象的开发方法OOA和OOD,并且对面向过程与面向对象加以比较,阐述了面向对象的OOA、OOD之不足及适用范围,同时也分析了发展中存在的争论问题。
关键词:面向对象;OOA;OOD;软件开发中图分类号:TP311 文献标识码:A 文章编号:1671-1491(2009)05-0039-04 面向对象(Object-O riented,简称OO)技术是一种以对象为中心的分析和解决问题的新方法,它克服了传统方法中对象与行为之间联系松散的缺点,更能体现软件开发中的三个重要概念,即抽象、信息隐蔽和模块化。
因此面向对象技术已广泛应用于软件开发的各个阶段,从而产生了面向对象的分析方法OOA(Object-O riented Analysis),面向对象的设计方法OOD(Object-O riented Design)等面向对象的技术。
面向对象(OO:Object-O riented)是当前计算机界关心的重点,是90年代软件发展的主流,实际上,面向对象的概念和应用已经超越程序设计和软件开发,而且已经渗透到了系统模拟、数据库、多媒体、图形技术、网络管理系统、CAD 技术、人工智能等多个领域。
一些新的工程概念及其实现,如并发工程、综合集成工程等,也需要面向对象的支持。
实践证明,采用面向对象的方法在提高软件的可靠性、可理解性和可维护性,提高软件质量和生产效率,降低生产成本等方面都具有重要的意义。
软件工程 面向对象的技术
1. Coda方法的OOA
类与对象层 属性层 服务层
类的边界 实例的边界 实例连接
属性 消息连接
服务
结构层
主题层
泛化与特化结构 主题
整体与部分结构
图4.10 分析过程的五个层次
在Coda方法中, 构 造 和 评 审 OOA 概 念模型的顺序由五 个层次组成:类与 对象、属性、服务、 结构和主题
这五个层次表 示分析的不同侧面。
继承是使用现存的定义作为基础,建立新定义的 技术。是父类和子类之间共享数据结构和方法的机制, 这是类之间的一种关系。
继承性分:
单重继承:一个子类只有一个父类。即子类只继承 一个父类的数据结构和方法。
多重继承:一个子类可有多个父类。继承多个父类 的数据结构和方法。
基类
现存类定义 父类(基类)
继承
图 4.3 继承性
良好的接口,子系统内的类相互协作。标识问题本身 的并发性,为子系统分配处理器。
系统内部
保险单 填写界面
保险单
客户
数据库界面 (abstract)
Oracle 界面 Sybasec界面
子系统的分解是关键,可以有分层和分块:
分层:将软件系统组织为层次结构,每层是一个子系 统。分层结构又分为封闭式和开放式。
类具有属性,用数据结构来描述类的属性, 类具有操作,它是对象的行为的抽象,操作实现 的过程称为方法(method) ,方法有方法名,方法体 和参数。
由于对象是类的实例,在进行分析和设计时, 通常把注意力集中在类上,而不是具体的对象上。
对象和类的描述
类和对象一般采用“名字”、“属性”和“运算”来描 述。
基本概念: 问题域(problem domain) — 被开发系统的应用领域。 系统责任(system responsibilities) — 所开发的系统应 具备的职能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Introduction to Object Technology Concepts of Object Orientation 标识对象模型元素
面向对象软件开发技术
面向对象分析(OOA) 面向对象设计(OOD) 面向对象实现(OOP)
OOA/D中最关键、最基本的能力是熟练地 为软件组织分配职责。 OOA OOA强调在问题领域内发现和描述对象或 概念,而不是解决方案 。(做正确的事) OOD强调的是定义软件对象和这些软件对 象如何协作来满足需求。(正确地做事)
ATM系统原始的类图 系统原始的类图
3、划分主题 4、确定属性(分析、选择) 确定属性(分析、选择) 5、识别继承关系 6、反复修改
修 改 后 的 A T M 对 象 模 型
四、建立动态模型
在开发交互式系统时,动态模型却起着很重要的 作用。 第一步,是编写典型交互行为的脚本。虽然脚本 中不可能包括每个偶然事件,但是,至少必须保 证不遗漏常见的交互行为。 第二步,从脚本中提取出事件,确定触发每个事 件的动作对象以及接受事件的目标对象。 第三步,排列事件发生的次序,确定每个对象可 能有的状态及状态间的转换关系,并用状态图描 绘它们。 最后,比较各个对象的状态图,检查它们之间的 一致性,确保事件之间的匹配。
子系统设计
OOD设计金字塔 设计析和设计的定义有明显区别,但是在实 际的软件开发过程中二者的界限是模糊的。许 多分析结果可以直接映射成设计结果,而在设 计过程中又往往会加深和补充对系统需求的理 解,从而进一步完善分析结果。因此,分析和 设计活动是一个多次反复迭代的过程。 面向对象方法学在概念和表示方法上的一致性, 保证了在各项开发活动之间的平滑(无缝)过渡, 领域专家和开发人员能够比较容易地跟踪整个 系统开发过程,这是面向对象方法与传统方法 比较起来所具有的一大优势。
OOA 过程
概念上:OOA大体上按照下列顺序进行: 概念上:OOA大体上按照下列顺序进行:寻找类 大体上按照下列顺序进行 与对象,识别结构,识别主题,定义属性, 与对象,识别结构,识别主题,定义属性,建立 动态模型,建立功能模型,定义服务。 动态模型,建立功能模型,定义服务。 但,正如前面已经多次强调指出过的,分析不可 正如前面已经多次强调指出过的, 能严格地按照预定顺序进行,大型、 能严格地按照预定顺序进行,大型、复杂系统的 模型需要反复构造多遍才能建成。通常, 反复构造多遍才能建成 模型需要反复构造多遍才能建成。通常,先构造 出模型的子集,然后再逐渐扩充,直到完全、充 出模型的子集,然后再逐渐扩充,直到完全、 分地理解了整个问题,才能最终把模型建立起来。 分地理解了整个问题,才能最终把模型建立起来。
2、设想用户界面
界面对用户是否喜欢、是否接受一个系统起着很 重要的作用。 界面中的信息交换方式是非常重要的。 设想用户界面的目的就是确保能够完成全部必要 的信息交换,而不会丢失重要的信息。
3、画事件跟踪图/状态图 画事件跟踪图/ 确定事件与状态 UML顺序图、活动图表示事件活动的过程 UML状态图表示事件与对象状态的关系
以可实现的方式描述每个子系统 对象设计 消息设计 复审设计模型并在需要时迭代
对象设计 分析
系统设计
OOD设计准则 OOD设计准则
模块化 抽象 信息隐藏 弱耦合(减少交互耦合、增加继承耦合) 强内聚(服务内聚、类内聚、一般-特殊内聚) 可重用
OOD — 系统设计过程
划分分析模型 并发性和子系统分配 任务管理构件 数据管理构件 资源管理构件 人机界面构件 子系统间通信
OOA --- 面向对象分析
不论采用哪种方法开发软件, 不论采用哪种方法开发软件,分析的过程都是提 取系统需求的过程。 取系统需求的过程。 分析工作主要包括3项内容,这就是理解、表达和 分析工作主要包括 项内容,这就是理解、 项内容 理解 验证。 验证。 分析过程得出的最重要的文档资料是软件需求规 格说明(在面向对象分析中,主要由对象模型、 格说明 在面向对象分析中,主要由对象模型、动 在面向对象分析中 态模型和功能模型组成)。 态模型和功能模型组成 。
三、建立对象模型 获取客户对OO系统的需求 获取客户对OO系统的需求 OO 使用基本的需求作为指引来选择类和对象 为每个系统对象标识属性和操作 定义组织类的结构和层次 建造对象—关系模型 建造对象 关系模型
1、确定类和对象 找出候选的类与对象
筛选出正确的类与对象
ATM系统
ATM系统候选类和对象:
二、需求陈述
需求陈述的内容包括:问题范围,功能需求, 需求陈述的内容包括:问题范围,功能需求,性 能需求,应用环境及假设条件等。总之, 能需求,应用环境及假设条件等。总之,需求陈 述应该阐明“做什么”而不是“怎样做” 述应该阐明“做什么”而不是“怎样做”。 书写需求陈述时,要尽力做到语法正确, 书写需求陈述时,要尽力做到语法正确,而且应 该慎重选用名词、动词、形容词和同义词。 该慎重选用名词、动词、形容词和同义词。 需求陈述可简可繁。 需求陈述可简可繁。 反复迭代,逐步完整、准确、有效。 反复迭代,逐步完整、准确、有效。
ATM正常情况的事件顺序图 正常情况的事件顺序图
ATM取款类的状态图 取款类的状态图
五、建立功能模型/定义服务 建立功能模型/
功能模型表明了系统中数据之间的依赖关系, 以及有关的数据处理功能。 建立功能模型:数据流图、UML的用例图 定义服务
OOD— OO系统的设计 系统的设计
责任设计
消息设计 类及对象设计
一、 面向对象分析的基本过程
面向对象分析, 面向对象分析,就是抽取和整理用户
需求并建立问题域精确模型的过程。 需求并建立问题域精确模型的过程。
三个模型、 三个模型、五个层次
静态结构) 动态模型( 3个模型:对象模型 (静态结构)、动态模型(交互次 个模型: 序)和功能模型(数据变换)。 功能模型(数据变换) 复杂问题(大型系统)的对象模型由5个层次组成 复杂问题(大型系统)的对象模型由5
生命周期方法学把设计进一步划分成总体设计和 详细设计两个阶段。 面向对象设计细分为系统设计和对象设计。 系统设计确定实现系统的策略和目标系统的高层 结构。 对象设计确定解空间中的类、关联、接口形式及 实现服务的算法。 系统设计与对象设计之间的界限,比分析与设计 之间的界限更模糊。
OOD设计一般过程
三种模型之间的关系
三种模型分别从3个不同侧面描述了所要开发的系 统。它们相互补充、相互配合,使得我们对系统 的认识更加全面:功能模型指明了系统应该“做 什么”;动态模型明确规定了什么时候(即在何种 状态下接受了什么事件的触发)做;对象模型则定 义了做事情的实体。 在面向对象方法学中,对象模型是最基本最重要 的,它为其他两种模型奠定了基础。
小 结
近年来,面向对象方法学日益受到人们的重视, 近年来,面向对象方法学日益受到人们的重视,特 别是在用这种方法开发大型软件产品时, 别是在用这种方法开发大型软件产品时,可以把该 产品看作是由一系列本质上相互独立的小产品组成, 产品看作是由一系列本质上相互独立的小产品组成, 这就不仅降低了开发工作的技术难度, 这就不仅降低了开发工作的技术难度,而且也使得 对开发工作的管理变得比较容易了。 对开发工作的管理变得比较容易了。 使用面向对象范型能够开发出稳定性好、 使用面向对象范型能够开发出稳定性好、可重用性 好和可维护性好的软件。 好和可维护性好的软件。 UML是基于面向对象技术的标准建模语言 通常, 是基于面向对象技术的标准建模语言。 UML是基于面向对象技术的标准建模语言。通常, 使用UML的类图来建立对象模型,使用UML UML的类图来建立对象模型 UML的状态 使用UML的类图来建立对象模型,使用UML的状态 图来建立动态模型,使用数据流图或UML UML的用例图 图来建立动态模型,使用数据流图或UML的用例图 来建立功能模型。 来建立功能模型。
银行,ATM,系统,中央计算机,分行计算机,柜员终端,网络,总 行,分行,软件,成本,市,街道,营业厅,储蓄所,柜员,储户, 现金,支票,账户,事务,现金兑换卡,余额,磁卡,分行代码,卡 号,用户,副本,信息,密码,类型,取款额,账单,访问。
冗余:用户、磁卡、副本----储户、现金兑换卡 无关:成本、市、街道、营业厅、储蓄所 笼统:银行、网络、系统、软件、信息、访问 属性:有些名词实际上描述的是其他对象的属性,应该
1、编写脚本
脚本:系统在某一执行期间内出现的一系列事件。 脚本描述用户(或其他外部设备)与目标系统之间 的一个或多个典型的交互过程,以便对目标系统 的行为有更具体的认识。 编写脚本的目的:是保证不遗漏重要的交互步骤, 它有助于确保整个交互过程的正确性的和清晰性。 编写脚本:首先编写正常情况的脚本。然后,考 虑特殊情况,最后,考虑出错情况。
把这些名词从候选类与对象中去掉。当然,如果某个性质 具有很强的独立性,则应把它作为类而不是作为属性。
在ATM系统的例子中,“现金”、“支票”、“取款额”、“账单”、 “余额”、“分行代码”、“卡号”、“密码”、“类型”等,实际 上都应该作为属性对待。
操作、实现……
2、确定关联
初步确定关联 筛选 进一步完善 实例 p238-246
OOD — 对象设计过程 对象描述 涉及算法和数据结构 程序构件和接口
OOP ---- 面向对象实现
面向对象实现(OOP) 面向对象实现(OOP)
实现语言 基本实现手段 实现环境(类库、开发工具) 编码调试 测试
基本实现手段
类定义 对象创建 结构定义 实例关联定义 操作调用和消息发送 内存管理 封装 多态
面向对象分析(OOA)的关键: 识别出问题域内 面向对象分析(OOA)的关键: (OOA)的关键 的类与对象,并分析它们相互间的关系, 的类与对象,并分析它们相互间的关系,最终 建立起问题域的简洁、精确、 建立起问题域的简洁、精确、可理解的正确模 型。 在用面向对象观点建立起的3种模型中, 在用面向对象观点建立起的3种模型中,对象 模型是最基本、最重要、最核心的。 模型是最基本、最重要、最核心的。