无忧岛

15 七, 2010

php面向对象OOP编程教程(一) – 类和对象的关系

Posted by: kinglife In: php

假设我们要用PHP开发一个游戏……
“PHP能开发游戏吗?”
“不能吗?”
“你开发一个给我看看!”
“你给我钱嘛!”
“滚!”
(orz 不要再废话了,抓紧时间进入正题)

好了,这个无聊的争论就不要继续了,我总不能拿按钮、文本域、表格这些东东当作对象给初学者们讲述OOP吧?那样大家会崩溃的,我也会崩溃的.为了增加本教程的易懂性、通俗性和趣味性……我决定了就假设我们要用PHP开发一个游戏,都说了,要玩嘛.

首先声明OOP的概念是很重要的,因为它是OOP编程思想的基础,我在本教程里刻意的回避概念性问题,是为了降低初学者的恐惧心、增加初学者的求知欲,前面说了,很多不原意接触OOP的PHPer就是被概念折腾的.所以,大家千万不要跟人家说,啊,那个谁?Hetty说了,OOP概念算个屁,不用去管.OMG……那我岂不是成了罪人?

本教程旨在先玩会OOP,再去了解OOP的概念.如果你没有玩过星际争霸和魔兽争霸的话,突然蹦出一个人就跟你大谈游戏平衡性的概念,就算他一套一套的跟你讲得头头是道,你势必也将是一头雾水,但如果是你玩过这两款游戏的话,根本不需要谁跟你讲,就算游戏平衡性的概念再飘逸,你自己也能在玩的过程中感觉到、体会到的.OOP也是一样,你自己悟出来的要比别人言传身教的清晰牢固千百倍,这就是本教程的出发点.

至于吗?强调这么多遍……好吧,你赢了,先看图,在这个游戏里,我们将设计三个角色:

php面向对象编程教学-类和对象的关系

php面向对象编程教学-类和对象的关系

(就这水平了,将就着看吧)

红色是类,蓝色是对象.很多初学者经常把类和对象混淆,如果你是这类人,那么就多看一段时间,把这个图印在你心里,反复揣摩.如果你连思考都不愿意的话,那么就不必再往下看了,因为那是在浪费时间.

看好了吗?什么?一分钟都不到,回去继续看,是男人就持久点.

看出什么端倪了吗?我们可以看到红色的”角色”是空心的,因为它不是一个实体,只是个虚无缥渺的词汇,我们看不见摸不着,但是它却存在于我们心里;而蓝色”春哥”、”曾哥”和”凤姐”是实心的,因为它们是实体,是三个真真切切的人,我们看得见摸得着(如果敢摸的话),存在于我们的生活中.

在这个游戏中,你可以说”春哥”是一个”角色”,但绝对不能倒过来说”角色”是一个”春哥”,就像你不能说”水果”是一种”苹果”一样,不止是逻辑上说不过去,就连语法上也说不过去,这个……只需要小学语文水平就可以理解.

因此我们可以得出以下结论:

 :是抽象名称
对象:是具体东东

其实类并不是什么新的概念,类,顾名思义,就是分类、种类、类别……我们从小就开始接触它了,习惯好的小朋友喜欢把自己的东西整理归类摆放好,比如变形金刚放一边啊、小人书放一边啊……这“变形金刚”和“小人书”就是类了啊。

既然我们主题是玩,那么就拿“变形金刚”这个类来说说,它是很笼统、很抽象的名称,而非一个实体。如果把它具体化,那么我们就可以得到实体的对象,比如“大黄蜂”、“擎天柱”、“铁皮”。

“大黄蜂”、“擎天柱”、“铁皮”用抽象点的话说就是“变形金刚”。
“变形金刚”用具体点的话说就是“大黄蜂”、“擎天柱”、“铁皮”。

因此我们可以得出以下结论:

对象抽象化
对象具体化

把一个类具体化以后可以得到多个对象,把多个对象抽象化后可以得到一个类.

这时有人就会问了,生活中的类我们很熟悉,很好区分啊,那么程序中的类该怎么区分呢?其实道理是一样的,我们把有相同特征的东东归为一类就可以了.比如”大黄蜂”、”擎天柱”、”铁皮”,他们有相同的特性(属性):有高度、有重量、有颜色;他们有相同的行为(方法):会变形、会说话、会走路.因此,在程序中,我们经常把具有相同属性和方法的对象归为一类.

每个对象都是唯一的,就算你有两个一模一样的”大黄蜂”,但是每个”大黄蜂”都是独立存在的个体,就像同名同姓的人很多,但是”春哥”却是这个世界上独一无二的(多了这个世界会灭亡的).

程序与生活不同的地方:

在生活中,往往是把一组对象归为一类:先有了很多苹果的果实,我们才能把它们归为苹果类.
在程序中,往往是用类来产生一组对象:先有了角色类,我们才能创造出春哥、曾哥和凤姐来.

好了,今天就玩到这里,表达能力有限,不知道大家看明白没有?如果没有看明白的话,争取看明白,因为这篇看明白了,后面就将一马平川,越来越好玩.

作者:hetty 首发地址:http://www.im286.com/thread-4823948-1-1.html

版权所有,转载时必须以链接形式注明作者和原始出处及本声明:KingLife@无忧岛

本文链接: http://www.islandcn.com/post/764.html



No Responses to "php面向对象OOP编程教程(一) – 类和对象的关系"

Comment Form

Flickr PhotoStream

    flickrRSS probably needs to be setup

About

Name:KingLife
Email:lifewz#163.com