作者descent (「雄辯是銀,沉默是金」)
看板Soft_Job
標題Re: [請益] 我這樣解釋OOP對嗎?
時間Sun Nov 12 21:16:12 2017
我用我寫的程式來說明怎麼用到 OOP。
俄羅斯方塊, 俄羅斯方塊不是有很多不同的方塊嗎?
ex:
ZTetromino
**
**
--------
STetromino
**
**
--------
OTetromino
**
**
--------
ITetromino
****
--------
我實做一個 Tetromino 代表最基本的方塊元素, 定義出 move() 這個移動的
member function。
rotate() 則是以 virtual function 來定義。
ZTetromino, STetromino, OTetromino, ITetromino 繼承 Tetromino,
move() 都是一樣的作法, 所以繼承之後, 每個方塊都有了移動的能力,
這是繼承提供的好處。c 也做的到, 就用 function pointer 指到對應的
function。
rotate 旋轉的話, 每個方塊的旋轉都不同, 所以就各自定義出自己的旋轉方式。
上面提的是繼承與多型。
還少個封裝, 封裝的話, 每個方塊有 4 個點 (x, y), 這 4 個點被我以
private data member 的形式設計在 Tetromino class 內。
其實俄羅斯方塊也可以不要用多型 (OOP) 的方式來設計, 但我覺得用多型來設計
非常適合俄羅斯方塊的那些方塊。
另外一個是編譯器的例子, AST 的每個 node 也可以設計成 OOP 方式,
例如: FunctionNode, AddNode, SubNode 之類的, 不過在我的實做中, 我覺得這樣
並沒有太大的好處, 所以並沒有這樣設計, 但是 两周自制脚本语言 這本書
是以 java 來實做 AST, 他就是這樣設計的。
若你有寫過用 OOP 來設計的程式, 把那個思考方式說出來, 也許面試官就能
更清楚你想表達的內容。
※ 引述《goooeooo (ge)》之銘言:
: 以前面試遇到的問題
: 面試官問我什麼是OOP
: 當時我覺得我回答不好
: 我想請問以下 這樣解釋可以嗎?
: OOP觀念 運用得宜可以將開發時間縮至最短 且觀念正確下 也可讓將來維護人員好維護
: 在大型系統下效果尤其顯著
: 譬如今天開發倉庫系統(我隨意舉例實際沒有碰過這種系統)
: 由上往下分類 譬如有電子類、玩具類 此兩類都還有很多繼續向下的分類...
: 將電子類、玩具類 設計製作成大致物件
: 就是讓此兩類的向下分類幾乎都是以此兩物件做為變化繼續修正或增加差異的部份來開發
: 譬如:電子類 再向下有手機類、電腦類
: 那將手機類、電腦類會共通的方法、邏輯再加上變數 制作成電子類物件
: 用電子類物件來小幅修正 完成向下的手機類跟電腦類兩個小差異的部份就行了
: 照這樣的規則一直向下 就是說 也將手機類跟電腦類 繼續做成物件 供向下分類使用
: 也就是說你必須在規劃開始時就已經思考好整個系統架構 會由幾個最上層的物件開始向下
: 一直向下創造物件 讓程式碼進而達到最簡化 但又能完成繁瑣的任務
: 讓開發人員可以快速開發 將來維護人員也可快速理解維護
: 所以最上層的物件設置規劃非常重要 關係到整個系統開發的過程
: 這是我所理解的 請問這樣可以解釋OOP觀念嗎?
--
紙上得來終覺淺,絕知此事要躬行。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.214.247.42
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1510492579.A.349.html
推 landlord: 挺好的!game of life 其實也可以 OOD 成這樣 :) 11/12 21:36
推 Vick753: 推 11/14 11:25
推 youtuuube000: 也許你在補充多型的擴充性會更好 但這篇已經寫的不 11/14 22:09
→ youtuuube000: 錯了 11/14 22:09
→ viper9709: 推~這例子不錯 11/14 22:45
※ 編輯: descent (175.98.141.254), 11/15/2017 09:01:23