------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;
}