最近要进行新员工培训,主办方要求我做一次面向对象思想的培训。说实话,这个培训我做过好几年,发现还是很难做的。第一、你面对的是新人。还没有很多经验,要谈思想,很多时候都是虚幻的。第二、本来这个思想就比较抽象,要让大家能够在培训中有所收获更是难上加难。但是,需求就是命令!我还是得思考如何能讲清楚这个问题。正好今天在看一位新员工的代码的时候,发现他写了一个类,叫TCompare,我就问是做什么用的,他告诉我是用来做文件夹及文件对比的。于是我觉得有必要说几句。我是这样和他说的,第一、如果你是做文件夹对比,那么TComare类是不是改成TFolderCompare更好?否则,别人很难从名字上看出你的类的职责。相反,还会让读者困惑。反过来将,你作为作者,也没有把你的设计意图表达出来。第二、如果你做文件夹对比,是不是还会进行文件对比?(他说是的)那么是不是应该有一个TFileCompare类?第三、如果你有了两个类,抽象一下接口,这个时候,再有一个TCompare类,也就没有问题了。上面的话有点啰嗦,但我感觉我看是抓住重点了,总结一下:第一、面向对象编程从命名开始!类的职责定义非常重要!第二、把分派给你的任务,做至少向下一层的面向对象分析。第三、把业务分析清楚之后,再进行对象的抽象。其中第二点我感觉特别重要,比如说吧:让你写比较文件夹的功能,不是就写一个文件夹比较的类,还要往下再看一层,比如文件的比较?文本文件的比较、二进制文件的比较?或者说,让你写一个汽车类,你也不是只写一个TCar,至少要把动力系统、转向系统、联动系统等等都分析进来。如果只写一个TCar,那叫基于对象编程,如果,你还进行了下一层的分析,那就是面向对象编程。我感觉我似乎应该抓到了,这就是面向对象思想学习的一条简单途径,那就是向下一层分析!面向对象思想,是一个复杂的设计思想。找到路径不难,找到一个简单路径确实非常难的事情。希望我能管中窥豹一把。