1.封装的注意点

   1:  // 成员变量尽量不要用@public
   2:      // @public
   3:      int age;

   1:    //@public
   2:      // 只读(readonly):只允许外界访问我的no,不允许外界修改我的no
   3:      int no; // 只需要提供get方法

2.get、set方法

   1:  set方法
   2:   1.作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤
   3:   2.命名规范:
   4:   1> 方法名必须以set开头
   5:   2> set后面跟上成员变量的名称,成员变量的首字母必须大写
   6:   3> 返回值一定是void
   7:   4> 一定要接收一个参数,而且参数类型跟成员变量类型一致
   8:   5> 形参的名称不能跟成员变量名一样

   1:  get方法
   2:   1.作用:返回对象内部的成员变量
   3:   2.命名规范:
   4:   1> 肯定有返回值,返回值类型肯定与成员变量类型一致
   5:   2> 方法名跟成员变量名一样
   6:   3> 不需要接收任何参数

   1:   
   2:  // set方法的实现
   3:  - (void)setAge:(int)newAge
   4:  {
   5:      // 对传进来的参数进行过滤
   6:      if (newAge <= 0)
   7:      {
   8:          newAge = 1;
   9:      }
  10:      
  11:      age = newAge;
  12:  }
  13:   
  14:  - (int)age
  15:  {
  16:      return age;
  17:  }

3.成员变量的命名规范:

一定要以下划线 _ 开头

作用:

1.让成员变量和get方法的名称区分开

2.可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量

例子

   1:  // sex的set和get方法
   2:  - (void)setSex:(Sex)sex;
   3:  - (Sex)sex;
   4:   
   5:  // no的set和get方法
   6:  - (void)setNo:(int)no;

4.封装的实际例子

   1:  /*
   2:   4.设计一个成绩类
   3:   * C语言成绩(可读可写)
   4:   * OC成绩(可读可写)
   5:   * 总分(只读)
   6:   * 平均分(只读)
   7:  */
   8:  #import <Foundation/Foundation.h>
   9:   
  10:  @interface Score : NSObject
  11:  {
  12:      int _cScore; // C语言成绩
  13:      int _ocScore; // OC成绩
  14:      
  15:      int _totalScore;// 总分
  16:      int _averageScoe; // 平均分
  17:  }
  18:   
  19:  - (void)setCScore:(int)cScore;
  20:  - (int)cScore;
  21:   
  22:  - (void)setOcScore:(int)ocScore;
  23:  - (int)ocScore;
  24:   
  25:  - (int)totalScore;
  26:  - (int)averageScore;
  27:   
  28:  @end
  29:   
  30:  @implementation Score
  31:  - (void)setCScore:(int)cScore
  32:  {
  33:      _cScore = cScore;
  34:      
  35:      // 计算总分
  36:      _totalScore = _cScore + _ocScore;
  37:      _averageScoe = _totalScore/2;
  38:  }
  39:  - (int)cScore
  40:  {
  41:      return _cScore;
  42:  }
  43:   
  44:  - (void)setOcScore:(int)ocScore
  45:  {
  46:      _ocScore = ocScore;
  47:      
  48:      // 计算总分
  49:      _totalScore = _cScore + _ocScore;
  50:      _averageScoe = _totalScore/2;
  51:  }
  52:  // 监听成员变量的改变
  53:   
  54:  - (int)ocScore
  55:  {
  56:      return _ocScore;
  57:  }
  58:   
  59:  - (int)totalScore
  60:  {
  61:      return _totalScore;
  62:  }
  63:  - (int)averageScore
  64:  {
  65:      return _averageScoe;
  66:  }
  67:  @end
  68:   
  69:   
  70:  int main()
  71:  {
  72:      Score *s = [Score new];
  73:      
  74:      [s setCScore:90];
  75:      [s setOcScore:100];
  76:      
  77:      [s setCScore:80];
  78:      
  79:      
  80:      int a = [s totalScore];
  81:      
  82:      NSLog(@"总分:%d", a);
  83:      
  84:      return 0;
  85:  }

OC语言基础之代码的封装的更多相关文章

  1. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  2. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  3. OC语言基础之利用property优化封装

    1.property功能用法 1: // @property:可以自动生成某个成员变量的setter和getter声明 2: @property int age;//可以直接免去变量的声明 3: // ...

  4. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  5. OC语言基础之NSArray

    0.数组的分类 NSArray :不可变数组 NSMutableArray : 可变数组 1: // @[] 只创建不可变数组NSArray 2: /* 错误写法 3: NSMutableArray ...

  6. OC语言基础之NSString

    1.字符串的创建 1: NSString *s1 = @"jack"; 2: 3: //NSString *s2 = [[NSString alloc] initWithStrin ...

  7. OC语言基础之函数与方法

    方法 1.对象方法都是以减号 - 2.对象方法的声明必须写在@interface和@end之间    对象方法的实现必须写在@implementation和@end之间 3.对象方法只能由对象来调用 ...

  8. OC语言基础之NSDictionary

    1.NSDictionary字典的创建 1: // key value 2: // key -==> value 3: NSDictionary *dict = [NSDictionary di ...

  9. OC语言基础之类的本质

    一.类的本质 1: // 类本身也是一个对象,是个Class类型的对象,简称类对象 2: 3: /* 4: 利用Class 创建 Person类对象 5: 6: 利用 Person类对象 创建 Per ...

随机推荐

  1. U-Net卷积神经网络

    由于项目需要,用U-NET跑一个程序来对医学影像进行分割(segmentation),因此跑去看了下这篇论文(paper),下面会介绍一下U-Net的框架及要点,如果哪里有写的不对的,或者好的建议,欢 ...

  2. ZOJ 3724 Delivery 树状数组好题

    虽然看起来是求最短路,但因为条件的限制,可以转化为区间求最小值. 对于一条small path [a, b],假设它的长度是len,它对区间[a, b]的影响就是:len-( sum[b]-sum[a ...

  3. JS正则表达式 简单应用

    知识点: 先生成一个正则规则的对象,使用test()对传入的字符串进行验证,返回布尔类型 代码: <!doctype html><html><head> <m ...

  4. 全网把Map中的hash()分析的最透彻的文章,别无二家。

    你知道HashMap中hash方法的具体实现吗?你知道HashTable.ConcurrentHashMap中hash方法的实现以及原因吗?你知道为什么要这么实现吗?你知道为什么JDK 7和JDK 8 ...

  5. BZOJ4032 [HEOI2015]最短不公共子串 【后缀自动机 + 序列自动机 + dp】

    题目链接 BZOJ4032 题解 首先膜\(hb\) 空手切神题 一问\(hash\),二问枚举 三问\(trie\)树,四问\(dp\) 南二巨佬神\(hb\) 空手吊打自动机 \(orz orz ...

  6. JavaScript要理解闭包先了解词法作用域

    之所以取名叫做词法作用域,是这个概念是js中相当基础也是极为重要的,很多想当然的错误或感觉怪异的问题都是和这个东西有关.所以,本文主要说下这个名词的概念以及讨论下他牵扯出来的有关变量.函数.闭包的问题 ...

  7. Android自复制传播APP原理学习(翻译)

     Android自复制传播APP原理学习(翻译) 1 背景介绍 论文链接:http://arxiv.org/abs/1511.00444 项目地址:https://github.com/Tribler ...

  8. .net 过滤 sql防注入类,省地以后每次都要重新弄!

    /// <summary>    /// 过滤不安全的字符串    /// </summary>    /// <param name="Str"&g ...

  9. Java并发笔记(二)

    1. 活跃性危险 死锁(最常见) 饥饿 当线程由于无法访问它所需的资源而不能继续执行时,就发生了饥饿.引发饥饿最常见资源就是CPU时钟周期. 活锁 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有 ...

  10. JSP中的:request.getScheme()+"://"+request.getServerName()+":"+request.getServer

    String path = request.getContextPath();  String basePath = request.getScheme()+"://"+reque ...