欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java面向?qū)ο缶幊填惖膬?nèi)聚性分析

 更新時(shí)間:2021年10月14日 08:53:04   作者:guoyp2126  
高內(nèi)聚、低耦合是軟件設(shè)計(jì)中非常關(guān)鍵的概念。在面向?qū)ο蟪绦蛟O(shè)計(jì)中類的劃分時(shí),類的內(nèi)聚性越高,其封裝性越好,越容易復(fù)用

類劃分時(shí)關(guān)于內(nèi)聚性的問題

靜態(tài)類的設(shè)計(jì)

在軟件設(shè)計(jì)中,我們經(jīng)常會(huì)將一些通用的方法封裝到一個(gè)類中,這種類只包含方法,沒有屬性,類中的方法之間沒有關(guān)聯(lián),內(nèi)聚性最低,屬于偶然內(nèi)聚或巧合內(nèi)聚。這種設(shè)計(jì)常用于工具類,一般設(shè)計(jì)為靜態(tài)類,這些方法的使用時(shí)類似函數(shù)調(diào)用。設(shè)計(jì)需注意,將功能基本接近的方法封裝到一個(gè)類中,切忌不能將所有的公用方法封裝到一個(gè)大類中,如:日期格式轉(zhuǎn)換,數(shù)字轉(zhuǎn)換字符串等。

高內(nèi)聚類的設(shè)計(jì)

高內(nèi)聚類的設(shè)計(jì)時(shí),按照操作功能進(jìn)行封裝,需遵循單一職責(zé)原則,即每一個(gè)類完成規(guī)定的某一項(xiàng)任務(wù)。如:dao層的類用作數(shù)據(jù)的增刪改查(CRUD),數(shù)據(jù)實(shí)體僅為數(shù)據(jù)載體,用作傳遞數(shù)據(jù)任務(wù)。即每個(gè)封裝的類僅完成一項(xiàng)任務(wù)。
又如迭代器模式中迭代器僅為某一個(gè)集合進(jìn)行服務(wù),但是還要獨(dú)立出來(lái)一個(gè)內(nèi)部類,就是把集合數(shù)據(jù)的表示和對(duì)集合的遍歷操作兩項(xiàng)任務(wù)分開。
低耦合代表高內(nèi)聚,在進(jìn)行類的設(shè)計(jì)時(shí),如類A的方法中調(diào)用了B類的方法,在A類定義屬性變量或局部對(duì)象變量時(shí),使用B類接口定義,通過注入或方法參數(shù)傳入B的對(duì)象,使得二者之間形成一種松耦合的關(guān)系。如果一個(gè)類對(duì)外暴露的接口簡(jiǎn)單,接口的參數(shù)為簡(jiǎn)單數(shù)據(jù)類型,所有的復(fù)雜操作封裝在類的內(nèi)部,這種類內(nèi)聚性最高,獨(dú)立性強(qiáng)。如:通過短信貓發(fā)送短信,對(duì)外接口僅為sendMsg(String msg),如何創(chuàng)建連接、格式轉(zhuǎn)換、信息發(fā)送全部封裝類的內(nèi)部。

附:面向過程編程中模塊的內(nèi)聚性

以下是面向過程中內(nèi)聚性由高到低做一說(shuō)明,對(duì)類劃分時(shí)有一定的參考意義。

偶然內(nèi)聚或巧合內(nèi)聚(Coincidental)

內(nèi)內(nèi)的各成分之間沒有關(guān)聯(lián),只是把分散的功能合并在一起;類A內(nèi)有BCDE四個(gè)方法,這四個(gè)方法均為public方法,功能含義上各自獨(dú)立。前端開發(fā)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),
   }

增強(qiáng)耦合度辦法:拆分;將登錄api要使用的api和部門管理api設(shè)計(jì)為兩個(gè)獨(dú)立的api。

邏輯內(nèi)聚(Logical):

若干個(gè)邏輯相似的功能通過參數(shù)確定該模塊對(duì)應(yīng)哪一個(gè)功能。如:類A內(nèi)有BCDE四個(gè)方法,這四個(gè)方法均為public方法,功能上類似,把它們封裝在一起,如字符串轉(zhuǎn)換函數(shù)工具類,包括int轉(zhuǎn)字符串、double轉(zhuǎn)字符串等。

時(shí)間內(nèi)聚(Temporal ):

因?yàn)楣δ鼙仨氃谕粫r(shí)間內(nèi)執(zhí)行才寫到一個(gè)模塊,即這些功能只是因?yàn)闀r(shí)間因素才有關(guān)聯(lián)。 例:程序初始化時(shí),程序員把對(duì)所有全局變量的初始化操作放在模塊A中,模塊A中就是時(shí)間內(nèi)聚。

過程內(nèi)聚:

模塊內(nèi)部的處理成分是相關(guān)的,而且這些處理必須以特定的次序進(jìn)行執(zhí)行。一個(gè)模塊,為某員工計(jì)算工齡工資:打開員工信息文件取出員工記錄;按一定的算法計(jì)算工 齡;按一定的算法計(jì)算工齡工資。 該模塊中的三個(gè)相對(duì)獨(dú)立的子功能必須以特定次序執(zhí)行,整個(gè)模塊具有過程內(nèi)聚

通信內(nèi)聚(Communicational):

所有處理元素集中在一個(gè)數(shù)據(jù)結(jié)構(gòu)的區(qū)域上。一個(gè)模塊,接收一個(gè)遠(yuǎn)程傳來(lái)的信息文件,保存,同時(shí)馬上打印該文件。 該模塊針對(duì)同一個(gè)文件操作,打印和存盤操作沒有前后順序關(guān)系,整個(gè)模塊具有通信內(nèi)聚。

順序內(nèi)聚(Sequential):

模塊內(nèi)的各個(gè)處理元素關(guān)注同一功能,順序執(zhí)行,前一元素的輸出結(jié)果作為下一元素的輸入。

功能內(nèi)聚(Functional):

類內(nèi)所有的功能成分均為了完成一項(xiàng)功能服務(wù)的,如:userDao都是為了完成用戶數(shù)據(jù)庫(kù)的增刪改查(CRUD)服務(wù)的。

面向過程編程中模塊的內(nèi)聚性參考:
http://www.dbjr.com.cn/article/120602.htm

以上就是java面向?qū)ο缶幊填惖膬?nèi)聚性分析的詳細(xì)內(nèi)容,更多關(guān)于java面向?qū)ο缶幊填惖膬?nèi)聚性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java中分組統(tǒng)計(jì)的三種實(shí)現(xiàn)方式

    java中分組統(tǒng)計(jì)的三種實(shí)現(xiàn)方式

    這篇文章主要介紹了java中分組統(tǒng)計(jì)的三種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java的HashTable源碼解讀

    Java的HashTable源碼解讀

    這篇文章主要介紹了Java的HashTable源碼解讀,HashTable繼承了Dictionary類,提供了一些字典相關(guān)的基本功能如添加、刪除、判空、獲取元素?cái)?shù)量等,需要的朋友可以參考下
    2023-12-12
  • Spring的@ComponentScan注解用法介紹

    Spring的@ComponentScan注解用法介紹

    這篇文章主要介紹了Spring的@ComponentScan注解用法介紹,@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定義包掃描的規(guī)則,然后根據(jù)定義的規(guī)則找出哪些需類需要自動(dòng)裝配到spring的bean容器中,然后交由spring進(jìn)行統(tǒng)一管理,需要的朋友可以參考下
    2023-11-11
  • Spring?容器初始化?register?與?refresh方法

    Spring?容器初始化?register?與?refresh方法

    這篇文章主要介紹了Spring?容器初始化?register?與?refresh方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • 使用opencsv文件讀寫CSV文件

    使用opencsv文件讀寫CSV文件

    這篇文章主要為大家詳細(xì)介紹了用opencsv文件讀寫CSV文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • SpringBoot入門教程詳解

    SpringBoot入門教程詳解

    SpringBoot?是由?Pivotal?團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化?Spring?應(yīng)用的初始搭建以及開發(fā)過程。本文將詳細(xì)為大家講講SpringBoot是使用,需要的可以參考一下
    2022-06-06
  • 深入理解Spring中RabbitMQ的Channel

    深入理解Spring中RabbitMQ的Channel

    這篇文章主要介紹了深入理解Spring中RabbitMQ的Channel,在RabbitMq中,channel表示邏輯連接或者叫虛擬連接,是棣屬于TCP連接的,一個(gè)TCP連接里可以創(chuàng)建多個(gè)channel,在Rabbit MQ里,消息的發(fā)送和接收都是基于channel的,需要的朋友可以參考下
    2023-08-08
  • 一文帶你全面了解Java?Hashtable

    一文帶你全面了解Java?Hashtable

    HashTable是jdk?1.0中引入的產(chǎn)物,基本上現(xiàn)在很少使用了,但是會(huì)在面試中經(jīng)常被問到。本文就來(lái)帶大家一起深入了解一下Hashtable,需要的可以參考一下
    2022-09-09
  • Spring Boot 如何解決富文本上傳圖片跨域問題

    Spring Boot 如何解決富文本上傳圖片跨域問題

    這篇文章主要介紹了Spring Boot 如何解決富文本上傳圖片跨域問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java實(shí)現(xiàn)文件的加密解密功能示例

    Java實(shí)現(xiàn)文件的加密解密功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)文件的加密解密功能,結(jié)合具體實(shí)例形式詳細(xì)分析了java針對(duì)文件的讀取、判斷、加密、解密等相關(guān)步驟與操作技巧,需要的朋友可以參考下
    2017-10-10

最新評(píng)論