作者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)
1F:推 KanoLoa:可以多请教一下关於那句 " 我要拿这个物件来干什麽 " ? 04/17 01:52
2F:推 adxis :Aspect-oriented? 04/21 13:53
3F:推 yauhh :这种抽象说得很棒 04/22 08:19
4F:→ yauhh :不但可以讨论solve怎麽做,还可以讨论solve怎麽证明 04/22 08:21