1.什么是封装: 封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
2.封装的好处: 将变化隔离。(不管里面怎么变,使用者不需要知道) 便于使用。(使用者只需按照一定的方法使用就可以了) 提高重用性。(任何人都可以对已封装好的功能进行操作) 提高安全性。(由于暴露给使用者的只是一些外在的操作环节,而不是里面本质的东西,所以就提高了对他的维护性,也就是安全性)
3.封装的原则: 将不需要对外提供的内容都隐藏起来。 把属性都隐藏,提供公共方法对其访问。
4.setter方法的实现 set方法的书写规范: 1) set方法一定是一个对象方法 2) set方法一定不能有返回值 3) set方法必须以set开头 4) set之后跟的是 实例变量去掉下划线,并且首字母大写 5) set方法一定有参数,而且参数的类型和实例变量的类型一致 6) set方法的形参名 一般是 去掉下环线的实例变量名 7) 形参名不能和实例变量名同名 8) set方法实现中,一定要用形参给实例变量赋值
成员变量: int _age; 的setter方法 -(void)setAge:(int)age{
_age = age; }
//调用set方法 [person setAge:10];
get方法书写规范: 1) get方法一定是一个对象方法 2) get方法一定有返回值,返回值的类型和实例变量的类型要一致 3) get方法的方法名 是去掉下环线的实例变量名 4) get方法一定没有参数 5) get方法的实现中,一定是返回实例变量值
成员变量: int _age; 的get方法 -(int)age{ return _age; }
练习代码:
#import <Foundation/Foundation.h> typedef enum Sex{kSexMan,kSexWoman,kSexYao}iSex; @interface Student : NSObject { NSString *_name; int _age; iSex _sex; int _score; }
-(void)setName:(NSString *)name; -(void)setAge:(int)age; -(void)setSex:(int)sex; -(void)setScore:(int)score;
-(NSString *)name; -(int)age; -(NSString *)sex; -(int)score;
@end
#import "Student.h"
@implementation Student -(void)setName:(NSString *)name { _name = name; }
-(void)setAge:(int)age { _age = age; }
-(void)setSex:(int)sex { _sex = sex; }
-(void)setScore:(int)score { _score = score; }
-(NSString *)name { return _name; }
-(int)age { return _age; }
-(NSString *)sex { switch (_sex) { case kSexMan: return @"男"; break; case kSexWoman: return @"女"; break; case kSexYao: return @"男生"; break; } } -(int)score { return _score; }
@end
#import <Foundation/Foundation.h> #import "Student.h"
int main(int argc, const char * argv[]) { @autoreleasepool {
Student *stu = [Student new];
[stu setName:@"赵日天"];
[stu setAge:20];
[stu setSex:kSexWoman];
[stu setScore:90];
NSString *name = [stu name];
int age = [stu age];
NSString *sex = [stu sex];
int score = [stu score];
NSLog(@"\n姓名: %@ \n年龄: %d \n性别: %@ \n分数: %d",name,age,sex,score);
} return 0;
}
|