-- 作者 谢恩铭 转载请注明出处

上一篇 Android探索之旅 | Android简介 中说到:

"Android的默认开发语言是Java,入门简单。而且,你的Java水平不需要多好就可以上手开发Android App了。"

不少朋友说看到后很是心安。

不过小编也不想误导大家: 你的Java和面向对象水平当然是越高越好啦, 也要学学设计模式, 这样才能设计出可复用,可扩展,可维护的优秀程序。

如果你是Java高手,那么上手Android很容易。如果你是新手或者完全没接触过Java, 也不要惊慌, 只要你有一些基本的编程知识和面向对象的概念即可。

比如, 你之前学习过C#, PHP, Ruby, Python, C++等面向对象的编程语言,那么你上手Android不会有什么大障碍。

其实, 现如今App开发已经很容易上手。你说现在Android的官方IDE: Android Studio(下一课我们配置开发环境会讲到), 苹果的iOS开发官方IDE : xCode。都已经做得很好很简便了: 代码提示,自动补全,错误提示,修改提示, 等等, 简直是夫复何求!

所以现在做App已经简单得不能再简单了,拉起来直接做呗。你不实践永远入不了门, 如果一直在那边问: 我不怎么懂Java能不能做Android开发啊? 那你止步不前, 怪谁呢? 必须踏出信心的第一步。

小编以前有段时间业余做过游戏开发,主要用Unity 3D, 也接触过Cocos2D-X。 以前从来没开发过3D或2D游戏, Unity 3D里面的所用的语言C#或Javascript也不是那么精通,但很快就能做不少小游戏出来。

如果你完全没有编程基础, 那么最好先了解一下编程, 不过也不是说就不能上手Android了, 只是入门稍微累一些。但也不要怕, 你可以的。有问题可以问啊。

Java基础


我觉得Java语言已经设计得很容易上手了, 如果你连C语言和C++都能驾驭, 那Java相对来说实在比较亲民。

  1. 标识符命名规范

  2. Java数据类型

  3. 运算符

  4. 分支语句(if,switch)

  5. 循环语句(for,while)

  6. 函数的定义

等等

这些基础, 只要是个程序员,都懂。 语言之间可以融会贯通。

其他的知识点, 要用到时再去Google搜呗。

面向对象基础


Android采用面向对象的编程技术。 因此我们学习一下面向对象的基础知识, 之后我们还是会花时间细说的。

"面向对象编程"(OOP: Object-Oriented Programming) 。这是一种不同于以往的编程模式。

英语Object是"对象"的意思, 听到这个词, 少年你又激动了对吧? 我说的可不是找对象...

面向对象编程的模式不会立即使你的程序发生***性的改变,而且刚开始接触的时候你甚至会觉得这种模式没什么用。

目前为止我们的编程模式一直是:面向过程(POP : Procedure-Oriented Programming)。

也就是:我想要实现什么功能,就写什么函数,声明相应变量,等等。比如我要显示一段信息到屏幕上,我可以创建一个函数:

void showMessage(string message);

如果你接触过C语言,那么应该知道C语言是面向过程编程模式。当然了, C语言也可以实现面向对象编程的,只不过本身没有内嵌的实现而已, 你可以用struct(结构体)来模仿class(类),但是比较麻烦。

相信我:慢慢地,你会发现面向对象的编程模式比面向过程更符合人类的思维。你将能更好地组织你的代码。

听到面向对象编程,你最好奇的词应该是"对象"吧。

你会想:这不会是又一种神秘的设计吧?难道是一个宿醉后的疯狂程序员想出来的东西?

其实不然。我们身边充满着对象:你的车是一个对象,你的电脑是一个对象,你的手机是一个对象,你的房子是一个对象, 你的对象也是一个对象,等等。

事实上,我们所知道的所有东西都可以被看作对象。面向对象编程,就是在代码中操作这些被称为"对象"的元素。

下面列举几种平时我们在编程中常见的对象:

  • 一个窗体:例如QQ的一个聊天对话框,画图软件的主界面。

  • 一个按钮:比如安装软件时那些"下一步"的按钮。

  • 游戏里的一个人物。比如Warcreft里的伊利丹。

  • 一首歌,一个视频, 等等

说了这么多,对象到底是啥呀?是一种新的变量吗,还是一种新的函数类型?

no, no, no,都不是。对象是一种新的编程元素!

或者说得更具体一些,对象里面混合了变量和函数。

可不要被这句话吓跑了,我们一点点来探索。

想象一下... 一个对象。 嗯, 不是让你想象美女...

还是来点实际的图片好了,能帮助我们理解。

设想


有一天,一个程序员决定要写一个图形界面的程序,这个程序可以在屏幕上显示窗体,调整窗体大小,移动窗体,删除窗体,在窗体里可以画各种图形,等等。

要实现这些功能,代码是比较复杂的:需要不少函数,这些函数之间互相调用。而且还需要很多变量,例如窗***置(x坐标和y坐标),窗体的宽,高,等等。

这个程序员花了不少的时间来写这个程序。程序有点复杂,但是他完成了。最终,他实现的代码包含了很多的函数和变量。

当我们第一次看到他的程序时,就好像看一个化学家的一个实验环境一样,啥也看不懂。如下图:

不过,这个程序员对自己的程序还是很满意的,他甚至要把程序发布到网上,让大家可以用他的程序来创建窗体,直接拿来用就可以了,而不需要从零开始写代码。

不过,有一个问题,如果你不是化学专家,你可能得花不少时间搞懂这一堆东西到底是怎么运作的:哪一个函数最先被调用呢?为了改变窗体的大小,哪个变量要被传递到哪个函数里呢?总之,我们很害怕把整个实验环境给弄炸了。

在接到一些用户的建议和抱怨后,这个程序员决定替用户着想。他重新设计了他的代码,从面向过程的模式改为面向对象的模式。

这就好比他把所有和这个化学实验有关的东西都放到一个大方盒子里。这个大方盒子就是我们所说的"对象"。如下图:

在上图中,大方盒子的一部分被设为透明,是故意的,使你可以看到里面的景象。是的,我们的化学实验的所有设备都在大方盒子里。

但是,实际当中,大方盒子是完全不透明的,用户从外面看不到里面到底有什么。如下图:

这个大方盒子里存放着函数和变量(那些化学仪器,试管,烧杯,等等),但这些元素对于用户却是不可见的。

这样,用户看到的就不再是成堆的试管,烧杯,等等让其抓狂的东西了。

在大方盒子外面,我们呈现给用户的就只有一些按钮:一个按钮用于"打开窗体",一个按钮用于"改变窗体大小",一个按钮用于"关闭窗体",等等。用户完全不需要理解大方盒子里面的运作原理。

因此,以面向对象的模式来编程,就是:

程序员编写代码(可能很复杂),然后将这些复杂的代码都装到一个大方盒子(对象)里,用户从外面不能看到里面的实现细节。
因此,对于使用这个对象的用户来说,操作起来就容易多了:只需按下对应的按钮,不需要精通化学也可以使用整个实验环境提供的功能了。

当然了,上面的比喻只是一个大致概念。


你会问:我们学的不是面向对象吗?为什么无端跑出一个"类"来?

类是什么呀?类和对象之间又有什么"不可告人"的关系呢?

呃... 为了创建一个对象,必须先创建类!

解释如下:比如我们要造房子,总得先有设计图纸对吧?这样,类就好比房子的设计图纸,而对象就是根据图纸建造出来的房子。

因此,创建一个类,其实就是画出对象的设计图纸。

只要有了房子的设计图,你就可以依据这张设计图造无数多个房子。类和对象也是这样:一旦你把类设计好了,你就可以依据这个类来创建无数多个对象。如下图所示:

术语:我们说对象是类的实例("实例"在英语中是instance),这在面向对象编程领域经常听到。这表明对象是类的具体的物化(房子也是房屋的设计图纸的具体物化)。

你会说:这有点抽象吧。那好,我们就来创建一个类看看。

创建一个类,但是创建什么类呢?

首先必须选择一个类来创建。还是以建筑为例,我们可以创建一座公寓,一个带游泳池的别墅,一间阁楼。

选择是很多样的。当我们刚开始学习面向对象编程的时候,我们会有点却步不前,不确定哪些东西可以被看作对象。

但答案却是:几乎所有东西都可以被认为是对象。

举个实例


为了帮助你了解对象和其内容,让我们用一个简单的比喻开始。

假设你开车,你要踩加速踏板来使车子加速。

那么,在你可以开车前,得有人来设计制造你的车。

要制造一辆车, 需要先有工程图纸上的设计,类似于之前描述房子的设计蓝图。

这些设计图中包括了加速踏板的设计。

对于驾驶员来说, 踏板有加速的作用, 但是他并不了解其中原理。就好比他也不了解为什么方向盘可以改变车子的方向。这些都被隐藏了起来。这使得人们只需要会开车就可以, 而并不需要每个人都去研究汽车的底层原理。

类和方法


类就是这个汽车的设计图纸。

一辆汽车有很多种能耐/能力, 例如可以行驶, 加速, 换方向, 刹车, 等等。

之前我们说的驾驶员踩加速踏板使其加速, 就是使用了汽车的其中一个能力。

在面向对象中, 我们把类中执行特定任务的区块称为 方法, 其实就类似面向过程编程中所说的函数。

类的方法向用户隐藏了其具体实现,就像汽车的油门踏板可以控制汽车加速, 但驾驶员不知道其原理一样。

实例化


正如你不能去开一张车的设计图纸, 也不能在一个厨房的设计图纸上做菜一样。

我们的类(设计图纸)需要被实例化才能被使用, 就好比车子必须依据设计图纸被工厂制造出来才能被我们使用。

从类实例化出来可供使用的东西就是: 对象。

重用


就像汽车的设计图纸,可被多次重复使用来构建多辆汽车。 你也可以重复使用类来构造许多对象。

类的可重复使用性是面向对象编程的一个很重要的优势。

消息和方法调用


当你开车时,踩下加速踏板, 实际上是发送了一个指令给车子, 车子接收到指令就会加速。

类似地,你将消息发送给一个对象, 每个消息就是一个方法调用,告诉对象中的方法来执行其任务。

属性


一辆汽车,除了具有能力(方法)来完成任务,也有属性。

比如车的颜色,车门的数目,油罐的储油量,当前行驶速度和里程表读数。类似面向过程编程中的变量。

和汽车的能力(方法)类似, 汽车的属性也是其工程图设计的一部分。当你驾驶一辆实际的汽车,这些属性与汽车是紧密联系的。每辆汽车有自己的属性。

封装


类里面"封装"了属性和方法,属性和方法是密切相关的。

不同类的对象可以彼此进行通信,但它们通常不被允许知道其他对象的实现细节。

对象对外隐藏了这些细节, 这就是封装的基本概念, 也是面向对象的一个关键。

继承


一个类可以通过继承别的类来快速获取别的类的属性和方法。

之后, 在继承而来的基础上, 还可以自定义属于自己的属性和类。

用我们的汽车来类比,普通车的车顶不能被开启, 但是敞篷车可以。

敞篷车就是从最基础的车这个类继承了所有车的一般属性和方法, 再自己加入了可以打开车顶的方法。

总结


当然了, 这些概念还需要我们之后实战来慢慢消化。慢慢来学习吧~


人世间,
万千情感皆有温度,
千万代码似有性格。
这里有原创教程,IT丛林......
和你一起探索程序人生。
我是谢恩铭,在巴黎奋斗的嵌入式软件工程师。
个人简介
热爱生活,喜欢游泳,略懂烹饪。
人生格言:“向着标杆直跑”