Encapsulamento de dados Objective-C

Todos os programas Objective-C são compostos dos seguintes dois elementos fundamentais -

  • Program statements (code) - Esta é a parte de um programa que executa ações e são chamadas de métodos.

  • Program data - Os dados são as informações do programa que são afetadas pelas funções do programa.

O encapsulamento é um conceito de Programação Orientada a Objetos que une os dados e as funções que os manipulam e que os mantém protegidos contra interferências externas e uso indevido. O encapsulamento de dados levou ao importante conceito OOP dedata hiding.

Data encapsulation é um mecanismo de agrupamento de dados e funções que os utilizam, e data abstraction é um mecanismo de expor apenas as interfaces e ocultar os detalhes de implementação do usuário.

Objective-C suporta as propriedades de encapsulamento e ocultação de dados por meio da criação de tipos definidos pelo usuário, chamados classes. Por exemplo -

@interface Adder : NSObject {
   NSInteger total;
}

- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;

@end

A variável total é privada e não podemos acessar de fora da classe. Isso significa que eles podem ser acessados ​​apenas por outros membros da classe Adder e não por qualquer outra parte de seu programa. Esta é uma forma de o encapsulamento ser alcançado.

Os métodos dentro do arquivo de interface são acessíveis e de escopo público.

Existem métodos privados, que são escritos com a ajuda de extensions, que aprenderemos nos próximos capítulos.

Exemplo de encapsulamento de dados

Qualquer programa Objective-C em que você implementa uma classe com variáveis ​​de membros públicos e privados é um exemplo de encapsulamento e abstração de dados. Considere o seguinte exemplo -

#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:10];
   [adder addNumber:5];
   [adder addNumber:4];
   
   NSLog(@"The total is %ld",[adder getTotal]);
   [pool drain];
   return 0;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

2013-09-22 21:17:30.485 DataEncapsulation[317:303] The total is 19

A classe acima adiciona números e retorna a soma. Os membros públicosaddNum e getTotal são as interfaces para o mundo exterior e um usuário precisa conhecê-las para usar a classe. O membro privadototal é algo que está escondido do mundo exterior, mas é necessário para que a classe funcione corretamente.

Estratégia de Projeto

A maioria de nós aprendeu por meio de experiências amargas a tornar os alunos privados por padrão, a menos que realmente precisemos expô-los. Isso é bomencapsulation.

É importante entender o encapsulamento de dados, pois é um dos principais recursos de todas as linguagens de Programação Orientada a Objetos (OOP), incluindo Objective-C.