La herència és un concepte fonamental en la programació orientada a objectes (POO) que permet crear noves classes basades en classes existents. Això facilita la reutilització del codi i la creació de jerarquies de classes. En Objective-C, la herència es gestiona mitjançant la paraula clau @interface per definir la classe base i la classe derivada.

Conceptes Clau

  1. Classe Base (Superclasse): És la classe de la qual es deriven altres classes. Conté propietats i mètodes que poden ser heretats per les subclasses.
  2. Classe Derivada (Subclasse): És la classe que hereta les propietats i mètodes de la classe base. Pot afegir noves propietats i mètodes o sobreescriure els existents.
  3. Sobreescriptura de Mètodes: Les subclasses poden proporcionar una implementació específica per a mètodes que ja estan definits en la superclasse.
  4. Paraula Clau super: S'utilitza per referir-se a la superclasse i invocar els seus mètodes.

Exemple Pràctic

Definició de la Superclasse

#import <Foundation/Foundation.h>

@interface Vehicle : NSObject

@property (nonatomic, strong) NSString *brand;
@property (nonatomic, assign) NSInteger year;

- (void)displayInfo;

@end

@implementation Vehicle

- (void)displayInfo {
    NSLog(@"Brand: %@, Year: %ld", self.brand, (long)self.year);
}

@end

Definició de la Subclasse

#import "Vehicle.h"

@interface Car : Vehicle

@property (nonatomic, strong) NSString *model;

- (void)displayInfo;

@end

@implementation Car

- (void)displayInfo {
    [super displayInfo]; // Invoca el mètode de la superclasse
    NSLog(@"Model: %@", self.model);
}

@end

Utilització de les Classes

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Car *myCar = [[Car alloc] init];
        myCar.brand = @"Toyota";
        myCar.year = 2020;
        myCar.model = @"Corolla";
        
        [myCar displayInfo];
    }
    return 0;
}

Sortida Esperada

Brand: Toyota, Year: 2020
Model: Corolla

Exercicis Pràctics

Exercici 1: Crear una Subclasse

  1. Objectiu: Crear una subclasse Motorcycle que hereti de Vehicle i afegeixi una propietat type (per exemple, "Sport", "Cruiser").
  2. Passos:
    • Defineix la classe Motorcycle amb la propietat type.
    • Sobreescriu el mètode displayInfo per incloure la nova propietat.
    • Crea una instància de Motorcycle i mostra la informació.

Solució

#import "Vehicle.h"

@interface Motorcycle : Vehicle

@property (nonatomic, strong) NSString *type;

- (void)displayInfo;

@end

@implementation Motorcycle

- (void)displayInfo {
    [super displayInfo]; // Invoca el mètode de la superclasse
    NSLog(@"Type: %@", self.type);
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Motorcycle *myMotorcycle = [[Motorcycle alloc] init];
        myMotorcycle.brand = @"Harley-Davidson";
        myMotorcycle.year = 2018;
        myMotorcycle.type = @"Cruiser";
        
        [myMotorcycle displayInfo];
    }
    return 0;
}

Sortida Esperada

Brand: Harley-Davidson, Year: 2018
Type: Cruiser

Errors Comuns i Consells

  1. No Invocar super en Sobreescriptures: Quan sobreescrius un mètode, assegura't d'invocar super si necessites mantenir la funcionalitat de la superclasse.
  2. No Definir Correctament les Propietats: Assegura't de definir les propietats amb els modificadors adequats (nonatomic, strong, assign, etc.).
  3. No Inicialitzar Correctament les Subclasses: Recorda que les subclasses han de ser inicialitzades correctament, invocant el mètode init de la superclasse si és necessari.

Resum

En aquesta secció, hem après sobre la herència en Objective-C, com definir superclasses i subclasses, i com sobreescriure mètodes. La herència permet la reutilització del codi i la creació de jerarquies de classes, facilitant el manteniment i l'escalabilitat del codi. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes apresos.

© Copyright 2024. Tots els drets reservats