java面向对象编程类的内聚性分析

 更新时间:2021年10月14日 08:53:04   作者:guoyp2126  
高内聚、低耦合是软件设计中非常关键的概念。在面向对象程序设计中类的划分时,类的内聚性越高,其封装性越好,越容易复用
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

类划分时关于内聚性的问题

静态类的设计

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

高内聚类的设计

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

附:面向过程编程中模块的内聚性

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

偶然内聚或巧合内聚(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。

逻辑内聚(Logical):

若干个逻辑相似的功能通过参数确定该模块对应哪一个功能。如:类A内有BCDE四个方法,这四个方法均为public方法,功能上类似,把它们封装在一起,如字符串转换函数工具类,包括int转字符串、double转字符串等。

时间内聚(Temporal ):

因为功能必须在同一时间内执行才写到一个模块,即这些功能只是因为时间因素才有关联。 例:程序初始化时,程序员把对所有全局变量的初始化操作放在模块A中,模块A中就是时间内聚。

过程内聚:

模块内部的处理成分是相关的,而且这些处理必须以特定的次序进行执行。一个模块,为某员工计算工龄工资:打开员工信息文件取出员工记录;按一定的算法计算工 龄;按一定的算法计算工龄工资。 该模块中的三个相对独立的子功能必须以特定次序执行,整个模块具有过程内聚

通信内聚(Communicational):

所有处理元素集中在一个数据结构的区域上。一个模块,接收一个远程传来的信息文件,保存,同时马上打印该文件。 该模块针对同一个文件操作,打印和存盘操作没有前后顺序关系,整个模块具有通信内聚。

顺序内聚(Sequential):

模块内的各个处理元素关注同一功能,顺序执行,前一元素的输出结果作为下一元素的输入。

功能内聚(Functional):

类内所有的功能成分均为了完成一项功能服务的,如:userDao都是为了完成用户数据库的增删改查(CRUD)服务的。

面向过程编程中模块的内聚性参考:
/article/120602.htm

以上就是java面向对象编程类的内聚性分析的详细内容,更多关于java面向对象编程类的内聚性的资料请关注程序员之家其它相关文章!

相关文章

  • Java中EnumMap和EnumSet枚举操作类的简单使用详解

    Java中EnumMap和EnumSet枚举操作类的简单使用详解

    这篇文章主要介绍了Java中EnumMap和EnumSet枚举操作类的简单使用详解,EnumMap是Map接口的一种实现,专门用于枚举类型的键,所有枚举的键必须来自同一个枚举?EnumMap不允许键为空,允许值为空,需要的朋友可以参考下
    2023-11-11
  • Java中将MultipartFile和File互转的方法详解

    Java中将MultipartFile和File互转的方法详解

    我们在开发过程中经常需要接收前端传来的文件,通常需要处理MultipartFile格式的文件,今天来介绍一下MultipartFile和File怎么进行优雅的互转,需要的朋友可以参考下
    2023-10-10
  • Java 添加、修改、读取、复制、删除Excel批注的实现

    Java 添加、修改、读取、复制、删除Excel批注的实现

    这篇文章主要介绍了Java 添加、修改、读取、复制、删除Excel批注的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 详解Spring框架入门

    详解Spring框架入门

    这篇文章主要介绍了详解Spring框架入门,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 利用JavaMail发送HTML模板邮件

    利用JavaMail发送HTML模板邮件

    这篇文章主要为大家详细介绍了利用JavaMail发送HTML模板邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 详解eclipse下创建第一个spring boot项目

    详解eclipse下创建第一个spring boot项目

    本文详细介绍了创建第一个基于eclipse(eclipse-jee-neon-3-win32-x86_64.zip)+spring boot创建的项目。
    2017-04-04
  • Java开发环境不再需要配置classpath问题

    Java开发环境不再需要配置classpath问题

    这篇文章主要介绍了Java开发环境不再需要配置classpath问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Quarkus中ConfigSourceInterceptor的加密配置实现

    Quarkus中ConfigSourceInterceptor的加密配置实现

    这篇文章主要为大家介绍Quarkus中ConfigSourceInterceptor加密配置的实现方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • SpringBoot使用Jsp的示例代码

    SpringBoot使用Jsp的示例代码

    这篇文章主要介绍了SpringBoot使用Jsp的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • springboot访问静态资源遇到的坑及解决

    springboot访问静态资源遇到的坑及解决

    这篇文章主要介绍了springboot访问静态资源遇到的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论

?


http://www.vxiaotou.com