一.面向对象和面向过程的区别
1.以用电脑听歌为例子
1>面向过程:打开电脑-->播放在电脑中得歌曲-->关闭电脑睡觉
2>而面向对象就是找到电脑这个对象,电脑对象有开机,播放歌曲,关闭电脑这3个功能。
2.区别分析:
面向过程关注的解决问题需要哪些步骤,面向对象关注的是解决问题需要哪些对象。两种思想都能达到解决问题的目的,但是解决思路不一样。
3.现实生活中的面向对象的例子
1> 想打电话\发短信去找手机这个对象,不用分析电话要怎样才能拨通
2> 去饭店吃饭找服务员这个对象,不用分析怎么到厨房炒菜
3> 汽车坏了找汽车维修工这个对象,不用分析修车的步骤
4> 境界:万物皆对象(什么东西都可以当做对象,只要你认为他是)
4.常用术语
1> 面向过程 ProcedureOriented
2> 面向对象 ObjectOriented,简称OO
3> 面向对象编程 ObjectOriented Programming,简称OOP
二.类和对象的关系
1.车子是对象,有自己的属性值,是现实存在的,是类的实例存在物体。
2.车子对象的类是什么,这个类是抽象的,是车子创造的整个过程的所有东西,经历这个过程,车子就制造出来。
三.如何设计类
1.类的设计,只关心3样东西:
1>事物名称(类名):这个类叫什么名字
2>属性:这个类包含哪些属性,这些属性值可以来表示对象之间的区别
3>行为(功能):这个类包含哪几样功能,对象可以拥有这个功能
2.一般而言名词基本都可以当做类。因为名词基本都满足上面的3样东西。
3.拥有相同(或者类似)属性和行为的对象都可以抽像出一个类
4.哪个对象最清楚这个行为,就把这个行为写到哪个对象中去。打开电脑(开机)这个行为应该是属于电脑的。人开
机只是人执行电脑这个对象的开机方法而已。
四.定义OC类
OC类的定义需要二步:类的声明,类的定义
1.类的声明
1> 类名和属性命名规则:标示符规则
2>类名的命名规范:有意义(看到这个类名就想到这个类是干嘛的),多个英文单词组合用驼峰标识,首字母大写,不能有下划线。
//包含头文件
#import <Foundation/Foundation.h>
//类的声明
@interface Person : NSObject // 声明一个叫Person的类
{
int age; // 这个人拥有年龄属性
}
- (void)walk; // 这个人拥有走路这个方法
@end // 声明的结束标准,必须写
3>成员变量
@interface 的大括号里面放得是成员变量,即这个类拥有的属性,里面的成员变量默认值为0。
4>@public说明这个类里面的成名变量可以被外界访问
5>NSObject的目的是让Person这个类有创造对象的能力。
2.类的实现
//类的实现
@implementation Person
//走路这个方法的具体实现
- (void) walk
{
NSLog(@"人走起来了");
}
@end // 实现的结束标志
3.常见错误
1> 只有类的声明,没有类的实现
2> 漏了@end
3>@interface和@implementation嵌套
4> 两个类的声明嵌套
5>成员变量没有写在括号里面
6>方法的声明写在了大括号里面,方法的声明要写在大括号外
4.语法细节
1>成员变量不能在{}中进行初始化、不能被直接拿出去访问(只能通过指针访问p->age)。
2>方法不能当做函数一样调用(必须用类或者对象调用)。
3> 成员变量\方法不能用static等关键字修饰,别跟C语言混在一起。
4> 类的实现可用写在main函数的后面,主要在声明后面就可以(和函数的声明类似)。
五.创建对象
Person *p = [Person new];
Person *p:定义一个这个类(Person)类型的指针变量
[Person new]:使用类方法new创造一个类对象,让赋值给Person类型的指针变量 。
注意:
1.[Person new]每次都会创建一个新对象,这个类方法的返回对象的地址,所以用一个类类型的指针变量存放对象的地址。
2.直接访问成员变量用->,例如:p->age = 25;
3.面向对象封装的好处
1>更加接近人类的思考方式
2>只需要关注对象,不需要关注步骤
六.OC方法的注意
1.方法(行为)包括:方法名、参数、返回值(声明、实现)
2.OC对象的方法,必须以减号 -开头
3.OC方法中任何数据类型都必须用小括号()扩住
4.OC中,想执行一些行为,就写上一个中括号[行为执行者行为名称]。
5.带参数的方法中,冒号也是方法名的一部分。
6.同一个类中不允许两个对象方法同名
7.对象方法必须由对象来调用
七.OC方法和函数的区别
1.OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。函数的声明和实现可以写在任何位置(除了@interface和@end之间)。
2.C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有。方法则属于类或者对象。
3.函数内部不能直接通过成员变量名访问某个对象的成员变量
4.对象方法是以-开头的,
八.其它
1.在使用类创建对象之前,会将类加载进内存,为其分配存储空间,类里面存放这方法列表(类方法和对象方法)
2.方法中可以直接用变量名访问成员变量,哪个对象调用这个方法,就访问这个对象里的成员变量
3.创建完对象,会给对象分配一个存储空间,对象里面有属于自己的成员变量,但是方法是存在在类里面,对象通过isa指针去类里面找这个方法,然后调用方法。
4.OC对象不能自动回收,函数调用完毕后,其它局部变量,会被自己回收,但是对象不会自动回收。5.类里面的成员变量,必须创建好对象才能使用。成员变量是为对象而存在的。
6.类可以只有方法,这个类就叫做工具类。
7.匿名对象:[Person new]创建新对象后,不赋值给指针变量,每次[Person new]都会创建一个新对象。开发中不要使用匿名对象,这样会导致内存泄露。
8.OC方法中一个参数对应一个冒号,这个冒号也是方法名的一部分