一 面向对象思想
1 面向对象和面向过程的区别
面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象。面向对象的常用术语有:面向对象 Object Oriented,简称OO,面向对象编程 Object Oriented Programming,简称OOP。
二 类和对象的关系
1 OC中的类用来描述一类事物,也就是说,要想创建对象,必须先有类;OC利用类来创建对象,对象是类的具体存在;因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象。
2 类的设计,只关心3样东西:事物的名称,属性,行为,哪个对象最清楚这个行为,就把这个行为写到哪个对象中去。
三 定义OC的类和创建OC的对象
跟函数类似,函数有分声明和定义,要描述OC中的类,也分2大步骤:类的声明、类的实现(定义)。
定义一个新类分为2 部分:
@interface 部分
描述类、类的数据成分以及类的方法
@implementation 部分
实现这些方法的实际代码
1 interface 部分(声明)
@interface 部分的一般格式:
@interface NewClassName : ParentClassName
{
memberDeclarations;
}
methoddeclarations;
@end
命名规则:以字母或下划线开头,之后可以是任何字母,下划线或者0~9 数字组合
约定:类名以大写字母开头,实例变量、对象以及方法的名称以小写字母开始。
每次创建新对象时,将同时创建一组新的实例变量且唯一。注意:在对象类型的右边都有一个*号,
所有的对象变量都是指针类型。Id 类型已经被预定义为指针类型,所以不需要加一个*号。
函数开头的(-)号或者(+)号表示:
(-) 该方法是实例方法(对类的特定实例执行一些操作);
(+)是类方法(即对类本身执行某些操作的方法,例如创建类的新实例)。
2 @implementation 部分(类的实现)
@implementation 部分的一般格式:
@implementation NewClassName
methodDefinitions;
@end
3 创建对象
例如Car *c = [Car new]。[Car new]每次都会创建出新的对象,并且返回对象的地址,那么就应该用一个指针变量保存对象的地址,用一个指针变量c指向内存中的Car对象。
4 具有多个参数的方法
具有多个参数的方法:
-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;
如果只有一个参数,在: 后面声明参数的类型和名称;如果有多个参数的话,每个参数前面都要有一个: , 然后接着是参数类型和参数名称。可是大家可能还是觉得很奇怪。比如上面这个例子中,otherParameter 这个是什么意思,在objective c 中,对于有多个参数的函数,可以理解为将函数的名称拆成了几个部分,每个部分都是对紧接着的参数的一个解释。
5 一个OC类的举例
- /*
- 类名:Car
- 属性:轮胎个数、时速(速度)
- 行为:跑
- */
- // 因为使用了NSObject
- #import <Foundation/Foundation.h>
- // 完整地写一个函数:函数的声明和定义(实现)
- // 完整地写一个类:类的声明和实现
- // 1.类的声明
- // 声明对象的属性、行为
- // : NSObject 目的是:让Car这个类具备创建对象的能力
- @interface Car : NSObject
- {// 用来声明对象属性(实例变量\成员变量,默认会初始化为0)
- // @public可以让外部的指针间接访问对象内部的成员变量
- @public
- int wheels; // 轮胎个数
- int speed; // 时速(xxkm/h)
- }
- // 方法(行为):方法名、参数、返回值(声明、实现)
- // 只要是OC对象的方法,必须以减号 - 开头
- // OC方法中任何数据类型都必须用小括号()扩住
- // OC方法中的小括号():括住数据类型
- - (void)run;
- @end
- // 2.类的实现
- // 用来实现@inteface中声明的方法
- @implementation Car
- // 方法的实现(说清楚方法里面有什么代码)
- - (void)run
- {
- NSLog(@"车子跑起来了");
- }
- @end
- int main()
- {
- // 在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称]
- // 利用类来创建对象
- // 执行了Car这个类的new行为来创建新对象
- // 定义了一个指针变量p,p将来指向的是Car类型的对象
- // [Car new]每次都会创建出一个新对象,并且会返回新对象本身(新对象的地址)
- Car *p = [Car new];
- Car *p2 = [Car new];
- p2->wheels = 5;
- p2->speed = 300;
- [p2 run];
- // 给p所指向对象的wheels属性赋值
- p->wheels = 4;
- p->speed = 250;
- // 给p所指向对象发送一条run消息
- [p run];
- NSLog(@"车子有%d个轮子,时速位:%dkm/h", p->wheels, p2->speed);
- return 0;
- }