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

  1. 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.
  2. Propietats:

    • Les propietats són una manera d'encapsular les variables d'instància, proporcionant mètodes d'accés (getters) i modificació (setters).
  3. 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

  1. Definició de la Classe:

    • La classe Persona té dues variables d'instància privades: nom i edat.
    • Es defineixen propietats per a nom i edat amb els modificadors nonatomic i strong per a nom, i nonatomic per a edat.
  2. 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.
  3. Ús de la Classe:

    • Es crea una instància de la classe Persona.
    • Es fan servir els setters per assignar valors a nom i edat.
    • Es crida el mètode mostrarInformacio per mostrar la informació de la persona.

Exercicis Pràctics

Exercici 1: Crear una Classe Cotxe

  1. Defineix una classe Cotxe amb les següents variables d'instància privades:

    • marca (NSString)
    • model (NSString)
    • any (int)
  2. Proporciona propietats per a cada variable d'instància.

  3. Implementa un mètode mostrarDetalls que imprimeixi la marca, el model i l'any del cotxe.

  4. Crea una instància de la classe Cotxe, assigna valors a les propietats i crida el mètode mostrarDetalls.

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.

© Copyright 2024. Tots els drets reservats