L'encapsulació és un dels quatre pilars de la Programació Orientada a Objectes (POO), juntament amb l'herència, el polimorfisme i l'abstracció. L'encapsulació es refereix a la pràctica de restringir l'accés a certs components d'un objecte i només exposar el que és necessari a través de mètodes públics. Això ajuda a protegir l'estat intern de l'objecte i a mantenir la integritat de les dades.
Conceptes Clau
-
Visibilitat dels Membres:
- Privat (
@private): Només accessible dins de la mateixa classe. - Protegit (
@protected): Accessible dins de la mateixa classe i per les subclasses. - Públic (
@public): Accessible des de qualsevol lloc.
- Privat (
-
Propietats:
- Les propietats són una manera d'encapsular les variables d'instància, proporcionant mètodes d'accés (getters) i modificació (setters).
-
Mètodes d'Accés:
- Getters: Mètodes que permeten accedir al valor d'una variable privada.
- Setters: Mètodes que permeten modificar el valor d'una variable privada.
Exemple Pràctic
A continuació, es mostra un exemple pràctic d'encapsulació en Objective-C.
Definició de la Classe
#import <Foundation/Foundation.h>
@interface Persona : NSObject {
@private
NSString *nom;
int edat;
}
// Propietats
@property (nonatomic, strong) NSString *nom;
@property (nonatomic) int edat;
// Mètodes
- (void)mostrarInformacio;
@endImplementació de la Classe
#import "Persona.h"
@implementation Persona
// Sintetitzar les propietats
@synthesize nom;
@synthesize edat;
// Implementació del mètode per mostrar informació
- (void)mostrarInformacio {
NSLog(@"Nom: %@, Edat: %d", self.nom, self.edat);
}
@endÚs de la Classe
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Crear una instància de la classe Persona
Persona *persona = [[Persona alloc] init];
// Utilitzar els setters per assignar valors
[persona setNom:@"Joan"];
[persona setEdat:30];
// Utilitzar el mètode per mostrar la informació
[persona mostrarInformacio];
}
return 0;
}Explicació del Codi
-
Definició de la Classe:
- La classe
Personaté dues variables d'instància privades:nomiedat. - Es defineixen propietats per a
nomiedatamb els modificadorsnonatomicistrongper anom, inonatomicper aedat.
- La classe
-
Implementació de la Classe:
- Es sintetitzen les propietats per generar automàticament els getters i setters.
- Es defineix un mètode
mostrarInformacioque imprimeix el nom i l'edat de la persona.
-
Ús de la Classe:
- Es crea una instància de la classe
Persona. - Es fan servir els setters per assignar valors a
nomiedat. - Es crida el mètode
mostrarInformacioper mostrar la informació de la persona.
- Es crea una instància de la classe
Exercicis Pràctics
Exercici 1: Crear una Classe Cotxe
-
Defineix una classe
Cotxeamb les següents variables d'instància privades:marca(NSString)model(NSString)any(int)
-
Proporciona propietats per a cada variable d'instància.
-
Implementa un mètode
mostrarDetallsque imprimeixi la marca, el model i l'any del cotxe. -
Crea una instància de la classe
Cotxe, assigna valors a les propietats i crida el mètodemostrarDetalls.
Solució
#import <Foundation/Foundation.h>
@interface Cotxe : NSObject {
@private
NSString *marca;
NSString *model;
int any;
}
@property (nonatomic, strong) NSString *marca;
@property (nonatomic, strong) NSString *model;
@property (nonatomic) int any;
- (void)mostrarDetalls;
@end
@implementation Cotxe
@synthesize marca;
@synthesize model;
@synthesize any;
- (void)mostrarDetalls {
NSLog(@"Marca: %@, Model: %@, Any: %d", self.marca, self.model, self.any);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Cotxe *cotxe = [[Cotxe alloc] init];
[cotxe setMarca:@"Toyota"];
[cotxe setModel:@"Corolla"];
[cotxe setAny:2020];
[cotxe mostrarDetalls];
}
return 0;
}Resum
L'encapsulació és una tècnica fonamental en la POO que ajuda a protegir l'estat intern dels objectes i a mantenir la integritat de les dades. Mitjançant l'ús de propietats i mètodes d'accés, podem controlar com es modifiquen i s'accedeixen les variables d'instància. Aquesta pràctica no només millora la seguretat del codi, sinó que també facilita el manteniment i la comprensió del mateix.
Curs de Programació en Objective-C
Mòdul 1: Introducció a Objective-C
- Introducció a Objective-C
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Tipus de Dades i Variables
- Operadors i Expressions
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Mètodes
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Sintaxi de Mètodes en Objective-C
- Mètodes de Classe i d'Instància
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Gestió de Memòria
- Introducció a la Gestió de Memòria
- Comptatge Automàtic de Referències (ARC)
- Retenció i Alliberament Manual
- Millors Pràctiques de Gestió de Memòria
Mòdul 6: Temes Avançats
Mòdul 7: Treballant amb Dades
- Gestió d'Arxius
- Serialització i Deserialització
- Conceptes Bàsics de Xarxes
- Treballant amb JSON i XML
Mòdul 8: Desenvolupament d'Interfícies d'Usuari
- Introducció a UIKit
- Vistes i Controladors de Vista
- Disseny Automàtic
- Gestió de l'Entrada de l'Usuari
