OC整理1

关于面向对象

看起来简单,好好体会其实有点深奥,初学的时候更感觉抽象,可能由于开发经验不足的关系吧,很难体会到面向对象的精髓。

放轻松,我们来用最直白得方式来探讨一下面向对象。

首先,编程是为了用计算机解决现实生活中的问题,或者模拟各种游戏情景提供娱乐。

面向过程编程是一种思维——知道做一件事的具体步骤,按流程一步一步的执行,致力于问题解决的具体实现步骤。

而我们今天要提起的面向对象也是一种思维方式——是一种模拟人类行为,思考的方式寻求最直接的途径解决问题。

为了说明这一点呢,我们一起来看看我们如何用面向过程和面向对象的方法分别解决开店的事件。

开店喽,用面向过程的方方法(典型中国人的方式:亲力亲为):租店铺,装修,买设备,顾员工,管理员工等。

但是呢,用面向过程的方法(外国人的方式):顾一个店长用来管理员工,店长再顾各种员工,中介来租房子,装修团队装修,采购员负责采购等。

看起来很杂乱的事情被分化得井井有条,哪里出问题直接找做这件事的人就可以。如果又需要一个管钱的,店长只需再请一个会计。分工明确,每分工作之间的关联很小。

面向对象的关键在于快速找到一个会解决问题的对象帮忙解决问题;

面向过程的关键在于遇到问题着关注解决问题的具体步骤。

看得出来用面向对象的方式用于编程,能使我们的程序方便维护,满足不断拓展的需求。

 

到此为止,我们应该已经了解到面向对象是一种模拟现实生活中对象间处理问题的简便的思维方式;并且用面向对象编程能使我们的程序更加健壮。

接下来我们来一起谈谈面向对象编程的一些相关术语:类,对象,实例变量,方法,消息

编程的过程:说白了就是模拟现实世界在计算机上模拟出一个虚拟的世界,大家很多都玩游戏也很享受那个虚拟的游戏世界,我不玩游戏,但是我本身也特别喜欢看这方面的电影。要模拟一个我们的虚拟世界,在这个世界中,我们就是创造者,我们会为人物分类,魔术师,剑士等。这些人物类别都有自己的生命特征,外形特征,最重要的是它们都有自己的技能。我们勾画了魔术师这一类人的全部共同特征,技能。到目前为止,魔术师只是一群具有共同特征的人物的统称,我们要用我们设计的这个魔术师的形象来创造出一个个魔术师,魔术师A,魔术师B,魔术师C。A,B,C才是一个个真正施展技能的角色,而魔术师只是一个统称,是我们的一个设计人物框架,在编程中我们用“类”表示;用这个“魔术师类“创建出来的A,B,C是我们编程当中的“对象”——一个个有独特特征,技能的实在角色。我们在魔术类中,描述了这个类应该具有的特征,技能,所以按照这个类创建出来的魔术师对象都具有这些特征,技能。这些特征我们称之为“实例变量”,技能我们称之为“方法”。某个具体的魔术师角色发动技能,我们称为“发送消息调用方法”。

勾画这个魔术师类的过程,我们称为类的设计封装。

那我们来设计一个。

魔术师(Magical)类:特征(身高,性别,生命值)技能(冰封,无中生有,天女散花)

接下来呢,我们就可以在XCode上创建这么一个类,步骤略。创建出来的Magical类有两个文件.h和.m文件。

.h是一个声明文件:实力变量的声明需要在{}中声明,方法的声明;如何实力变量声明,方法声明,步骤略。

.m是一个实现文件:对声明的方法的实现,方法有(+ \-)两种方法,+称为类方法,-方法称为实例方法(对象方法)。类方法类调用,对象方法对象调用;方法实现略。

 

有了类,我们需要用我们的魔术师类创建出3个魔术师对象A,B,C;

类比于生活中的按照草图建房子,我们需要圈地才能建房,然后为建起的毛坯房初始装饰一下,暂时住人;而在计算机中内存就是我们的地,我们要让计算机给我们分配空间来创建对象,为这个毛坯对象初始化一下。

alloc 对应内存分配以及为所有的实例变量赋系统默认值占据内存。接下来呢init初始化一下各个实力变量。

总之,[[Magical alloc]init];还有另一种方式[Magical new];new 封装了alloc和init方法;

关于初始化,这是一个必须详细说明的关键点。

我们班都是男生,我现在有一个学生类(有性别,名字),学生有性别这个实例变量,我要创建学生对象调用初始化init的时候,学生的性别还是系统默认的‘\0’,当然我们可以创建学生对象后一个个赋值男生;

但是如果我要是能在创建的同时都把性别初始化成男生,不就更省事儿了吗!

要实现这样的功能,我们就需要重写init方法,在init方法中把性别这个实例变量赋值为男生就可以了。

接下来呢 ,我们又考虑到名字怎么办呢,每个学生的名字是不用的如果用这种初始化设置默认值的形式,不就每个学生的名字都一样了吗,所以呢,为了解决这样一个问题,OC提供了便利初始化函数,供我们在初始化的时候传入独特的值。

又提供了便利构造器封装了便利初始化函数,更加方便快捷的调用。

便利构造函数和便利构造器都是初始化出独特的对象的方法。关于命名是有规范的,便利构造函数,实例方法命名要以initWith开头,便利构造器,类方法命名以类名开头(类名首字母小写);

总结:关于面向对象,我们着重于面向对象编程:即类的封装,对象的创建,以及实力变量的使用,方法的调用;

类的创建封装,是基础,也是面向对象的重点难点,在实际的开发过程中会凸显出来,而初学者反而困扰在方法的调用和运行的流程。

需要注意的细节:

初始化函数的命名规范;

困扰人的概念:类方法和实力方法的调用;

 

posted @ 2014-08-14 10:53  hole  阅读(160)  评论(0编辑  收藏  举报