面向对象编程类的内聚性

2023-11-04

高内聚、低耦合是软件设计中非常关键的概念。在面向对象程序设计中类的划分时,类的内聚性越高,其封装性越好,越容易复用。以下在类划分时关于内聚性的问题。

  1. 静态类的设计
    在软件设计中,我们经常会将一些通用的方法封装到一个类中,这种类只包含方法,没有属性,类中的方法之间没有关联,内聚性最低,属于偶然内聚或巧合内聚。这种设计常用于工具类,一般设计为静态类,这些方法的使用时类似函数调用。设计需注意,将功能基本接近的方法封装到一个类中,切忌不能将所有的公用方法封装到一个大类中,如:日期格式转换,数字转换字符串等。

  2. 高内聚类的设计
    高内聚类的设计时,按照操作功能进行封装,需遵循单一职责原则,即每一个类完成规定的某一项任务。如:dao层的类用作数据的增删改查(CRUD),数据实体仅为数据载体,用作传递数据任务。即每个封装的类仅完成一项任务。
    又如迭代器模式中迭代器仅为某一个集合进行服务,但是还要独立出来一个内部类,就是把集合数据的表示和对集合的遍历操作两项任务分开。
    低耦合代表高内聚,在进行类的设计时,如类A的方法中调用了B类的方法,在A类定义属性变量或局部对象变量时,使用B类接口定义,通过注入或方法参数传入B的对象,使得二者之间形成一种松耦合的关系。如果一个类对外暴露的接口简单,接口的参数为简单数据类型,所有的复杂操作封装在类的内部,这种类内聚性最高,独立性强。如:通过短信猫发送短信,对外接口仅为sendMsg(String msg),如何创建连接、格式转换、信息发送全部封装类的内部。

附:面向过程编程中模块的内聚性
以下是面向过程中内聚性由高到低做一说明,对类划分时有一定的参考意义。

  1. 偶然内聚或巧合内聚(Coincidental):内内的各成分之间没有关联,只是把分散的功能合并在一起;类A内有BCDE四个方法,这四个方法均为public方法,功能含义上各自独立。前端开发api,将不同模块的api放在一起,就是偶然耦合。
var api = {
   //登录
   getCaptcha: (param) => get(apiBase+"/captcha.jpg", param), 
   adminLogin: (param) => post(apiBase+"/sys/login", param),

   //部门管理
   departmentList:(param) => get(apiBase+"/tywdepart/list", param),
   departmentAdd:(param) =>post(apiBase+"/tywdepart/save", param),
   departmentUpdate:(param) =>post(apiBase+"/tywdepart/update", param),
   departmentDelete:(param) =>post(apiBase+"/tywdepart/delete", param),
   }

增强耦合度办法:拆分;将登录api要使用的api和部门管理api设计为两个独立的api。
2. 逻辑内聚(Logical):若干个逻辑相似的功能通过参数确定该模块对应哪一个功能。如:类A内有BCDE四个方法,这四个方法均为public方法,功能上类似,把它们封装在一起,如字符串转换函数工具类,包括int转字符串、double转字符串等。
3. 时间内聚(Temporal ): 因为功能必须在同一时间内执行才写到一个模块,即这些功能只是因为时间因素才有关联。 例:程序初始化时,程序员把对所有全局变量的初始化操作放在模块A中,模块A中就是时间内聚。
4. 过程内聚:模块内部的处理成分是相关的,而且这些处理必须以特定的次序进行执行。一个模块,为某员工计算工龄工资:打开员工信息文件取出员工记录;按一定的算法计算工 龄;按一定的算法计算工龄工资。 该模块中的三个相对独立的子功能必须以特定次序执行,整个模块具有过程内聚
5. 通信内聚(Communicational):所有处理元素集中在一个数据结构的区域上。一个模块,接收一个远程传来的信息文件,保存,同时马上打印该文件。 该模块针对同一个文件操作,打印和存盘操作没有前后顺序关系,整个模块具有通信内聚。
6. 顺序内聚(Sequential):模块内的各个处理元素关注同一功能,顺序执行,前一元素的输出结果作为下一元素的输入。
7. 功能内聚(Functional):类内所有的功能成分均为了完成一项功能服务的,如:userDao都是为了完成用户数据库的增删改查(CRUD)服务的。

面向过程编程中模块的内聚性参考:
https://www.cnblogs.com/corvoh/p/5747856.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面向对象编程类的内聚性 的相关文章

  • 程序设计笔记

    程序设计笔记 基础知识2020 12 7 程序设计实验须知 参考书目 计算机解决问题的步骤 代码结构 程序运行过程 基础知识 程序设计实验须知 实验前必须做好实验预习 参考书目 谭浩强C语言系列 1 C语言程序设计教程 第3版 2 C语言题
  • python是一种面向什么的高级语言

    python是一种面向什么的高级语言 Python是一种面相对象 解释型的计算机程序语言 并已成为学习数据科学 虚拟现实和人工智能的首选编程语言 其设计哲学是 优雅 明确 简单 易上手 及时反馈的特点成了很多入门编程世界的首选 同时Pyth
  • 第十一届蓝桥杯单片机决赛总结

    先说结果 提前5天准备 11 14号下午2点结束比赛 11 15号下午13点出结果 很遗憾国三 关于决赛后的感想 1 吐槽 由于疫情的影响 无法去北京公费旅游实属遗憾 不过奖金的诱惑 也丝毫不影响我对比赛的热情 2 回归正题 比赛分为 客观
  • 浅度学习模块化与解耦

    目录 1 为什么要模块化 2 模块设计原则 3 模块化开发的的优缺点 4 解耦与通信 4 1 公共模块的下层 4 2 面向接口调用 4 3 面向协议的调用 在开篇之前引用一句话 一派是说app开发并不需要什么狗P架构 第二派说我们有自己NB
  • 第三十八章、PyQt输入部件:QKeySequenceEdit快捷键输入部件使用案例

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一 功能简介 Key Sequence Edit输入部件是用于输入快捷键序列的一个部件 输
  • 面对对象--结构体和类的区别

    一 面向对象 结构体和类的区别 结构体是一种值类型 而类是引用类型 值类型用于存储数据的值 引用类型用于存储对实际数据的引用 那么结构体就是当成值来使用的 类则通过引用来对实际数据操作 构使用栈存储 Stack Allocation 而类使
  • 3.1 代码审核机制

    一次咨询活动 同一朋友交流基于复用的架构设计理念时 他说 你讲的那个很好 但离我们现状有点远 我现在每天要编码 要开会 要出差 要交流 要带人 要流程 招个能干的人可难了 而刚做顺手的就想跑 留一堆代码让我擦屁股 一段话不知道出了多少一线工
  • 通过主机名字获取与端口号获取对应的IP地址

    利用boost asio中的库函数获取本地主机的名字和通过主机名字获取与端口号获取对应的IP地址 源代码如下 Boost others network function cpp 此文件包含 main 函数 程序执行将在此处开始并结束 inc
  • C语言期末大作业-运动会管理系统 包含源码和设计文档

    C语言 运动会管理系统 源码和3000多字的设计文档非常详细 代码注释非常详细 部分功能测试截图如下 下载链接在文末 点我下载资源 https download csdn net download weixin 43474701 60281
  • 建议收藏,22个Python迷你项目(附源码)

    转载自公众号法纳斯特 作者小F 在使用Python的过程中 我最喜欢的就是Python的各种第三方库 能够完成很多操作 下面就给大家介绍22个通过Python构建的项目 以此来学习Python编程 大家也可根据项目的目的及提示 自己构建解决
  • C语言:编程实现输入n和n个数,判断其中哪个数连续出现的次数最多

    C语言 编程实现输入n和n个数 判断其中哪个数连续出现的次数最多 分析 代码 分析 需要设置的变量有 n 输入数字的个数 x 输入的数字 cur 当前输入的数 i 计数器 len 连续出现的次数 maxl 最大连续出现的次数 maxx 连续
  • python3 面试题总结

    Python global 语句的作用 lambda 匿名函数好处 Python 错误处理 Python 内置错误类型 简述 any 和 all 方法 Python 中什么元素为假 提高 Python 运行效率的方法 Python 单例模式
  • Java中变量的作用域详解

    作用域定义 字面解释 scope 域即一定范围内的较大的地方 顾名思义就是在一定的范围内起作用 大白话解释 父母在家的时候能控制你的玩与学习 出了家门说了也白说 老师在校的时候能够管理你的行为 出了学校你都想管管他 这就是说 不管什么样的指
  • 面向对象和面向过程思想概述

    面向过程的思想去实现一个功能的步骤 首先要做什么 怎么做 最后我们再代码体现 一步一步去实现 而具体的每一步都需要我 们去实现和操作 这些步骤相互调用和协作 实现我们的功能 每一个步骤我们都是参与者 并且 需要面对具体的每一个步骤和过程 这
  • C语言程序设计·数据类型(例题和知识点)

    1 假设有变量赋值语句x 10 常量10的类型为short 2 假设有变量赋值语句x 2 2 常量2 2的类型是double 3 short int 类型变量的存储数据范围是 32768 32767 4 赋值语句x 082是错误的 5 语句
  • 1033 旧键盘打字 Python实现

    1033 旧键盘打字 20 20 分 旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在2行中分别给出坏掉的那些键 以及应该输入的文字 其
  • 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(101-200)

    文章目录 ADV 103 逆序排列 cpp java ADV 112 c ch02 01 cpp java ADV 120 6 17复数四则运算 cpp java ADV 123 概率计算 cpp java ADV 127 日期计算 cpp
  • 经典C语言程序设计100例,部分有个人注解

    经典C语言程序设计100例 程序1 题目 有1 2 3 4个数字 能组成多少个互不相同且无重复数字的三位数 都是多少 1 程序分析 可填在百位 十位 个位的数字都是1 2 3 4 组成所有的排列后再去 掉不满足条件的排列 当然这里的去掉并不
  • 第三十九章、PyQt显示部件:OpenGL Widget部件功能简介及使用其显示图片

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一 概述 OpenGL Widget部件是一个OpenGL Open Graphics L
  • 面向对象编程---基于Javaswing的医院管理系统课设

    S2021003基于Javaswing的医院管理系统 https www bilibili com video BV1e34y1Z75L share source copy web vd source 3d18b0a7b9486f50fe7

随机推荐

  • python爬虫04 - xpath和lxml模块

    可以说 xpath中 x就是不确定 而path就是路径 指向 1 xpath介绍 1 1 基本概念 XPath XML Path Language 是一种XML的查询语言 他能在XML树状结构中寻找节点 XPath 用于在 XML 文档中通
  • FreeRTOS系列第6篇---FreeRTOS内核配置说明

    FreeRTOS内核是高度可定制的 使用配置文件FreeRTOSConfig h进行定制 每个FreeRTOS应用都必须包含这个头文件 用户根据实际应用来裁剪定制FreeRTOS内核 这个配置文件是针对用户程序的 而非内核 因此配置文件一般
  • PCL common模块应用实例

    目录 一 common模块中的头文件 二 基本函数 1 angles h 2 centriod h 3 common h 4 distance h 5 copy point h 6 geometry h 参考链接 本文由CSDN点云侠原创
  • 2022最新苹果开发者账号注册、付款流程图解【图文并茂】

    更新日期 2022 07 22 每年续费就有一个坑 文章末尾已注明 1 申请一个邮箱 用于注册苹果开发者账号 我的邮箱 密码 2 注册开发者账号 1 注册官网 官网地址 Apple Developer Program Apple Devel
  • 国内android第三方rom,安卓手机第三方rom大盘点,曾经火到不行,如今几乎全军覆没...

    自从谷歌接手安卓以后 从2005年到现在 经过了几十年的发展 安卓已经发布了数十个版本 成为目前唯一能和苹果匹敌的手机操作系统 虽然华为有了鸿蒙 但目前至少还没有完全用在手机上 打开APP 查看更多精彩图片 安卓由于其开放性而受到许多用户的
  • copilot command line

    copilot 支持command line了 linux macos都可以安装 npm i githubnext github copilot cli 安装之后 如果要能够正常使用的话 得先进行authorization github账户
  • app怎么修改服务器IP地址,怎么修改手机服务器ip地址

    怎么修改手机服务器ip地址 内容精选 换一换 如果私钥文件丢失了 可以为服务器替换新的密钥对 并使用新的私钥文件连接云手机 以下为替换服务器密钥对的操作指导 请提前在云服务器控制台创建密钥对 并将密钥对对应的私钥文件下载至本地 登录管理控制
  • nslookup命令详解:域名解析=>得到IP地址

    1 nslookup作用 nslookup用于查询DNS的记录 查询域名解析是否正常 在网络故障时用来诊断网络问题 2 查询 a 直接查询 nslookup domain dns server 如果没有指定dns服务器 就采用系统默认的dn
  • chrome 下载东西 失败禁止_如何修复最常见的Google Chrome下载错误

    尽管事实上大多数情况下Google Chrome浏览器都是很漂亮的浏览器 但有时候有些事情并不能完全按预期运行 其中有些涉及文件下载 正如许多Google Chrome用户在某个时候发现的那样 文件下载有时会失败 并不一定是直截了当的错误
  • 随想录:开发一流Android SDK

    http blog csdn net dd864140130 article details 53558011 自从前段时间离职后 因为个人的事情一直没有选择再工作 也导致原有的文章并没有按时产出 最近个人的事情整理的也差不多了 恰好有不少
  • 【python】把Excel中的数据在页面中可视化

    一 需求 最近我们数据可视化的老师让我们把广州历史房价中的房价数据可视化 然后给我们发了广州历史房价 xls 然后看了一下数据确实有点小多 反正复制粘贴是有点费劲的 所以就想借用python帮我把数据修改成我一键复制的模样 二 安装xlrd
  • win安装nacos

    nacos安装注意事项 nacos安装包下载之后 默认是集群模式 需要改成单例执行 路径 nacos bin startup cmd 2 nacos运行需要使用jdk jdk必须使用64位 3 本地新增nacos数据库 执行sql脚本 na
  • 【Linux】进程控制,进程替换

    1 进程创建 fork函数初识 在linux中fork函数时非常重要的函数 它从已存在进程中创建一个新进程 新进程为子进程 而原进程为父进程 include
  • 第一章:10道C/C++经典面试题

    http blog csdn net rl529014 article details 52029524 版权声明 本文为博主原创文章 未经博主允许不得转载 目录 面试题 1 变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义
  • 深度学习输入输出特征图尺寸计算&&卷积的填充方式

    1 卷积层输入特征图 input feature map 的尺寸为 H input W input C input 依次为输入特征图的高 宽 通道数 2 输出通道数K 即卷积核个数 正方形卷积核的边长为F 步幅 stride 为S 补零的行
  • 使用IntelliJ IDEA 配置Maven(入门)

    http blog csdn net qq 32588349 article details 51461182
  • 利用MATLAB求均值、方差和标准差

    1 均值 数学定义 Matlab函数 mean 如果X是一个矩阵 则其均值是一个向量组 mean X 1 为列向量的均值 mean X 2 为行向量的均值 若要求整个矩阵的均值 则为mean mean X 或者mean2 X 2 方差 数学
  • 最适合小白的matlab教程系列_进阶系列一

    目录 二维平面图形 plot函数 我们更少不了图形的修饰 图形窗口分割 几个图 plot3函数 绘制三维曲面的函数 标准三维曲面 三维图形视点处理 二维平面图形 plot函数 命令格式 plot x y x位横坐标值 y为纵坐标值 plot
  • 密度聚类算法(DBSCAN)实验案例

    密度聚类算法 DBSCAN 实验案例 描述 DBSCAN是一种强大的基于密度的聚类算法 从直观效果上看 DBSCAN算法可以找到样本点的全部密集区域 并把这些密集区域当做一个一个的聚类簇 DBSCAN的一个巨大优势是可以对任意形状的数据集进
  • 面向对象编程类的内聚性

    高内聚 低耦合是软件设计中非常关键的概念 在面向对象程序设计中类的划分时 类的内聚性越高 其封装性越好 越容易复用 以下在类划分时关于内聚性的问题 静态类的设计 在软件设计中 我们经常会将一些通用的方法封装到一个类中 这种类只包含方法 没有