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
- 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.
- 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.
- Sobreescriptura de Mètodes: Les subclasses poden proporcionar una implementació específica per a mètodes que ja estan definits en la superclasse.
- 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);
}
@endDefinició 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);
}
@endUtilització 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
Exercicis Pràctics
Exercici 1: Crear una Subclasse
- Objectiu: Crear una subclasse
Motorcycleque hereti deVehiclei afegeixi una propietattype(per exemple, "Sport", "Cruiser"). - Passos:
- Defineix la classe
Motorcycleamb la propietattype. - Sobreescriu el mètode
displayInfoper incloure la nova propietat. - Crea una instància de
Motorcyclei mostra la informació.
- Defineix la classe
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
Errors Comuns i Consells
- No Invocar
superen Sobreescriptures: Quan sobreescrius un mètode, assegura't d'invocarsupersi necessites mantenir la funcionalitat de la superclasse. - No Definir Correctament les Propietats: Assegura't de definir les propietats amb els modificadors adequats (
nonatomic,strong,assign, etc.). - No Inicialitzar Correctament les Subclasses: Recorda que les subclasses han de ser inicialitzades correctament, invocant el mètode
initde 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.
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
