面向对象方法学引论

  • 面向对象方法学引论
    • 9.1 面向对象方法概述
      • 9.1.1 什么是面向对象的开发方法
      • 9.1.2 面向对象开发方法的组成
        • OOSD由三部分组成
        • 1、OOA法
          • 对象模型(信息模型)
          • 状态模型(动态模型)
        • 2、OOD 法
        • 3、OOP 法
    • 9.2 面向对象的概念
      • 9.2.1 对象
      • 9.2.2 其它概念
        • 1、 类(Class)
        • 2、 继承 (Inheritance)
        • 3、消息(Message)
        • 4. 多态性和动态绑定
        • 5、方法(method)
    • 9.3 面向对象建模
    • 9.4 对象模型
    • 9.5 动态模型
    • 9.6 功能模型
    • 9.7 3种模型之间的关系

面向对象方法学引论

面向对象的思想最初出现于挪威斯陆大学和挪威计算机中心共同研制的Simula 67 语言中,其后,随着位于美国加利福尼亚的Xerox(施乐) 研究中心推出的Smalltalk–76 和80 语言,面向对象的的程序设计技术迅猛的发展。
  到了20世纪90年代,面向对象方法学已经成为人们在开发软件是首选的成熟的范型,成为当前最好的软件开发技术。
  传统的软件工程方法是面向过程的,将数据和处理过程分离,求解过程是先对应用领域(问题空间)进行分析,建立起问题空间的逻辑模型,再通过一系列复杂的转换和算法,构造计算机系统,获得解空间。
  由于问题空间与解空间的模型、描述方式的不同,存在着复杂的转换过程,需求变化就更难适应。传统的软件工程方法难于支持软件复用。

9.1 面向对象方法概述

9.1.1 什么是面向对象的开发方法

OOSD(Object-Oriented Software Development)法是一种把面向对象的思想应用于软件开发过程,指导开发活动的系统方法。
  面向对象的方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。
什么是面向对象
  根据Coad和Yourdon的定义,按照以下4个概念设计和实现的系统,称为是面向对象的。
面向对象: 对象 (object)
      类 (classification)
      继承(inheritance)
      通信 (communication with messages)
  面向对象技术的特点
   1、对软件开发过程所有阶段进行综合考虑。
   2、软件生存期各阶段所使用的方法、技术具有高度的连续性,用符合人类认识世界的思维方式来分析、解决问题。
   3、将OOA、OOD、OOP有机地集成在一起。 
     OOA(Object-Oriented Analysis)面向对象分析
     OOD( Object-Oriented Design )面向对象设计
     OOP( Object-Oriented Program )面向对象的程序设计

9.1.2 面向对象开发方法的组成

OOSD由三部分组成

OOSD由三部分组成:
  OOA(Object-Oriented Analysis)面向对象的分析
    强调的是对一个系统中的对象特征和行为的定义。建立系统的三类(对象、状态、处理)模型。

OOD(Object-Oriented Design)面向对象的设计
    与OOA密切配合顺序实现对现实世界的进一步建模。

OOP (Object-Oriented Program)面向对象的程序设计
    是面向对象的技术中发展最快的,使用面向对象的程序设计语言,进行编码。

1、OOA法

就是要解决“做什么”的问题。OOA 法的基本任务就是要建立三种模型:

对象模型(信息模型)

定义构成系统的类和对象,它们的属性与操作。

状态模型(动态模型)

描述任何时刻对象的联系及其联系的改变,即时序。常用状态图, 事件追踪图描述。
   功能模型(函数模型)
    描述系统内部数据的传送处理。
   显然,在三大模型中,最重要的是对象模型。

2、OOD 法

在需求分析的基础上,进一步解决“如何作”的问题,OOD 法也分为概要设计和详细设计。
  概要设计:细化对象行为,添加新对象,认定类,组类库,确定外部接口及主要数据结构
  详细设计:加细对象描述

3、OOP 法

使用面向对象的程序设计语言,如C++进行程序设计。
  Coad和Yourdon给出一个面向对象的定义:
  面向对象=对象+类+继承+消息
  如果一个软件系统是按照这样四个概念设计和实现的,则可以认为这个软件系统是面向对象的。

9.2 面向对象的概念

理解面向对象的基本概念对于学习和掌握面向对象的开发方法是十分重要的。

9.2.1 对象

对象(Object)是客观事物或概念的抽象表述,即对客观存在的事物的描述统称为对象,对象可以是事、物、或抽象概念 ,是将一组数据和使用该数据的一组基本操作或过程封装在一起的实体。
   对象都存在一定的状态(state),内部标识(identity),可以给对象定义一组运算(operation),对象通过其运算所展示的特定行为称为对象行为(behavior),对象本身的性质称为属性(attribute),对象将它自身的属性及运算“包装起来”,称为“封装”(encapsulation).
   对象的最基本的特征是封装性和继承性。

9.2.2 其它概念

1、 类(Class)

类又称对象类(Object Class),是一组具有相同属性和相同操作的对象的集合。在一个类中,每个对象都是类的实例(instance) ,它们都可以使用类中提供的函数。
  类具有属性,用数据结构来描述类的属性,类具有操作,它是对象的行为的抽象,操作实现的过程称为方法(method) ,方法有方法名,方法体和参数。
  由于对象是类的实例,在进行分析和设计时,通常把注意力集中在类上,而不是具体的对象上。

2、 继承 (Inheritance)

继承是使用现存的定义作为基础,建立新定义的技术。是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容做为自己的内容,并加入若干新内容。
继承性分类:
  单重继承:一个子类只有一个父类。即子类只继承一个父类 的数据结构和方法。
  多重继承:一个子类可有多个父类。继承多个父类的数据结 构和方法。

3、消息(Message)

消息就是向对象发出的服务请求(互相联系、协同工作等)。对象之间的联系可表示为对象间的消息传递,即对象间的通讯机制。
  一个消息应该包含以下信息:消息名、接收消息对象的标识、服务标识 、消息和方法、输入信息、回答信息。
  在对象的操作中当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的消息。
注意:在并发系统中,多个控制线程(Thread of Control)并发执行,情况就复杂得多,消息可以是发出服务请求、提交数据、发布事件信息、或是传递同步控制信息。

4. 多态性和动态绑定

多态性(Polymorphism)是指相同的操作或函数,过程作用于不同的对象上并获得不同的结果。
即相同的操作的消息发送给不同的对象时,每个对象将根据自己所属类中所定义的操作去执行,故产生不同的结果。
例如: “绘图”操作,作用在“椭圆” 和“矩形” 上,画出不同的图形。
动态绑定(dynamic binding)是在运行时根据对象接收的消息动态地确定要连接的服务代码。

5、方法(method)

类中操作的实现过程称为方法。
   一个方法包括方法名、参数及方法体。
  方法描述了类与对象的行为,每一个对象都封装了数据和算法两个方面,数据由一组属性表示,而算法即是当一个对象接收到一条消息后,它所包含的方法决定对象如何动作。通常是在某种编程语言(如Java、C++)下实施的运算。

9.3 面向对象建模

  • 用面向对象方法成功地开发软件的关键,同样是对问题域的理解。面向对象方法最基本的原则,是按照人们习惯的思维方式,用面向对象观点建立问题域的模型,开发出尽可能自然地表现求解方法的软件。
  • 用面向对象方法开发软件,通常需要建立3种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。

9.4 对象模型

面向对象方法强调围绕对象而不是围绕功能来构造系统。对象模型为建立动态模型和功能模型,提供了实质性的框架。
  统一建模语言UML;

  • 定义类(属性、服务)、类的图形符号;
  • 类与类之间的关联、泛化(继承)、依赖和细化等关系及其表示等等。

9.5 动态模型

动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列。

  • 对一个对象来说,生命周期由许多阶段组成,在每个特定阶段中,都有适合该对象的一组运行规律和行为规则,用以规范该对象的行为。生命周期中的阶段也就是对象的状态。
  • 各对象之间相互触发就形成了一系列的状态变化。我们把一个触发行为称作一个事件。
  • 状态与事件密不可分,一个事件分开两个状态,一个状态隔开两个事件。事件表示时刻,状态代表时间间隔。

9.6 功能模型

功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。

  1. 功能模型由一组数据流图组成。在面向对象方法学中,数据流图远不如在结构分析、设计方法中那样重要。
  2. 同对象模型和动态模型比较,数据流图并没有增加新的信息,但是,建立功能模型有助于软件开发人员更深入地理解问题域,改进和完善自己的设计。
  3. 因此,不能完全忽视功能模型的作用。

9.7 3种模型之间的关系

对象模型、动态模型、功能模型分别从3个不同侧面描述了所要开发的系统。
  这3种模型相互补充、相互配合,使得我们对系统的认识更加全面:
  功能模型指明了系统应该“做什么”;
  动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做;
  对象模型则定义了做事情的实体。
其中,对象模型是最基本最重要的,它为其他两种模型奠定了基础,我们依靠对象模型完成3种模型的集成。
 (1)针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
 (2)状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。
 (3)功能模型中的处理(或用例)对应于对象模型中的类所提供的服务。
 (4)数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。
 (5)数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。
 (6)用例图中的行为者,可能是对象模型中的对象。
 (7)功能模型中的处理(或用例)可能产生动态模型中的事件。
 (8)对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。

[软件工程] 面向对象方法学引论相关推荐

  1. [软件工程导论(第六版)]第9章 面向对象方法学引论(课后习题详解)

    文章目录 1. 什么是面向对象方法学?它有哪些优点? 2. 什么是"对象"?它与传统的数据有何异同? 3. 什么是"类"? 4. 什么是"继承&quo ...

  2. 《软件工程》第九章 面向对象方法学引论 作业

    1.什么是面向对象方法学?它有哪些优点? 面向对象的方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空 ...

  3. 软件工程-面向对象方法学的优点

    本文参考自张海藩老师和牟永敏的<软件工程导论>,面向对象方法学的优点 与人类习惯的思维方法一致. 稳定性好. 传统方法所建立起来的软件系统的结构紧密依赖于系统要完成的功能.当功能需求发生变 ...

  4. 【软件工程】五、面向对象方法学 软件项目管理

    一.面向对象方法学引论 面向对象技术已经成为目前最好的软件开发技术. 面向对象方法学 = 对象+类+继承+消息(选.填) 对象抽象出共同特征就是类,类的实例就是对象. 继承是继承父类原本就拥有的属性和 ...

  5. 【软件工程系列】面向对象方法学

    面向对象方法学 一.面向对象方法学 传统软件工程方法学适用于中小型软件产品开发: 面向对象软件工程方法学适用于大型软件产品开发. 面向对象方法学方程式: ​ OO = 对象 + 类 + 继承 + 传递 ...

  6. (软件工程复习核心重点)第八章面向对象方法学习题

    文章目录 名词解释 简答题 应用题 名词解释 面向对象方法学:面向对象方法是一种以数据或信息为主线,把数据和处理相结合的方法,即把对象作为由数据及可以施加在这些数据上的操作所构成的统一体.面向对象的方 ...

  7. 软件工程导论 09章面向对象方法学

    1.面向对象方法学的出发点和基本原则,是尽可能摸清人类习惯的思维方式,让开发方法和过程尽可能接近人类认知世界的方法与过程. 面向对象方法=对象+类+继承+消息实现通信 2.面向对象方法的要点: ①面向 ...

  8. (软件工程复习核心重点)第八章面向对象方法学-第一节:面向对象方法学概述

    专栏目录首页:学习笔记 注意:本章是面向对象的内容,而C++又是一个很经典的面向对象语言,所以本节介绍时会引入C++相关知识.如需深入了解C++,可移步 C++学习专栏 文章目录 一:要点 (1)基本 ...

  9. 传统方法学和面向对象方法学

    原创不易,麻烦点个关注,点个赞,谢谢各位. 传统方法学 也称为生命周期方法学或结构化范型.它采用结构化技术完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用. 这种方法学 ...

  10. 面向对象软件工程方法学与传统方法学的异同

    面向对象软件工程方法学与传统方法学的异同 名称 面向对象软件工程方法学 传统方法学 基本概念 面向对象方法学是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在"对象 ...

最新文章

  1. 博客园左边导航菜单的问题
  2. 网站推广——专业网站推广浅析企业网站排名有哪些影响因素?
  3. 一:Greenplum5.10.2 生产环境安装配置 (系统初始化、安装准备)
  4. SQL语句中用Parameters有什么好处
  5. Linux的pcel问题-bash: pecl: command not found
  6. python两个数相加时_两数相加 leetcode Python
  7. 175. Combine Two Tables
  8. 将页面数据转json存入数据库
  9. GitHub 2019年漏洞奖励计划最值得回顾的2个精彩 bug
  10. 使用 GetOleDbSchemaTable
  11. 如何在PowerPoint中添加幻灯片编号
  12. 数据分析--07:金融量化
  13. 手动安装jenkins默认插件
  14. 大数据和java就业前景_Java大数据应用领域及就业方向
  15. 孝经白话:五刑章第十一
  16. kafka consumer消费者 offset groupID详解
  17. Tools/Profiler
  18. 线性表 :: 顺序存储结构的实现
  19. 巴身小(leng)一族作为夜郎后裔的历史见证
  20. 想知道车牌号码里都有什么秘密吗?

热门文章

  1. IoT平台功能架构图
  2. Axure 8.1.0.3381版安装包+注册码百度云盘下载
  3. 用原生javascript制作日历
  4. 这是 iPhone 6主板?包含 802.11ac WiFi、NFC 芯片
  5. java实现modbus rtu协议与 modscan等工具(3)物理连接
  6. 10款好用的程序员软件推荐
  7. archlinux安装windows字体
  8. 贵族机要第二次半修改装备简单分配
  9. vba中split用法
  10. OJ在线编程常见输入输出JavaScript练习