OC语言day03-01封装

pragma mark 封装

pragma mark 概念

/*
 封装:屏蔽内部实现的细节, 仅仅对外 提供公共的方法/接口]
 好处: 保证数据的安全性
 将变化 隔离
 规范: 一般情况下, 不会对外直接暴露成员变量,都会提供 一些公共的方法进行赋值
 成员变量都需要封装起来
 */
 

pragma mark 代码

#import 
#pragma mark 类
#import "Gun.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
#pragma mark 封装
    // 1.创建一把枪
    Gun *gun = [Gun new];
    // 2.设置枪的子弹数量
#warning 成员变量public 说明 赋值不受我们约束 解决办法:通过封装(通过方法去封装)
    // 引发这个问题的原因: 因为成员变量是 public的,所以给成员变量赋值的时候,赋值的值不受我们的约束
    // 如何解决这个问题? 让成员变量 受我们的约束
    
//    gun->_bullet = -100;
#warning 调用 封装的赋值方法
    [gun addBullet:100];
    // 3.射击
    [gun shoot];
    
    
    // 4.查看子弹的剩余数据(获取成员变量的值)
//    NSLog(@"bullet = %i",gun->_bullet);
#warning 调用 封装的返回成员变量的方法
    NSLog(@"bullet = %i",[gun getBullet]);
    return 0;
}



Gun.h // 枪类
#import 

@interface Gun : NSObject
{
//    @public
    int _bullet;    // 子弹
    // 虽然成员变量 不是public 之后 外界不能直接访问了, 但是还是可以在本类的对象方法中 直接访问
}
- (void)shoot;


// 提供一个方法用于设置成员变量的值
- (void)addBullet:(int)count;

// 提供一个方法用于返回成员变量的值
- (int)getBullet;

@end
Gun.m
#import "Gun.h"

@implementation Gun
- (void)shoot
{
    if (_bullet >0) {
        _bullet--;
        NSLog(@"打了一枪, 还剩下%i子弹",_bullet);
    }
    else
    {
        NSLog(@"没有子弹了");
    }
}

#pragma mark 赋值的封装
// 提供一个方法用于设置成员变量的值
// addBullet 就是对成员变量的封装
- (void)addBullet:(int)count
{
    
#warning 封装
    /*
     封装:屏蔽内部实现的细节, 仅仅对外 提供公共的方法/接口]
     好处: 保证数据的安全性
          将变化 隔离
     规范: 一般情况下, 不会对外直接暴露成员变量,都会提供 一些公共的方法进行赋值
           成员变量都需要封装起来
     */
    // 对传入的数据进行 过滤
    if (count < 0)
    {
        count = 0;
    }
    _bullet = count;
}

#pragma mark 封装 返回成员变量的值
// 提供一个方法用于返回成员变量的值
- (int)getBullet
{
    return _bullet;
}

@end

你可能感兴趣的:(OC语言day03-01封装)