All Objective-C programs are composed of the following two fundamental elements:

  • Program statements (code): This is the part of a program that performs actions and they are called methods.

  • Program data: The data is the information of the program which is affected by the program functions.

Encapsulation is an Object-Oriented Programming concept that binds together the data and functions that manipulate the data and that keeps both safe from outside interference and misuse. Data encapsulation led to the important OOP concept of data hiding.

Data encapsulation is a mechanism of bundling the data and the functions that use them, and data abstraction is a mechanism of exposing only the interfaces and hiding the implementation details from the user.

Objective-C supports the properties of encapsulation and data hiding through the creation of user-defined types, called classes. For example:

@interface Adder : NSObject
{
NSInteger total;
} - (id)initWithInitialNumber:(NSInteger)initialNumber; - (void)addNumber:(NSInteger)newNumber; - (NSInteger)getTotal; @end

The variable total is private and we cannot access from outside the class. This means that they can be accessed only by other members of the Adder class and not by any other part of your program. This is one way encapsulation is achieved.

Methods inside the interface file are accessible and are public in scope.

There are private methods, which are written with the help of extensions, which we will learn in upcoming chapters.

Data Encapsulation Example:

Any Objective-C program where you implement a class with public and private members variables is an example of data encapsulation and data abstraction. Consider the following example:

#import <Foundation/Foundation.h>

@interface Adder : NSObject
{
NSInteger total;
} - (id)initWithInitialNumber:(NSInteger)initialNumber; - (void)addNumber:(NSInteger)newNumber; - (NSInteger)getTotal; @end @implementation Adder -(id)initWithInitialNumber:(NSInteger)initialNumber{
total = initialNumber;
return self;
} - (void)addNumber:(NSInteger)newNumber{
total = total + newNumber;
} - (NSInteger)getTotal{
return total;
} @end int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Adder *adder = [[Adder alloc]initWithInitialNumber:];
[adder addNumber:];
[adder addNumber:];
NSLog(@"The total is %ld",[adder getTotal]);
[pool drain];
return ;
}

When the above code is compiled and executed, it produces the following result:

-- ::30.485 DataEncapsulation[:] The total is 

Above class adds numbers together and returns the sum. The public members addNum and getTotal are the interfaces to the outside world and a user needs to know them to use the class. The private member total is something that is hidden from the outside world, but is needed for the class to operate properly.

Designing Strategy:

Most of us have learned through bitter experience to make class members private by default unless we really need to expose them. That's just good encapsulation.

It's important to understand data encapsulation since it's one of the core features of all Object-Oriented Programming (OOP) languages including Objective-C.

Objective-C Data Encapsulation的更多相关文章

  1. Python : Data Encapsulation

    Python : Data Encapsulation The following table shows the different behaviour: Name Notation Behavio ...

  2. [转]C语言SOCKET编程指南

    1.介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等 ...

  3. C++ 系列:socket 资料收集

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  4. C语言SOCKET编程指南

    1.介绍 Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措? ...

  5. 深入理解OOP(第一天):多态和继承(初期绑定和编译时多态)

    在本系列中,我们以CodeProject上比较火的OOP系列博客为主,进行OOP深入浅出展现. 无论作为软件设计的高手.或者菜鸟,对于架构设计而言,均需要多次重构.取舍,以有利于整个软件项目的健康构建 ...

  6. 深入浅出OOP(一): 多态和继承(早期绑定/编译时多态)

    在本系列中,我们以CodeProject上比较火的OOP系列博客为主,进行OOP深入浅出展现. 无论作为软件设计的高手.或者菜鸟,对于架构设计而言,均需要多次重构.取舍,以有利于整个软件项目的健康构建 ...

  7. CLR via C#深解笔记四 - 方法、参数、属性

    实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法.构造器方法在“方法定义元数据表”中始终叫.ctor. 创建一个引用类型的实例时: #1, ...

  8. WireShark数据包分析数据封装

    WireShark数据包分析数据封装 数据封装(Data Encapsulation)是指将协议数据单元(PDU)封装在一组协议头和尾中的过程.在OSI七层参考模型中,每层主要负责与其它机器上的对等层 ...

  9. 10.Properties

    The common language runtime (CLR) offers two kinds of properties: 1.parameterless properties, which ...

随机推荐

  1. PLSQL ORA-12154 TNS无法解析指定的连接标识符

    若你的机子上Windows 64位操作系统, 将PL Sql 的默认安装目录  Program Files (x86) 文件夹改为Program Files 或者别的便可以了

  2. HDOJ-1280

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. dockerfile:制作tomcat镜像+javaweb

    FROM ubuntu:14.10 MAINTAINER linx #把java与tomcat添加到容器中,Add会解压 ADD jdk-8u151-linux-x64.tar.gz /usr/loc ...

  4. Httpclient爬取优酷网

    参考:http://www.cnblogs.com/lchzls/p/6277210.html /httpClient/src/main/java/com/louis/youku/Page.java ...

  5. 1.6-1.8 HBase表的物理模型

    一.HBase 物理模型 1. 1.Table中的所有行都按照row key的字典序排列: 2.Table在行的方向上分割为多个Region: 3.Region按天小分割的,每个表开始只有一个regi ...

  6. 1.13-1.14 Hive Action

    一.Hive Action 1.创建文件 [root@hadoop-senior oozie-apps]# pwd /opt/cdh-5.3.6/oozie-4.0.0-cdh5.3.6/oozie- ...

  7. TypeScript完全解读(26课时)_17.装饰器

    实验性的特性,需要在tslint里面把这项设置为true 作用域类的声明方法.访问符.属性和参数上 使用@符号加一个名字来定义,名字必须是一个函数,或者求值后是一个函数 装饰器工厂,setPro当做一 ...

  8. 「一入 Java 深似海 」系列课程 - 第一期

    10分30秒开始 小马哥技术博客: https://mercyblitz.github.io/ github地址: https://github.com/mercyblitz 33分28 https: ...

  9. Content Security Policy的学习理解

    以下内容转载自 http://www.cnblogs.com/alisecurity/p/5924023.html 跨域脚本攻击 XSS 是最常见.危害最大的网页安全漏洞. 为了防止它们,要采取很多编 ...

  10. 如何设置Xcode模拟器地图的当前位置

    使用模拟器上的地图的话,需要设置当前位置,开启定位后,才能定位准确. 一.选中模拟器:Debug - Location - Custom Location 弹出的纬经度坐标.纬经度.纬经度坐标,默认显 ...