|
|
这个楼(http://bbs.gameres.com/showthread.asp?threadid=116888&page=1)太高了,拆过来来说说:
首先,编程就是编程,语义上接近自然语言只是为提高可读性,和OO没有必然联系。
其次,具体到设计问题,是world->Move(player, pos)还是player->MoveTo(pos),取决于你的或者是项目的design philosophy。粗略的分,有两大类:应用程序类和library类。对应用程序类,主要考虑的是程序的易实现度,更侧重实现,往往会选择前者,因为移动player时涉及世界的诸多数据结构的更新,自然在world里做更方便。对library类,因为目的是给外部使用,所以更在意提供简单易用的编程接口,所以通常选择后者。但这和OO仍然没有关系,即使纯C也有这样的选择,是MovePlayer(world, player, pos),还是Move(player, pos, world),还是将world作为全局变量只使用Move(player, pos)。
再者,语义问题经常只是函数起名的问题,OO只不过是让人有机会把MovePlayer(player, pos)的宾语放到主语的位置变成player->MoveTo(pos),而类结构设计本身是不需要考虑语义的,因为不管类结构如何,只要调整一下函数名总能让语义自然一些,如:player1->GiveItemTo(player2, item),player2->GetItemFrom(player1, item),itemSystem->TransferItem(player1, player2, item)。
最后,要表达语义也不是必须很??碌募咏榇剩?玫?PI参数不易超过4个也是为了能从语义上推断参数含义。
比如说:给他两个金币,give him two gold coins,Give(player, ITEM_GOLD, 2),……这个函数把2放后面没人理解不了吧?而且多数人都会很自然地把这个数量参数放后面,为什么?因为我们关注的不止是语义,还有重要性的顺序。所以我说,不需要考虑黏着语屈折语,其实编程语言和汉语一样是孤立语。 [em20] |
|