关于面向对象

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

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

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

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

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

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

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

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

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

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

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

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

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

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

编程的过程:说白了就是模拟现实世界在计算机上模拟出一个虚拟的世界,大家很多都玩游戏也很享受那个虚拟的游戏世界,我不玩游戏,但是我本身也特别喜欢看这方面的电影。要模拟一个我们的虚拟世界,在这个世界中,我们就是创造者,我们会为人物分类,魔术师,剑士等。这些人物类别都有自己的生命特征,外形特征,最重要的是它们都有自己的技能。我们勾画了魔术师这一类人的全部共同特征,技能。到目前为止,魔术师只是一群具有共同特征的人物的统称,我们要用我们设计的这个魔术师的形象来创造出一个个魔术师,魔术师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开头,便利构造器,类方法命名以类名开头(类名首字母小写);

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

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

需要注意的细节:

初始化函数的命名规范;

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

OC整理1的更多相关文章

  1. IOS开发-OC学习-常用功能代码片段整理

    IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...

  2. oc界面开发整理

    oc界面开发整理 ViewController.h from test82 #import <UIKit/UIKit.h> @interface ViewController : UIVi ...

  3. 我收录整理的优秀OC技术类文章

        自定义导航按钮UIBarButtonItem   关于导航栏的六个小技巧   ios开发的一些小技巧篇一 制作一个可以滑动操作的 Table View Cell - IOS - 伯乐在线 一个 ...

  4. OC调用Swift 整理步骤!总结别人的!方便自己查找!

    1. 2. 上面的修改了一个配置项,有一个Product Module Name在后面会使用. 在工程里面点击File/New/File…,选择iOS/Source/Cocoa Touch Class ...

  5. OC测试错误整理

    3. NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a value" forKey:@"aKey&q ...

  6. OC开发_整理笔记——友盟分享(社交化组件)

    0.友盟的地址 http://dev.umeng.com,进入友盟,在使用友盟之前我们需要注册账号获取key (1 进入我们的产品,添加新应用 (2  输入信息,然后就会获取到key 1.选择社会化分 ...

  7. OC开发_整理笔记——多线程之GCD

    一.进程和线程   二.各种队列! 1.GCD:Grand Central Dispatch 2.串行队列(Serial)      你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列 ...

  8. oc语言基础整理

    objc.h---------------- typedef struct objc_class *Class; struct objc_object { Class isa  OBJC_ISA_AV ...

  9. iOS 常用三方类库整理

    iOS 常用三方类库整理 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://gi ...

随机推荐

  1. WPF 通过Border来画边框

    WPF有自己的表格控件DataGrid.ListBox等,如果只是简单的需求,可以通过Border控件来画边框. 比如我们需要给上面的控件加上边框. <Window x:Class=" ...

  2. C++开始前篇,深入编译链接(3)

    一,COMMON块 什么是COMMON块,这是一种机制,早期的Fortran没有动态分配空间的机制,程序员必须事先声明它所需要的临时使用空间的大小.Fortran把这种空间叫做COMMON块,当不同的 ...

  3. Mahout推荐算法API详解

    转载自:http://blog.fens.me/mahout-recommendation-api/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...

  4. iOS让键盘消失,取消第一响应,取消一级响应

    在开发中经常会遇到输入文本内容的时候,输入完毕的时候怎么让键盘消失的问题,有的是更改键盘的按键的方法,有的是点击屏幕的其他地方让键盘消失,个人更倾向于第二种,点击屏幕的其他地方让键盘消失,要实现这种方 ...

  5. 病毒四度升级:安天AVL Team揭露一例跨期两年的电信诈骗进化史

    自2014年9月起,安天AVL移动安全团队持续检测到一类基于Android移动平台的间谍类病毒,病毒样本大多伪装成名为"最高人民检察院"的应用.经过反编译逆向分析以及长期的跟踪调查 ...

  6. Delphi之通过代码示例学习XML解析、StringReplace的用法

    这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <?xml version="1.0" encoding=&q ...

  7. 《Python数据分析》环境搭建之安装Jupyter工具(一)

    (免责声明:本文档是针对Python有经验的用户,如果您对Python了解很少,或者从未使用,建议官方教程用Anaconda安装) 前期准备:Python环境 虽然Jupyter可以运行多种编程语言, ...

  8. ppmoney

    build/config.js 改 8080端口 build/webpack.dev.conf.js 改路径简写 alias:{ 'vux-components':'vux/dist/componen ...

  9. ABP中单元测试的技巧:Mock和数据驱动

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:虽然ABP为大家提供了测试的脚手架了,不过有些小技巧还是需要自己探索的. ASP.NE ...

  10. CGI与fastcgi与php-fpm与php-cgi的关系

    cgi是一个协议,它规定了服务器Nginx会将那些数据传送给PHP-cgi fastcgi也可以说是一个协议.fastcgi是对cgi的性能的一次提高.fastcgi会先启动一个master,解析配置 ...