zoukankan      html  css  js  c++  java
  • OC面向对象封装

    OC面向对象封装

     

    一、面向对象和封装

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

      在OC语言中,使用@interface和@implementation来处理类.

      

      @interface就好像暴露在外面的时钟表面,向外界提供展示以及接口,@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来.

    二、Set方法

      在研发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public,@protected等关键字修饰,而是使用Set方法来为对象提供成员变量值,在Set方法的内部也可以对一些不合理的赋值进行筛选过滤.

      Set方法的作用:为外界提供一个设置成员变量值的方法

      命名规范:

      1>方法名必须以set开头

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

      3>返回值一定是void

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

      5>形参名不能和成员变量名一样(苹果官方推荐成员变量名前加_以示区分)

    Set方法的好处:

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

      2>对设置的数据进行过滤

    Set方法使用示例:

      set方法的声明:

    #import<Foundation/Foundation>
    @interface Person : NSObject{
    
        //这里不再使用@public关键字
        NSInteger _age;
    }
    -(void)setAge:(NSInteger) age;
    -(void) print;
    @end

      set方法的实现

    #import "Person.h"
    @implementation Person
    //set方法的实现
    -(void) setAge:(NSInteger) age{
        _age=age;
    }
    -(void)print{
    NSLog(@"age=%ld",_age);
    }
    @end 

      测试程序

    #import <Foundation/Foundation>
    #import "Person.h"
    int main(){
        Person *person=[[Person alloc] init];
        //使用set方法设置person类对象age变量的值为10
        [person setAge:10];
    return 0;
    }

    三、Get方法

      Get方法的作用:为调用者返回对象内部的成员变量

      命名规范:

        1>一定要有返回值,返回值的类型和成员变量的类型一致

        2>方法名和成员变量名一样

        3>不需要接收任何参数

      Get方法的使用示例:

        get方法的声明

    #import<Foundation/Foundation>
    @interface Person : NSObject{
    
        NSString * _name;
    }
    -(void)setName:(NSString) name;
    -(NSString *) name;
    @end

      get方法的实现

    #import "Person.h"
    @implementation Person
    //set方法的实现
    -(void) setAge:(NSInteger) age{
        _name=name;
    }
    -(void) name{
        return _name;
    }
    @end

      测试程序

    #import <Foundation/Foundation>
    #import "Person"
    int main(){
        Person *person=[[Person alloc] init];
        //使用set方法设置person类对象name变量的值
        [person setName:@"张三"];
        NSLog(@"%@",[person name]);
    return 0;
    }

      注意:

        1>在实际开发中,不一定set和get方法都会提供,如果内部的成员变量比如学生的学号这样的数据值允许外界读取,但是不允许修改的情况,则通常只提供get方法而不提供set方法

        2>成员变量名的命名以下划线开头,get方法名不需要带下划线,使用下划线开头有两个好处:一是与get方法名区分开来;二是可以和一些其他的局部变量区分开来,下划线开头的变量通常都是类的成员变量.

    四、self关键字

      1>self是一个指针,谁调用了当前方法,self就指向谁

      2>出现在对象方法中,就代表当前对象,出现挂在类方法中,就代表当前类  

      3>self的用途:

        可以利用self.或self->成员变量名来访问当前对象内部的成员变量(仅在对象方法中)

        [self 方法名];可以调用其他的对象方法或者是类方法

     

     

      

  • 相关阅读:
    51 Nod 1068 Bash游戏v3
    51 Nod Bash 游戏v2
    51 Nod 1073 约瑟夫环
    UVA 12063 Zeros and ones 一道需要好好体会的好题
    51 Nod 1161 Partial sums
    2018中国大学生程序设计竞赛
    UVA 11971 Polygon
    UVA 10900 So do you want to be a 2^n-aire?
    UVA 11346 Possibility
    python with as 的用法
  • 原文地址:https://www.cnblogs.com/my-garden/p/5428643.html
Copyright © 2011-2022 走看看