在淘宝上买了传智播客的视频,看到了张孝祥老师教授面向对象设计的实例和经验,在此分享:
一、判断谁产生相应的方法
判断原则:谁拥有数据,谁就应该写相应的方法操作该数据
示例1、人在黑板上画圆
画一个圆应该知道圆心的位置和半径,而圆心的位置和半径属于圆的属性,所以画圆的方法由圆提供
示例2、火车刹车
刹车是降低车的速度,而车速是车的属性,所以刹车的方法由火车这一对象提供
示例3、售票员统计小票总金额
总金额由各种物品的单价*数量再求和得到,而单价和数量是属于小票的属性,所以Total这一方法是小票这一对象提供
判断多个对象间的相互作用关系(分析对象间的相互作用关系,找出主动与被动,发现事件的本质)
示例1、球从绳子一端移向另一端
在这句话中有两个对象:球和绳子,球和绳子之间是没有直接联系的,所以要通过联想与分析找到它们之间的联系。分析:球的移动依赖于绳子,球移动的下一个位置需要绳子提供(绳子提供下一个位置,有种绳子作为参数传给球的感觉),所以把球和绳子绑定,绳子作为球的属性。
示例2、两个石头磨成石刀,石刀砍树变成木材,木材做成椅子。
在这句话中有石头、石刀、树、木材、椅子这几个对象,石头被加工成了石刀,也就是说石头作为原材料,石刀作为产品,两个对象都不含有加工这个功能,所以会想到用一个Factory的静态方法CreateKnife(),参数为石头对象,返回参数为石刀。石刀砍树变成木材,石刀具有砍的功能,所以石刀具有cut()方法,树作为参数传入cut()方法,木材作为返回参数。最后是木材做成椅子,木材和椅子都不具备加工这个功能,所以可以马上想到Factory的静态方法CreateChar(),木材作为参数,椅子作为返回参数。在这个示例中主要区分主动与被动。
感悟:以前虽然在学C++的时候听过面向对象设计,但是那时候都是像看小说一样看一遍就过了,直到看张老师的视频的时候,自己尝试去理清对象间的关系及对象应该拥有哪些方法的时候,发现自己弄不清楚,弄不清楚就无法具体的编码实现,这次是受到了教训,希望自己以后多实践,多分析分析现实问题,练习面向对象设计。最近看老师的视频以及自己接触到其他事情,让我发现语言及编程工具都是我们所必须掌握的基础,工作的时候解决的问题是类似交通管理系统、银行窗口调度系统等这样的实际问题,更多需要的是逻辑能力,以我现阶段的编程水平,我应该尽力去掌握语言基础,平时多思考现实生活中的问题,理清逻辑,现在越来越觉得逻辑能力的重要了。编程之路漫漫,吾将上下而求索,踏实与坚定。