面向对象技术
第四章_面向对象技术

4. 具有良好的可重用性
由于对象所具有的封装性和信息隐蔽,具有很强的 独立性。
4.1.2 面向对象的概念
理解面向对象的基本概念对于学习和掌握面向 对象的开发方法是十分重要的。 对象(Object)
类(Class)
继承(Inheritance) 消息(Information) 多态性(Polymorphism) 永久对象(Persistent object)
4.3 面向对象的分析
面向对象分析OOA(Object-Oriented Analysis)的 目标是完成对所求解问题的分析,确定系统“作什 么”,并建立系统的模型。 基本概念: 问题域(problem domain) — 被开发系统的应用领域。 系统责任(system responsibilities) — 所开发的系统应 具备的职能。 OOA的基本任务 运用面向对象的方法,对问题域和系统责任进行 分析和理解,找出描述它们的类和对象,定义其属 性和操作,及其结构、静态联系和动态联系。
4.3.1 OOA的分析过程
获取用户基本需求 标识类和对象
定义类的结构和层次 表示类(对象)间的关系
为对象行为建模
图4.7 OOA分析过程
4.3.2 OOA模型
基本模型 (类图)
交 对象层 主
互 特征层
图 关系层 详 细 说 明 图4.8 OOA模型与详细说明 基本模型是一个类图(class diagram), 是以直观的方式表达系统最重要的 信息。OOA基本模型的三个层次分 别描述了:系统中应设哪几类对象, 每类对象的内部构成,对象与外部 的关系。
4.4.1 OOD基本任务
1. 系统设计 将分析模型划分为若干子系统,子系统应该具有 良好的接口,子系统内的类相互协作。标识问题本身 的并发性,为子系统分配处理器。
面向对象技术在软件开发中的应用

面向对象技术在软件开发中的应用随着计算机技术的发展和计算机的广泛应用,软件应用越来越广泛,人们对于软件开发的要求也越来越高。
在软件开发中,面向对象技术被广泛应用,成为开发的重要手段之一。
本文将详细介绍面向对象技术在软件开发中的应用。
一、面向对象技术的概念面向对象技术是一种基于对象的程序设计方法,它将系统看作一组对象的集合,每个对象都有自己的状态和行为,通过对对象的状态和行为进行抽象和封装,实现代码的重用和更好的可维护性。
面向对象技术主要包括以下三个特性:封装:在面向对象技术中,每个对象都有自己的数据和方法,并将其封装起来,以避免其他对象直接访问和改变它们的值。
继承:通过继承可以将一个类的属性和方法继承到另一个类中,实现代码的复用,减少代码的冗余。
多态:多态是指同一种方法可以被不同的对象以不同方式调用,通过多态可以提高代码的可扩展性。
二、面向对象技术在软件开发中有以下几个常见的应用:1.面向对象分析(OOA)面向对象分析(OOA)是一种软件开发方法,其主要目的是将问题域转换为面向对象的模型。
通过面向对象分析,可以将需求变成可执行的模型,同时有效的抵制需求波动造成的影响。
在OOA中,首先需要对问题进行分析,确定系统的需求和功能,然后通过细化这些需求和功能,逐步将其转化为面向对象的模型。
最终得到的模型就可以直接映射到程序代码中。
2.面向对象设计(OOD)面向对象设计(OOD)是一种根据面向对象技术的相关规定对编程进行设计的方式。
这种设计方式将业务领域中的复杂性进行分析与设计,将其转化为面向对象的模型。
在面向对象设计中,首先要创建一个类图,根据需求,在类图上添加所需的类,然后建立类之间的关系。
在建立好类图之后,开始设计每个类的成员方法和属性,最终得到模型,可以直接映射到程序代码中。
3.面向对象编程(OOP)面向对象编程(OOP)是一种开发应用程序的编程技术,通过面向对象编程,可以将任务的操作对象看作是一个独立的对象。
面向对象技术概述

1.1 知识要点1.面向对象技术的基本概念∙面向对象技术是以对象为基础、以事件或者消息来驱动对象执行处理的程序设计技术。
∙对象是包含客观事物特征的抽象实体,是属性和行为的封装体。
在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”这一公式来表达。
∙类是对具有相同属性和行为的一组对象的抽象描述。
∙事件是系统产生的动作或是运行应用程序产生的动作。
事件通过消息描述,消息是描述事件发生的信息。
∙消息是对象间交互的手段,是要求某个对象执行某个操作的规格说明。
2.面向对象技术的基本特征∙抽象性是指忽略事物中与当前目标无关的非本质特征,而强调本质特征的特征。
∙封装性是指把对象的属性和行为封装在一起,并尽可能隐藏对象的内部细节的特征。
∙继承性是指特殊类的对象拥有其一般类的属性和行为的类与类之间层次关系的特征。
∙多态性是指不同对象收到相同消息时可以产生多种不同的行为方式的特征。
【重点】∙面向对象技术的概念。
∙类与对象的概念及关系。
∙面向对象与面向过程程序设计的区别。
∙面向对象技术的基本特征。
面向对象技术与Visual C++学习指导2【难点】∙类与对象的概念。
∙面向对象与面向过程程序设计的区别。
∙面向对象技术的基本特征。
1.2 习题解答1.什么是面向对象技术?【问题解答】面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。
它具有抽象性、封装性、继承性及多态性。
2.面向对象与面向过程程序设计有什么不同?【问题解答】面向对象与面向过程程序设计有如下不同:(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。
(2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。
(3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。
简述面向对象技术的三大机制。

简述面向对象技术的三大机制。
面向对象技术(Object-Oriented Technology)是一种常用的编程范式,它基于对象的概念来设计程序和系统。
面向对象技术的三大机制分别是封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。
封装是面向对象技术的基本原则之一,它将数据和操作封装在对象内部,对象对外部的数据和操作进行隐藏,只提供有限的接口供外部访问。
通过封装,对象可以控制对自身数据的访问,确保数据的安全性和完整性。
封装使得对象的实现细节对外部隐藏,提高了系统的可维护性和可扩展性。
同时,封装也使得对象之间的耦合度降低,各对象之间更加独立,提高了系统的灵活性。
继承是面向对象技术的另一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。
通过继承,子类可以重用父类的代码,减少了重复编码的工作量,提高了代码的复用性和可维护性。
同时,继承也体现了类之间的层次关系,使得程序结构更加清晰和易于理解。
通过继承,可以实现代码的统一管理和扩展,提高了系统的可扩展性和可维护性。
多态是面向对象技术的另一重要机制,它允许不同的对象对同一消息作出不同的响应。
通过多态,可以实现接口的统一,提高了代码的灵活性和可重用性。
多态使得程序可以根据不同的对象类型调用不同的方法,实现了代码的动态绑定,提高了程序的可扩展性和可维护性。
多态是面向对象技术的一个重要特点,它使得程序更加灵活和易于扩展,提高了程序的可读性和可维护性。
封装、继承和多态是面向对象技术的三大机制,它们共同构成了面向对象技术的基本特性。
通过封装,可以保护对象的数据和实现细节;通过继承,可以实现代码的重用和扩展;通过多态,可以实现接口的统一和动态绑定。
这三大机制相互配合,共同构成了面向对象技术的核心思想,为软件开发提供了强大的支持和工具。
面向对象技术已成为现代软件开发的主流范式,它不仅提高了程序的可维护性和可扩展性,还提高了程序的质量和效率,是软件开发领域的一项重要技朧。
面向对象技术与UML

继承性举例
继承传递:大学生可以继承“人”和“学生”的特
征 父类 多重继承: 在职研究生既可以继承“学生”的特 征,又可以继承“教师”的特征 人
工人 学生 教师 农民
中学生 大学生 研究生 派生类
助教
讲师
具有继承关系的对象的特性
对象类间具有共享特征(包括数据和程序代
码的共享) 对象类间具有细微的差别或新增部分(包括 非共享的程序代码和数据) 对象类间具有层次结构。 继承所具有的作用有两个方面:
第二节 面向对象分析
本节要求了解面向对象分析的基本过程和基本原则 OOA: Object-oriented Analysis . 指利用面向对象的概念和方法构建软 件模型。 面向对象分析的基本过程 理解 表达
验证
对理解和表达进 行校验,以达到 理想效果。
需求
建立模型
在面向对象分析中,主要建立对象模型,动态模型和功能模型。 对象模型是最基本最重要的模型。
3) 可重用性好 有两种方法可以重复使用一个对象类:一种方法是创 建该类的实例,从而直接使用它;另一种方法是从它 派生出一个满足当前需要的新类。 4)较易开发大型软件产品 5)可维护性好
2.1.2 喷泉模型
“喷泉”这个词体现了面向对象软 件开发过程迭代和无缝的特性。 图中代表不同阶段的圆圈相互重 叠,这明确表示两个活动之间存 在交迭;而面向对象方法在概念 和表示方法上的一致性,保证了 在各项开发活动之间的无缝过渡, 事实上,用面向对象方法开发软 件时,在分析、设计和编码等项 开发活动之间并不存在明显的边 界。图中在一个阶段内的向下箭 头代表该阶段内的迭代(或求 精)。图中较小的圆圈代表维护, 圆圈较小象征着采用了面向对象 范型之后维护时间缩短了。
面向对象编程技术的优势和缺陷

面向对象编程技术的优势和缺陷一、引言面向对象编程技术(Object-Oriented Programming,OOP),是一种广泛应用于软件开发的编程范式。
它的最大特点是将真实世界中的对象抽象成软件世界中的类,通过将属性和行为封装在一起来实现对真实世界的模拟。
本文将分析面向对象编程技术的优势和缺陷。
二、优势1.可重用性面向对象编程技术中,类可以被多次实例化,每个实例化的对象都可以应用其所属类中的属性和方法,从而实现了代码的可重用性,使得软件的开发更加高效、简便、快速。
2.可扩展性维护和升级软件几乎是软件开发生命周期的一部分。
由于面向对象的开发方式,可以将一个程序划分成多个相互独立、可以被修改和升级的模块,而不破坏程序的整体结构。
这样就可以避免了因为添加或删除代码而导致的程序重构,减小了程序开发和维护的难度。
3.封装性封装是面向对象编程语言中最常见的编程技术,它通过合理划分类的行为和状态并将它们放在一起,使得访问这些行为和状态的其他对象必须通过公共接口进行,从而保障了类的封闭性和单一职责原则。
这种强化了数据的安全性、可维护性和可重用性的封装性,可以防止其他模块直接操作访问私有数据,提高了程序的安全性和稳定性。
三、缺陷1.异构性的处理虽然类似的对象可以放在同一个类中,但不能强制所有的对象都符合相同的结构,不同的对象可能需要不同的方法,以及不同的数据属性等等。
这就要求程序员要真正理解不同对象的特点,并为不同的对象编写出可以工作的代码。
2.继承和多态的理解和实现继承和多态是面向对象编程中的关键概念。
如果在使用过程中没有理解和应用好继承和多态的概念,会导致代码的复杂性和不可扩展性。
另一方面,继承和多态的实现也不容易,需要许多必要的调整和改进,以避免在程序开发时产生适当的冲突。
3.内存的消耗在面向对象编程中,因为需要多次实例化类,类的对象、成员变量、方法占用比较大的内存空间。
在大规模软件开发中,内存使用的多少可能会成为性能瓶颈。
面向对象技术

面向对象的软件过程
传统的和面向对象的软件生命周期模型 面向对象软件生命周期中的主要活动 完全面向对象的软件生命周期的概念
传统的软件生命周期模型
内部视图
把系统当作一个黑盒子, 从外部来描述系统,这 种模型就是外部模型 由于这是从外部来观察 系统得到的结果,又称 之为外部视图。 外部视图说明了系统是 什么,用来定义需求
外部视图
作用
作用
建模技术的表示法和语义学
建模技术两组成部分 表示方法,它能使分析人员、设计人员、编程人员、管理 人员以及用户彼此沟通,用得最多的,也是最直观的表示 方法是图形表示法 语义学。语义学可用自然语言来描述,也可用形式语言来 描述,或者两者相结合,这要根据建模技术的严格程度而 定。 模型元素 通过建模技术中的表示方法能使我们从要被建模的系统中 抽象出各种元素,这些元素称为模型元素,其目的是提供 人们可以理解的表示。 建模元素 在说明各种建模技术的语义学时,还将用到一些概念和符 号,它们在最后组成的软件系统模型中不直接表现出来, 这些元素称为建模元素。
面向对象技术的组成部分
明确给出面向对象的基本概念
对象、类、继承、消息和封装等基本概念 定义面向对象技术中用到的扩展的概念如建模、系统行为 等。 表示方法,使分析人员、设计人员、编程人员、管理人员 以及用户彼此沟通。 这种技术的语义学。语义学可用自然语言来描述,也可用 形式语言来描述。 包括对软件生命周期各阶段的描述,对各个阶段的进一步 细化,以及在生命周期各阶段如何运用建模技术和面向对 象语言来完成各阶段的任务。
消息性质和类型
面向对象技术(答案)

●下面关于面向对象方法中消息的叙述,不正确的是____(2)__。
(2)A. 键盘、鼠标、通信端口、网络等设备一有变化,就会产生消息B.操作系统不断向应用程序发送消息,但应用程序不能向操作系统发送消息C. 应用程序之间可以相互发送消息D.发送与接收消息的通信机制与传统的子程序调用机制不同正确答案:B【解析】在系统中既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此的通信,这样的方法才称为"面向对象的方法"。
●面向对象技术中,对象是类的实例。
对象有三种成份:____(3)____、属性和方法(或操作)。
(3) A. 标识B. 规则C. 封装D. 消息正确答案:A解析:对象有三种成份:标识(对象名)、属性和方法(或操作)。
●在面向对象技术中,类属是一种__(1)__机制。
一个类属类是关于一组类的一个特性抽象,它强调的是这些类的成员特征中与__(2)__的那些部分,而用变元来表示与__(3)__的那些部分。
(1)A.包含多态B.参数多态C.过载多态D.强制多态(2)A.具体对象无关B.具体类型无关C.具体对象相关D.具体类型相关(3)A.具体对象无关B.具体类型无关C.具体对象相关D.具体类型相关解析:在面向对象技术中,对象在收到信息后要予以响应。
不同的对象收到同一消息可产生完全不同的结果,这一现象称为多态。
多态有多种不同的形式,其中参数多态和包含多态称为通用多态,过载多态和强制多态成为特定多态。
参数多态应用比较广泛,被称为最纯的多态。
这是因为同一对象、函数或过程能以一致的形式用于不同的类型。
包含多态最常见的例子就是子类型化,即一个类型是另一类型的子类型。
过载多态是同一变量被用来表示不同的功能,通过上下文以决定一个类所代表的功能。
即通过语法对不同语义的对象使用相同的名,编译能够消除这一模糊。
强制多态是通过语义操作把一个变元的类型加以变换,以符合一个函数的要求,如果不做这一强制性变换将出现类型错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计侧面
小结构:顺序,选择,循环 大结构:过程抽象,避免全局变量
回顾:结构化软件开发
“结构化(structured)”的合理性
管理复杂性的有效手段
分解, 抽象, 层次
Correctness
规约与实现
Extendibility? Reusability?
从面向过程到面向对象
代数规范
语法部分
ADT名 运算(函数)的定义域和值域
公理部分
给出一组刻画各运算之间相互关系的方程来定义各 运算的含义
Abstract Data Types
抽象数据类型
摘要
从面向过程到面向对象 如何规约对象?——抽象! Abstract data type ADT与软件开发
回顾:结构化软件开发
何谓“结构化(structured)”开发方法?
The Big Name “E.W. Dijkstra”
开发过程侧面
对象刻画问题
主要问题:如何描述程序对象(数据结构)?
Completely Unambiguously Without overspecifying?
(Remember information hiding)
A stack, concrete object
capacity
(array_up)
Extendibility, Continuity: 对象更直接对应问题 空间的概念,因而较“功能”更稳定.
现实世界 问题世界 软件世界
Reality 抽象
例:考虑一个工资系统
一开始,客户说ee information
Hours worked
Produce Paychecks
Fortran, Algol: 整型、实数、布尔数
第二阶段:从基本类型到用户自定义类型
Algol68, Pascal
第三阶段:从用户自定义类型到抽象数据类型 (Abstract Data Types)-- 面向对象
模块化程序设计和模块
面向对象的分解好在何处?
Reusability: 数据(结构)及其上之操作的整 体复用,而非仅仅复用操作功能;
面向对象设计的相关问题
如何找到对象类型? 如何描述对象类型? 如何描述对象类型之间的关系和共性? 如何使用对象类型来构造程序?
对象刻画
考虑一类具有相似属性的对象而不是单个对象 定义对象的类型不是通过定义对象的物理表述,
而是通过定义它们的行为:即它们提供给外部 的服务
External, not internal view: ABSTRACT DATA TYPES
“结构化”的基本思想已经深入人心
但对于复杂、易变、交互性软件系统,以“功 能”为中心的分解方式有局限
完全自顶向下的功能分解? 线性过程式的程序组织?
应变?
The first step
程序运行:在某个数据体上施以某些操作。 两个要素
操作(功能)Functions [or: Operations, Actions] 客体(对象)Objects [or: Data]
数据类型由一个对象集合(值集合)以及在该集合 上定义的若干合法运算所组成的运算集合组成。
抽象数据类型(ADT):用数学方法定义对象集合 和运算集合,仅通过运算的性质刻画数据对象, 而独立于计算机中可能的表示方法
ADT规约方法
代数方法 模型方法
C.A.R. Hoare的前后断言方法:通过已定义的(抽象) 数据类型来给出要定义的新类型的抽象模型
数据抽象:定义了数据类型和施加于该类型对 象上的操作,并限定了对象的值只能通过使用 这些操作修改和观察。包含了2个概念:
1. 模块封装 2. 信息隐蔽
数据抽象的意义
数据抽象提供了面向对象计算的起点:系统应 该被分解为概念上的实体,实体的内部细节应 该被隐藏!
数据抽象发展
第一阶段:从无类型的二进制到基本数据类型
new n
1 representation
item (linked)
previous item
previous previous
item
“Push” operation: new (n) n.item := x n.previous := last head := n
19
Abstract Data Type
“面向对象的软件构造”含义(1)
面向对象的软件构造(OOSC)乃是基于系统所 操作之对象类型(而非系统需实现之功能)来 架构系统的途径。
Meyer: “Object-oriented software construction is the approach to system structuring that bases the architecture of software systems on the types of objects they manipulate — not on “the” function they achieve.”
Paychecks
例:考虑一个工资系统
这种功能明确的系统确实适合结构化的开发方法:自顶向 下,逐步求精。
你完美地完成了任务。
而后,极有可能,客户会跑过来跟你说:
给我加个统计报表撒 下个月我想一些人发记时工资,一些人发计件工资啊行啊,有人
每月一发,有人每周一发哦 加个个人所得税系统接口 再加个图像用户界面,用来交互查询吧 ……
count
“Push” operation: count := count + 1 representation [count] := x
representation
(array_down) free
“Push” operation: representation [free] := x free := free - 1
Action
Object
Processor
如何导出软件系统的结构?
两条途径:
从操作/功能入手 从客体/对象入手
形成两种抽象方法:
基于过程的抽象 基于数据的抽象
过程抽象 vs. 数据抽象
过程抽象:指任何一个明确定义功能的操作都 可以被使用者看作单个的实体,尽管这个操作 实际上可能由一系列更低级的操作完成