[問題] encapsulation的應用(C)
source: an embedded software primer 1ed by Simon
正確的code: https://ideone.com/pRhTMU
錯誤的code: https://ideone.com/M2ZRJB
很明顯地可以看出這兩段程式碼的差別在於: 一個有用函式lSecondsSinceMidnight把變數
lSecondsToday包起來,一個是直接對變數lSecondsToday做access的動作。
這兩段code都有用semaphore把lSecondsToday給包起來。
作者說第二種錯誤的方式會有bug,但,既然都已經用semaphore把lSecondsToday包起來了
,怎麼會有bug的發生呢?為什麼要多用一層lSecondsSinceMidnight把變數給包起來?
打到這裡突然看到作者說的一段話:
At least some of bugs stem from undisciplined use: allowing code in many diffe-
rent modules to use the same semaphore and hoping that they all use it correct-
ly.
You can squash there bugs before they get crawling simply by hiding the semaph-
ore and the data that is protects inside of a module, thereby encapsulating bo-
th.
作者說把semaphore與semaphore要保護的data放在module裡可以防止"code in many diff-
erent modules to use the same semaphore".
但...在第一種正確的方式,function vHackerTask與vJuniorProgrammerTask都呼叫同一
個function lSecondsSinceMidnight,不也是"use the same semaphore"嗎?
想請教各位前輩是不是我誤會了什麼?謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.85.243
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1530244718.A.D72.html
→
06/29 12:06,
7年前
, 1F
06/29 12:06, 1F
有,迴圈上有comment,有說hope junior remembers to use the semaphore
→
06/29 13:20,
7年前
, 2F
06/29 13:20, 2F
→
06/29 13:23,
7年前
, 3F
06/29 13:23, 3F
→
06/29 13:26,
7年前
, 4F
06/29 13:26, 4F
→
06/29 13:26,
7年前
, 5F
06/29 13:26, 5F
→
06/29 13:28,
7年前
, 6F
06/29 13:28, 6F
其實我認為這段不是在表達這個意思。GetSemaphore與GiveSemaphore都是廠商提供的fun-
ction,作者是站在"function的使用者"的角度去表達這段話
※ 編輯: zzss2003 (60.251.49.183), 06/29/2018 17:59:39
→
06/30 13:51,
7年前
, 7F
06/30 13:51, 7F
→
06/30 13:55,
7年前
, 8F
06/30 13:55, 8F
→
06/30 13:59,
7年前
, 9F
06/30 13:59, 9F
→
06/30 14:01,
7年前
, 10F
06/30 14:01, 10F
→
06/30 14:02,
7年前
, 11F
06/30 14:02, 11F
→
06/30 14:04,
7年前
, 12F
06/30 14:04, 12F
→
06/30 14:04,
7年前
, 13F
06/30 14:04, 13F
→
06/30 14:08,
7年前
, 14F
06/30 14:08, 14F
→
06/30 14:11,
7年前
, 15F
06/30 14:11, 15F
→
06/30 14:15,
7年前
, 16F
06/30 14:15, 16F
→
06/30 14:17,
7年前
, 17F
06/30 14:17, 17F
→
06/30 14:18,
7年前
, 18F
06/30 14:18, 18F
謝謝你的解釋,我不懂的原因是因為我卡在這句英文:
At least some of those bugs stem from undisciplined use: allowing code in many
different modules to use the same semaphore and hoping that they all use it
correctly.
我一開始把"允許不同module內的code使用一樣的semaphore"認為是undisciplined use,
仔細看了一遍,原來作者的意思是"允許不同module內的code使用一樣的semaphore,且希
望他們正確地使用"這一整段話才是undisciplined use。
※ 編輯: zzss2003 (60.251.49.183), 07/02/2018 13:59:34
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章