zoukankan      html  css  js  c++  java
  • 【《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、用keyword@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消息来创建对象。




  • 相关阅读:
    滴水穿石mysql添加授权用户命令
    滴水穿石修改IIS服务器的MIME类型
    滴水穿石Java静态代理
    滴水穿石MyEclipse中集成开发插件Spket
    滴水穿石Java连接Access数据库及其操作
    好站收藏
    apache缓存设置
    Linux Apache开启gzip压缩提高网页下载速度
    web制作、开发人员需知的Web缓存知识
    cookiec和session学习笔记
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/3808128.html
Copyright © 2011-2022 走看看