zoukankan      html  css  js  c++  java
  • [Objective-C语言教程]数据封装(27)

    所有Objective-C程序都由以下两个基本要素组成 -

    • 程序语句(代码) - 这是执行操作的程序的一部分,它们被称为方法(函数)。
    • 程序数据 - 数据是受程序功能影响的程序信息。

    封装是一种面向对象的编程概念,它将操作数据的数据和功能绑定在一起,并保护其免受外部干扰和误用。 数据封装导致了重要的OOP数据隐藏概念。

    数据封装是捆绑数据和使用函数的机制,数据抽象是一种仅暴露接口并从用户隐藏实现细节的机制。

    Objective-C通过创建用户定义类型(称为类)来支持封装和数据隐藏的属性。 例如 -

    1 @interface Adder : NSObject {
    2    NSInteger total;
    3 }
    4 
    5 - (id)initWithInitialNumber:(NSInteger)initialNumber;
    6 - (void)addNumber:(NSInteger)newNumber;
    7 - (NSInteger)getTotal;
    8 
    9 @end

    变量total是私有的,因此无法从类外部访问。只能由Adder类的其他成员访问它们,而不能由程序的任何其他部分访问。这是实现封装的一种方式。

    接口文件中的方法是可访问的,并且在范围内是公共的。

    有一些私有方法,这些方法是在扩展的帮助下编写的,我们将在后面的章节中学习。

    1. 数据封装示例

    任何使用公共和私有成员变量实现类的Objective-C程序都是数据封装和数据抽象的一个例子。 考虑以下示例 -

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Adder : NSObject {
     4    NSInteger total;
     5 }
     6 
     7 - (id)initWithInitialNumber:(NSInteger)initialNumber;
     8 - (void)addNumber:(NSInteger)newNumber;
     9 - (NSInteger)getTotal;
    10 
    11 @end
    12 
    13 @implementation Adder
    14 -(id)initWithInitialNumber:(NSInteger)initialNumber {
    15    total = initialNumber;
    16    return self;
    17 }
    18 
    19 - (void)addNumber:(NSInteger)newNumber {
    20    total = total + newNumber;
    21 }
    22 
    23 - (NSInteger)getTotal {
    24    return total;
    25 }
    26 
    27 @end
    28 
    29 int main(int argc, const char * argv[]) {
    30    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];        
    31    Adder *adder = [[Adder alloc]initWithInitialNumber:10];
    32    [adder addNumber:15];
    33    [adder addNumber:14];
    34 
    35    NSLog(@"The total is %ld",[adder getTotal]);
    36    [pool drain];
    37    return 0;
    38 }

    执行上面示例代码,得到以下结果:

    2018-11-16 02:19:46.326 main[52227] The total is 39

    上面的类将数字值相加并返回总和。 公共成员addNumgetTotal是外部接口,用户需要知道它们才能使用该类。 私有成员total是对外界隐藏的东西,但是此类需要正常运作。

    2. 设计策略

    除非真的需要公开它们,否则大多数人都会通过经验来学习默认情况下将类成员设为私有。 这只是很好的封装。

    了解数据封装非常重要,因为它是所有面向对象编程(OOP)语言(包括Objective-C)的核心功能之一。

  • 相关阅读:
    数据流图DFD画法
    数据流图的画法
    那些年我们一起追逐过的安全工具
    30秒攻破任意密码保护的PC:深入了解5美元黑客神器PoisonTap
    CentOS 7.x设置自定义开机启动,添加自定义系统服务
    centos7 开机/etc/rc.local 不执行的问题
    一步一步教你如何解锁被盗的iPhone 6S
    Netflow elasticflow
    Azure Monitor Kibana configuration always seems to send over SSL
    netflow-module
  • 原文地址:https://www.cnblogs.com/strengthen/p/10571839.html
Copyright © 2011-2022 走看看