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; } @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
-
Definició de la Classe:
@interface Persona : NSObject
: Declara una nova classePersona
que 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
,setEdat
iedat
són implementats per establir i obtenir les propietatsnom
iedat
.
-
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 propietatsnom
iedat
de l'objectepersona1
.NSLog(@"Nom: %@", [persona1 nom]);
iNSLog(@"Edat: %d", [persona1 edat]);
: Mostra les propietatsnom
iedat
de 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
Cotxe
es defineix i implementa de manera similar a la classePersona
. - Es creen mètodes per establir i obtenir les propietats
marca
,model
iany
. - Es crea un objecte
cotxe1
de la classeCotxe
i 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