读书人

OOP 思维入门思考

发布时间: 2013-08-13 16:43:28 作者: rapoo

OOP 思想入门思考

?

好吧,这个就是满足,煮饭,吃饭,睡觉,上厕所所有功能性的装修。 中间还用了struct (窗帘) 这个结构性来隔离一下功能块。 可以住人么? 可以完全可以,这样的功能性住房,至少有几千年历史吧。 或许很长时期都是相当不错的住房了。今天的你愿意去住这样的房子么?

那面向对象的装修是什么样子呢?放煤气灶的地方,用墙隔离起来,叫厨房。放桌子的地方,叫餐厅,桌子边上放一个电视,叫客厅。 放床的地方,叫卧室。有马桶的地方叫洗手间。

OOP 思维入门思考

这个是用面向对象,分装了几个类(洗手间,厨房,卧室)。客厅和餐厅很奇怪吧,明明就在一个大敞房(一个类)里面,一会儿叫餐厅,一会儿叫客厅。这个就是一个类里面实现了2个接口。

功能性没用太大增加,方便性还有所下降,起床要走到客厅,在到洗手间,以前窗帘一掀就可以过去上厕所了。在厨房吃饭的人,都不知道厨房下个菜煮什么了。为啥这么不方便,今天的人还愿意这么装修房子呢?

那面向对象的装修,方便性下降了,限制也多了, 开发成本也上升了,主要不同房间还要不同的装修方式,地砖,墙砖都不一样。太麻烦了!!!为啥大家都还用这种方式呢?这个岂不是社会的退步!!!

需求在增加啊!

厨房,里面要抽油烟机,冰箱,橱柜,等等。

客厅,要电视,沙发,茶几,音箱,等等

卧室,衣柜,卸妆台,什么的

洗手间, 热水器,淋浴,洗漱台,等等。

要是这些东西都放到一个敞房(大类里面是什么样子).

?

用了类就是面向对象的思想了么?懂得房子分了小房间,我就能做装修设计师了么??

在代码里面用了类,和有面向对象思想还相差很远。还需要学习软件界的规范和大众化的概念。就像装修里面的厨房,放什么方向,卧室床放什么位置之类。很多东西只能遵循规范,才能让人理解,具有适用性。对应到代码里面就是类,方法,变量的命名。

例如:

洗手间,大家一听就知道是什么。要是说成“具有排泄和洗漱功能的房间”, “洗间”,“三急房”, “茅房” 等。就不具有现代社会的大众化,增加了沟通成本。

对应到代码:

DataModel, 要命名成,“SQLInsertUpdateDeleteClass”, “MyData”, “DataSql”, 等。都会给其他阅读代码的人造成麻烦和困难。增加了沟通成本。

?

不要轻易的创造新的名词,而是尽可能多的利用业界通用的命名方式。这个就是学习设计模式的必要性。设计模式不是神器,就像装修房子,知道了很多欧式风格,日式,美式,古典。但是怎么装一个让用户满意的房子呢?这就需要和用户的深入沟通。

?

什么是抽象呢、什么又是封装呢,还有动态特性是什么?

抽象很难,也很简单。难得是你要抽象一个大众认知的模型和结构。简单就是你可以参考现实世界的模型。

回到前面装修的例子,设计师在洗手间, 放上三个盒子贴一个标签“洗手液”、“沐浴露”、”洗头液”,就完成抽象了。他不关心房子主人,用什么牌子的洗手液,或要不要用洗手液。但是设计师完成了洗手间的装修设计了。现在看来放三个盒子,是很简单的设计。其实这里面包含了很多东西,这需要对用户认知的把握,功能性需求的理解。(回到30年前,大家都用肥皂的年代,这三个盒子还简单么)

写代码例子:

}?

这就是把,洗手液,沐浴露,洗头液,分层老人,小孩,成人使用了。不能说这个不对,够不够好,具不具有普适性。各有各得体会。

抽象就是,设计的时候放上几个盒子贴一个标签。客人或主人,只要看到盒子上标签就知道可以用哪个盒子了。

封装就是,把合适的盒子放到合适的房间。把沐浴露封装到厨房肯定就不合适。 但是洗手液呢?有点不好决策了,那就参考规范吧。

动态性就是,盒子里面既可以放田七洗手液,也可以放超能。(前提是需要了解一点盒子大小的工业标准)

?

怎么学习面向对象开发??

和学习装修房子一样,多画设计图。 多画UML 图绝对是学习的最好方法。 ?但是画来画去,就只能分几个大房间。 里面进一步怎么设计。还是不知道啊。那就多看时尚杂志,多出去串串门。画出来的图纸别人一起来讨论讨论那就能进入了。 代码里面: java的:Tomcat, structs, hibernate 的源代码学学, php的:CodeIgniter,Drupal, joomla 代码好好阅读一下。 怎么读呢? 边看代码,边画图,类的命名, 方法的命名, 变量的命名, 类里面放了些什么方法。把整个大的风格体系画出来就好了。 不要太关注具体的细节。

就像多看看别人的装修,感受其中的风格。老是关心材料的价格,什么地方买的,回扣是多少。那是以后高级进阶的时候学习的了。

?

一点经验

在没有足够经验,对软件行业了解不深入的情况下。不要太特立独行的设计,风险很大。例如:在大家都在用香皂洗澡的年代,推出沐浴露是一个真得很危险的决策。

全面的平衡一个系统,比局部的优化重要。 例如:装修一个经济适用的房子,在洗手间却用ipad 摄像头成像代替镜子功能。

软件开发其实不能工程化,因为无法定义一个真正的验收标准。只有用户心理才能感受。

OOP设计其实很难,不像装修房子那样可以看得见,摸得着。 先要从心里上接受这种思想。才能向这个方向去思考。就像你首先要有小资的情调,会把心思花在家的装修上。不然随便毛坯贴个砖,刷个墙。功能性上可以住人了,但这是一个温馨的家么?

只有先具有追求做“小资程序员”的心态,才会不断的打磨自己的代码,已达到满足功能性之外的美感。对于只想做“小市民程序员”的心态,是很难接受功能性之外的改进。就像捡矿泉水瓶为生的人,无法理解洗手液、沐浴露,比香皂好在什么地方?

最后OOP真得需要了解哲学,?模型是(道,实),产品是(形,名)程序员是找到形与道的联系和规律, 再用大众认知的语言描述出来。

读书人网 >编程

热点推荐