Objective - C基础: 第二天 - 2.封装练习以及注意事项
前面我们了解了一些封装的思想, 所谓的封装就是把一些成员变量保护起来, 不让别人去随意修改, 其实这个和我们日常生活中的包装很像, 比如超市里的真空包装食品, 经常真空包装的保护, 那么食物就不容易发霉过期, 那么在OC程序里面的封装也是同样的道理, 否则一直使用@public会让别人随意改动自己的数据, 从而导致程序崩溃, 无法正常的运作.
那么封装有什么规范呢? 下面让我们来看看:
需求: 创建一个学生类, 知道他的数学分和语文分, 定义一个方法需要知道他两科的总分, 以及平均分.
属性:
1. 数学分
2. 语文分
方法:
1. 总分
2. 平均分
那么我们来看看例子:
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
int _mathScore; //数学成绩
int _languageScore; //语文成绩
int _totalScore; //总分
int _averageScore; //平均分
}
- (void)setMathScore:(int)mathScore; //数学分的set方法声明
- (int)mathScore; //数学分的get方法声明
- (void)setLanguageScore:(int)languageScore; //语文分的set方法声明
- (int)languageScore; //语文分的get方法声明
- (int)totalScore; //总分方法声明
- (int)averageScore; //平均分方法声明
@end
@implementation Student
- (void)setMathScore:(int)mathScore //数学分set方法实现
{
_mathScore = mathScore;
_totalScore = _mathScore + _languageScore;
_averageScore = _totalScore / 2;
}
- (int)mathScore <span style="font-family: Arial, Helvetica, sans-serif;">//数学分get方法实现</span>
{
return _mathScore;
}
- (void)setLanguageScore:(int)languageScore <span style="font-family: Arial, Helvetica, sans-serif;">//语文分set方法实现</span>
{
_languageScore = languageScore;
_totalScore = _mathScore + _languageScore;
_averageScore = _totalScore / 2;
}
- (int)languageScore <span style="font-family: Arial, Helvetica, sans-serif;">//语文分get方法实现</span>
{
return _languageScore;
}
- (int)totalScore //总分方法的实现
{
return _totalScore;
}
- (int)averageScore //平均分方法的实现
{
return _averageScore;
}
@end
int main()
{
Student *stu = [Student new];
[stu setMathScore: 80];
[stu setLanguageScore:60];
int a = [stu totalScore];
NSLog(@"总分是%d.", a);
int b = [stu averageScore];
NSLog(@"平均分%d", b);
return 0;
}看完例子之后, 我们讲解一下注意事项:
1. 成员变量声明的时候为了规范, 必须以" _ "符号开头, 加上驼峰标识.
2. 如果不是有必要的需求, 不要用@public, 改而使用set方法和get方法.
3. 方法名的名字和参数的名字越详细越好, 最好长的像句子一样, 因为苹果公司推荐这么使用.
封装的好处:
1. 可以过滤一些不合理的数值
2. 屏蔽掉内部的赋值方式
3. 让别人可以不必在意内部的细节
好了, 这次我们就到这里, 下次我们继续~~

浙公网安备 33010602011771号