天天看点

黑马程序员——OC语言基础---封装的概念及原理

                                                                           ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

封装的概念及原理

面向对象的特性之一:封装(OC最小的封装体就是函数) 

1、封装

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。 

2、封装的好处: 

将变化隔离。(不管里面怎么变,使用者不需要知道) 

便于使用。(使用者只需按照一定的方法使用就可以了) 

提高重用性。(任何人都可以对已封装好的功能进行操作) 

提高安全性。(由于暴露给使用者的只是一些外在的操作环节,而不是里面本质的东西,所以就提高了对他的维护性,也就是安全性) 

3、封装的原则: 

将不需要对外提供的内容都隐藏起来。 

把属性都隐藏,提供公共方法对其访问。 

4、为什么要进行封装?

不封装的缺点: 当一个类把自己的属性暴露给外部的时候,那么该类就失去对属性的管理权

将数据隐藏起来,只能用此类的方法函数才可以访问或者设置数据,不可被外部任意存储是面向对象设计本质。降低了数据被无用的可能性!

在OC语言中,使用@interface和@implementation来处理类。

@interface就好像暴露在外面的时钟表面,像外界提供展示以及接口。

@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来。

5、封装的原理?

实例变量默认只能被当前类的对象方法访问。

#import <Foundation/Foundation.h>
@interface Gun : NSObject
{
    @public
    int _bulletCount;
}
-(void)shoot;
-(void)setBulletCount:(int)bulletCount;
@end
@implementation Gun
-(void)shoot{   
    if(_bulletCount>0){       
    _bulletCount--;       
    NSLog(@"\ntututu ... 剩余子弹:%d",_bulletCount);
    }else{      
        NSLog(@"没有子弹");    
    }
}
-(void)setBulletCount:(int)bulletCount{
    if (bulletCount>0) {        
        _bulletCount =  bulletCount;       
    }else{    
        _bulletCount = 0;
    }
}
@end
int main(int argc, const char * argv[]) {
    @autoreleasepool {      
        Gun *gun= [Gun new];
        gun->_bulletCount = -3;              
        [gun shoot];
        [gun shoot];
        [gun shoot];
        [gun shoot];
        [gun shoot];       
    }
    return 0;
}