“备孕期”的Java程序员一定要学会抽象

简介: 版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/83305342 我相信,看到标题后的你一定很...
版权声明:欢迎转载,请注明沉默王二原创。 https://blog.csdn.net/qing_gee/article/details/83305342

我相信,看到标题后的你一定很好奇,究竟什么样的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套房,那么小明就是chai二代。

再继续说下去:小华和小华他爸都是手艺人,都特别喜欢画画,小华他爸是自学成才,小华应该算是继承了他爸的好基因,属于天才型;等小华长到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程序员一定要学会“抽象”,把现实问题抽象为一个个立体化的对象,这样所有的问题就会按照人的逻辑来处理,而不是计算机的逻辑。

相关文章
|
3小时前
|
存储 安全 Java
Java 程序员极速上手 go
Java 程序员极速上手 go
31 0
|
3小时前
|
设计模式 缓存 分布式计算
|
3小时前
|
人工智能 Java 大数据
Java程序员真的还有未来吗?如何备战2024春招?并狂拿大厂offer?
Java程序员还有未来吗? 嘿,小伙伴们,你们有没有想过Java程序员还有没有未来? 哈哈,别担心,我这就来给你们答疑解惑! 首先,让我们来看看Java的发展历程。自从Java诞生以来,它就一直是编程界的一颗璀璨明星。从Web应用到企业级应用,再到移动应用,Java无处不在。那么,现在呢?现在,随着人工智能、大数据和云计算的兴起,Java依然发挥着重要的作用。这些领域都需要大量的Java程序员来支持它们的发展。 那么,有人会说:“哎呀,现在出现了那么多新的编程语言和框架,Java程序员会不会被淘汰啊?”哈哈,别担心,Java程序员们!这些新语言和框架的出现并不会让Java消失。相反,它们
83 0
|
3小时前
|
Java 程序员
Java程序员-你真的了解死锁吗
Java程序员-你真的了解死锁吗
37 0
|
3小时前
|
算法 架构师 安全
10年Java面试总结:Java程序员面试必备的面试技巧
作为一名资深10年Java技术专家,我参与了无数次的面试,无论是作为面试者还是面试官。在这里,我将分享我的一些面试经历和面试技巧,希望能帮助即将面临面试的Java程序员们。回顾我的Java职业生涯,我清晰地记得一次特别的面试经历。那是我申请一家知名科技公司的Java开发岗位。为了这次面试,我花了几周的时间准备,这不仅包括Java的基础和高级知识,还有关于公司产品的研究。
163 0
|
3小时前
|
Java 程序员 图形学
程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩
《飞扬的小鸟》Java实现摘要:使用IntelliJ IDEA和JDK 16开发,包含小鸟类`Bird`,处理小鸟的位置、速度和碰撞检测。代码示例展示小鸟图像的加载、绘制与旋转。同时有`Music`类用于循环播放背景音乐。游戏运行时检查小鸟是否撞到地面、柱子或星星,并实现翅膀煽动效果。简单易懂,可直接复制使用。
|
3小时前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
3小时前
|
存储 安全 Java
Java程序员必须掌握的数据结构:HashMap
HashMap底层原理实现是每个Java Boy必须掌握的基本技能,HashMap也是业务开发每天都需要遇到的好伙伴。如此基础且核心的底层数据结构,JDK也给其赋予了线程安全的功能,我们来看看~
39 2
Java程序员必须掌握的数据结构:HashMap
|
3小时前
|
XML Java 程序员
作为Java程序员还不知道Spring中Bean创建过程和作用?
作为Java程序员还不知道Spring中Bean创建过程和作用?
16 0
|
3小时前
|
缓存 Java 程序员
java高级程序员线程池剖析面试题及答案
java高级程序员线程池剖析面试题及答案
32 0