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
- 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.
- 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.
- 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.
- 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;
}
@endCreació 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
-
Definició de la Classe:
@interface Persona : NSObject: Declara una nova classePersonaque hereta deNSObject.NSString *nom;iint 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.
-
Implementació de la Classe:
@implementation Persona: Comença la implementació de la classePersona.- Els mètodes
setNom,nom,setEdatiedatsón implementats per establir i obtenir les propietatsnomiedat.
-
Creació d'un Objecte:
Persona *persona1 = [[Persona alloc] init];: Crea una nova instància de la classePersona.[persona1 setNom:@"Joan"];i[persona1 setEdat:30];: Estableix les propietatsnomiedatde l'objectepersona1.NSLog(@"Nom: %@", [persona1 nom]);iNSLog(@"Edat: %d", [persona1 edat]);: Mostra les propietatsnomiedatde l'objectepersona1.
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
Cotxees defineix i implementa de manera similar a la classePersona. - Es creen mètodes per establir i obtenir les propietats
marca,modeliany. - Es crea un objecte
cotxe1de la classeCotxei es mostren les seves propietats utilitzantNSLog.
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.
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
