码迷,mamicode.com
首页 > 其他好文 > 详细

【object-c学习笔记】第5章 复合

时间:2015-04-23 23:00:12      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

复合 composition

object-c中,复合是通过包含作为实例变量的对象指针实现的。严格的说,只有对象间的组合叫复合。

以汽车模型为例,1辆汽车(Car)需要1台发动机(Engine)和4个轮胎(Tire),这里不去研究真正的轮胎和发动机的物理模型,而仅包含方法的类来输出各自代表的含义:轮胎的对象说它们是轮胎,发动机的对象说它们是发动机。

1 @interface Car : NSObject
2 {
3     Engine *engine;
4     Tyre *tire;
5 }
6 @end //Car

以上代码可以看出,engine和tire是通过复合的方式组成Car。

1 @interface  Engine : NSObject
2 @end //Engine
3 
4 @implementation Engine
5 -(NSString)Descroption
6 {
7   return (@"I am engine. Vroom");
8 } //description
9 @end //Engine

Engine类只有一个description方法

1 @interface Car : NSObject
2 {
3     Engine *engine;
4     Tire *tires[4];
5 }
6 -(void)print;
7 @end//Car

Car 拥有engine对象和一个由4个tire对象组成的数组,通过复合的方式组装自己,Car同时还有一个print方法,该方法使用NSLog()来输出轮胎和发动机的描述。

因为engine和tires是Car的实例变量,所以它们是复合的。

下面我们来看看Car的实现:

 1 @implementation Car
 2 -(id)init
 3 {
 4     if(self = [super init]){
 5       engine = [engine new];
 6       tires[0] = [Tire new];
 7       tires[1] = [Tire new];
 8       tires[2] = [Tire new];
 9       tires[3] = [Tire new];
10       }
11       return(self);
12 }//init
   Car的init方法创建了4个轮胎并赋值给tires数组,还创建了一台发动机赋值给engine实例变量。self = [super init],[super init]赋值给self是object-c的惯例,这么做是为了防止超类在初始化过程中返回的对象与一开始创建不一致。
  接下来,是Car类的print方法:
1 -(void)print
2 {
3   NSLog(@"%@",engine);
4   NSLog(@"%@",tires[0]);
5   NSLog(@"%@",tires[1]);
6   NSLog(@"%@",tires[2]);
7   NSLog(@"%@",tires[3]);
8 }//print
9 @end//Car

 print是通过NSlog

1 int main (int argc,const char *argv[])
2 {
3     Car *car;
4     car = [Car new];
5     [car print];
6     return(0);
7 }//main

运行程序后输出:

 

 

【object-c学习笔记】第5章 复合

标签:

原文地址:http://www.cnblogs.com/sallyWei/p/4451938.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!