Friday, October 21, 2005
Reusability?
到底要如何去解釋、宣稱、說明、斷定、評估一個軟體系統擁有很好的Reusability呢?
用Google查了一下Reusability的定義(define:Reusability):
- The ability of a package or subprogram to be used again without modification as a building block in a different program from the one it was originally written for.
www.adaic.org/docs/craft/html/glossary.htm - Capable of being used again or repeatedly.
www.haley.com/resources/Glossary.html - (voir Réutilisabilité) Capacity of a component to function and integrate within more than one environment.
www.erudium.polymtl.ca/html-eng/glossaire.php - The characteristic of a component that allows it to be used in more than the application for which it was created, with or without modification.
www.cio.com/archive/030197/glossary.html - In computer science and software engineering, reusability is the likelihood a segment of structured code can be used again to add new functionalities with slight or no modification. Reusable code reduces implementation time, increases the likelihood that prior testing and use has eliminated bugs and localizes code modifications when a change in implementation is required.
en.wikipedia.org/wiki/Reusability
似乎是因為我學的第一個語言是物件導向語言
看過的書裡面大多都是OO的code
對種種的reuse感到習以為常
沒有在不是OO的領域裡面打過滾
要去解釋這個"常理",會覺得這種評斷似乎是有點抽象
就像是要去說明"人為什麼要大便?"一樣很難解釋(好像也沒有很難解釋)
這次老師要我補強一篇paper
文中要強調此系統的reusability
我對其中說明的種種reuse方式總是覺得有點領悟不過來
為什麼這樣做就是在reuse呢?
這麼做是要reuse什麼東西?
發現了其實我對"reusability"的認識原來還是蠻粗淺的...
有人整理出來OO的reuse種類:A Realistic Look at Object-Oriented Reuse
我就這篇文章提出的這幾點想一下要如何說明我的系統中存在這種reuse
- Code Reuse:
sharing common classes or collections of functions and procedures
(procedures reuse只有C++能夠做到,Java無法支援procedures reuse)
- Inheritance Reuse:
透過inheritance,subclass可以去reuse到superclass中所有不是private的field與method(與constructor)
這種"is a"的關係的確是一種reuse的方式
但不一定是最好的方式,因為inheritance會有許多的限制
根據物件導向的原則,我們應該要"Favor composition over inheritance"
所以說雖然有reuse,但是更需要良好的設計去support此一技術 - Template Reuse:
根據文中的說明,我看不出來這跟系統中元件的reuse有什麼關係
至少我覺得系統在run的時候應該不會有感覺出此種reuse... - Component Reuse:
Component reuse refers to the use of prebuilt, fully encapsulated components in the development of your application.
Components are typically self-sufficient and encapsulate only one concept.
這應該是我在paper中比較需要去著墨的一種reuse
但我必須先把系統中這些component找出來
說明我有去使用到這些component,它們提供了什麼功能
不過這種component好像可以是一個物件、一組物件、甚至是一整個package
要如何寫一小段code去說明我的component很好reuse呢?
是不是用圖形表示出這些componet會更容易說明呢?
還要多想一下 - Framework Reuse:
Framework感覺上是由一堆component組合來的
我們必須去學著如何使用一個Framework
因為Framework已經幫我們做掉很多事情了
它應該提供了一些既定好的東西讓我們去follow
只要另外寫一些code就可以達到我們想要的功能
看到了這裡我開始懷疑我們的系統到底是提供了一個framework還是一組component? - Artifact Reuse:
這不是軟體層級的reuse - Pattern Reuse:
With pattern reuse, you're not reusing code; instead, you're reusing the thinking that goes behind the code.
這種reuse的level蠻高的,事實上我們應該都是去reuse別人的pattern
還沒有到提出pattern去讓別人reuse的功力 - Domain Component Reuse:
針對某個domian的較高階的component reuse,蠻難體會的
文中還提到了"The Secrets to Reuse Success":
- You can't call something reusable unless it's been reused at least three times on three separate projects by three separate teams.
我們系統中的component好像還沒有在三個不同team中的project中進行reuse
必須要假設這個目標是可以達成的,不然會感覺自己是在胡說吹牛
但我要在paper中提出來這個假設,真的要舉三個例子嗎?
或是我可以進行一種更高層次的假設
想到這些看paper的人都有舉一反三的能力,事實上我覺得大多數paper的作者都好像是這麼做 - Reusable items must be well-documented and have one or more real-world examples of how to use them.
必須要更仔細地去說明這些component能夠reuse的功能
還有要舉更實際的例子 - The only way you'll make reuse a reality is if you plan for it.
沒錯,這也是我弄這篇paper的目的 - Reuse is an attitude.
這論點可以在Conclusion中提出來,還不賴
說實在,改別人寫的paper好像會比自己寫paper更讓自己惶恐
深怕對原本作者表達的會錯意,並要把自己的想法加在別人的想法之上
希望我能把這件事弄好 @@"