Android探索之旅 | 面向对象和Java基础

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

上一篇 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丛林......
和你一起探索程序人生。
我是谢恩铭,在巴黎奋斗的嵌入式软件工程师。
个人简介
热爱生活,喜欢游泳,略懂烹饪。
人生格言:“向着标杆直跑”

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,050评论 25 707
  • 推荐深度好文:原文链接,作者:张洋 序言 Perface “佛曰:苦海无涯,回头是岸。——佛教用语” 面向对象(O...
    不知公民阅读 736评论 0 4
  • 第一章 面向对象编程和面向协议编程 这本书是关于面向协议编程的。当苹果在 2015 年世界开发者大会上宣布 Swi...
    焉知非鱼阅读 4,955评论 19 25
  • 许多许多年以前,好像有那么一段每天和母亲相依为命捡破烂吃白菜的日子。现在茶余饭后谈及仍热泪盈眶。在我心里,那却是最...
    浅辄小哥哥阅读 593评论 0 2
  • 或许,我是那么多爱。至今,喜欢三个人。 三个都是三十岁左右的。比较成熟点的,微胖。 两个都是有男友。只把他们一直...
    同志阅读 386评论 0 3