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); } @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
Exercicis Pràctics
Exercici 1: Crear una Subclasse
- Objectiu: Crear una subclasse
Motorcycle
que hereti deVehicle
i afegeixi una propietattype
(per exemple, "Sport", "Cruiser"). - Passos:
- Defineix la classe
Motorcycle
amb la propietattype
. - Sobreescriu el mètode
displayInfo
per incloure la nova propietat. - Crea una instància de
Motorcycle
i 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
super
en Sobreescriptures: Quan sobreescrius un mètode, assegura't d'invocarsuper
si 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
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.
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