【《Objective-C基础教程 》笔记ch03】(四)OC中的OOP

简介: 一、声明类接口步骤: 1、声明一个类接口,使用@interface关键字加上类名称。 2、用  { 实例变量 }  来定义各种数据成员。 3、方法声明,采用中缀符语法声明一个c函数,用到了冒号 : 。

一、声明类接口步骤:

1、声明一个类接口,使用@interface关键字加上类名称。

2、用  { 实例变量 }  来定义各种数据成员。

3、方法声明,采用中缀符语法声明一个c函数,用到了冒号 : 。


二、声明类接口实例:

//声明圆形circle类接口
@interface Circle : NSObject
{
    ShapeColor fillColor;//每次创建新的Circle对象后,对象中都包括这两个元素——类的实例变量
    ShapeRect   bounds;
}//指定实例变量

-(void) setFillColor: (ShapeColor) fillColor;//方法声明、中缀符
-(void) setBounds: (ShapeRect) bounds;
-(void) draw;

@end //Circle 完成类的声明


三、实现类步骤

1、用关键字@implementation加上类名称

2、实现类中声明的方法,编写方法体 { 方法体 } 。


四、实现类实例


@implementation Circle//类实现

-(void) setFillColor: (ShapeColor) c
{
    fillColor = c;
}//setFillColor

-(void) setBounds: (ShapeRect) b
{
    bounds = b;
}//setbounds

-(void) draw
{
    NSLog(@"drawing a circle at(%d %d %d %d) in %@",
          bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor)
          );
}//draw

@end//Circle 完成类的实现

五、案例练习——几何图形的绘制和填充颜色

//
//  main.m
//  Shapes-Object
//
//  Created by jason on 14-6-10.
//  Copyright (c) 2014年 JasonApp. All rights reserved.
//

#import <Foundation/Foundation.h>

//定义形状的不同颜色
typedef enum{
    kRedColor,
    kGreenColor,
    kBlueColor
} ShapeColor;

//定义一个矩形来指定屏幕上的绘制区域
typedef struct{
    int x,y,width,height;
} ShapeRect;

//负责转换传入的颜色值,并返回NSString字面量
NSString *colorName(ShapeColor color)
{
    switch (color) {
        case kRedColor:
            return @"Red";
            break;
            
        case kGreenColor:
            return @"Green";
            break;
            
        case kBlueColor:
            return @"Blue";
            break;
    }
    
    return @"no clue";

}//colorName

//声明圆形circle类接口
@interface Circle : NSObject
{
    ShapeColor fillColor;//每次创建新的Circle对象后,对象中都包括这两个元素——类的实例变量
    ShapeRect   bounds;
}//指定实例变量

-(void) setFillColor: (ShapeColor) fillColor;//方法声明、中缀符
-(void) setBounds: (ShapeRect) bounds;
-(void) draw;

@end //Circle 完成类的声明

@implementation Circle//类实现

-(void) setFillColor: (ShapeColor) c
{
    fillColor = c;
}//setFillColor

-(void) setBounds: (ShapeRect) b
{
    bounds = b;
}//setbounds

-(void) draw
{
    NSLog(@"drawing a circle at(%d %d %d %d) in %@",
          bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor)
          );
}//draw

@end//Circle 完成类的实现

//定义矩形
@interface Rectangle : NSObject
{
	ShapeColor	fillColor;
	ShapeRect	bounds;
}

- (void) setFillColor: (ShapeColor) fillColor;

- (void) setBounds: (ShapeRect) bounds;

- (void) draw;

@end // Rectangle


@implementation Rectangle

- (void) setFillColor: (ShapeColor) c
{
	fillColor = c;
} // setFillColor


- (void) setBounds: (ShapeRect) b
{
	bounds = b;
} // setBounds


- (void) draw
{
	NSLog (@"drawing a rectangle at (%d %d %d %d) in %@",
		   bounds.x, bounds.y,
		   bounds.width, bounds.height,
		   colorName(fillColor));
} // draw

@end // Rectangle

//定义OblateSphereoids
@interface OblateSphereoid : NSObject
{
	ShapeColor	fillColor;
	ShapeRect	bounds;
}

- (void) setFillColor: (ShapeColor) fillColor;

- (void) setBounds: (ShapeRect) bounds;

- (void) draw;

@end // OblateSphereoid


@implementation OblateSphereoid

- (void) setFillColor: (ShapeColor) c
{
	fillColor = c;
} // setFillColor


- (void) setBounds: (ShapeRect) b
{
	bounds = b;
} // setBounds


- (void) draw
{
	NSLog (@"drawing an egg at (%d %d %d %d) in %@",
		   bounds.x, bounds.y,
		   bounds.width, bounds.height,
		   colorName(fillColor));
} // draw

@end // OblateSphereoid

//定义三角形
@interface Triangle : NSObject
{
	ShapeColor	fillColor;
	ShapeRect	bounds;
}

- (void) setFillColor: (ShapeColor) fillColor;

- (void) setBounds: (ShapeRect) bounds;

- (void) draw;

@end // Triangle


@implementation Triangle

- (void) setFillColor: (ShapeColor) c
{
	fillColor = c;
} // setFillColor


- (void) setBounds: (ShapeRect) b
{
	bounds = b;
} // setBounds


- (void) draw
{
	NSLog (@"drawing a triangle at (%d %d %d %d) in %@",
		   bounds.x, bounds.y,
		   bounds.width, bounds.height,
		   colorName(fillColor));
} // draw

@end // Triangle

//画形状
void drawShapes (id shapes[], int count)
{
    for (int i = 0; i < count; i++) {
        id shape = shapes[i];
        [shape draw];
    }
}//drawShapes

int main(int argc, const char * argv[])
{

    id shapes[4];
	
	ShapeRect rect0 = { 0, 0, 10, 30 };
	shapes[0] = [Circle new];
	[shapes[0] setBounds: rect0];
	[shapes[0] setFillColor: kRedColor];
	
	ShapeRect rect1 = { 30, 40, 50, 60 };
	shapes[1] = [Rectangle new];
	[shapes[1] setBounds: rect1];
	[shapes[1] setFillColor: kGreenColor];
	
	ShapeRect rect2 = { 15, 19, 37, 29 };
	shapes[2] = [OblateSphereoid new];
	[shapes[2] setBounds: rect2];
	[shapes[2] setFillColor: kBlueColor];
    
	ShapeRect rect3 = { 47, 32, 80, 50 };
	shapes[3] = [Triangle new];
	[shapes[3] setBounds: rect3];
	[shapes[3] setFillColor: kRedColor];
	
	drawShapes (shapes, 4);
	
	return (0);
}



六、小结

1、过程式编程——“函数第一,数据第二”

2、OOP——“数据第一,函数第二”

3、“开放/关闭原则”——软件实体应该对拓展开放、对修改关闭

4、objective-c中不存在private方法

5、objective-c运行时负责执行重要的任务,比如对象发送消息和传递参数等,以支持应用程序的运行

6、实例化对象——向相应的类发送new消息来创建对象。




相关文章
|
存储 Java C语言
objective-c基础教程——学习小结
objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织;XCode使用介绍) 简介: 1.       objective-c是C语言的一个扩展集,主要由APPLE公司维护,是MAC系统下的主要开发语言。
1127 0
|
JavaScript C++ iOS开发
Objective-C 入门笔记
简介 建立在C语言之上,可以混编C/C++代码,编写一个类需要二个文件: .h的头文件 .m的实现文件(如果是C/C++混编文件,文件后缀为.mm) 既然有头文件,所以很多人会拿它与C++进行类比,它最重要的三个特性是:Message、Category、Protocol,与C++类比,二者之...
930 0
|
API iOS开发 Swift
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记9 Objective-c Compatibility
我们都知道在Swift诞生之前进行IOS开发一直使用Objective-c这门语言。OC和Swift之间需要一个桥接。
849 0
|
C语言 C++ iOS开发
【《Objective-C基础教程 》笔记ch02】(一)Hello Object-C 项目
一、项目实现步骤。 1、若xcode尚未运行,先启动它。 2、选择Select File --> New --> New Project菜单选项。 3、选择左边OS X下得application,再选中右边的command line tool,点击next。
994 0
|
iOS开发
【《Objective-C基础教程 》笔记ch02】(二)Boolean类型及实例
一、布尔类型         布尔类型是一种对带符号的字符类型(signed char)的类型定义,使用8位的存储空间。         通过#define指令把YES定义为1,NO定义为0,都是8位的二进制数。
975 0
|
6天前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
111 2
|
6天前
|
缓存 开发工具 iOS开发
优化iOS中Objective-C代码调起支付流程的速度
优化iOS中Objective-C代码调起支付流程的速度
17 2