OC-3-三大特性:封装

来源:互联网 发布:mcafee livesafe知乎 编辑:程序博客网 时间:2024/06/06 02:16

---------- CornerFly真诚期待与您交流! ----------

 
面向对象的三大特性包括封装、继承、多态。

一、封装

在编程的过程中,有时候我们需要在给成员变量赋值的时候,对赋的值进行过滤掉不合理的值,因为在方法中可以调用成员变量,通过提供一些方法给成员变量设置值或者获取

成员变量的值,把内部的成员变量和结构保护起来,这就是面向对象中的封装。

二、set方法

@public的成员可以被随意赋值,成员变量尽量不要用@public,应该使用set方法和get方法来管理成员的访问(类似机场的安检、水龙头过滤,过滤掉不合理的东西),比如

僵尸的生命值不能为负数。

1、作用

提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应地过滤。

2、命名规范

*方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写。

*形参名称不要跟成员变量同名。

三、get方法

1、作用:返回对象内部的成员变量。

2、命名规范

get方法的名称一般就跟成员变量同名。

3、成员变量的命名规范

1>成员变量都以下划线 _ 开头

2>可以跟get方法的名称区分开

3>可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量

四、封装的好处

1>过滤不合理的值

2>屏蔽内部的赋值过程

3>让外界不必关注内部的细节

 

五、代码示例

#import <Foundation/Foundation.h>@interface Student : NSObject{// 成员变量尽量不要用@public// @publicint age;// 只读(readonly)只允许外界访问我的no,不允许修改我的noint no; // 只需要提供get方法}- (void)setAge:(int)age;- (int)age;- (void)study;@end@implemention Student// set方法的实现- (void)setAge:(int)newAge{// 对传进来的参数进行过滤if (newAge <= 0){newAge = 1;}age = newAge; }// get方法的实现- (int)age{return age;}- (void)study{age = 10;NSLog(@"%d岁的学生在学习", age);}@endint main(){Student *stu = [Student new];[stu setAge:10];NSLog(@"学生的年龄是%d岁", [stu age]);//stu->age = 20; 不能用了因为注释掉了@public//[stu study];return 0;}


六、练习

设计一个成绩类

*C语言成绩(可读可写)

*OC成绩(可读可写)

*总分(只读)

*平均分(只读)

#import <Foundation/Foundation.h>@interface Score : NSObject{int _cScore; // C语言成绩int _ocScore; // OC成绩int _totalScore; // 总分int _averageScore; //平均分 }- (void)setCScore:(int)cScore;- (int)cScore;- (void)setOcScore:(int)ocScore;- (int)ocScore;- (int)totalScore;- (int)averageScore;@end@implementation Score- (void)setCScore:(int)cScore{_cScore = cScore;// 计算总分_totalScore = _cScore + _ocScore;// 平均分_averageScore = _totalScore/2;}// 监听成员变量的改变- (int)cScore{return _cScore;}- (void)setOcScore:(int)ocScore{_ocScore = ocScore;// 计算总分_totalScore = _cScore + _ocScore;// 平均分_averageScore = _totalScore/2;}- (int)ocScore{return _ocScore; }- (int)totalScore{return _totalScore;}- (int)averageScore{return _averageScore;}@endint main(){Score *s = [Score new];[s setCScore:90];[s setOcScore:100];int a = [s totalScore];NSLog(@"总分是%d", a);return 0;}
0 0
原创粉丝点击