封装的目的是为了实现程序代码设计上的高内聚,低耦合性。类似我们生活中,看电视使用的“接口”-- 遥控器, 可以对电视机进行操作。至于电视机的内部构造原理,我们是不需要知道的。电视机的生产商也不希望我们知道。 哪个人切换频道时要到电视机上把两根线“短路”一下呢,这个技巧掌握不好,可能人和电视机一起就挂掉了!!!而我们又确实要对电视机进行相关操作来修改电视机运行状态和数据。所以电视机的生产厂商给我提供了遥控器这个设备 ------ 把用户所需要的操作功能都“封装”在里边,这样用户就可方便、快捷、安全的使用电视机了。
程序设计中的封装概念和上边举例是一样的。程序设计就是用数据来表示不同的意义,最后由计算机计算得到正确结果,以供人们使用。 例如各大型工厂都会有一个员工工资查询、发放和统计的系统, 如果会计不小心把某个人的工资敲成了负数,而这套软件系统又没有相关的数据核查,不知道下个月发工资时,哪个员工该笑还是该哭呢
所以OC语言中,可以设置只能通过set方法和get方法访问成员变量,而不允许外部直接对其进行访问,通过set方法可以严格核查外部传入参数是否合法,同样set方法和get方法都对成员变量实现了隐藏即封装。 增强和程序的鲁棒性。
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
int age;
}
/* set方法
作用:
提供外界访问成员变量的方法
命名规范
1 方法名必须以set开头
2 set后边跟上成员变量的名称,而且成员变量的首字母必须大写
3 形参的名称不能和成员变量的名称一样
4 set方法返回值必须为void
- (void)setAge: (int)newAge;
*/
/*
get方法
作用:返回内部的成员变量
命名规范
1 返回值类型和成员变量类型一致
2 方法名和成员变量名相同
3 不需要接收任何参数
*/
@end
@implementation Student
- (void)setAge: (int)newAge
{
// 对外界传入的参数进行过滤ß
if(newAge >= 1 && newAge <= 200)
{
age = newAge;
return;
}
age = 1;
}
- (int)age
{
return age;
}
@end
int main()
{
Student *lili = [Student new];
[lili setAge:25];
NSLog(@"lili的年龄是%i", [lili age]);
return 0;
}
set 方法 get 方法 小练习
#import <Foundation/Foundation.h>
// set方法 和 get方法练习
// 声明一个Score类
@interface Score : NSObject
{
int _cScore; //c语言分数
int _ocScore; // oc语言分数
int _totalScore; // 总分数
int _averageScore; // 平均分数
}
// _cScore 的set 方法 (只写 因为没有设置_cScore 的get 方法)
- (void)setCScore: (int)cScore;
// _ocScore 的set 方法 (只写 因为没有设置_ocScore 的get 方法)
- (void)setOcScore: (int)ocScore;
// _totalScore的get 方法 (只读 因为没有设置_totalScore的set 方法)
- (int)totalScore;
// _averageScore的get 方法 (只读)
- (int)averageScore;
@end
@implementation Score
- (void)setCScore: (int)cScore
{
_cScore = cScore;
// 在set方法里计算部分和平均分,达到“监听”效果
// 计算总分
_totalScore = _cScore + _ocScore;
//计算平均分
_averageScore = _totalScore / 2;
}
- (void)setOcScore: (int)ocScore
{
_ocScore = ocScore;
// 在set方法里计算部分和平均分,达到“监听”效果
// 计算总分
_totalScore = _cScore + _ocScore;
//计算平均分
_averageScore = _totalScore / 2;
}
- (int)totalScore
{
return _totalScore;
}
- (int)averageScore
{
return _averageScore;
}
@end
int main()
{
Score * chengji = [Score new];
[chengji setCScore: 95];
[chengji setOcScore: 97];
NSLog(@"totoalScore = %i", [chengji totalScore]);
NSLog(@"averageScore = %i", [chengji averageScore]);
return 0;
}