以軟御硬的產品整合設計觀—從合成結構圖到使用案例模型

前言

嵌入式系統(Embedded System),簡單的說,就是把軟體 “放入” 硬體設備內,然後寫簡單的程式來控制硬體,一般稱之為 “韌體(Firmware)” 設計。諸如從主機板的 BIOS 設計、光碟燒錄機的控制程式、乃至於至行動電話、PDA、影音家電產品等,均可見其嵌入式系統的蹤影,可說是無處不在,應用範圍非常之廣泛。

以往寫嵌入式系統的程式,受限於記憶容量過小,只能以如 C 語言以比較低階的語法層次,來直接連結與控制硬體的操作,程式要求的是 “輕薄短小” 與 “效能佳”,而多樣化的應用層面,並不容易。而如今,硬體設備的兩個最重要與軟體開發相關的裝置:整合式晶片 (Soc, System on Chip) 與 快閃記憶體 (Flash Memory),前者如同主機板的 CPU,以更小的體積、更佳的效能來控制硬體其它的 I/O 裝置;後者有如資料庫,可以塞更多的資料與應用程式於其內,如此嵌入一個小型的作業系統(OS),如 Embedded Linux、Windows CE、Java Virtual Machine …等,由 OS 負責與更底層、低階的硬體裝置溝通、然後 OS 提供了高階的 APIs(Application Programming Interfaces)甚至系統框架(System Framework,如 .NET)供軟體開發者用更簡單、具彈性的高階程式語言的特性,來達成更豐富的功能。

所以,嵌入式系統的應用範圍,可就更行廣泛與活躍,軟體應用程式的地位,從以往是陪襯於硬體,現在反而是極有可能翻身,反而是 “以軟御硬”,透過軟體,讓競爭性激烈、毛利低的同質性硬體產品可以脫穎而出,能更有特色、更多的變化性。

嵌入性系統如何作需求分析與設計?

那麼,嵌入性系統的軟體設計,是否有別於 “純” 軟體應用系統的設計? 筆者不以為然,尤其筆者教授 UML 軟體設計課程,對多家硬體製造業內的軟體開發部門與 PDA、手機等應用程式開發廠商,就近的觀察,發現到,一個比較顯明的問題是,軟體開發人員的規模,甚至比一般中型 “純” 軟體開發廠商的人員還多,但,開發人員的角色,卻連最基本的 SA/SD (系統分析/系統設計) 都沒有區分,資深的開發人員或經理擔任需求分析,幾乎沒有所謂的結構分析或設計,就是依照需求,直接下去 Coding,所以軟體開發人員的要求是會“寫程式”,能“寫出來” 最重要,資深經理比較煩惱的反而是需求的不明確。

嗯,好吧,那麼如何釐清有效的需求? 本篇先針對這個議題來作一些說明,筆者以為,嵌入式系統的需求分析與設計,比起“純”軟體如 ERP 系統等,簡單得很多,理由為何? 因為,系統範圍就是被“硬體”給確實“框住”,形成最有效的封裝效果,也就是用“眼睛”就可以看到,待開發的系統就是一個黑箱 (Black Box);而“純”軟體應用系統,系統分析人員要能有較高度抽象的能力,才能以“心眼”看到與界定系統的範圍。要能在嵌入式系統做好有效的需求分析與設計,只有一個關鍵:

“找出那一個黑盒子(界定系統範圍),瞭解該黑盒子在硬體產品內的角色與定位”。

繼續閱讀 »

蓁妮與采潔的國小開學日 (2006/08/30)

早上 6:30 起床,準備要蓁妮與采潔兩個寶貝女兒到「育才國小」上學,因為今天是她們放完暑假,準備開學的第一天,也同時是蓁妮升小五、采潔升小三的年級了。

「育才國小」是採每兩年重新編一次班級,所以蓁妮她們在新年級的開始,就會面對了要認識許多的新同學。而昨天晚上約 10:00,蓁妮最要好的同班同學 Michelle 打電話過來,說她已經從「育才國小」的網頁上得知了重新編班的名單。蓁妮就讀的是雙語班,每個年級共有三個班,而蓁妮竟然就與她最要好的五個同學,包括 Michelle,全部都不在同一斑,也就是蓁妮單獨被編到沒有「死黨」的班級了。所以,蓁妮昨晚的眼淚一直掉個不停... 她好難過,尤其與她情同姊妹的 Michelle (從一年級一直與蓁妮同一斑),聽說也在電話的另一端跟著哭,唉! 但,這也就是現實生活的一面:人總是遲早會面臨到分離的那一刻。 倒是采潔,她倒沒想這麼多,因為她只有一個好朋友,雖然並沒有編到同一個班級,但她也有兩個不喜歡的同學,也沒有與采潔同一斑,加總起來,采潔是認為這樣算划得來的,而且,采潔在就寢時,還小聲地對媽媽說,她覺得姊姊好可憐喔。 :’(

昨晚我也跟著就心情不佳,想說蓁妮幾年來這麼多的好同學們,結果到了五年級時,卻無法同一個班級繼續快樂地相處學習,本來還在想,是否有必要去教務處為蓁妮說說換班的事。但是,到了今天早上起床後,蓁妮卻出乎我意料之外,心情倒很愉快,似乎她已經能接受重新編班的現實了,所以我也跟著鬆了一口氣,然後也幫著蓁妮她們,提著要拿到學校的一些用品,與老婆跟著一起去新的班上看看。

先送采潔到新的班上,嗯,新的課本與練習簿都已經放在每一張書桌上,並且也列出哪一位小朋友依據編號是坐那那個位置上,同時也遇到新導師,一位中文老師,一位英文老師,都有點年紀,尤其是她們的英文導師,蓁妮口中以前常說的 Teacher Dernis,據蓁妮說有 101 歲 88|,不過,說什麼我是不相信啦;再到同一棟大樓的四樓(采潔的三年級在三樓),也幫蓁妮依座號找了位置坐下,也同時碰到新的導師,與她打個招呼(還沒看過英文導師)。剛出來時,遇到了最疼蓁妮,也最賞識蓁妮的四年級導師傅老師(她是校長的妹妹),也在前幾日被通知要升到五年級班級擔任導師,但,可惜的是,傅老師是擔任另一斑的導師,她也覺得蠻失望,無法再繼續教蓁妮。她說因為編班是教務處的事宜,她也不便干涉,而事實上,編班並非依能力來分班,而只是透過教務主任的 "奶油桂花手" 隨機抽籤的(其實,這大概是被我猜到了),蓁妮算是倒楣了點,與她的最要好同學們,全沒分班在一起,事實上,六個好同學,都被分散編到三個班級了。

換個角度想想,升上國中時,好同學們仍要分開的,況且,我看到蓁妮的班上,已經來的女同學們,看起來都蠻乖巧的,我相信蓁妮很快又會再有新的「死黨」了吧。

倒是采潔,有些擔心她太過單純、直線思考的小腦袋瓜,可能不容易應付雙語班三年級已經有些困難的數學與英語了,所以,做爸爸的我,可能開始要考慮親自教她們功課了,只不過,采潔不喜歡我教她功課,嫌我說不好英語… 可真是傷腦筋~ :crazy:

【漫畫分享】東大特訓班—值得讓軟體人員瞭解學習的本質!
東大特訓班 東大特訓班
———————————–
作者/三田紀房/作
出版社/臺灣東販
ISBN/9574737578

騙肖仔!!上大學有什麼難的?我就讓笨蛋也能在一年中考上最高學府。原本是律師的─櫻木建二,本來只是為了讓龍山高中的財務危機能夠解決,沒想到竟然成了特訓班的老師,看搖身一變的櫻木老師,如何讓笨蛋學生在一年之內考上日本最高學府─東大。考試是靠技巧的,就讓櫻木老師來教導你各科目的準備方式,一起朝最高學府邁進吧!!

最早看到這部漫畫是在「蘋果日報」副刊所推薦的,然後也知道有同名日劇的播出,不過當時是覺得漫畫人物的畫風並不佳,所以也沒有特別注意。

結果後來看到日劇的播出,阿部寬主演漫畫內的主角人物,櫻木,相當有型,可說是演活了這部漫畫的主角,然後,耶… 劇情還挺特別有趣的,從阿部寬口中說出 "笨蛋" 的學生們,要把他們在一年內從幾乎不到國中程度,然後要能讓其考上日本首屈一指的東大,東京帝國大學,這個看似不可能的任務,要如何教導與訓練才能達成呢?

看了兩三集的日劇後,就趕緊到租書店借了這部漫畫,先借了三本,還真是好看,欲罷不能,又馬上去借了 4~11 集來看。前三集還好,是大概敘述著一個本來是三流學校聘用的律師,因為該學校幾乎要招不到學生了,而該位律師,想透過一些極端的手段,來拯救瀕臨破產的學校,所以刺激了兩位原本是叛逆的少男與少女,由該位律師擔任升學班的導師(因為他找不到老師有意願來擔任),保證能讓他們經過一連串有效的學習方式後,就能考得上日本第一流學府,東大,而且,很限定只能考最棒的學校,其它大學,一律不填,只為了當有金字招牌後,就能讓本來是三流的私立高中,成為升學的名校。

我覺得最精彩的,莫過於從第四集開始,導師櫻木,從開始請出昔日補習班名師的傳說人物,柳老先生,從數學開始登場,施以斯巴達式的填鴨教學法,卻又能不忘數學的本質,甚而從中找出學習數學的樂趣、把數學當成是一門藝術來欣賞。然後再由柳老師推薦介紹,陸續登場了教導英文的川口;教導國文的芥山;教導理科的阿院修太郎等,每一位名師各有其教學的特色,而在他們具個性化的指導過程中,也就帶出了學習所應該具備的心態、基本功夫與技巧了。

例如,英文老師川口,是以趣味教學的方式,化解了兩位學生對英文的偏見(他們認為日本能很難學得好英文),從開始動起身體,以搖滾的暖身操運動方式來聽披頭四的歌曲,進而學習從其過程來瞭解學習英文所需具備的基礎功夫與技巧。這裡的英文學習秘訣,總結有:

  • 不一定要說最完美的英語!拿出信心積極的使用英文!
    完美主義會害英語無用武之地。別怕丟臉,大大方方的說英文吧!
  • 別從單字或文法開始學英文!先從背誦開始吧!
    與其被動的閱讀英語,倒不如硬著頭皮寫作文。
  • 應考時不可以馬上就看題目!先做個深呼吸,然後環顧四周!
    先調成平常心,在審慎的面對問題。
  • 英文作文的計分基本原則是扣分制。
    東大的自由英文作文題,最忌諱哪些簡單的基本錯誤!!
  • 忘記是當然的,但是基礎要打好。
    勉強是不能持久的,所以聯考只是一時的勝負!

然後,國文老師芥山的登場,可真具有日本古時文人的氣質。他說了,國文才是所有教科的基礎,所以他在答應至該校教導的條件就是需要保留了比較大量的國文授課時間。理由何在呢? 因為,考試的題目,主要是以本國語言來去理解的,所以,若是學生的解讀力不夠,無法判讀出題者的意向,就提不出正確的解答了。這可有意思啦,這也是我個人在最近幾年一直認為,擔任專業職的顧問,就是要能 "讀出" 提問者的 "假設點",知道這個問題背後的本質與其論點,站在對方的觀點看問題時,自然而然,你就能很容易地抓出問題的茫點之所在了。再來,芥山老師說的這段真正就是我對學習有了突飛猛進的 "頓悟" 後的心得:

要能培養自己「正確的閱讀」能力,就是常常在心裡自問「為什麼」。走在街上也好,讀書時也好,你們必須把我機會自我訓練,不是漫無目的的走,也不只是讓目光追著文章的字面,而是學著設問。讀書的時候,就假想自己對筆者設問,像是在和他討論。 …

實在是句句說到我的心坎裡,這一些學習的根本道理,沒有一個老師,有在學校教導過我瞭解這些箇中根本,學生時代,根本是以填鴨的方式來學習。是到了這幾年,個人從持續思考與摸索中所悟出而來的。可真羨慕,漫畫內的兩位學生,能在學生時代就能遇到像芥山老師這種通曉學習本質論的偉大導師!

芥山老師的學習秘訣,茲列出如下:

  • 「讀了會臉紅心跳」,先從這一步體驗開始!
    國學基礎要靠多讀書來培養,這雖然是老生常談,卻是真話。不道德的作品也無妨,只管讀就是了!!
  • 培養出讀出弦外之音的「閱讀力」!
    讀出弦外之音,那樣才能正確的掌握內容和筆者的意圖。
  • 讀書時也好,走在街上時也好,養成設問「為什麼」的習慣!!
    經常對周遭事物抱持好奇心,你不該停止思考!!
  • 熟記模式,讓自己擁有客觀思索事理的能力!
    常常問為什麼,再用自己的思維模式去設想反論。先學會這麼問答的模式!
  • 常問「為什麼」,以磨練孩子的思考能力!!
    可以培養出深思熟慮的習慣,鍛鍊思考力!

而最後登場的老師,就是負責理化的阿院修太郎,呼,漫畫把他畫成好像是愛因斯坦,相當逗趣。阿院老師先從「其實理化是很有趣的」的心理建設開始,所以揭露出「阿院式的分隔漫畫理解術」,藉由圖像式的漫畫來解釋物理的現象。因為是圖解的方式,所以很能讓學生加強記憶力,不容易忘記;然後,阿院又揭露出這幾年最為炙手可熱、最貼近與符合人們綜合左腦與右腦的思考模式:記憶樹!! 其實,也正是我幾年最常使用的筆記與整理學習技巧:心智圖(Mind Map)!! 而心智圖,就是畫個圖使各項知識之間產生關連,能幫助大腦動得更快更靈活,簡單的說,就是活用 關連與關鍵字,但卻足以讓你的思考能力提升原來只以左腦邏輯思考的好幾倍之多!!

這部漫畫,絕對不只是單純的漫畫而已,在日本,因為受該漫畫的影響,使得報考東大的人數,提升了二倍之多。 個人絕對極為強烈推薦!想瞭解學習的本質與技巧的人,應該要租或買來參考的,它絕對不是只有一般漫畫在描述人物互動談情說愛或誇張怪力亂神的劇情,而是藉由漫畫人物之間的互動,來說明甚麼才是學習的本質。

台中省親旅遊記述(2006/08/18~20)

上星期五,利用空檔時間,想說一定要趁女兒們在暑假開學前去台中一趟,因為,這是我們每半年固定一次的省親暨旅遊的全家活動,而且,蓁妮與采潔最是開心了,因為,她們又可以 "凹" 最疼她們的舅公買玩具啦。 :)

由於我老婆的工作有些繁忙,所以延至星期五晚上才出發,然後原本是計算星期一才回來的,但仍因我老婆要開會作資料的緣故,提早至星期日晚上回來。

我先利用『心智圖』作個 "Overview" 的旅遊日誌,比較容易掌握這三天的行程,然後再挑重點把相片列出來,一張一張來「看圖說故事」,這樣的記述,有個總覽,也有個局部的詳細介紹,未來這樣做旅遊日誌,應該是不錯的方法。 :D

【心智圖】台中省親旅遊記
點擊圖片鏈結可看原圖

繼續閱讀 »

蓁妮的冷笑話漫畫謎語—頭髮只有三根時,如何中分?
蓁妮的冷笑話漫畫謎語—頭髮只有三根時,如何中分?

這一張搞笑插畫是蓁妮在說一個很冷的笑話謎語時,為了增加真實度,還特別誇張,把一個少女畫成只有三根頭髮、然後還繫上蝴蝶結,哇!還有露出鼻毛呢。 呼~ 有夠誇張與不協調,但也覺得實在生動,非常凸顯出這個冷笑話謎語的主題。 :D

冷笑話謎語來囉,請各位接招:
「頭髮只有三根時,要如何中分呢?」

答案:

繼續閱讀 »

物件 (Object) 的媽媽是 類別 (Class)?

從 OOP 學習物件導向(Object-oriented)觀念時,你就不太容易去對一些基本的 "術語 (terminology)",下功夫來去 "參透" 其本質的意涵。例如,我雖然已經許久沒有教授基本物件觀念的課程,但在教授類別圖(Class Diagram)與物件圖(Object Diagram)時,多少就需要複習與說明什麼是類別,什麼又是物件。尤其,我最喜歡 "考" 程式設計的老手們,一個他們認為再基本與簡單不過的問題了: 物件是由誰誕生的?

嘿,如我預料,十個有九個回答:是由其所屬的類別誕生的。 是嗎? 我再請他們反思一個問題: 到底類別與物件的區別是什麼? 有人會回答:類別是死的;物件是活的。 這更有趣了,既然類別是死的,那麼,死的類別怎又能如何誕生出活的物件呢?

物件是有機的生命體,但類別卻不是,事實上,世界上根本就沒有 "類別" 這種有機體;而若是類別不是有機的生命體,那麼,物件就絕對不可能是由其誕生的!

為何會有公司、部門、員工等類別? 因為容易讓組織的層次分明,這是一種 "人工" 的分類;為什麼從狒狒的角度看人,就知道 "非我族類"? 因為這就是一種與生俱來的 "本能",沒有任何理由,是再自然不過、也不用說明的道理了。所以,將 "物件" 分門別類,可以是 "人為判斷",也可能是一種再自然不過的 "本能",沒有絕對的標準,要將物件歸為那一類,只能說,要將物件分屬為某一類,你要能作比較 "合理化" 的說明而已。

看似再簡單不過的問題,其實才真正是蘊含極為深奧的哲理,要能具體說明類別與物件的區別,這其實比想像得還困難。首先,你可必須先徹底思考,到底什麼是類別,為什麼需要有類別,要如何分類 …等。關於類別,我會就我個人幾年來持續思考的體悟與認知,另外著文說明。"類別" 這個主題,絕對是在物件導向觀念中,最為關鍵的核心,因為,決定資訊系統因應需求變動而所能承受的震盪程度,取決於類別圖的設計,真正的軟體行家,如 Peter Coad 與 Martin Fowler,非常擅長將問題領域(Problem Domain)的概念(Concepts),抽象(abstract)化並依其本質與特性 "分門別類",具化並組成為軟體內部的靜態結構,得以支撐系統的穩定、彈性與延展度。

回歸主題,到底物件是由誰誕生的呢?
我們先看底下一行程式碼,試著想想看,這一行程式碼的意思是什麼。

 Employee e = new Employee();

我在某討論區看到有人是作類似這樣的解釋: 用 Employee "類別" 造出一個 "物件實體" e ,這樣的回答,其實仍與物件是由其所屬的類別所誕生的意思是一樣的。

"Thinking in Java" 一書中,起碼還作了比較合理的說明:
You must create all the objects (所有物件都必須由你建立)

那個 "你" 是程式設計者? 我寧願作這樣的解釋:
程式設計者(Programmer)透過 new 關鍵字來要求「請給我一個新物件」。

既然是 "請",也就代表了,程式設計者只是作宣告(Declare)而已,真正 "誕生" 物件者,其實就是 "系統"!,再說得白一點,就是應用伺服器(Application Server),或者,我個人蠻喜歡用 "Container" 這個術語,來說明應用程式其實就是透過它來取得系統層次的服務(System-level services),包括誕生物件等。

透過上述的說明,上面那一行程式碼比較合理的解釋應該像是這樣:
"個體(Instance) e 透過 new 關鍵字宣告,請系統(System)建立一個新物件,並將其分屬於 Employee 類別 (也就是具備了 Employee 類別所應有的 "本能")。"

至於 "Instance" 一詞,本質就是物件,國內一般書籍翻譯為 "實例",我很不喜歡,覺得不自然,也不夠貼近英文原意;翻譯成 "個體" 或 "實體",應該是比較恰當的,而個體代表的就是,一個個的物件是可以獨立運作、為有機的生命體,瞭解(know) "something" 以及做(do) "something"。

對了,"系統(System)" 這個字眼,若以比較 "擬人化" 的術語,那未,我覺得「駭客任務」電影中,那個 "母體(Martix)" 應該會是最佳的代名詞了。 :-)

延伸閱讀
不要從程式語言學習物件導向!