“抽象” means “不具体”,面向对象后就具体了。就好比世界上本没有路,人出现便有了泥巴路、水泥路和柏油路......
计算鸡前两周的学习进行还算顺利,跟着Liu Torvalds(LT)一起过了遍《深入理解计算机系统》1、3、6和9章,虽然对计算机系统还不是了如指掌,但至少有了感性的认识。原来计算机底层实现机制如此复杂、深奥,而展示在用户层面的操作只是敲敲点点,这其中衔接的工作就留给光荣的程序猿了,coding makes life better。
“编程就好比作家进行文学创作一样,不同国籍的作家使用不同的语言和文字,语言没有高低之分,但受欢迎程度存在一定差别。”LT若有所思,顿了顿又接着说道:“小计啊,编程语言你想学习哪一门啊?”计算鸡随口一答:“这个听师傅的!”LT笑道:“这句话真是万能啊,为师知道你对这些编程语言还没什么概念。但就目前的流行程度和为师自身能力来说,学习Java可能是比较好的选择。但如果你学有余力的话,可以看看其他的语言,博采众长,同时加深对Java的理解”计算鸡爽快的答应:“好,就学Java!”
“Java是一门面向对象编程语言,而面向对象的核心思想是封装、继承和多态。Java具有分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。为师认为如果你能把这些特点实现并熟稔于心,那么你就可以出师了。”LT望着计算鸡充满期许地说道,计算鸡心里默默的念了一遍,瞬间感觉自己变成了辣鸡。
“好......抽......象!”计算鸡感叹道。
“对,就是抽象!”LT望着满脸疑惑的计算鸡,“但这个抽象不像意识流的文学作品那样深奥,不容易理解,而是指定义不具体。”
“不具体?”计算鸡似懂非懂地问道:“Java中的什么东西不具体呢?”
“要解释这个概念,我们先不妨设想下生活中的场景。如果汽车厂要造一辆车,事先得要设计师设计好图纸,而汽车的颜色等属性并未定义(即不具体),你从图纸上看到的车只是个框架并不是真实的,你不能开。只有汽车厂的工人组装好,喷上或黑或白的漆,卖到市场上后才能交易。Java中的类就是抽象的概念。”LT答道。
“那这样定义有什么好处呢?”计算鸡追问道。
“你是学生物的吧?”
计算鸡点点头,眼前立刻浮现出当年沉迷于提DNA、RNA和跑胶,无法自拔的情形......
“生物学中将自然界的生物根据域、界、门、纲、目、科、属、种进行层层划分,就好比你我同属脊索动物门,但你是鸟纲,我是哺乳纲,咳咳......”LT清了清嗓子打断了计算鸡的思绪。
计算鸡立马回过神来,听LT继续补充道:“关于为什么要这样分类呢?我想提两点,一是说明我们都有共性的东西,比如我们从进化上来看都出现了脊索,不同的是你们是卵生而我们是胎生。二是这种组织的好处是什么呢?如果有一天地球生物界要召开一次大会(真实情况是便于研究),如果按照门划分很容分成42组,我们都隶属同一小组,这种由上而下的组织形式构成一套完整体系,很容易对我们这些“对象”进行管理和操作。”
计算鸡听了连忙点头,觉得好像是这么回事。
“需要补充的是,域、界、门、纲、目、科、属、种都定义的是一个抽象概念,而不是指客观存在的对象,只有你眼前看到这一切才是类的对象。”
“果然to see is to believe,没想到我就是自然界的对象啊。”计算鸡不禁感叹道。“所谓的面向对象就是指面向我啊 。”
“师傅师傅,我觉得我能举一反三。”
“说来听听。”
“如果有一天您叫我去帮你买辆车,我肯定不知道您是想买自行车、小轿车还是卡车。但是如果您去卖自行车的店问买车,他们肯定知道您是来买自行车的,去汽车4S问,知道您是想买小轿车。因此您买车这个行为面向对象后就具体了。”
LT欣慰得点点头,“下课!”