面向对象、继承

OOP中的一些关键概念
 
间接(indirection):在代码中通过指针间接获取某个值,而不是直接获取。
NSLog()的编写者添加适当的添加%@格式的说明符,是为了通知NSLog()接受适当的参数,将其作为NSString,并使用该字符串中的字符,将其发送到控制台中。
过程式编程建立在函数之上,数据为函数服务,而面向对象编程则以程序的数据位中心,函数位数据服务。在OOP中,不在重点关注程序中的函数,而是专注于数据。
 
看一段代码
void drawShapes(id shapes[], int count)
{
     for (int i = 0; i < count; ++i) {
         id shape = shapes[i];
          [shape draw]; 
     }
}
这里的第一个参数shapes[]是一个id数组对象,id可以理解为标识符。id是一种泛型,可以用来引用任何类型的对象。
倒数第三行中的方括号的意义:用于通知某个对象该区做什么。方括号里的第一项是对象,其余部分是需要对象执行的操作。在OC中,通知对象执行某种操作称为发送消息(也可以理解为“调用方法”)。
对象是消息的目标,需要查找出它属于哪一个类;在Circle类中浏览器代码,查找draw函数的位置;找到draw函数后,执行绘制圆形的函数。
类(class) 对象(object) 实例(instance) 消息(message) 方法(method) 方法调度(method dispatcher)
接口(interface) 实现(implementation)
 
- (void) draw; 前面的短信表明这是OC方法的声明,这是区分函数原型与方法声明的一种方式,函数原型中没有先行短线。短线后面是方法的返回类型,位于圆括号中。
@interface Circle告诉编辑器这是新类Circle的接口。
@implementation是一个编译器指令,表明你将为某个类提供代码。雷鸣出现在@implemention之后。该行的结尾处没有分好,因为在OC编译器指令后不必使用分号。
 
为了创建一个新的对象,需要向相应的类发送new消息。该类接受并处理完new消息后,就会得到一个可以处理的新对象实例。
 
shapes[i] = {Rectangle new};//new一个对象
[shapes[i] setFillColor:kGreenColor];
//调用对象shapes[i]的setFillColor方法,并传入参数,感觉语法很奇葩
 
OC不支持多继承哦。
 
对象引用其他对象时,可以利用其他对象提供的特性,这就是复合。
 
当代码发送消息时,oc的方法调度机制将在当前的类中搜索相应的方法。如果无法在接受消息的对象的类文件中找到相应的方法,它就会在该对象的超类中进行查找。
 
有了对象基地址,即第一个实例变量的首个字节在内存中的位置,再在地址上加上偏移地质,编译器就可以查找其他实例变量的位置。
 
 
 

posted on 2016-06-30 00:28  TcSong24  阅读(233)  评论(0编辑  收藏  举报

导航