c語言降低耦合,降低代碼耦合性

本文目錄一覽:

C/C++程序中的event該如何理解

c c++並沒有event功能。

不過一些事件循環框架 例如windows 的核心庫和qt這類是有event的。 還有很多項目也用到event這個概念,這個玩意就是設計上的一個概念, 一般來說是用來降低耦合的, 比如我寫了一個模塊用來做IO, 成功後會發一個event, coordinator收到這個event會調用其他業務邏輯模塊來做一些操作。 這種設計在C語言項目中比較多, 因為C語言的項目層次結構一般比較散比較平, 不太好做成層次結構, 需要消息隊列這類手段來協調各種功能。

c語言回調函數究竟有什麼用處?我覺的用普通的函數調用替換也可以,謝謝

從功能上來說 普通函數也是可以的

但在比較大的程序設計中 會對很多功能模塊進行封裝

比如 上層一個模塊

底層一個模塊

同時規定,上層可以調用底層的函數,但是底層不可以調用上層函數。

這時就需要使用回調函數。

通過上層調用底層的註冊回調借口,傳入回調指針。

實現底層通知上層的作用。

另外 回調函數的一個好處是,可以通過回調函數,調用不同接口。

比如接收數據,不同數據需要不同的解析函數。

但是接收數據的流程是相同的

這樣 使用回調函數,在接收數據的時候就可以不用判斷,而是自動使用不同的解析函數。

總之 使用回調函數,可以降低耦合,實現多樣性。

c語言中耦合度、內聚度、複雜度、數據傳輸特性相關含義

儘可能的獨立。

處理一個模塊時,不應該依賴另一個模塊的內部工作。

內聚原則是指,在一個給定的模塊內部,所有的代碼應該只完成一個單個的目標。

IT界有一句很著名的口號:強內聚、松耦合。

即使是最初級的程序員,在常常的被教導中,他也了解了這句口號的含義:我們的程序要模塊化,模塊要完成明確的一組關聯的服務功能,要求它的各部分是相關的、有機組合起來是完整體(外部程序來看黑盒子),模塊的內部各成分之間相關聯程度要儘可能高(強內聚);而模塊與模塊之間又要求是可分拆的、少依賴的(松耦合)。

人們易於實現強內聚的模塊,例如:一個函數實現一個獨立的功能,這就是強內聚。

人們不易實現松耦合,因為,孤獨的模塊毫無意義,只有模塊間的相互協調地工作,才能實現系統的目的。而對於模塊間的相互關係的設計,沒有一定的經驗是難以把握。耦合的強度依賴於:(1)一個模塊對另一個模塊的調用;(2)一個模塊向另一個模塊傳遞的數據量;(3)一個模塊施加到另一個模塊的控制的多少;(4)模塊之間接口的複雜程度。等等。

當然,「強內聚、松耦合」也是有矛盾的,如:內聚性越強,則要求的函數越多(每個函數只作一件「事」),這樣,將它們組合成「大」的功能,也就越複雜,就不可能達到松耦合。因此,應在二者之間作出平衡與折衷的選擇,這也體現程序員的水平。從系統論的角度來看,系統是有層次的,即系統可以分為子系統,模塊可分為子模塊,「強內聚、松耦合」的「度」的把握,應結合系統的次層性來考慮,即通常應在層次性上作出折衷,如:模塊內子程序(下一個層次上)應共享數據(有一定的耦合度),而減少全局變量能降低子程序性間的耦合性。

面向對象的語言進一步強化了「強內聚、松耦合」,類的封裝性既強調了相關內容(數據及其操作)的內聚,又強調了類的獨立性和私密性。而類的繼承性以及友元等,就是在松耦合的原則下規範了類之間的關聯關係。類與類之間通常通過接口的契約實現服務提供者/服務請求者模式,這就是典型的松耦合。

「強內聚、松耦合」對於程序編寫分工、程序的可維護性以及測試都有重要的關係,如:從設計角度來看,在「強內聚、松耦合」的指導下進行的設計得到的程序模塊,符合項目管理的WBS(工作分解結構)的要求,其相對獨立的模塊可以分配到具體的程序員進行開發,另外,程序編碼外包也必須建立在這種原則的設計之下;從程序生命期角度來看,它有利於提高程序質量,特別是方便於程序的日後維護,即程序模塊的相對獨立性是可維護性的保證;再從測試角度來看,符合「強內聚、松耦合」的程序,易於對局部(模塊)進行黑盒測試,也易於編寫測試用的「樁」和「驅動」。

「強內聚、松耦合」也是對組織結構的要求,項目組分為幾個小組(正式的或非正式的),各小組的工作應是高度相關的,各小組之間的工作應盡量是較少相關或有明確的接口,從而減少溝通成本。其實,「強內聚、松耦合」是系統中應遵守的普遍原則,我們在許多領域都可以找到它的應用。

「強內聚、松耦合」是我們不得不念的「三字經」,我們一定要念好它。

C語言中建立函數的目的是什麼?

提高內聚,降低耦合,提高代碼重用率。模塊化設計,功能單一化

在c語言中定義的函數有什麼作用?

函數的作用就相當於一台機器,這種機器的作用各不相同。不同的函數能完成不同的特定的功能。就像你放玉米進去,它出來的是爆米花一樣。它就對玉米進行處理了。而c語言的函數就是你放入數據,它就會對數據進行處理。

數組的作用就是存儲數據的作用。是存儲數據的類型的一種。計算機處理的就是數據。存儲數據,你說重要不?就像電腦沒有內存,它怎麼運行啊?

上面是通俗的介紹,補充幾點:

1:函數是很重要的,沒有函數c語言程序無法運行,包括大多數語言都是這樣,因為必須要有一個主函數(main)。

2:函數可以把不同功能的代碼獨立到一個地方,減少耦合性,提高代碼可重用性,增強程序的安全性。

3:不同類型的函數有不同的功能,按照不同分類有不同的叫法。比如庫函數是系統自帶的「庫」,回調函數用於處理操作系統的問題,API函數叫做應用程序接口函數。

加油,越學越明白。

求解釋c語言函數指針的作用

上面的話是有道理的。只是,要真的體會這些名詞,需要你親歷躬行,一個「百度知道」是很難讓你真正體會並理解的。國人一些教科書也不負責任,人云亦云的說這些話,但很少能透徹講解。我小試一下。

1. 便於分層設計:函數指針是引用,是間接層,或曰隔離層。它輸出到上層,給上層用戶用。函數實體是實現,在下層,給開發者用,實現者(軟件工程師)關注。這就是簡單的分層的概念了。上層用戶想讓一個函數所做的東西會變化時,我們只需要改變底層實現,並用函數指針指向新的實現就行了。

再精鍊一下分層:分層的核心是對接口進行設計和實現。函數指針的作用就是提供不同實現的統一接口。

2. 利於系統抽象:只有存在多個類似的實體需要模擬、操作或控制時(這種情況很多)才需要抽象。多個類似的實體就是對象,抽象的結果就是類。在C裡邊,可以用函數指針數組完成這種抽象。如, fopen 就是一個例子。他可以打開文件。C裏面將磁盤文件、串口、USB等諸多設備抽象為文件。

3. 降低耦合度以及使接口與實現分開:第1條中的解釋已經說明了這一點。

再具體一下:

我曾搭建過一個嵌入式平台。其中的設備操作(硬件驅動)採用了多組函數指針數據,並進行了簡單的封裝,其結果是:

業務軟件使用函數指針數組的封裝函數訪問設備。這個封裝可展示為:

int DevOpen(char *strDevName);

int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong);

int Read(int DevID, char* DataTo, int StartDevAddr, int DataLong);

int DevClose(int DevID);

這組抽象出來的函數,是一組語義清晰且穩定的上層接口,為上層的業務開發團隊使用。底層的驅動層,各自實現自己的設備打開、讀、寫及關閉代碼,然後,註冊自己的設備到系統列表裡。上層業務接可以使用了。期間的耦合在這裡:

int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong)

{

/* Error detecting. */

return DevWrite[ DevID ]( char* DataFrom, int StartDevAddr, int DataLong );

}

其中,DevWrite[ DevID ]就是一個函數指針數組:

int (*DevWrite)[ MAX_DEV_NUM ]( char*,int,int ) = {0};

裏面放的就是多個設備的寫的操作。其中包括:UART,RTC,WatchDog。EEPROM,DigitalInput,DigitalOutput,Key,LCD,LED。

好了。說的太多了。如需要學習,可郵件livefuture@163.com。

但願對你有所幫助。

原創文章,作者:FTRPH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/329955.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FTRPH的頭像FTRPH
上一篇 2025-01-14 18:55
下一篇 2025-01-14 18:55

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29

發表回復

登錄後才能評論