黑马基程序员学习笔记_OC之三大特性之封装

本文深入讲解了Objective-C中的封装特性,包括如何通过Set和get方法来保护类的成员变量,确保数据的有效性和安全性。通过具体代码示例展示了如何实现成员变量的访问控制,并介绍了成员变量命名规范的重要性。

黑马程序员学习笔记_OC之三大特性之封装

面向对象的三大特性(精华):(成员变量、方法)封装、继承、多态。

1、 为什么需要封装?

根据以前学的内容,假如我声明一个student类,里面有public成员age.。我在主函数中写代码 student *s = [studentnew]。这样的话我可以通过s→age修改age的值,但是会出现s→age=-10这种赋值,但是我们都知道年龄不可能为-10岁,我们没有办法阻值这种不合理的赋值。

我们改变访问成员变量的方法,使得该方法能够滤掉不合理的赋值。

2、 Set方法:不能直接修改成员变量,去掉@public

            在方法中改变成员变量,提供一个方法设age属性值

            命名规范:方法名必须以set开头

                       Set后面跟上成员变量名,首字母必须大写

                       返回值一定是void

                       形参名称不能跟成员变量一致

3、 get方法:作用是返回对象内部成员变量,但不直接使用,而是通过方法

            命名规范:肯定有返回值,返回类型与成员变量一致

                      方法名跟成员变量名一致

                      不需要接受任何参数

4、 实例

#import<Foundation/Foundation.h>

@interface Student :NSObject

{

int age;

}

      - (void) study;    

      - (void)setAge : (int) newAge;   //set方法

      - (int)age;                    //get方法

@end

@implementationStudent

      - (void)study

      {

             NSLog(@“%d岁的学生在学习age);

}

      - (void)setAge : (int) newAge

      {

             if (newAge<=0)                  //实现过滤数据赋值的功能

{

      newAge= 1;

}

age = newAge ;

}

- (int)age                      

{

      return age;

}

@end

int main()

{

      Student *stu= [Student new ];

   [stu setAge :10];                //set方法向age赋值

      [stu study];

          NSLog(@“学生的年龄是%d[stu age]);   //get方法获取age的值

      return 0;

}

5、 封装的好处;把细节、内部成员隐藏在里面,保证了数据的安全性。有时候不会提供set方法和get方法,例如成员变量中如果有只读成员变量,只需提供get方法,不提供set方法即可。

6、 成员变量的命名规范:一定要以下划线_开头。好处为:

1>    观察4中实例里发现get的方法名和成员变量名一致,容易混淆。加入下划线可以区分这两个。

2>    可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量,方便交流。

实例:

#import<Foundation/Foundation.h>

typedef enum{

      SexWoman;

      SexMan;

} Sex;

@interface Student:NSObject

{

      Sex _sex;

}

- (void)setSex:(Sex)sex;

- (void)sex;

      @end

      @implementation Student

- (void)setSex:(Sex)sex

{

      _sex=sex;

}

- (void)sex

{

      return_sex;

}

  int main()

{

      Student *stu = [Student new];

      [stu setSex:SexWan];

[stu sex];

return 0;

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值