[架构之路-135]-《软考-系统架构设计师》-软件工程-5-软件系统设计(面向对象设计基础)

文火冰糖的硅基工坊 文火冰糖的硅基工坊     2023-03-14     687

关键词:

前言:

第4节 系统设计

4.3 面向对象设计

4.3.1 概述

面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程架构。

OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。

OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性

OOP=对象+类+封装 + 继承+多态+消息,其中核心概念是类和对象

面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。

面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。

对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。

在面向对象的程序设计中,是组成程序的基本模块

对象是什么?

  • 语言实现层次来看,对象封装了代码和数据

  • 规格层次面讲,对象是一系列可被使用的公共接口

  • 概念层面讲,对象是某种拥有责任的抽象

4.3.2 封装

封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作语言(即描述每一个对象的属性以及其行为的程序代码)组装到一起,一并封装在一个有机的实体中,把它们封装在一个“模块”中,也就是一个类中,为软件结构的相关部件所具有的模块性提供良好的基础。符合高内聚、低耦合性的特征

面向对象技术的相关原理以及程序语言中,封装最基本单位是对象,而使得软件结构的相关部件的实现“高内聚、低耦合”的“最佳状态”便是面向对象技术的封装性所需要实现的最基本的目标。对于用户来说,对象是如何对各种行为进行操作、运行、实现等细节是不需要刨根问底了解清楚的,用户只需要通过封装外的通道对计算机进行相关方面的操作即可。大大地简化了操作的步骤,使用户使用起计算机来更加高效、更加得心应手。

4.2.3 继承

继承性是面向对象技术中的另外一个重要特点,其主要指的是两种或者两种以上的类之间的联系与区别。

继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。如果按照继承源进行划分,则可以分为单继承(一个对象仅仅从另外一个对象中继承其相应的特点)与多继承(一个对象可以同时从另外两个或者两个以上的对象中继承所需要的特点与能力,并且不会发生冲突等现象);

如果从继承中包含的内容进行划分,则继承可以分为四类,分别为取代继承(一个对象在继承另一个对象的能力与特点之后将父对象进行取代)、包含继承(一个对象在将另一个对象的能力与特点进行完全的继承之后,又继承了其他对象所包含的相应内容,结果导致这个对象所具有的能力与特点大于等于父对象,实现了对于父对象的包含)、受限继承、特化继承。

4.2.4 多态

从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同消息之后,所表现出来的动作是各不相同的,具有多种形态

从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的源代码调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数代码执行是不同的。

4.3.5 面对对象设计的基本过程

上图中:

  • 左图是对象分析的结果

  • 中间是架构师的工作

  • 右边是架构师的设计输出!!!

4.3.6 面向对象的设计原则(七大原则)

变化是复用的天敌,面向对象设计最大的优势在于:抵御变化!

  理解面向对象是如何隔离的变化

  • 从宏观层次来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小

 各司其职

  • 从微观层次来看,面向对象的方式更强调 各个类的“责任”  

  • 由于需求变化导致的新增类型不应该影响原来类型的实现—所谓的各负其责 

原则都是前人总结出来的经验,遵循这些原则,让我们开发的程序更加健壮、更易维护和可扩展、更容易应对未来不确定的变化!!!!

软件的可维护性和软件的可复用性(Reuse)或重用以及软件的可扩展性,拥有众多优点,如可以提高软件的开发效率,提高软件质量,节约开发成本,恰当的复用还可以改善系统的可维护性。

面向对象设计复用的目标在于实现支持可维护性的复用。

在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。

面向对象设计原则和设计模式也是对系统进行合理重构的指南针,重构(Refactoring)是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

对于面向对象的软件系统设计来说,在支持可维护性的同时,需要提高系统的可复用性。

软件的复用可以提高软件的开发效率,提高软件质量,节约开发成本,恰当的复用还可以改善系统的可维护性。

  • 单一职责原则:要求在软件系统中,一个类只负责一个功能领域中的相应职责。

  • 开闭原则:要求一个软件实体应当对扩展开放,对修改关闭,即在不修改原先已有代码的基础上扩展一个系统的行为。

  • 里氏替换原则:可以通俗表述为在软件中如果能使用基类对象,那么一定能够使用其子类对象。这是因为子类对象内存空间比父类对象的内存空间大,且子类继承下来的父类与原先的父类具有相同的结构体和内存空间分布

  • 依赖倒置原则:要求抽象不应该依赖于细节,细节应该依赖于抽象;要针对接口编程,不要针对实现编程。 之所以称为倒置,是因为在软件层次上,抽象在下层,具体实现在上层。

  • 接口隔禽原则:要求客户端不应该依赖那些它不需要的接口,即将一些大的接口细化成一些小的接口供客户端使用。使用单一功能的接口比功能丰富的接口要好。

  • 合成复用原则:要求复用时尽量使用对象組合,而不使用继承。继承导致子类与父类是强依赖关系,不符合低耦合的原则!

  • 迪米特法则:要求一个软件实体应当尽可能少的与其他实体发生相互作用。

原文链接:https://blog.csdn.net/m0_54178972/article/details/112313367

参考:

https://blog.csdn.net/m0_54178972/article/details/112313367

4.3.7 面对对象的设计模式 (就是套路)

基于面向对象技术构建软件系统的套路,就是设计模式。

采用这些套路设计出来的软件系统不会犯大的错误

采用这些套路设计出来的软件系统具备如下的特征

  • 已有功能的稳定性

  • 新环境的适应性

  • 新需求的快速应对性

  • 系统的可扩展性

这就是设计模式的意义所在!!!

4.3.7.1 设计模式中使用到的UML图

设计模式实际上类与类的关系的讨论,是如何使用类来构建软件系统的一种套路。

因此,UML类图以及类与类的关系是描述设计模式图形化的手段!!!

(1)泛化(Generalization)

【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。

【箭头指向】:带三角箭头的实线,箭头指向父类

(2)实现(Realization)

【实现关系】:是一种实现类(子类)与抽象接口(父类)之间的关系,表示实现类是接口类所有特征和行为的具体实现(不是实例化)

【箭头指向】:带三角箭头的虚线,箭头指向接口(抽象类)

(3)关联(Association)

【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量

【箭头及指向】:带普通箭头的实心线,指向被拥有者

上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

下图为自身关联:

(4)聚合(Aggregation)

【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量

【箭头及指向】:带空心菱形的实心线,菱形指向整体

(5)组合(Composition)

【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。

组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

(6)依赖(Dependency)

【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.

【代码表现】:局部变量、方法的参数或者对静态方法的调用

【箭头及指向】:带箭头的虚线,指向被使用者

各种关系由强到弱顺序:

泛化 > 实现 > 组合 > 聚合 > 关联 > 依赖

下面这张UML图,比较形象地展示了各种类图关系:

4.3.7.2 架构模式、设计模式、惯用法区别

架构模式:使用与整个分布式软件系统。

设计模式:设计某个功能模块时,如果采用面向对象源代码编程,则设计模式指明源代码的类与类关系的模式。设计模式就是面向对象编程的套路,与具体的编程语言无关。

惯用法:编程语言在源代码编程时,一些常用的、习惯性的的做法,与编程语言强相关。

4.3.8 二十三种设计模式

(289条消息) [架构之路-116]-《软考-系统架构设计师》-软件工程-5-二十三种设计模式(面向对象的可复用设计)_文火冰糖的硅基工坊的博客-CSDN博客

参考:

图解23种设计模式,不信你学不会!(建议收藏) - 知乎 (zhihu.com)

[架构之路-116]-《软考-系统架构设计师》-软架构设计-9-构件与中间件技术

前言:第9节构件与中间件技术9.1定义构件是系统中实际存在的可更换部分。它实现特定的功能,符合一套接口标准并能实现一组接口。构件代表系统中的一部分物理实施,包括软件代码(源代码、二进制代码或可... 查看详情

系统架构设计师软考简介(软考好处|职称晋升|工作居住证|积分落户|系统架构设计师与系统分析师备考及难度|软考报名考试注意事项)

文章目录一、软考简介二、软考的好处三、系统架构设计师与系统分析师备考及难度四、软考报名考试注意事项一、软考简介软考中的系统架构设计师,有一定的难度,范围较广,难度较高,即使你真的是架构师,但是如果对考试的具... 查看详情

软考高级系统架构设计师系列论文之:软考高级架构设计师百篇范文

软考高级系统架构设计师系列论文之:软考高级架构设计师百篇范文软考高级架构设计师论文写作技巧:软考高级系统架构设计师系列论文:详细介绍一篇论文的万能模版,快速了解如何写好一篇架构设计师论文... 查看详情

[架构之路-5]:架构师-中国计算机技术职业资格(软考)考试是如何定义系统架构师?

...149第6章系统计划174第7章系统分析与设计方法195第8章软件架构设计246第9章设计模式287第10章测试评审方法307第11章嵌入式系统设计319第1 查看详情

[架构之路-114]-《软考-系统架构设计师》-软件架构设计-7-软件架构评估

前言第7节软件架构评估7.1什么是架构评估/为什么要软件架构评估在软硬件系统总体架构设计完成之后,为保证架构设计的合理性、完整性和针对性,从根本上保证系统质量,降低成本及投资风险,需要对总体架... 查看详情

[架构之路-109]-《软考-系统架构设计师》-软件架构设计-2-软件架构概述:架构风格

引言建筑风格指建筑设计中在内容和外貌方面所反映的特征,主要在于建筑的平面布局、形态构成、艺术处理和手法运用等方面所显示的独创和完美的意境。建筑风格因受时代的政治、社会、经济、建筑材料和建筑技术等的... 查看详情

[架构之路-110]-《软考-系统架构设计师》-软件架构设计-3-架构描述语言adl与uml

前言:第3节架构描述语言ADL3.1ADL概述3.1.1什么是ADLADL,即架构描述语言(ArchitectureDescriptionLanguage)。两个重要的团体在使用架构描述语言术语。它们是:软件工程团体企业建模和工程团体。在软件工程团体,架构描... 查看详情

[架构之路-111]-《软考-系统架构设计师》-软件架构设计-4-特定领域软件架构

前言:第4节特定领域软件架构4.1概述(1)定义特定领域软件架构(DomainSpecificSoftwareArchitecture,DSSA)是一种有效实现特定领域软件重用的手段。简单地说,DSSA就是在一个特定应用领域为一组应用提供... 查看详情

[架构之路-131]-《软考-系统架构设计师》-软件工程-2-需求工程

前言第3章软件工程3.3需求工程3.3.1概述需求工程是指应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科。它通过合适的工具和记号系统地描述... 查看详情

[架构之路-115]-《软考-系统架构设计师》-软件架构设计-8-软件工程与基于架构的软件开发流程absd

前言第8节软件产品线8.1什么是软件产品线软件产品线(softwareproductline)是指具有一组可管理的公共特性的软件密集性系统的合集。核心思想:大平台小产品。大平台:公共特征产品线:小产品产品线(ProductLine... 查看详情

软考架构设计师参考资料

...件专业技术资格(水平)考试,报考的科目为《系统架构设计师》,这是一个高级资格考试。上一次参加软考时的高级资格考试还只有《系统分析师》,一转眼的时间,高级资格考试已经有5门了,不得不感叹飞速的变化。本人... 查看详情

[架构之路-107]-《软考-系统架构设计师》-0-系统分析师与系统架构设计师简介与官网介绍

官网链接:https://www.ruankao.org.cn/index/ind计算机技术与软件专业技术资格(水平)考试简介计算机技术与软件专业技术资格(水平)考试(以下简称计算机软件资格考试)是原中国计算机软件专业技术资... 查看详情

[架构之路-122]-《软考-系统架构设计师》-操作系统-1-操作系统原理-进程管理

前言:操作系统的本质就是创建一个并发的应用程序执行的环境,使得各种应用程序可以动态、共享相同的计算机物理硬件资源,计算机的三大物理资源包括:CPU内存外设应用程序(管理应用程序):... 查看详情

[架构之路-133]-《软考-系统架构设计师》-软件工程-3-软件系统的建模与uml

前言:第三章软件工程3.3软件系统的建模软件分析建模体现了软件设计的思想,在系统需求和系统实现之间架起了一座桥梁。软件工程师按照设计人员建立的模型,开发出符合设计目标的软件系统,而且软件的维... 查看详情

[架构之路-125]-《软考-系统架构设计师》-操作系统-4-浅谈vxworks与linux操作系统的区别

相同点(1)都可以用于嵌入式操作系统(2)都提供多任务的执行环境(3)WindRiverSystem公司可以提供者两种操作系统的硬件定制化(BSP)2.不同点2.1内核结构不同vxworks是微内核,只提供基本的服务... 查看详情

[架构之路-124]-《软考-系统架构设计师》-操作系统-3-操作系统原理-io设备微内核嵌入式系统

第11章操作系统第5节设备管理/文件管理:IO5.1文件管理5.2IO设备管理(内存与IO设备之间)数据传输控制是指如何在内存和IO硬件设备之间传输数据,即:设备何时空闲?设备何时完成数据的传输?SPOOLIN... 查看详情

[架构之路-120]-《软考-系统架构设计师》-计算机体系结构-2-一文了解armsoc体系结构原理(cpu工作原理指令内存中断堆栈io初始化)

知识准备:(890条消息)[架构之路-17]:目标系统-硬件平台-ARMCPU架构与系列选型_arm硬件架构_文火冰糖的硅基工坊的博客-CSDN博客第9章计算机体系结构第1节ARMSOC芯片体系结构1.1ARM家族1.2SOC芯片总体架构ARMCore内核系统(... 查看详情

软考系统架构设计师软件架构设计②软件架构风格

>>回到总目录<<文章目录软件架构风格数据流风格批处理序列管道过滤器调用返回风格主程序子程序面向对象分层架构独立构件风格进程通信事件驱动(隐式调用)虚拟机风格解释器规则系统以数据为中心数据库系统黑... 查看详情