本節書摘來自異步社群《uml面向對象設計基礎》一書中的第1章1.11節習題,作者【美】meliir page-jones,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
1.11 習題
uml面向對象設計基礎
①(a)重寫機器人hominoid-navigation算法,使其更健壯。
(b)你能發現在grid中定義的操作inserthominoid(hom:hominoid,location:square,out insertok:boolean)中的問題嗎?
② 對象知道自己的句柄嗎?如果知道的話,對象如何表示其句柄?
③ 為什麼在消息參數中很少使用相同的參數名既作為輸入參數又作為輸出參數?假設參數表示具有句柄的對象。
④ 在 1.5.3節中,我說過“在純面向對象環境中,不需要資料。”換言之,一切都是對象(對變量操作的封裝),操作本身通過實作操作的變量指向對象。但确實存在一些資料“歸根到底”就是資料。是以,任何東西确實都是對象嗎?整數和實數及其成千上萬的執行個體也是對象?如何建立它們?
⑤ 執行個體操作可能涉及一個類變量。然而在純面向對象環境中,類操作不能直接涉及對象内的執行個體變量。為什麼?
⑥ 執行1.7節的glider.new,建立了多少對象?
⑦ 面向對象程式是如何進行初始化的?
⑧ 關掉計算機時,對所有的對象會有什麼影響?
⑨ 關掉計算機時,對所有的類會有什麼影響?
⑩ 你能想出某種語言如c++中有關面向對象的健壯的封裝機制的一種簡單方法嗎?
11.tif peter wegner 在一篇頂級論文中,将環境劃分為對象結構(object-structured)、基于對象(object-based)、基于類(object-class)或面向對象(object-oriented)幾個範疇。第一個範疇隻具有封裝和狀态保持特性;第二個範疇增加了對象辨別特性;第三個範疇增加了類的概念;最後一個範疇增加了繼承和本章提到的其他特性。判斷你目前使用的語言最接近這四個範疇中的哪一種。
12.tif 我在本章中曾提到過java語言支援單繼承但不支援多繼承。因為類修飾符extends最多擴充一個其他類。但類内部implements(實作)許多接口。是以,我的說法正确嗎?如果你熟悉java語言,請解釋一下java語言中,繼承機制中的extends和implements之間的差別。
13.tif 請你選擇一種面向對象程式設計語言重寫機器人僞代碼。
14.tif 考察你或你的公司購買的一種廠商宣稱為“面向對象”的軟體。軟體的哪些特性聲明廠商是“面向對象”的?你認為廠商的宣稱恰當嗎?如果是這樣,你得益于産品吹捧的哪些面向對象特性?
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。