关于面向对象

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    #include <stdio.h>int SequentialSearch(int *a,int n,int x);int main(void){ //num代表查找的数 int num ...

  2. javascript学习笔记之array.sort

    arrayName.sort()方法: 功能是实现排序(按ascii编码或按数字大小),可无参或有参使用,无参时默认升序排列.有参时可实现升序或降序排列,参数必须是具有返回值的方法,当方法表达式大于0 ...

  3. 百度地图api的覆盖物样式与bootstrap样式冲突解决办法

    使用百度地图api 和 bootstrap ,发现标注样式出现了问题 label左侧 宽度变得非常窄 正常情况下应该是下面这样的: 原因是boostrap样式和百度地图样式冲突了. 解决办法: .ba ...

  4. Hive的三种安装方式(内嵌模式,本地模式远程模式)

    一.安装模式介绍:     Hive官网上介绍了Hive的3种安装方式,分别对应不同的应用场景.     1.内嵌模式(元数据保村在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错)   ...

  5. RabbitMQ的几种应用场景

    RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”,期间可根据规则路由.缓存.持久化消息.“生产者”也即message发送者以下简称P,相对应的“消费者”乃message接收者 ...

  6. 【leetcode】Minimum Depth of Binary Tree

    题目简述: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along th ...

  7. ethhdr、ether_header、iphdr、tcphdr、udphdr 结构介绍

    转自:http://blog.csdn.net/petershina/article/details/8573853 ************************eth的结构*********** ...

  8. 用 Blend 给Windows Phone 应用创建 示例数据

    前言  创建 示例数据(Sample Data) 是提高程序开发效率的一个很有效方法,有了它,我们调UI的时候就不必每次都运行应用,然后在手机上观看页面效果了,配合 “AlignmentGrid.pn ...

  9. 程序员玩转A股

    最近买了点股票....赔了25%......劝各位程序员还是买键盘,买电脑吧.不用理财.... 基本情况 毕业一年多点,手里有点闲钱,闲得慌,10月底开了账户买股票.两只半仓股,赔了15%+,全仓一支 ...

  10. 从零起步搭建Wordpress个人博客——Windows 平台篇(上)

    本文以 Windows Server R2 64bit 标准版 为基础,其他windows版本可能会略有不同. 参考资料: https://codex.wordpress.org/Installing ...