【iOS开发之Objective-C】Objective-C语言中的OOP

先看看相关术语:

1.类(class)是一种表示对象需要运行的代码。对象通过它的类来获取自身的各种信息,尤其是执行每个操作需要运行的代码。简单的程序可能仅包含少量的类,中等复杂的程序会包含十几个类。建议开发人员在使用Objective-C编程时采用首字母大写类名。

2.对象(object)是一种包含值和指向其类的隐藏指针的结构体。运行中的程序通常都包含成百上千个对象。指向对象的变量通常不需要首字母大写。

3.实例(instance)是“对象”的另一种称呼。比如说circle对象也可以成为Circle类的实例。

4.消息(message)是对象可执行的操作,用于通知对象去做什么。对象接收消息后,将查询相应的类,以便找到正确的代码来运行。

5.方法(method)是为响应消息而运行的代码。根据对象的类,消息可以调用不同的方法。

6.方法调度(method dispatcher)是Objective-C的使用的一种机制,用于推测执行什么方法以响应某个特定的消息。

7.接口(interface)是类为对象提供的特性描述

8.实现(implementation)是接口能正常工作的代码。


一、@interface部分

创建某个特定类的对象之前,Objective-C编译器需要一些相关的信息,尤其是对象的数据成员(即对象的C语言类结构体应该是什么样子)及其提供的功能。可以使用@interface指令把这些消息传递给编译器。

以下是Circle类的接口。

@interface Circle :NSObject
{
@private
ShapeColor fillColor;
ShapeRect bounds;
}
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end 
第一行    @interface Circle :NSObject
在Objective-C中只要看见@符号就可以把它看成是对C语言的扩展。@interface Circle告诉编译器:这是新类Circle的接口。

@interface行中的NSObject告诉编译器,Circle类是基于NSObject类的。该语句表明每个Circle类都是一个NSObject,并且每个Circle类都将继承NSObject类定义的所有行为。

在声明玩新类之后,我们将告诉编译器Circle对象需要的各种数据成员。

{
ShapeColor fillColor;
ShapeRect bounds;
}
第一个元素是fillColor,属于ShapeColor类型。第二个元素是bounds,属于ShaperRect类型。

在类声明中指定fillColor和bounds后,每次创建Circle对象,对象中都将包括这两个元素。因此,每个Circle类对象都将拥有自己的fillColor和bounds。fillColor和bounds的值称为Circle类的实例变量(instance variable)。

结尾处的花括号告诉编译器,我们为Ciecle类指定了实例变量。

接下来的几行代码看起来像C语言中的函数原型。

- (void) setFillColor: (ShapeColor) fillColor;//声明常见的是以短线 - 和位于括号()中的返回值类型开头;  相当于C语言中的  void setFillColor(ShapeColor fillColor);
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
在Objective-C中,它们称为方法声明(method declaration)。方法声明列出了每个方法的名称、方法返回值的类型和某些参数。

上面的三个函数原型中,有两个有参数,一个没有。两个有参数的后面有“:”,另外一个没有“:”。可以遵循这样的一个规则,如果法方使用参数,则需要冒号,否则不需要冒号。

最后一行代码告诉编译器,我们已经完成了Circle类的声明。

@end   

二、@implementation部分

通常接口被称为API(applincation programming interface的三个字母的首字母缩写)。而对象真正使对象能够运行的代码位于@implementation部分中。

@implementation Circle
- (void)setFillColor:(ShapeColor)c
{
 fillColor = c;
}
- (void)setBounds :(ShapeRect) b
{
bounds = b;
}
第一行@implementation Circle中的是一个编译器指令,表明你将为某一个类提供代码。类名出现在@implementation 之后。该行的结尾没有分号,因为在Objective-C编译器指令后不必使用分号。

在@interface部分的

- (void) setFillColor: (ShapeColor) fillColor;
和@implementation部分的 
- (void)setFillColor:(ShapeColor)c

变量不一样前者是fillColor后者是c,且后面的一个结尾没有分号。

那么为什么要给变量重新命名呢:

a.我们已经通过类定义了一个名为fillColor的实例变量,因为它在作用范围内可以在该方法中引用该变量,所以如果使用相同的名称定义另一个变量,编译器将会阻止我们访问实例变量。

b.在@interface部分的方法声明中使用名称fillColor,是为了告诉读者参数的真正作用。在实现中,我们必须区分参数名称和实例变量的名称,最简单的方法就是将参数重新命名。可以避免a中的问题。

第二个方法setBounds和上面的setFillColor类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值