《面向对象分析与设计》一1.3面向对象的基本原则

简介: 本节书摘来自华章出版社《面向对象分析与设计》一书中的第1章,第1.3节,作者 麻志毅,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.3面向对象的基本原则

面向对象的基本原则主要有抽象、分类、封装、消息通信、多态性、行为分析和复杂性控制。
(1)抽象
抽象(abstraction)是指从事物中舍弃个别的、非本质的特征,而抽取共同的、本质特征的思维方式。在面向对象方法中,可从几个方面来理解抽象:
1)编程语言的发展呈现抽象层次提高的趋势。例如,用C++编程,不用考虑CPU寄存器和堆栈中存放的内容,因为大多数编程语言都是从这些细节中抽象出来的。对于一个完成确定功能的语句序列,其使用者都可把它看作单一的实体(如函数),这种抽象就是过程抽象。在面向对象编程语言中,存在着过程抽象和数据抽象。在类的范围内,使用过程抽象来形成操作。数据抽象是指把数据类型和施加在其上的操作结合在一起,形成一种新的数据类型。类就是一种数据抽象,栈也是一种数据抽象。
2)在面向对象方法中,对象是对现实世界中事物的抽象,类是对对象的抽象,一般类是对特殊类的抽象。有的抽象是根据开发需要进行的。例如,就对象是对现实世界中的事物的抽象而言,高校中的学籍管理系统和伙食管理系统中所使用的学生的信息就是不一样的;再如,一个现实事物可能要担任很多角色,只有与问题域有关的角色,在系统中才予以考虑。
3)在面向对象的不同开发阶段需要进行不同程度的抽象。典型地,在面向对象分析阶段,先定义类的属性和操作,而与实现有关的因素在设计阶段再考虑。例如,对自动售货机建模,在分析阶段先定义一个类“自动售货机”,根据其收钱和发货的职责定义其属性和操作,其中对外提供的操作为收钱口、选择按钮和发货口(三者形成一个接口),而对于如何根据实现条件来设计它的内部细节是设计阶段的任务。这与现实生活中一样,我们可以在较高的抽象层次上分析与解决问题,然后再逐步地在较低抽象层次上予以落实。
从上述自动售货机的例子中能看到,使用抽象至少有如下好处:一是便于访问,外部对象只需知道有限的几个操作(作为接口)即可使用自动售货机对象;二是便于维护,如自动售货机的某部分有变化而其接口没有发生变化,只需在机器内部对该部分进行修改。甚至可用更优的具有相同接口的售货机对其进行替换,而不影响使用者的使用方式。
(2)分类
分类(classification)的作用是按照某种原则划分出事物的类别,以有助于认识复杂世界。
在OO中,分类就是把具有相同属性和相同操作的对象划分为一类,用类作为这些对象的抽象描述。如果一个对象是分类(类)的一个实例,它将符合该分类的模式。分类实际上是把抽象原则运用于对象描述时的一种表现形式。在OO中,进一步地还可以运用分类原则,通过不同程度的抽象,形成一般/特殊结构。
运用分类原则,清楚地表示了对象与类的关系,以及特殊类与一般类的关系。
(3)封装
封装(encapsulation)有两个含义:①把描述一个事物的性质和行为结合在一起,对外形成该事物的一个界限。面向对象方法中的封装就是用对象把属性和操纵这些属性的操作包装起来,形成一个独立的单元。封装原则使对象能够集中而完整地对应并描述具体的事物,体现了事物的相对独立性。②信息隐蔽,即外界不能直接存取对象的内部信息(属性)以及隐藏起来的内部操作,外界也不用知道对象对外操作的内部实现细节。在原则上,对象对外界仅定义其什么操作可被其他对象访问,而其他的对象不知道所要访问的对象的内部属性和隐藏起来的内部操作以及它是如何提供操作的。
通过封装,使得在对象的外部不能随意访问对象的内部数据和操作,而只允许通过由对象提供的外部可用的操作来访问其内部,这就降低了对象间的耦合度,还可以避免外部错误对它的“交叉感染”。另外,这样对象的内部修改对外部的影响变小,减少了修改引起的“波动效应”。图13所示的是封装的原理图,其中的一部分操作是外部可用的。

image

严格的封装也会带来问题,如编程麻烦,有损执行效率。有些语言不强调严格的封装和信息隐蔽,而实行可见性控制,以此来解决问题。例如,C++和Java就是这样的语言,通过定义对象的属性和操作的可见性,对外规定了其他对象对其属性和操作的可访问性;另外,一个对象也可以提供仅局限于特定对象的属性和操作,这可以通过把相应的可见性指定为受保护的或私有的来做到。
(4)消息通信
原则上,对象之间只能通过消息(message)进行通信,而不允许在对象之外直接地访问它内部的属性,这是由封装原则引起的。
消息必须直接发给特定的对象,消息中包含所请求服务的必要信息,且遵守所规定的通信规格说明。一条消息的规格说明至少包括:消息名、入口参数和可能的返回参数。一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数。
(5)多态性
多态性(polymorphism)是指一般类和特殊类可以有相同格式的属性或操作,但这些属性或操作具有不同的含义,即具有不同的数据类型或表现出不同的行为。这样,针对同一个消息,不同的对象可对其进行响应,但所体现出来的行为是不同的。
(6)行为分析
关系机制提供了用关联、继承和聚合等组织类的方法。很多面向对象学者把系统模型的这部分结构称作静态模型,也有的称其为结构模型。通常,对系统还需要进行行为分析。
对于一个对象,由于其内的属性值在不断地发生着变化,按一定的规则根据属性值可把对象划分为不同的状态。在请求对象操作时,可能会使对象的状态发生改变,而对象的当前状态对随后的执行是有影响的。通过状态机图可以分析对象的状态变迁情况。
系统中的对象是相互协作的,通过发消息共同完成某项功能。这种协作的交互性可以用交互图来描述。
很多系统具有并发行为。从事物的并发行为的起因上看,事物的每个并发行为是主动发生的。体现在对象上,就是有一种对象是主动的,每个对象代表着一个进程或线程。在交互图上也能体现出对象间的并发行为。
(7)复杂性控制
为了控制系统模型的复杂性,引入了包(package)的概念。使用包可以把模型元素组织成不同粒度的系统单位,也可以根据需要用包来组织包。例如,用分析包和设计包来分别组织分析模型和设计模型,以显式地描述不同抽象层次的模型;对复杂类图也可以按类之间关系的紧密程度用包来组织类。

相关文章
|
数据采集 安全
主动扫描和被动扫描
在扫描器中输入目标域名或者URL用爬虫模块爬取所有链接,对GET、POST等请求进行参数变形和污染,进行重放测试,然后依据返回信息中的状态码、数据大小、数据内容关键字等去判断该请求是否含有相应的漏洞。
1138 0
主动扫描和被动扫描
|
Java Linux Maven
私有仓库工具Nexus Maven如何部署并实现远程访问管理界面
私有仓库工具Nexus Maven如何部署并实现远程访问管理界面
356 0
|
Unix 虚拟化 Windows
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 6 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 6 月更新)
356 0
|
10月前
|
存储 数据采集 自然语言处理
集运物流公司搭建反向海淘系统的完整方案,助传统物流企业快速切入反向海淘赛道
该方案针对集运物流公司搭建反向海淘系统,涵盖系统设计、资源整合、运营策略和成功要素。通过复用现有物流仓储资源,构建从商品聚合到支付结算、物流调度的完整闭环,提供免费合箱、敏感货专线等差异化功能。整合国内外资源,优化成本结构,实现低成本高可用的技术实现,并确保合规运营。冷启动策略包括精准获客和裂变模型,盈利模式涵盖代购服务费、物流差价及增值服务。成功案例显示,物流企业可通过此方案快速切入反向海淘赛道,提升客户生命周期价值。
|
存储 JSON 自然语言处理
大模型服务平台百炼之模型训练与调优实践分享|快来围观~
模型调优是通过Fine-tuning训练模式提高模型效果的功能模块,作为重要的大模型效果优化方式,用户可以通过构建符合业务场景任务的训练集,调整参数训练模型,训练模型学习业务数据和业务逻辑,最终提高在业务场景中的模型效果。
3105 9
|
Ubuntu Linux 网络安全
在Linux中,如何配置和管理系统服务?
在Linux中,如何配置和管理系统服务?
|
JSON Java 数据格式
Spring Boot实现各种参数校验
这些是Spring Boot中实现参数校验的一些常见方法,你可以根据项目需求选择适合的方式来进行参数校验。
431 0
|
安全 数据安全/隐私保护 开发者
如何使用Pyarmor保护你的Python脚本
如何使用Pyarmor保护你的Python脚本
750 0
|
存储 安全 算法
Spring Security系列教程22--Spring Security中的密码加密
前言 截止到现在,一一哥 已经带各位学习了很多关于Spring Security的知识点,但是Spring Security作为一个安全框架,其中必然就应该带有安全加密方面的内容,所以本篇文章,一一哥 就带各位来学习Spring Security中的密码加密机制。 Lets go! 一. 密码加密简介 1. 散列加密概述 我们开发时进行密码加密,可用的加密手段有很多,比如对称加密、非对称加密、信息摘要等。在一般的项目里,常用的就是信息摘要算法,也可以被称为散列加密函数,或者称为散列算法、哈希函数。这是一种可以从任何数据中创建数字“指纹”的方法,常用的散列函数有 MD5 消息摘要算法、安全散列
1910 1