学了C++,就学了一些面向对象的机制,或者这门语言对面向对象提供的支持,但是否真的懂了面向对象,我觉得这是两码事。
什么是面向对象?我常这样问自己。现在struct可以改用class,成员可以是函数,一个类有自己的一组成员,数据+操作,类可以生成它的实例:对象!
我常常写‘class’,但不知道为什么要写它,同样的功能我可以不这样写,于是就开始反思为什么要C++?前段时间写黑白棋,一开始分了好多类,类之间要相互引用,于是就开了好多friend/friend class,到最后发现这样分简直是糟透了,或许不用C++还不会这么一团糟,再后来,对实现过程没有变,重新分类,分两个:一个是CReversiMap,一个是CReversiBot。从模型的角度看,分‘类’就是对实物建模,我有多少个实物,就建多少个类,想象一下两个人下棋,无非就两个类:人和棋,人和棋之间只传递一些棋面数据,分工明确,人负责想棋,然后告诉棋盘怎么走棋,棋盘负责接受走棋规则,移动(改变)棋面再等待另一方走棋。这样分类,类和类之间没有什么耦合,只通过接口打交道。所以也不用开friend。做为黑白棋程序设计也是如此,CReversiMap负责棋盘的数据处理,包括走棋的结果和棋盘的显示,CReversiBot就是机器人棋手,然后其它的像置换表、搜索引擎都是它的一部分,如果你要将它们分开方便管理,可以用不同的.cpp文件来写,比如我可以用Evaluation.cpp写它的估值函数一部分。
C++是一种建模思想,也可以从‘代码复用’的角度建模,但我觉得基于实物的建模更合理,算法的复用可以用模板,写成库,实际开发的时候还是基于实物建模。建模建得好不好可以看你不得以用了多少friend,friend破坏类的封闭性,本质上就是一种耦合。
我的一点感想,还在学习中。
评论