• Objective


    前面我们了解了一些封装的思想, 所谓的封装就是把一些成员变量保护起来, 不让别人去随意修改, 其实这个和我们日常生活中的包装很像, 比如超市里的真空包装食品, 经常真空包装的保护, 那么食物就不容易发霉过期, 那么在OC程序里面的封装也是同样的道理, 否则一直使用@public会让别人随意改动自己的数据, 从而导致程序崩溃, 无法正常的运作.


    那么封装有什么规范呢? 下面让我们来看看:

    需求: 创建一个学生类, 知道他的数学分和语文分, 定义一个方法需要知道他两科的总分, 以及平均分.

    属性:

    1. 数学分

    2. 语文分


    方法:

    1. 总分

    2. 平均分


    那么我们来看看例子:

    #import <Foundation/Foundation.h>
    
    @interface Student : NSObject
    {
        int _mathScore; //数学成绩
        int _languageScore; //语文成绩
        
        int _totalScore; //总分
        int _averageScore; //平均分
    }
    
    - (void)setMathScore:(int)mathScore;  //数学分的set方法声明
    - (int)mathScore;  //数学分的get方法声明
    
    - (void)setLanguageScore:(int)languageScore;  //语文分的set方法声明
    - (int)languageScore;  //语文分的get方法声明
    
    - (int)totalScore; //总分方法声明
    - (int)averageScore;  //平均分方法声明
    @end
    
    @implementation Student
    
    - (void)setMathScore:(int)mathScore  //数学分set方法实现
    {
        _mathScore = mathScore;
        _totalScore = _mathScore + _languageScore;
        _averageScore = _totalScore / 2;
    }
    - (int)mathScore  <span style="font-family: Arial, Helvetica, sans-serif;">//数学分get方法实现</span>
    {
        return _mathScore;
    }
    
    - (void)setLanguageScore:(int)languageScore <span style="font-family: Arial, Helvetica, sans-serif;">//语文分set方法实现</span>
    {
        _languageScore = languageScore;
        _totalScore = _mathScore + _languageScore;
        _averageScore = _totalScore / 2;
    }
    - (int)languageScore  <span style="font-family: Arial, Helvetica, sans-serif;">//语文分get方法实现</span>
    {
        return _languageScore;
    }
    
    - (int)totalScore  //总分方法的实现
    {
        return _totalScore;
    }
    - (int)averageScore  //平均分方法的实现
    {
        return _averageScore;
    }
    
    @end
    
    int main()
    {
        Student *stu = [Student new];
        [stu setMathScore: 80];
        [stu setLanguageScore:60];
        
        int a = [stu totalScore];
        NSLog(@"总分是%d.", a);
        
        int b = [stu averageScore];
        NSLog(@"平均分%d", b);
        
        return 0;
    }


    看完例子之后, 我们讲解一下注意事项:

    1. 成员变量声明的时候为了规范, 必须以" _ "符号开头, 加上驼峰标识.

    2. 如果不是有必要的需求, 不要用@public, 改而使用set方法和get方法.

    3. 方法名的名字和参数的名字越详细越好, 最好长的像句子一样, 因为苹果公司推荐这么使用.



    封装的好处:

    1. 可以过滤一些不合理的数值

    2. 屏蔽掉内部的赋值方式

    3. 让别人可以不必在意内部的细节


    好了, 这次我们就到这里, 下次我们继续~~

  • 相关阅读:
    ipfs cluster 模式部署使用(docker-compose 环境运行)
    lerna import && add 使用&&常见问题解决
    memsql kafka集成
    memsql 6.7集群安装
    过程、性能基线、性能模型与目标之间的关系
    oracle extract函数
    ORACLE的VARCHAR2是字节还是字符
    infor系统日常问题解决笔记
    Oracle获取当前年、月、日的方法
    Windows下Redis中RedisQFork位置调整
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282855.html
Copyright © 2020-2023  润新知