Objective-C基础学习笔记(三)-面向对象的三大特性之封装

面向对象的三大特性:封装(成员变量)、继承、多态;

一、 封装

1. 封装的理解:

    在开发过程中,考虑到安全性要求,我们通常不让外界直接修改我们类的成员变量,而让外界使用我们提供的方法来修改,这样类 的成员变量就           封装起来了。

2. 封装的目的就是:保证数据的安全行,保证业务逻辑正常 运行。

二、set 方法和get 方法

@public的成员可以被随意赋值,为了封装成员变量OC中使用set方法和get方法来管理成员的访问。

1. set方法

   1) 作用:提供一个方法给外界设置成员变量属性值,可在方法里面对一些不合理的赋值进行筛选和过滤。

   2) 命名规范

   1> 方法命名必须以set开头

   2> set后面跟上成员变量的名称。成员变量的首字母必须大写。

   3> 返回值一定是void

   4> 一定要接受一个参数,而且参数的类型一定要和成员变量的类型一致

   5>行参名称不能跟成员变量名一样,苹果官方规定成员变量的命名以 _开头

  3) set方法好处:

      (1) 不让数据暴露在外,保证了数据的安全性

     ( 2)对设置的数据进行过滤

2. get方法

    1) get方法的作用:为调用者返回对象内部的成员变量
    2) 命名规范:
     (1)一定有返回值,返回值的类型和成员变量的类型一致
     (2)方法名和成员变量名一样
     (3)不需要接收任何参数

3.成员变量的命名规范
       ➢ 成员变量都以下划线 _ 开头
       ➢ 可以跟get方法的名称区分开
       ➢ 可以跟其他局部变量区分开,一看到下划线开头的变量,肯定是成员变量

4. 不一定set和get方法都会提供,如果内部的成员变量只允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set 方法。

5. set方法和get方法使用示例:

#import <Foundation/Foundation.h>

@interface Student : NSObject
{
    //@public
    //成员变量保证安全性不要用public
    int _age;  // 年龄
    int _num; // 学号
}

/* set方法声明 */
- (void)setAge:(int)age;

/* get方法声明 */
- (int)age;
@end

@implementation Student

/* set 方法实现 */
- (void)setAge:(int)age
{
    // 对参数进行过滤
    if (age <= 0)
    {
        age = 1;
    }
    _age = age;

}
/* get 方法实现 */
- (int)age
{
    // 返回成员变量的值
    return _age;
}
@end

int main()
{
    Student *stu = [Student new];
    [stu setAge:-12];
    NSLog(@"学生的年龄是%d岁",[stu age]);
    return 0;
}
运行结果:

2015-03-16 22:44:39.247 a.out[1798:164370] 学生的年龄是1岁

三、方法与函数的区别

  1) OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在

  2) C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有

  3) C函数不能访问OC对象的成员

四、类方法与对象方法

  1.  方法名注意

     >  冒号也是方法名的一部分

     >  同一个类中不允许两个对象方法同名

  2.  方法的调用

     OC中执行一些行为就加[]具体如下:

[stu setAge:-12]; //调用 stu 对象的setAage方法并传入了参数-12 ,实际意义是向stu 这个对象发送了一个消息


3. OC中的两种方法:类方法和对象方法

什么是类方法:直接可以用类名来执行的方法(类本身会在内存中占据存储空间,里面有类\对象方法的列表

什么是对象方法:直接可以用对象来执行的方法(

1)对象方法
以减号-开头
只能由对象调用,没有对象,这个方法根本不可能被执行
对象方法能访问实例变量(成员变量)

2)类方法
以加号+开头
只能用类名调用,对象不能调用,不用创建对象
类方法中不能访问实例变量(成员变量)
使用场合:
当方法内部不需要使用到成员变量时,就可以改为类方法,一般

    没有成员的变量的类(工具类:没有任何成员变量,里面的 方法都是类方法,如计算器)

3) 类方法和对象方法可以同名,对象方法中能够调用类方法,类方法中也可以调用对象方法

4)  类方法使用的好处:

      不依赖对象,执行效率高,能用类方法就尽量用类方法

5)类方法使用陷阱--小心死循环

   

+(void)test
{
     [person test];
}

4. 类方法与对象方法示例

#import <Foundation/Foundation.h>

@interface Person : NSObject

//类方法都是以+开头
+ (void)printClassName;
//对象方法都是以-开头
- (void)test;
@end

@implementation Person

/* 类方法实现 */
+ (void)printClassName
{
    NSLog(@"Person");
}
/* 对象方法实现 */
- (void)test
{
    NSLog(@"This is test function");
}
@end

int main()
{
    //运行时类加载到内存,里面有方法列表,直接去 类列表地址中找加号开头的方法
    //不用创建对象
    [Person printClassName];

    Person *p = [Person new];
    // 对象方法调用
    [p test];

    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值