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

一、声明类接口步骤:

1、声明一个类接口,使用@interfacekeyword加上类名称。

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、用[email protected]加上类名称

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消息来创建对象。

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

时间: 2024-10-09 21:12:47

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

Python基础教程笔记十四:字典(Dictionary)

Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示: d = {key1 : value1, key2 : value2 } 键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一. >>>dict = {'a': 1, 'b': 2, 'b': '3'}; >>> dict

imooc’s html 基础教程笔记

imooc’s html 基础教程笔记 imooc’s html 基础教程 第一章 Html介绍 1.1 Html和CSS的关系 1.2认识html标签 1.3 标签的语法 1.4 认识html文件基本结构 1.5 认识head标签 1.6了解HTML的代码注释 2.1语义化,让你的网页更好的被搜索引擎理解 2.2 标签,网页上显示的内容放在这里 2.3 开始学习标签,添加段落 2.4 了解标签,为你的网页添加标题 2.5 加入强调语气,使用strong和em标签 2.6 使用span标签为文字

jQuery官方基础教程笔记(转载)

本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. 对于网页开发者来说,学会jQuery是必要的.因为它让你了解业界最通用的技术,为将来学习更高级的库打下基础,并且确实可以很轻松地做出许多复杂的效果. 虽然jQuery上手简单,比其他

oc中的oop基础及类的基本介绍

面向对象的(OOP)的基础知识 类(class):表示一组对象数据的结构体,对象通类来得到自身.类名首字母大写. 对象(objcet):是一种包含值和指向其类的隐藏指针的结构体.运行中的程序中通常会有n个对象,首字母不用大写. 实例(instance):是对对象的另一种称呼. 消息(message):是对象执行的操作,用于通知对象去做什么.对象接收到消息后,将查询相应的类,来执行正确的代码运行程序. 方法(method):j是为响应消息而运行的代码,这个以后在oop中会很常用.根据类的对象或消息

阮一峰:jQuery官方基础教程笔记

jQuery是目前使用最广泛的javascript函数库. 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. 对于网页开发者来说,学会jQuery是必要的.因为它让你了解业界最通用的技术,为将来学习更高级的库打下基础,并且确实可以很轻松地做出许多复杂的效果. 虽然jQuery上手简单,比其他库容易学会,但是要全面掌握,却不轻松.因为它涉及到网页开发的方方面面,提供的各种方法和内部变化有上千种之多.初学者常常感到,入门很方便

Python基础学习笔记(四)语句

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-chinese-encoding.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 ? 条件语句 条件语句的使用实例如下: #!/usr/bin/python # -*- coding: UTF-8 -*- # 例2:elif用法 num =

Unity3D基础教程】(四):通过制作Flappy Bird了解Native 2D...

[狗刨学习网] 引子 在第一篇文章[Unity3D基础教程]给初学者看的Unity教程(一):GameObject,Compoent,Time,Input,Physics我已经讲过了一些关于刚体和碰撞的关系,这次我们就通过Flappy Bird这个事例来讲解一下刚体和碰撞体在游戏中的具体应用.相关代码可以参考Flappy Bird的源码. 认识RigidBody 当RigidBody2D的质量属性被设置为0时,刚体的质量变为无限大,此时刚体相当于静态刚体,永远一动不动.但是在Unity中你是无法

python基础教程笔记——画幅好画(详解)

今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个txt文件,然后打开处理一下得到数据,因为我从这个url路径没有获取到数据,所以直接写了一点数据在程序里. urlopen比较简单,以后写爬虫也会经常用到,所以这里就不讲了,只单独讲讲reportlab模块. #encoding:utf8 from reportlab.graphics.shapes

Java基础复习笔记系列 四

Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时,不能指定其长度.不同于C 数组的小标可以是整型常量或整型表达式. .length方法是显示数组的长度:数组.length;String.length();一个是属性,一个是方法.注意区分. 2.数组的内存分析? Array a[]; a = new Integer(15); /*这个a在栈中,在堆