作者Eventis (何逸凡)
看板OOAD
標題Re: [問題] 如何將物件導向的概念應用至hanoi
時間Sun Apr 13 09:19:32 2008
※ 引述《king19880326 (OK的啦~我都可以接受)》之銘言:
: 用物件導向的概念來實作一個河內塔
: A, B, C代表三柱
: java hanoi CBAB C 表示說由小到大的盤子依序在C, B, A, B柱
: 且目的地是C柱
給一點路過的想法:)
有放disc的rod (stack),
每個disc有key (mutablity doesn't matter,but necessarily comparable)
rod必需滿足sorted特性. (extends stack and override push(T) )
還有一個buffer (any collection)
然後用包的,有disc,有rod,
buffer還有位置的時候系統可以從任何一個非空的rod移掉一個disc
buffer非空的時候可以在不違反rod特性的情況下,從buffer丟一個disc到rod
For hanoi tower,加入,
boolean testSolved();
/* returns true if all discs at the destination rod */
void solve(boolean verbose);
/* testSolved() == true after called,
verbose == true if progress is needed to be logged */
我是認為"怎麼解?"這個問題,
只是最後面這一層要怎麼設計solve(boolean)這個function,
已經是怎麼去"使用"物件的層次了,並不影響前面去"定義"物件的特性.
不管Hanoi Tower的recursive solution有沒有其它應用,
(這還是限制只解Hanoi Tower的最佳解的時候)
但至少Hanoi Tower的結構我就不認為那是全然的Trivial:)
有時候回頭思考以前教我OO的老師提示過的話,都會覺得滿有意思的:)
她覺得設計出有用的物件的第一步
就是擺脫"我要拿這個物件來幹什麼"這種想法,
所以,她超喜歡出這種本質上function就能搞定的題目來當練習-.-"
分析完以後會發現實作還是一模一樣(爆)......XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.64.152.7
※ 編輯: Eventis 來自: 61.64.152.7 (04/13 09:44)
推 KanoLoa:可以多請教一下關於那句 " 我要拿這個物件來幹什麼 " ? 04/17 01:52
推 adxis :Aspect-oriented? 04/21 13:53
推 yauhh :這種抽象說得很棒 04/22 08:19
→ yauhh :不但可以討論solve怎麼做,還可以討論solve怎麼證明 04/22 08:21