当前位置: 首页 > news >正文

软件工程与计算(十四)详细设计中面向对象方法下的模块化

一.面向对象中的模块

1.类

模块化是消除软件复杂度的一个重要方法,每个代码片段相互独立,这样能够提高可维护性。在面向对象方法中,代码片段最重要的类,整个类的所有代码联合起来构成独立的代码片段。

模块化希望代码片段由两部分组成:接口和实现~

  • 接口:代码片段之间用来交互的协议,包括供接口(供给比人使用的契约)需接口(需要使用别人的契约)
  • 实现:该协议的具体实施

对于类来说,类的供接口是所有公共成员变量和成员方法的声明,这些都是可以被别的类直接访问的,代表了类愿意与他人协作的一个协议;类的需接口则是在其实现中使用到的其他类及其相关协议~

2.类之间的联系

耦合是代码片段之间的联系。在面向对象中,对象之间也会发生调用,调用时客户对象向服务对象发送某个消息,从而完成对服务对象的共有成员方法和共有成员变量的访问~

在方法调用方面,两个类的方法之间存在的耦合关系与结构化方法基本一致:数据耦合是最好的,内容耦合、重复耦合和公共耦合是不允许的,控制耦合与印记耦合是可以接受的~

在面向对象方法中,类与类之间还会存在其他复杂的关系:

  • 关联:如果某个类关联另一个类,那么它就持有另一个类的引用,则这个类所有的对象都具有向另一个类的对象发送消息的能力~
  • 继承:子类可以访问父类的成员方法和成员变量~

二.访问耦合

1.访问耦合的分析

如果类A拥有对类B的引用,则A可以访问B。这就是所谓的访问耦合~

衡量两个类之间的耦合度,除了看它们之间存在的访问耦合关系的复杂度,还得看存在具体访问的次数。访问的次数多,则耦合强,访问的次数少,则耦合相对弱~

在几种访问耦合关系中,隐式访问时需要避免的,例外情况是使用标准库时允许出现级联访问,实现访问是可以接受的,也是必要的,毕竟不可能将所有使用的其他类都作为成员变量或者写为方法的参数~

2.降低访问耦合的方法

  • 针对接口编程:一方面要求只访问对方的接口,另一方面要避免隐式访问
  • 接口最小化/接口分离原则:将一个统一的接口匹配为多个更独立的接口
  • 访问耦合的合理范围/迪米特法则:又被称为最小知识原则具体内容包括:每个单元对于其他的单元只能拥有有限的知识,知识与当前单元紧密联系的单元,每个单元只能和他的朋友交谈,不能和陌生单元交谈;另外,只能和自己的朋友交谈~

 

三.继承耦合

1.继承耦合的分析

在面向对象方法中,由于又继承关系,父类和子类之间也存在耦合~

膝盖规格、修改实现、精化规格三种类型是不可接受的,精化是心爱是可以接受的也是经常被使用的,扩展是最好的继承耦合,但并非每个继承关系都能达到只扩展不调整的程度~

2.降低继承耦合的方法

  • Liskov替换原则:又被称为里氏替换原则,内容为子类型必须能够替换带哦类型而起到同样的作用
  • 使用组合替代继承:又被称为合成复用原则,既能复用代码,又能保持接口的灵活性

四.内聚

1.面向对象中的内聚

  • 方法的内聚
  • 类的内聚
  • 子类与父类的继承内聚

方法内聚和结构化中的函数内聚一致,主要是体现方法实现时语句之间的内聚性,内聚性由高到底分为:功能内聚、通信内聚、过程内聚、时间内聚、逻辑内聚、偶然内聚

类的内聚主要是衡量类的成员变量和方法之间的内聚,简单地说,类既应该是信息内聚的,又应该是功能内聚的~

2.提高内聚的方法

  • 集中信息与行为:高内聚的类应该是信息内聚的,也就是说类的信息应该和访问这些信息的行为放在一个类中
  • 单一职责原则:一个高内聚的类不仅要是信息内聚的,还应该是功能内聚的

五.耦合与内聚的度量

        为了利用模块化的思想评价设计质量,人们定义了一些量化指标,进行面向对象方法的耦合与内聚的度量

1.耦合的度量

  • 方法调用耦合:包括该类调用其他类的成员方法的数量,以及其他类访问这个类的成员方法的数量
  • 访问耦合:同济一个类包含的其他类的实力的数量,不包括继承关系带来的实例引用。
  • 继承耦合:统计直接所属的子类的数目

2.内聚的度量 

LCOM法,计算方式如下:

相关文章:

软件工程与计算(十四)详细设计中面向对象方法下的模块化

一.面向对象中的模块 1.类 模块化是消除软件复杂度的一个重要方法,每个代码片段相互独立,这样能够提高可维护性。在面向对象方法中,代码片段最重要的类,整个类的所有代码联合起来构成独立的代码片段。 模块化希望代码片段由两部…...

商城免费搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...

python教程:selenium WebDriver 中的几种等待

嗨喽,大家好呀~这里是爱看美女的茜茜呐 强制等待:sleep() import time sleep(5) #等待5秒设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点: 不智能,使用太多的sleep会影响脚本运行速度。…...

【MATLAB源码-第49期】基于蚁群算法(ACO)算法的栅格路径规划,输出最佳路径图和算法收敛曲线图。

操作环境: MATLAB 2022a 1、算法描述 蚁群算法是一种模拟自然界蚂蚁觅食行为的启发式优化算法。在蚁群系统中,通过模拟蚂蚁之间通过信息素沟通的方式来寻找最短路径。 在栅格路径规划中,蚁群算法的基本步骤如下: 1. 初始化: …...

LabVIEW生产者消费者架构

LabVIEW生产者消费者架构 生产者/消费者模式可以轻松地同时处理多个进程,同时还能以不同速率迭代。 缓冲通信 当多个进程以不同速度运行时,就适合采用进程间缓冲通信。有了足够大的缓冲区后,生产者循环可以以快于消费者循环的速度运行&…...

成都瀚网科技:如何有效运营抖店来客呢?

随着电子商务的快速发展和移动互联网的普及,越来越多的企业开始将目光转向线上销售渠道。其中,抖音成为备受关注的平台。作为中国最大的短视频社交平台之一,抖音每天吸引数亿用户,这也为企业提供了巨大的商机。那么,如…...

iMazing2.17.3免费苹果手机备份还原助手

强大的 iOS 设备管理软件不管是 iPhone、iPad 或 iPod Touch 设备,只要将 iOS 设备连接到计算机,就可以处理不同类型的数据。iMazing 功能强大、易于使用,可以帮助您安全备份任何 iPhone、iPad 或 iPod Touch,备受用户信赖。 现在…...

sql查询到了数据但是实体类个别字段为null(映射失败)

参考博客: sql查询到了数据但是实体类个别字段为null(映射失败)_sql语句查到值,加字段!null没值-CSDN博客 问题描述: 1.SQL查询到了数据,在idea调试output控制台窗口打印出SQL语句,字段有值; 2.接收实体对象字段无…...

配置VScode开发环境-CUDA编程

如果觉得本篇文章对您的学习起到帮助作用,请 点赞 关注 评论 ,留下您的足迹💪💪💪 本文主要介绍VScode下的CUDA编程配置,因此记录以备日后查看,同时,如果能够帮助到更多人&#xf…...

openGauss学习笔记-101 openGauss 数据库管理-管理数据库安全-客户端接入之用SSH隧道进行安全的TCP/IP连接

文章目录 openGauss学习笔记-101 openGauss 数据库管理-管理数据库安全-客户端接入之用SSH隧道进行安全的TCP/IP连接101.1 背景信息101.2 前提条件101.3 操作步骤 openGauss学习笔记-101 openGauss 数据库管理-管理数据库安全-客户端接入之用SSH隧道进行安全的TCP/IP连接 101.…...

STM32如何使用中断?

一:EXTI 简介 STM32F10x 外部中断/事件控制器(EXTI)包含多达 20 个用于产生事件/中断请求的边沿检测器。 EXTI 的每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升 沿触…...

用于物体识别和跟踪的下游任务自监督学习-2-(计算机视觉中的距离度量+损失函数)

2.4 计算机视觉中的距离度量 在深度学习和计算机视觉中,距离度量通常用于比较图像、视频或其他数据的特征或嵌入。根据具体任务和数据属性,可以使用不同类型的距离度量。下面介绍了深度学习和计算机视觉中使用的一些常见类型的距离度量。 余弦相似性距…...

热成像仪的工作原理及在工业设备状态监测中的应用

前面我们介绍过>>热分析技术在工业设备状态监测中的应用,下面我们将深入探讨热成像仪的工作原理及在工业设备状态监测中的应用。 近年来,热成像仪作为一种先进的检测工具,在工业设备状态监测领域得到了广泛的应用。热成像仪能够通过探测…...

什么是库存管理?无需Excel,2023年这几款大热库存管理软件你get了吗?

什么是库存管理?库存管理是什么意思?都有哪些好用的库存管理系统?相信这些都是大家非常关注的话题,这篇就跟大家详细唠唠什么是库存管理,都用什么系统可以进行库存管理,并且为大家盘点2023年这几款大热库存…...

c# xml 参数配置表的使用

使用简介 实际使用界面 配置表管理界面 进入 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;…...

ubuntu20.04 nerf Instant-ngp

Instant-ngp linux ubuntu 20.04 GPU RTX3050Ti Instant-ngp官方文档地址 https://github.com/NVlabs/instant-ngp 参考链接Instant-ngp linux部署及使用 - 简书 Ubuntu20.04复现instant-ngp,自建数据集,导出mesh_XINYU W的博客-CSDN博客 步骤 安装基…...

隐写术--python隐写

0x00 背景 何为隐写术? 隐写术是一类可以隐藏自己写的一些东西的方法,是一门关于信息隐藏的技巧与科学。指的是采取一些不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容的方法。 可参考 一文让你完全弄懂Stegosaurus - 知乎 本文要…...

MySQL的InnoDB存储引擎中的自适应哈希索引技术

一、自适应哈希索引的工作机制与优化策略 MySQL的InnoDB存储引擎使用了一种叫做自适应哈希索引(Adaptive Hash Indexes)的技术。在某些索引值被频繁访问的情况下,InnoDB会自动在内存中为这些值建立哈希索引,以加速查询操作。 何…...

交互设计主要做什么?新手入门必读

什么是交互设计?它涉及哪些内容?交互设计师是什么样的人群?他们到底是做什么的?他们身怀什么技能?他们工作的价值在哪里?交互设计行业的现状是怎样的?工作前景又是如何的? 如果你心…...

【深度学习实验】循环神经网络(三):门控制——自定义循环神经网络LSTM(长短期记忆网络)模型

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. LSTM类 a.__init__(初始化) b. init_state(初始化隐藏状态) c. forward(前向传播) 2. RNNModel类 a.__init__&am…...

flutter 消息并发时处理,递归查询

收到新消息的时候执行receiveNewConversation方法 可以自己模拟一下两条数据插入,延时执行插入会话的操作 收到一条新的会话消息,先记录会话ID到列表,直到第一条处理完(插入数据库后清理这个会话ID),才处理…...

第五十八章 学习常用技能 - 查看查询缓存

文章目录 第五十八章 学习常用技能 - 查看查询缓存查看查询缓存建立索引使用调谐表工具 第五十八章 学习常用技能 - 查看查询缓存 查看查询缓存 对于 SQL(用作嵌入式 SQL 时除外),系统会生成可重用代码来访问数据,并将该代码放置…...

AI 辅助学 Java | 专栏 1 帮你学 Java

在利用 ChatGPT 辅助学 Java 之前,你得先知道,它到底能辅助你干什么?如何能帮你更好的学习 Java。 苍何:作为一个语言模型,你能给 Java 的初学者提供什么帮助?请罗列具体的点。 ChatGPT:当你是一个 Java 初学者时,我可以提供以下具体的帮助和指导: 基本语法和语言特…...

2023_Spark_实验十六:编写LoggerLevel方法及getLocalSparkSession方法

一、搭建Spark项目结构 在SparkProject模块的pom.xml文件中增加一下依赖&#xff0c;并等待依赖包下载完毕&#xff0c;如上图。 ​<!-- Spark及Scala的版本号 --><properties><scala.version>2.11</scala.version><spark.version>2.1.1</sp…...

彻底搞懂:防止表单重复提交,前端限制还是后端限制?

欢迎大家来到小米的技术分享专栏&#xff01;今天我将为大家带来一个热门话题&#xff1a;如何有效地防止表单重复提交。在开发中&#xff0c;我们常常会遇到这样的问题&#xff1a;用户频繁点击提交按钮&#xff0c;导致数据重复提交&#xff0c;给系统和用户体验带来不必要的…...

OCPP1.6协议

目录 导言 功能简介 本地授权列表 类型 IdToken IdTagInfo 授权状态 协议指令 1、授权 1.1 说明 1.2 Authorize.req 1.3 Authorize.conf 1.4 JSON格式 1.5 代码 2、启动通知 2.1 说明 2.2 BootNotification.req 2.3 BootNotification.conf 2.4 JSON格式 2…...

【数据存储:小端模式和大端模式】

一、引言 在计算机科学中&#xff0c;数据存储模式是指如何将数据存储在计算机内存中的方式。小端模式和大端模式是两种主要的字节序方式&#xff0c;它们决定了字节在内存中的排列顺序。这种字节顺序的选择对于跨平台编程和数据传输至关重要。在这篇博客中&#xff0c;我们将…...

【git】gitlab安装、备份

gitlab官网 官网&#xff1a;官网 中文官网&#xff1a;中文官网 作为一个英文不好的程序员&#xff0c;所以我都去中文网站去看了。下面也是带着大家去走走 安装gitlab 我不想写具体的安装方法&#xff0c;直接去逛网看下面是我的截图。步骤非常详细。 安装文档地址&…...

C51--基本认知

单片机基本认知&#xff1a; 1、什么是单片机 单片机是一种集成电路芯片。 把具有数据处理能力的中央处理器 CPU、随机存储器RAM、只读存储器ROM。 多种 I / O 口和中断系统、定时器/计数器等功能&#xff08;可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器…...

centos7 安装 mysql 8.0

文章目录 环境介绍一、安装前准备 1.卸载MariaDB 1.1 查看是否安装mariadb1.2 卸载1.3 检查是否卸载干净 2.检查依赖 2.1 查看是否安装libaio2.2 查看是否安装numactl 二、安装MySQL 1.下载资源包 1.1 官网下载1.2 wget下载 2.解压3.重命名4.创建存储数据文件5.设置用户组并赋…...

wordpress首页自定义缩略图/阿里大数据平台

1. AOP的相关概念1.1 AOP概述1.1.1 什么是AOPAOP&#xff1a;全程是Aspect Oriented Programming 即面向切面编程。是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架中的一个重…...

微企免费网站建设/引流推广是什么意思

这是一款jQuery 3D立方体翻转插件。该插件可以创建水平或垂直的3d立方体效果&#xff0c;可以控制立方体的翻转速度&#xff0c;定义触发立方体旋转的事件等。使用方法在页面中引入jquery和jquery.flipbox.js、jquery.flipbox.css文件。HTML使用下面的结构创建一个3D翻转元素。…...

深圳网站建设培训班/seo推广系统

论理靠约架&#xff0c;打架靠群殴&#xff0c;无论说得如何冠冕堂皇&#xff0c;如何煽情&#xff0c;说白了&#xff0c;都是没有开化的野蛮人&#xff01; 这些人谈民主&#xff0c;是当下最大的冷笑话。 那一大块还是一大坨的东西&#xff0c;别以为黄色就能冒充金子&#…...

政务网站建设管理工作总结/网络营销比较好的企业

解决方法&#xff1a; sudo apt-get install -f ​​​​转载于:https://www.cnblogs.com/wulinmenghuantejing/p/8378005.html...

wordpress图库主题/seo优化的优点

Intent&#xff08;意图&#xff09; 将一个复杂对象的构建&#xff08;construction&#xff09;与其表示&#xff08;representation&#xff09;分离&#xff0c;这样同样的构建过程可以创建出不同的表示。 Motivation&#xff08;动机&#xff09; 一个RTF&#xff08;R…...

360免费建站可靠吗/一站式网络营销

我们在做应用程序的时候有时候想知道页面上的按钮对于某一事件委托链上有多少方法&#xff0c;下面是一个例子。1、先添加3个按钮&#xff0c;分别添加0个&#xff0c;1个&#xff0c;2个click事件的方法&#xff0c;按钮名字分别为button1&#xff0c;button2&#xff0c;butt…...