微軟 Tech Ed 2008 第一日
從今天起到禮拜四要去參加一連三天的微軟 Tech Ed 活動,先解釋給沒有聽過這個活動的朋友們聽,其實簡單來講這個活動就是一個很大的研討會而已,微軟針對開發人員以及 IT 人員規劃了各式各樣的課程,讓參與者自由參加。這個活動是要付費進入的,不過會有很多贈品,包括一個多功能背包 (我的一拿到拉鍊就掉了... Orz)。可惜相機被人家借走無法 PO 一些照片給大家看。也有到了一些攤位參觀,藍色小舖,點部落之類的,不過其實只是為了 A 贈品...
早上那個開場致詞以及一些 Demo,其實我大部分時間都是在睡的哈,還好會堂很大可以容納一兩千人,混在人群中可以睡的比較安心。睡到中午之後跟也有註冊參加的同事一起到 101 吃飯,順便參觀一下台灣 Google (他女朋友在那工作) 的辦公室。果然名不虛傳,是個很奢侈(不,是注重員工福利!) 的地方。茶水間一整架的零食當然不用說, 冰箱裡隨意取用的飲料跟哈根大,員工娛樂室,按摩室等等不在話下,台北 101 73樓的視野當然也不用特別說了。果然股價美金 400 元的公司就是不一樣,名不虛傳。
下午參加了幾場關於開發人員的課程,其中有兩堂也是聽到一半就撐不住了 (還好都是在大會堂哈),也不是講師講得的不好,實際上他講得內容豐富而且實用性很大,而且偶爾也穿插幾個冷笑話讓人會心一笑。只不過除了關於 Security 那堂我有完整聽完以外,剩下的兩堂都有講一些我比較熟或比較沒興趣的內容。曹祖聖老師真的是很強 (雖然也不是第一次聽他上課啦),稍微懂一點的人一聽就知道他真的是有練過的,其實每個講師都有自己厲害的地方啦不過他比較讓我佩服。
老師上課時有提到一個物件導向設計的概念,我覺得挺有趣的可以讓大家思考一下:
假設我們在寫一個類似世紀帝國的即時戰略遊戲,現在有一個士兵,射了一箭射到一匹馬,那匹馬就減血,這樣的邏輯要怎麼對應到物件的關係上? 好,士兵是一個類別,那隻箭也是,那匹馬也是,應該不難,現在問題來了,攻擊的邏輯 (就是要減多少血那個部份) 是要放在士兵,箭,還是馬?乍看之下好像沒什麼差別,但其實這個決定會影響程式的維護性。如果放在箭上的話,那箭的攻擊邏輯就必須要知道他要攻擊的對象,比方說如果攻擊對象的話換成是坦克車的話,弓箭造成的損傷就要改變。所以無形中弓箭的類別就會跟其他所有單位的類別形成了相依性,這是不好的因為類別間的相依性越高,一般來講程式碼就越難維護或擴充。曹老師後來是說應該是要放在馬上面,讓馬的類別處理,我想這樣的話馬自己負責自己被攻擊的邏輯,感覺上類別之間的關係比較鬆散 (通常是件好事)。不過我後來想想其實這樣還是沒有解決相依性的問題啊,這樣的話馬本身還不是需要知道它是被什麼攻擊....雖然說我沒有寫過即時戰略遊戲的經驗,但我想我會這麼作吧,會有一個固定的公式 (會將 "可被攻擊的物件" 幾個屬性,比如說防禦力之類的算在裡面) 來算出損傷,這樣的話所有 "會攻擊的物件" 的攻擊方法其實都是一致的,只會因 "可被攻擊的物件" 不同而改變。
還有老師最後還有出一題給大家回家思考,請問以下這兩組東西,如果要你畫出類別關係圖,要怎麼畫?
樹、紙、海報
烏龜,石頭,筆
感覺上有點像腦經急轉彎...海報繼承至紙,紙繼承至樹? 那烏龜,石頭,筆勒?我是還沒深入去想,不過我的認知中物件導向程式設計中,物件其實代表的是行為 (Behaviour) ,所以真正的問題可能是『樹、紙跟海報之間有相同的行為嗎?』。今天太晚就先睡了,明後天再來好好想想看這個問題。