La Programació Orientada a Objectes (POO) és un paradigma de programació que utilitza "objectes" per dissenyar aplicacions i programes. Els objectes poden ser considerats com entitats que encapsulen dades i comportaments relacionats. Aquest mòdul introdueix els conceptes bàsics de la POO i com s'apliquen en Objective-C.

Conceptes Clau de la POO

  1. Objectes i Classes

  • Objecte: Una instància d'una classe que conté dades i mètodes per manipular aquestes dades.
  • Classe: Un plànol o plantilla per crear objectes. Defineix les propietats (atributs) i els mètodes (funcions) que els objectes d'aquesta classe tindran.

  1. Encapsulació

  • Encapsulació: El procés de combinar dades i mètodes que operen sobre aquestes dades en una sola unitat, o classe. Això ajuda a protegir les dades de modificacions no autoritzades.

  1. Herència

  • Herència: El mecanisme pel qual una classe (subclasse) pot heretar les propietats i mètodes d'una altra classe (superclasse). Això permet la reutilització del codi i l'extensió de funcionalitats.

  1. Polimorfisme

  • Polimorfisme: La capacitat d'un objecte de prendre moltes formes. En POO, això es refereix a la capacitat de diferents classes per ser tractades com si fossin instàncies de la mateixa classe mitjançant una interfície comuna.

Exemple Pràctic: Creació d'una Classe i un Objecte

Definició d'una Classe

#import <Foundation/Foundation.h>

// Definició de la classe "Persona"
@interface Persona : NSObject {
    NSString *nom;
    int edat;
}

// Declaració de mètodes
- (void)setNom:(NSString *)nouNom;
- (NSString *)nom;
- (void)setEdat:(int)novaEdat;
- (int)edat;

@end

@implementation Persona

// Implementació dels mètodes
- (void)setNom:(NSString *)nouNom {
    nom = nouNom;
}

- (NSString *)nom {
    return nom;
}

- (void)setEdat:(int)novaEdat {
    edat = novaEdat;
}

- (int)edat {
    return edat;
}

@end

Creació d'un Objecte

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // Creació d'un objecte de la classe "Persona"
        Persona *persona1 = [[Persona alloc] init];
        
        // Ús dels mètodes de l'objecte
        [persona1 setNom:@"Joan"];
        [persona1 setEdat:30];
        
        NSLog(@"Nom: %@", [persona1 nom]);
        NSLog(@"Edat: %d", [persona1 edat]);
    }
    return 0;
}

Explicació del Codi

  1. Definició de la Classe:

    • @interface Persona : NSObject: Declara una nova classe Persona que hereta de NSObject.
    • NSString *nom; i int edat;: Declara les propietats de la classe.
    • - (void)setNom:(NSString *)nouNom;: Declara un mètode per establir el nom.
    • - (NSString *)nom;: Declara un mètode per obtenir el nom.
    • - (void)setEdat:(int)novaEdat;: Declara un mètode per establir l'edat.
    • - (int)edat;: Declara un mètode per obtenir l'edat.
  2. Implementació de la Classe:

    • @implementation Persona: Comença la implementació de la classe Persona.
    • Els mètodes setNom, nom, setEdat i edat són implementats per establir i obtenir les propietats nom i edat.
  3. Creació d'un Objecte:

    • Persona *persona1 = [[Persona alloc] init];: Crea una nova instància de la classe Persona.
    • [persona1 setNom:@"Joan"]; i [persona1 setEdat:30];: Estableix les propietats nom i edat de l'objecte persona1.
    • NSLog(@"Nom: %@", [persona1 nom]); i NSLog(@"Edat: %d", [persona1 edat]);: Mostra les propietats nom i edat de l'objecte persona1.

Exercici Pràctic

Exercici

Crea una classe anomenada Cotxe amb les següents propietats i mètodes:

  • Propietats: marca (NSString), model (NSString), any (int).
  • Mètodes: setMarca:, marca, setModel:, model, setAny:, any.

Solució

#import <Foundation/Foundation.h>

@interface Cotxe : NSObject {
    NSString *marca;
    NSString *model;
    int any;
}

- (void)setMarca:(NSString *)novaMarca;
- (NSString *)marca;
- (void)setModel:(NSString *)nouModel;
- (NSString *)model;
- (void)setAny:(int)nouAny;
- (int)any;

@end

@implementation Cotxe

- (void)setMarca:(NSString *)novaMarca {
    marca = novaMarca;
}

- (NSString *)marca {
    return marca;
}

- (void)setModel:(NSString *)nouModel {
    model = nouModel;
}

- (NSString *)model {
    return model;
}

- (void)setAny:(int)nouAny {
    any = nouAny;
}

- (int)any {
    return any;
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Cotxe *cotxe1 = [[Cotxe alloc] init];
        
        [cotxe1 setMarca:@"Toyota"];
        [cotxe1 setModel:@"Corolla"];
        [cotxe1 setAny:2020];
        
        NSLog(@"Marca: %@", [cotxe1 marca]);
        NSLog(@"Model: %@", [cotxe1 model]);
        NSLog(@"Any: %d", [cotxe1 any]);
    }
    return 0;
}

Explicació de la Solució

  • La classe Cotxe es defineix i implementa de manera similar a la classe Persona.
  • Es creen mètodes per establir i obtenir les propietats marca, model i any.
  • Es crea un objecte cotxe1 de la classe Cotxe i es mostren les seves propietats utilitzant NSLog.

Conclusió

En aquesta secció, hem introduït els conceptes bàsics de la Programació Orientada a Objectes (POO) i hem vist com aplicar-los en Objective-C. Hem après a definir classes, crear objectes i utilitzar mètodes per manipular les propietats dels objectes. Aquests conceptes són fonamentals per a la programació en Objective-C i seran la base per a temes més avançats en els següents mòduls.

© Copyright 2024. Tots els drets reservats