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.