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; @end
Implementació 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
Persona
té dues variables d'instància privades:nom
iedat
. - Es defineixen propietats per a
nom
iedat
amb els modificadorsnonatomic
istrong
per anom
, inonatomic
per aedat
.
- La classe
-
Implementació de la Classe:
- Es sintetitzen les propietats per generar automàticament els getters i setters.
- Es defineix un mètode
mostrarInformacio
que 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
nom
iedat
. - Es crida el mètode
mostrarInformacio
per 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
Cotxe
amb 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
mostrarDetalls
que 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