`
qing_gee
  • 浏览: 118505 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

“备孕期”的Java程序员一定要学会抽象 | 《Java编程思想拆书》

    博客分类:
  • Java
阅读更多

我相信,看到标题后的你一定很好奇,究竟什么样的Java程序员算是在“备孕期”呢?在我看来,“备孕期”主要指那些初入Java编程的新人,他们正下足功夫准备,以求在10个月后以高薪的姿态进入一家软件公司——此时正是职业履历的开端——比如说,简历上的自我介绍是:我从2018年10月24日(程序员节)进入一家“青苗科技工作室”(我组织的一个接私活的小团队;有Web全栈、安卓等方面的项目可以私聊我哦),正式开始编写为自己带来第一桶金的Java代码…距今,我已经有8年的Java编程经验了…

 

一、什么是OOP?


学习Java的程序员第一个要了解的基础知识就是:什么是OOP?让我来举一个生动的例子,知道齐天大圣孙悟空吧?这只孙猴子就是一个对象,关键看你要把他看成是一只猴子,还是一个神仙。你知道Dota吗?在这款推塔杀人的游戏当中,就有齐天大圣孙悟空这个角色,貌似欧洲战队玩的很溜,反倒国内战队在比赛中使用的频率很低。

来看一段代码吧:

public class SunWukong {
    private Integer healthPoint;// 生命值
    private Integer magicPoint;// 魔法值
   
    /**
     * 棒击大地
     */
    private void rodHittingTheEarth() {
       
    }
   
    /**
     * 丛林之舞
     */
    private void jungleDance() {
       
    }

}

 

  

当我们把孙悟空看成一个对象的时候,编程就变得简单了起来;我们给他两个属性(生命值和魔法值),给他两个技能(棒击大地和丛林之舞)。假如我是LGD战队的357,一名聪明绝顶的好教练,主要负责赛前的BP工作和战术的研发。现在,是TI9的小组赛,LGD对阵OB的第一局。我,357在BP阶段先BAN掉了比较克制孙悟空的兽王和发条技师,然后在选人阶段(PICK)挑选了水晶室女这个冰美人来和孙悟空这个一身毛的家伙搭配。那么,在我选孙悟空的这个阶段,就等于说创建了一个孙悟空的对象,也就相当于Java中的new SunWukong()。选好了孙悟空,让谁来玩呢?自然是我们队中号称世界第一中单的maybe啊。

OOP其实并不难懂,不过就是英文单词Object-Oriented(导向的、面向的意思) Programming的首字母缩写嘛。OOP给我们一种观念,就是“万物皆对象”——我们可以尽可能的发挥想象,把现实中的物(包括动物、人物、甚至无生命的事物)抽象为一种计算机语言(比如Java)能懂的模型,那么,接下来我们让计算机来解决现实中的问题就变得简单了起来。

OOP的强大之处就在于,它使我们不必依照计算机的限制来模拟现实中的物;我们可以基于现实中要解决的问题来构建对象,使这个对象具有现实中物所具有的特征(对应Java中的属性)和行为(对应Java中的方法)。物不同,对象所具有的属性和方法就会不同。

还拿Dota中的英雄来说吧。所有的英雄都可以抽象为一个类(对象是类的实例化),这个类包含了英雄对应的成长属性(生命值、魔法值、伤害值、护甲值等等),以及对应的技能行为。那么,怎么区分每个英雄的不同呢?比如说冰美人水晶室女是一个魔法辅助类的英雄,因此,她的初始化生命值自然比敏捷类的齐天大圣低一些,但魔法值高一些;另外,他们的技能也完全不同——孙悟空拿着一根金箍棒,所以他的技能就有棒击大地;水晶室女拿着一根法杖,所以她的技能就有冰霜新星、冰封禁制等。

在我看来,OOP概念的提出,是编程界的一个重要的里程碑。它给我们以下重要的启示:

  •     万物皆对象。
  •     程序是对象相互协作的一个过程,他们通过发送消息来告知彼此要做的事情。
  •     每个对象都有自己的类型,也就是“每个对象都是某个类(class,抽象数据类型)的一个实例”。尽管每个对象都是唯一的(在内存中拥有一个唯一的地址),但具有相同状态(属性、变量)和类似行为(方法)的对象可以归属为一个类。
  •     每个对象都提供了某种服务。比如说孙悟空可以跳上树上(丛林之舞),然后再跳下来对区域内的敌人造成减速和伤害(乾坤跳跃)。


二、什么是继承?

通俗来说,可以这么来理解继承(extends)——小明他爸是个七品芝麻官,那么小明就是个管二代;小明他爸当年走过草地,越过大山,一下子步行了两万五千里(换成现在的微信运动排名,绝对天天第一),那么小明就是个哄二代;小明他爸有三亩地,拆迁后分了10套房,那么小明就是差二代。

再继续说下去:小华和小华他爸都是手艺人,都特别喜欢画画,小华他爸是自学成才,小华应该算是继承了他爸的好基因,属于天才型;等小华长到20岁的时候,他觉得不能就这么一直和他爸一样只画风景画,那样他取得的成就也不会高过他爸;于是,他改画人像画,经过十年的努力,小华在艺术界的地位甚至超过了他爸,人称“华·芬奇”。按程序员的逻辑思维来看,小华这个举动可以称作为“覆盖(overriding)”,使子类和父类产生差异的一种方法。

小华画呀画呀,就这么一直画到了40岁;小华终于感到画画再也满足不了他了,他突然爱上Java编程,并立志成为一名“黑客”;于是就有了“黑客与画家”的故事。按程序员的逻辑思维来看,小华成为“黑客”这个行为可谓特立独行,这使得小华和他爸不再只是纯粹的替代关系(is-a的关系),变成了一种相似的替代关系(他们都还是画家,但小华同时又是一名黑客,is-like-a的关系)。

在Java中,所有的类最终的父类都是Object类,这被称为“单根继承”——保证了多有对象都具备了某些功能。比如说最常见的toString()方法:

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

 


三、one more thing?

nothing。

没有了,我认为一篇文章的最佳字数在2000到3000,这篇文章写到这里已经2600多字了。所以,是时候收尾了:Java是一门面向对象的编程语言,因此,“备孕期”的Java程序员一定要学会“抽象”,把现实问题抽象为一个个立体化的对象,这样所有的问题就会按照人的逻辑来处理,而不是计算机的逻辑。



 

 

 

  • 大小: 87.2 KB
分享到:
评论

相关推荐

    Java程序员面试资料及简历模版

    Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历...

    JAVA程序员简历模板(最新版)

    JAVA程序员简历模板 JAVA程序员简历模板

    java程序员简历模版

    java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版java程序员简历模版...

    Java程序员面试宝典

    详细分析了应聘Java程序员职位的常见考点,主要内容包括面试流程及求职准备、Java语言基础、数据类型、集合框架、图形用户界面、输入与输出、多线程、反射机制、网络编程、JDBC、Web开发基础、SSH框架(Struts、...

    java程序员面试必备的32个要点.doc

    java程序员面试必备的32个要点java程序员面试必备的32个要点java程序员面试必备的32个要点java程序员面试必备的32个要点java程序员面试必备的32个要点java程序员面试必备的32个要点java程序员面试必备的32个要点java...

    java程序员笔试题java程序员笔试题

    java程序员笔试题java程序员笔试题

    java程序员转正ppt

    java程序员转正pptjava程序员转正pptjava程序员转正ppt

    java程序员面试交流项目经验

    java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流...

    Java程序员简历模板-求职应聘必备

    内容概要:该资源是一份优秀的Java程序员简历模板,包含了详细的简历内容和排版样式,适用于Java程序员求职应聘时使用。 适用人群:Java程序员、计算机科学和技术相关专业的学生和毕业生、招聘人员和HR等对Java...

    java程序员简历模板(一共19套模板)

    java程序员个人简历.doc JAVA软件工程师简历范文.docx Java软件开发工程师个人简历模板.doc 个人简历(示范案例).doc 应届生Java开发个人简历.doc 非常经典java求职简历(三套-含项目介绍).doc 高级Java工程师架构师-...

    Java程序员面试笔试宝典-何昊pdf版

    Java程序员面试笔试宝典-何昊pdf版,高清,带有书签。

    Java程序员的推荐阅读书籍.rar

    Java程序员的推荐阅读书籍

    java程序员面试宝典

    JAVA程序员面试 JAVA程序员面试 JAVA程序员面试 JAVA程序员面试

    Java程序员职场全攻略

    Java程序员职场全攻略 Java程序员职场全攻略 Java程序员职场全攻略 Java程序员职场全攻略

    java程序员面试题大全

    java程序员面试题java程序员面试题java程序员面试题java程序员面试题java程序员面试题java程序员面试题

    Java 程序员宝典 pdf 电子书

    Java 程序员宝典 pdf 电子书Java 程序员宝典 pdf 电子书Java 程序员宝典 pdf 电子书

    JAVA程序员面试书籍(4本)

    23种java设计模式;Java并发编程实践;Java程序员面试笔试宝典;Java面试宝典2016版

    Java程序员上班那点事

    Java程序员上班那点事 Java程序员上班那点事 Java程序员上班那点事 Java程序员上班那点事

    java 程序员 开发 转正答辩 ppt

    java 程序员 开发 转正答辩 ppt

    java程序员基础手册

    java程序员基础手册

Global site tag (gtag.js) - Google Analytics