面向对象编程有三大特性:
封装
继承
多态
OC 作为面向对象的语言,也具有上述三大特性。本博文主要探讨其第一个特性—–封装。从三个方面阐述其特性:
什么是封装?
如何进行封装?
封装的优缺点?
什么是封装?
OC 中指对成员变量的封装。
如何进行封装?
在OC 中,可以使用get and set 方法来管理成员的访问,对对象进行封装。
set 方法: 提供一个方法给外界设置成员变量值(相当于对一个对象的某些属性进行读写操作)
get 方法:返回对象内部的成员变量(对对象属性的只读操作)
Take an example:写一个年龄判断的程序,年龄的有效值:1-100,正常输出其值。过滤其他值,返回1,并输出其真实年龄。
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
int _age ;
int _orignalAge;
}
/*set 方法*/
- (void)setAge:(int)newAge;
- (void)orignalAge ;
/*get 方法*/
- (int)age ;
@end
@implementation Student
/*set 方法的实现*/
- (void)setAge:(int)newAge
{
_orignalAge = newAge;
if (newAge <=0 || newAge >= 100)
{
newAge = 1 ;
}
_age = newAge ;
}
- (void)orignalAge
{
NSLog(@"The orignal age of Input is %d",_orignalAge);
}
//get方法的实现
- (int)age
{
return _age ;
}
@end
int main()
{
Student *stu = [Student new];
[stu setAge:-10];
NSLog(@"The age of student is %d",[stu age]);
[stu orignalAge];
return 0 ;
}
set 命名规范:
- 方法名必须以set开头
- set后面紧跟成员变量名,采用驼峰书写规则
- 返回值为void
- 接受传递参数,至少有一个。并且参数值属性必须和成员变量参数属性一支
- 形参的名称不能和成员变量名重名
get的命名规范:
- 须有返回值,并且返回值类型和成员变量名一致。如上例中的 - (int)age .
- 方法名和成员变量名一致
- 不需要接收参数
成员变量的命名规则:
- 以下划线’_’开头
- 和其他局部变量区分开来,用下划线来作为成员变量的标示符
封装的好处?
- 过滤不合理的值
- 屏蔽内部的赋值过程
- 让外界不必关注内部的细节