精華區beta Programming 關於我們 聯絡資訊
==> 在 tinlans.bbs@whshs.cs.nccu.edu.tw (汀) 的文章中提到: > > 於是這個機制就成了,在修改一個我不完全了解的程式(或者是黑箱) > > 就像是在拆一個自己不是很了解的炸彈一樣 > > 你說這樣安不安全 > 也沒有你想的糟糕... > 首先還是要強調一點,繼承不是要你拆,是要你拿來用, > 所以小箱子標示為 private 的部分你不必動也不能動。 > public 通常是小箱子想放給外界使用的介面, > 大多數的情形下你也會想提供相同形式的介面出去, > 通常標為 public 的東西就是給外面亂戳亂玩也不會爆炸的, > 如果你覺得小箱子有某些 public 的東西危險, > 你還是可以把它 private 化, > 或是標成 protected, > 只給將來設計更大箱子的人使用。 補充一點。理想情況下, 任何 method, 尤其是 public method, 都會有 pre-condition 及 post-condition, 在執行前與執行後, 也都有 well-defined 的 invariant state。 好的 class 設計說明文件, 都應該明確道出這些事項。 有了這些 interface 的 contract, 仍可維持黑箱的實作隱密, 又不損白箱的透明度, 可降低許多「拆一個自己不是很了解的炸彈」的風險。 這也正是 Eiffel 爸爸 Bertrand Meyer 所提倡的 "design by contract" 的用意之一。 > 對於設計小箱子方面經驗很老到的人來說, > 用他們設計出來的小箱子是非常安全的, > 除非你用的是經驗很淺的人寫的小箱子, > 不然就是故意要放炸彈炸死你的仇家寫的。 > > 而經驗老不老到跟語言機制本身安全性的影響性, > 在每個語言都一樣, > 在 C 的時代人家嫌 pointer 不安全, > 但是給經驗老到的人來寫照樣又快又安全, > 程式彈性又大; > C 不會檢查 array index out of bound 的問題, > 經驗老到的 C programmer 反而將它視為優勢加以發揮和應用, > 但是在寫 Java 的 programmer 就不這麼想。 說得好。 除了程式語言、方法論之外, 配套的流程、制度、discipline 往往更能決定安全性。 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ≡ 何陋居 ≡ 在這個世界上,你就愛一種東西,你就在你愛的這個東西裡 把自己練到完美,練到無懈可擊… 就這樣,你學會簡單而嚴肅… 你形成一種風格,唯你獨有。 劉大任 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- * Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>