A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Yip-Jun 中级黑马   /  2015-12-1 00:51  /  1017 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;

}



3 个回复

倒序浏览
       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);

    }

其实我觉得没必要那么麻烦,直接在上面方法类实现的是不是就没必要写这一步了啊
回复 使用道具 举报
  NSString *name = [stu name];
你在哪儿定义的这个类啊
回复 使用道具 举报
hei军 发表于 2015-12-1 02:30
NSString *name = [stu name];
你在哪儿定义的这个类啊

这是个变量吧  用来接受[stu name]的返回值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马