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

目录
  • 类划分时关于内聚性的问题
    • 静态类的设计
    • 高内聚类的设计
  • 附:面向过程编程中模块的内聚性
    • 偶然内聚或巧合内聚(Coincidental)
    • 逻辑内聚(Logical):
    • 时间内聚(Temporal ):
    • 过程内聚:
    • 通信内聚(Communicational):
    • 顺序内聚(Sequential):
    • 功能内聚(Functional):

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

静态类的设计

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

高内聚类的设计

高内聚类的设计时,按照操作功能进行封装,需遵循单一职责原则,即每一个类完成规定的某一项任务。如: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)服务的。

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

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

(0)

相关推荐

  • java开发BeanUtils类解决实体对象间赋值

    实体对象之间相互传值,如:VO对象的值赋给Entity对象,是代码中常用功能,如果通过get.set相互赋值,则很麻烦,借助工具类BeanUtils可以轻松地完成操作. BeanUtils依赖包导入 BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作.使用BeanUtils必须导入相应的jar包,BeanUtils的maven坐标为 <dependency> <groupId>commons-beanutils</g

  • 深入理解JAVA基础类库中对象Object类

    引言 Object类是所有类.数组的父类,位于java.lang 包下也就是说,Java允许把所有任何类型的对象赋给Object类型的变量.当定义一个类时没有使用extends关键字为它显式指定父类,则该类默认继承Object父类. 例如: public class Dog{ ...... } 等价于: public class Dog extends Object { ...... } Object常用方法 Object 类属于java.lang包,此包下的所有类在使用时无需手动导入,系统会在

  • Java 类与对象详细

    目录 1.类 2.对象 3.练习 4.练习答案 前言: 早期的Java语言,是面对过程的语言(面向过程指把一个场景分割成一个个的步骤研究),如今的Java已经是面对对象的语言(面向对象指把一个场景分割成一个个的对象研究).面向对象是相比面向过程有很多便利的地方,以后读者会慢慢感受到~ 那么,何谓对象呢?小编正在使用的电脑是一个对象,读者手中的手机是一个对象--对象,指[一个][具体的]物品或者事物(注意对象可以是抽象的东西). 每个对象都有其特征和用途,不同类型的对象特征和用途有所不同.我们把具

  • Java杂谈之类和对象 封装 构造方法以及代码块详解

    目录 1. 类和对象的初步认知 2. 类的实例化 3. 类的成员 字段(属性/成员变量) 方法 static 关键字 修饰字段 修饰方法 修饰代码块(暂不讲) 修饰类(暂不讲) 4. 封装 5. 构造方法 6. this 用法 关于引用的几个注意事项: 7. 代码块 Java当中的类和对象 1. 类和对象的初步认知 java 是一门面向对象的语言,所谓面向对象有别于面向过程,面向对象是只需对象之间的交互即可完成任务,但是面向过程的话,需要我们将每一个步骤都详细地做出来.比如,以洗衣服为例,如果是

  • Java面向对象基础知识之抽象类和接口

    抽象类(abstract): 抽象类不能创建实例,它只能作为父类被继承.抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象.从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性. (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类 (4) 具体派生类必须覆盖基类的抽象方法 (5) 抽象派生类可以覆盖基

  • Java 类与对象重难点详解

    目录 什么是类.对象? 类和类的实例化 字段的初始化 类当中实现方法 static 静态关键字 封装 private 实现封装 setter 和 getter 方法 构造方法 this 关键字 匿名对象 什么是类.对象? 因为计算机并不能像我们人这样去理解世界上的东西,所以为了更好的编辑,就抽象出了类和对象.类就是把功能放在一起,然后由一个人去调用这个功能,然后再编辑对应的功能.调用者就是对象的实现者 类和类的实例化 类是一类对象的统称,对象就是这一类具体化的实例 创建类的关键字:class 举

  • Java 中的类和对象详情

    目录 1.类的定义 2.类中变量的类型 3.构造方法 4.重载方法 5.继承 5.1 重写方法 6.创建对象 7.访问实例变量和方法 8.比较对象 8.1 使用 == 比较对象 8.2 使用 equals() 比较对象 类可以看成是创建Java对象的模板 1.类的定义 public class Dog { String name; int age; void eat() { } void sleep() { } } 2.类中变量的类型 局部变量:在方法或语句块中定义的变量被称为局部变量.变量声明

  • Java中类与对象的相关知识点总结

    目录 一.面向过程与面向对象的理解 二.类与对象的理解与认识 三.类的成员 1.字段/属性/成员变量 2.对null的基本认识 3.方法 (method) 4.static 关键字 四.封装 1. private实现封装 2.getter和setter方法 五.构造方法 1.构造方法的基本语法及使用 2.this关键字 六.Java中的代码块 1.认识代码块 2.普通代码块 3.构造代码块 4.静态代码块 七.toString方法 1.重写println的toString方法 2.匿名对象 八.

  • 详解Java内部类与对象的打印概念和流程

    目录 一.内部类的概念 二.内部类的分类 三.成员内部类 1.普通内部类 2.静态内部类 四.局部内部类 五.对象的打印 一.内部类的概念 在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类.内部类也是封装的一种体现. public class OutClass {//外部类 class InnerClass{//内部类 } } 注意事项: 1.内部类一定是定义在class 类名{}之中的类,定义在class 类名{}之外的,哪怕是在一份文件中,也并不

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

    目录 类划分时关于内聚性的问题 静态类的设计 高内聚类的设计 附:面向过程编程中模块的内聚性 偶然内聚或巧合内聚(Coincidental) 逻辑内聚(Logical): 时间内聚(Temporal ): 过程内聚: 通信内聚(Communicational): 顺序内聚(Sequential): 功能内聚(Functional): 类划分时关于内聚性的问题 静态类的设计 在软件设计中,我们经常会将一些通用的方法封装到一个类中,这种类只包含方法,没有属性,类中的方法之间没有关联,内聚性最低,属于

  • Java面向对象编程(封装/继承/多态)实例解析

    本文主要介绍了面向对象的三大特征实例解析,下面看看具体内容. 封装 封装一个Teacher和Student类 package com.hz.test; public class Teacher { private String name; private String majorDirection; private String teachCourse; private int teachAge; public Teacher() { super(); } public Teacher(Stri

  • Java面向对象编程之类的继承详解

    本文实例讲述了Java面向对象编程之类的继承.分享给大家供大家参考,具体如下: 继承:特殊类拥有一般类的全部属性与行为. 继承好处: 1.提高了代码的复用性 2.让类与类之前产生了关系,有了这个关系才有多态的特性.继承是类和类之前的关系. 注意事项: 1.java只支持单继承,不支持多继承.因为多继承有安全隐患:当多个父类定义相同的函数,但是功能不同时,子类不知道运行哪一个. 2.子类继承父类时,继承了父类的所有方法和属性,可直接使用. 3,java支持多层继承,即:孙-子-父的关系 语法: [

  • Java面向对象编程的三大特征

    目录 1.封装 1.1.封装概念 1.2.封装的好处 1.3.封装的实现步骤 2.继承 2.1.继承概念 2.2.继承的好处 2.3.子类对象实例化过程 3.多态 3.1.多态基本介绍 3.2.多态的具体体现 方法的多态 3.3.对象的多态(多态的核心) 3.4.对象的多态的应用 多态数组 多态参数 前言: 封装.继承和多态是面向对象编程的三大特征. 1.封装 1.1.封装概念 封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(

  • 理解Java面向对象编程设计

    目录 1 前言 2 结构化程序设计 3 面向对象编程设计 4 码农洞见 4.1 两种编程范式之间的区别 4.2 两种编程范式之间的联系 1 前言 计算机革命的起源来自机器.编程语言就像是那台机器.它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分.语言的灵感来自其他形式的表达,如写作,绘画,雕塑,动画和电影制作.编程语言就是创建应用程序的思想结构. 面向对象编程(Object-Oriented Programming OOP)是一种编程思维方式和编码架构. 2 结构化程序设计 结

  • 详解Java面向对象编程中方法的使用

    一个 Java 方法是为了执行某个操作的一些语句的组合.举个例子来说,当你调用 System.out.println 方法时,系统实际上会执行很多语句才能在控制台上输出信息. 现在你将学习怎么创建你自己的方法,他们可以有返回值也可以没有返回值,可以有参数,也可以没有参数,重载方法要使用相同的方法名称,并在程序设计中利用抽象的方法. 创建方法 我们用下面的例子来解释方法的语法: public static int funcName(int a, int b) { // body } 在这里 pub

  • Java面向对象编程中final关键字的使用方法详解

    在Java中通过final关键字来声明对象具有不变性(immutable),这里的对象包括变量,方法,类,与C++中的const关键字效果类似. immutable指对象在创建之后,状态无法被改变 可以从三个角度考虑使用final关键字: 代码本身:不希望final描述的对象所表现的含义被改变 安全:final对象具有只读属性,是线程安全的 效率:无法修改final对象本身,对其引用的操作更为高效 final 变量 定义final Object a,则a只能被初始化一次,一旦初始化,a的数据无法

  • Java 继承原理与用法实例分析

    本文实例讲述了Java 继承原理与用法.分享给大家供大家参考,具体如下: 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 类的继承格式 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 { } class 子类 extends 父类 { } 为什么需要继承 接下来

  • Python学习之面向对象编程详解

    目录 什么是面向对象编程(类) 类的关键字-class 类的定义与使用 类的参数-self self的解析与总结 类的构造函数 构造函数的创建方法 关于对象的生命周期 什么是面向对象编程(类) 利用(面向)对象的(属性和方法)去进行编码的过程即面向对象编程 自定义对象数据类型就是面向对象中的类(class)的概念 类的关键字 - class class 关键字用来声明类,类的名称首字母大写,多单词的情况下每个单词首字母大写(即驼峰命名法).在我们一开始学习 Python 的时候说过,要尽量避免使

  • 全方位讲解Java的面向对象编程思想

    什么是面向对象? Object 对象,Oriendted 以-为导向的, Programming 程序设计 面向对象就是使用对象进行程序设计,简写成OOP. SP和OOP对比 面向对象的三大原则      封装  继承   多态 对象 对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为: 对象其实就是"数据"和"函数"的封装体,其中: 数据表示自身的状态,也称作"属性"或"成员数据": 函数表示自身的

随机推荐