四句话让你成为编程高手

 

 

如今,互联网+的时代,互联网可以+一切的事务,IT技术融入了各行各业,不仅IT行业需要程序员,传统行业也需要懂得编程的员工。

但是,正是由于各行各业对于程序员需求的爆发,使得程序员的薪资水涨船高,也使得社会上涌现了众多的IT技术培训机构,大量非计算机专业的学生纷纷改行做程序员,这也造成了程序员队伍的良莠不齐。

有没有捷径可以快速成为编程高手呢?

我们都知道程咬金著名的三板斧,虽然只会三招,但由于这三招非常厉害,再加上程咬金力大斧沉,这厉害的三招足以让程咬金成为中等偏上水平的高手。因此,我们可以得出这样的结论,要成为中等偏上的武林高手,只需要基本功(力大斧沉)+绝招(三板斧)即可。

学习编程与学习武功非常类似,要想成为超一流高手绝非一朝一夕之事,但要想超过一般水平的程序员,也是只需要基本功+绝招即可,程序员的基本功有很多,正所谓学无止境,基本功不扎实,再多的绝招也没有用,本文不展开介绍基本功,这个需要程序员不断地去深入学习和实践,本文只介绍绝招。

编程的绝招其实就是四句话,只需要具备一定的编程基础(基本功),再深入理解这四句话,就足以成为中等偏上水平的程序员。

这四句话是:

  1. 一切皆对象;
  2. 一切对象皆是其他对象的集合;
  3. 一切皆观察者;
  4. 一切皆MVC。

下面解释一下这四句话:

一、一切皆对象

这个很容易理解,很多编程教科书都介绍过。

面向对象的编程方法,是编程的一种思维方法,这种方法影响深远,它以类和对象为核心而展开,类是对象的定义,对象是类的实例。这种思想的基本原则是继承、封装与隐藏,类包括属性和方法,子类从父类继承,父类是子类的抽象,属性封装了内部数据的访问,方法封装了对外的接口,隐藏了实现的细节。

举个简单的例子:

杨树是木本植物,它从木本植物中继承,木本植物是杨树的抽象,也是其父类,木本植物是植物中的一种,它从植物中继承,植物是木本植物的抽象;植物能够进行光合作用,吸收光和二氧化碳,产生氧气,光合作用这个方法封装了光合作用的接口,隐藏了内部如何进行光合作用的实现;如果子类具有特定的功能,那么可以重新实现父类的接口。

我们看一个著名的公式:

程序 = 算法 + 数据

而对于类来讲,算法等同于类的方法,数据等同于类的属性,因此,程序就可以认为是一系列类与类对象之间的协同。

因此,对于编程来讲,可以说:

一切皆对象。

一切皆对象,目的是让程序员养成面向对象的思维习惯和思维方法。

二、一切对象皆是其他对象的集合

学习编程,不可能不学习数据结构和数据库,我们都知道,数据库是由一系列的数据表组成的,而表与表之间存在三种对应关系,即:一对一关系、一对多关系、多对多关系,而多对多关系可以简化为两个一对多关系。

数据库的表与程序设计的类有着天然的对应关系,只不过他们不是一一对应的,所以,通常情况下,在编程时,考虑数据结构设计的时候,一般都会同时考虑业务类框架的设计。

与表与表之间的关系类比,对象与对象之间的关系也分为一对一关系和一对多关系,只不过,通常,我们说对象与对象之间的关系是包含与被包含的关系。

有很多教科书、教师都会介绍聚合和组合的区别,并且刻意强调学生要学习并理解他们之间的区别。

我今天告诉你,根本就没有必要刻意去区分这两种关系,如果你真正理解,就去区分,不理解就不要去区分,我也不想浪费笔墨去介绍他们之间的区别,因为从代码实现和程序执行的逻辑上来看,根本就没有区别。你只需要记得,谨慎地去管理你的程序所使用的动态内存,谨慎地构造和析构对象就可以了。

举个例子:

一台汽车,包含一个发动机,一个底盘,四个轮胎,至于他们之间是聚合关系还是组合关系,其实不重要,重要的是知道他们之间是包含与被包含的关系就可以了;而不管是发动机、底盘还是轮胎,他们都是汽车零配件。

汽车作为一个整体,它提供了前进、后退、停止的方法,以前进为例,它封装了发动机驱动,连杆传动,轮胎转动等方法,也封装了转弯时左右轮胎转速需要不一致的差速控制逻辑,对于驾驶汽车来讲,只需要调用汽车前进的方法,根本就不必关心发动机还要转动,轮胎还要转动,转弯时轮胎速度还要不一样的这些细节,这些实现的具体细节都被汽车封装和隐藏了。除非修车的时候,否则,日常驾驶出行,我们甚至可以连汽车是怎么组成的都不必关心。

对象封装的核心原理就是封装子对象,隐藏子对象的控制逻辑,使得外部调用者的调用接口最简单。

这就是:

一切对象皆是其他对象的集合。

当然,你需要知道,集合必须有管理集合元素的方法,这些方法需要在集合类中予以实现,一般是在父类中实现通用的管理子类对象的方法。

三、一切皆观察者

观察者是设计模式的其中一种模式,也是最常用的模式之一,参考下图:

对象与对象之间需要协作,共同完成一项任务,而每个对象都有自己的运行状态,相互协作的对象,一定会关心协作对象的状态,根据协作对象的状态来调整自身的状态,做出反应,以便一起协同。

但是,通常情况下,我知道我自己关心谁,但并不清楚谁关心我,这就好像年轻人谈恋爱,我清楚地知道我自己暗恋谁,但并不清楚谁暗恋我自己;当我在课堂上打个喷嚏,拿出纸巾撸鼻涕,告诉全班同学,我感冒了。这时,不同的暗恋对象所表现出来的行为是不一样的:腼腆内向的可能什么都不作;直接一点的直接买了药,然后说,给吃药;还有的可能不想让别人知道,偷偷发条短信,多喝点白开水。诸如此类,等等,不一而足。

观察者模式,恰恰迎合了这种“暗恋”的小动作,你如果暗恋我,我提供了attach方法,你调用该方法,表示你关注我,如果你不想关注了,则调用dettach方法解除关注;当我“生病”的时候,如果你关注了我,我就会用我自己的notify方法通知你,调用你的update方法,至于你自己在update方法中做什么动作,那是你的事情,与我无关。

可以说,在程序世界中,所有协同的对象,都在默默地关注着其他对象,根据被关注对象的状态,做出相应的反应。

这就是:

一切皆观察者。

一切皆观察者,是让你明白,相互协同的对象也可以解耦,被暗恋的对象提供关注方法和通知方法,暗恋的对象提供回调更新方法,则把协同的对象之间的耦合关系降低到最小。

四、一切皆MVC

MVC虽然简单,但其实是一种集大成者的设计思想,在学会、弄懂并且理解上面三个绝招的基础上,学习这第四个绝招,参考下图:

Model:模型,所有的业务对象,也就是无UI的数据对象都应该设计成Model,并且把所有的业务逻辑在Model中实现;

View:视图,每个业务对象,可能都有对应的一个或多个展现的UI界面,也可能没有;View是Model的观察者,但是并不控制Model的行为,需要注意的是,除了集成和反馈用户的界面操作行为以外,不要有任何业务处理逻辑编写在View中,这点很重要;

Controller:控制,可以说,Controller是Model的观察者,也是View的观察者,通过View反馈的用户操作行为反应到Controller中,再通过这种反馈,去控制Model的行为,而Model的状态变化,又同时反馈给View和Controller,以便进一步的控制;

通常情况下,Model和View很容易理解,而Controller有两种:

第一种是构造的Controller,通过Controller去构造复杂的Model对象,把构造的复杂性封装起来,关于这点,可以参考设计模式中的各种构造模式,绝招练到这里,就要稍微理解一下聚合和组合的区别了,一般情况下,聚合的对象,在对象内部编写构造函数,把自己构造出来,而组合的对象,通常把自己完整的构造过程交给Controller去组装;还是那句话,如果你真正理解,就去理解,不理解,就采用你熟悉的一种方法去构造,一般推荐组合模式,因为这种模式与MVC架构的一致性契合度非常高。

第二种是行为的Controller,通过Controller去控制Model的行为,通过同时观察Model和View的状态,去控制Model,以便让Model的行为符合预期,而Model的状态又同时反馈给View,通过View呈现给用户。

举个简单的例子吧:

不管是人作为驾驶员,还是无人驾驶汽车的电脑驾驶员,模型都是类似的。

汽车作为Model主体,他自己并不控制自己的行为,而是提供控制自己的方法,比如加速、减速、转弯、换挡等方法,供外部对象调用;仪表盘是汽车的观察者,反应汽车的当前状态;对于无人驾驶汽车,车上有各种传统汽车没有的传感器,这些传感器不管是通过视频采集,还是通过雷达采集,其实是采集道路状况的设备,虽然他们安装在汽车上,但是应该是道路状况这个对象的一部分;驾驶员作为一个Controller,同时是汽车、仪表盘、道路状况的观察者,通过对三者的共同观察,做出控制汽车这个Model的行为决策。

这就是:

一切皆MVC。

一切皆MVC,是要求程序员明白,软件开发不可能没有需求变更,需求变更一定会涉及到软件代码维护,而代码维护也不一定是非要自己去维护,即使是自己维护,随着时间的推移,自己编写的代码也会不记得当初是怎么设计的了。要想写出可维护,可扩展,BUG少的程序,非MVC莫属。

学会了吗?

我们都知道,令狐冲与封不平在华山对战时,大家看到这样的现象:气宗的徒弟剑法妙,剑宗的师父气力强。

虽然华山派分为气宗和剑宗两派,但是大家都知道基本功的重要性,还是那句话,光有绝招,没有扎实的基本功做基础,绝招也使不出来,作为程序员,不仅要学习绝招,这是看家本领,更要练习基本功,扎实的基本功,才是登顶华山之巅的必经之路。

 

更多原创精彩文章,可以关注微信公众号:火星眼

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值