La programació orientada a objectes (POO) és un paradigma de programació que utilitza "objectes" per representar dades i mètodes. Dart és un llenguatge de programació que suporta completament la POO. En aquesta secció, aprendrem els conceptes bàsics de la POO en Dart, incloent classes, objectes, herència, polimorfisme i encapsulació.
Conceptes Clau
Classes i Objectes
- Classe: Una plantilla per crear objectes. Defineix un conjunt de propietats i mètodes que seran comuns a tots els objectes creats a partir d'aquesta classe.
- Objecte: Una instància d'una classe. Conté dades i mètodes definits per la classe.
Herència
- Herència: Permet crear una nova classe a partir d'una classe existent. La nova classe hereta les propietats i mètodes de la classe base.
Polimorfisme
- Polimorfisme: Permet que una interfície comuna sigui utilitzada per diferents tipus d'objectes. Això es pot aconseguir mitjançant la sobreescriptura de mètodes.
Encapsulació
- Encapsulació: El procés de restringir l'accés a certs components d'un objecte. Això es fa utilitzant modificadors d'accés com
privateipublic.
Classes i Objectes en Dart
Definició d'una Classe
class Persona {
// Propietats
String nom;
int edat;
// Constructor
Persona(this.nom, this.edat);
// Mètode
void mostrarInformacio() {
print('Nom: $nom, Edat: $edat');
}
}Creació d'un Objecte
void main() {
// Creació d'un objecte de la classe Persona
Persona persona1 = Persona('Joan', 30);
persona1.mostrarInformacio(); // Sortida: Nom: Joan, Edat: 30
}Herència
class Empleat extends Persona {
// Propietat addicional
String feina;
// Constructor
Empleat(String nom, int edat, this.feina) : super(nom, edat);
// Sobreescriptura del mètode
@override
void mostrarInformacio() {
super.mostrarInformacio();
print('Feina: $feina');
}
}
void main() {
Empleat empleat1 = Empleat('Anna', 28, 'Enginyera');
empleat1.mostrarInformacio();
// Sortida:
// Nom: Anna, Edat: 28
// Feina: Enginyera
}Polimorfisme
void mostrarDetalls(Persona persona) {
persona.mostrarInformacio();
}
void main() {
Persona persona1 = Persona('Joan', 30);
Empleat empleat1 = Empleat('Anna', 28, 'Enginyera');
mostrarDetalls(persona1); // Sortida: Nom: Joan, Edat: 30
mostrarDetalls(empleat1); // Sortida: Nom: Anna, Edat: 28, Feina: Enginyera
}Encapsulació
class Banc {
// Propietat privada
double _saldo;
// Constructor
Banc(this._saldo);
// Mètode per obtenir el saldo
double obtenirSaldo() {
return _saldo;
}
// Mètode per dipositar diners
void dipositar(double quantitat) {
if (quantitat > 0) {
_saldo += quantitat;
}
}
// Mètode per retirar diners
void retirar(double quantitat) {
if (quantitat > 0 && quantitat <= _saldo) {
_saldo -= quantitat;
}
}
}
void main() {
Banc compte = Banc(1000.0);
compte.dipositar(500.0);
print('Saldo: ${compte.obtenirSaldo()}'); // Sortida: Saldo: 1500.0
compte.retirar(200.0);
print('Saldo: ${compte.obtenirSaldo()}'); // Sortida: Saldo: 1300.0
}Exercicis Pràctics
Exercici 1: Crear una Classe de Cotxe
- Defineix una classe
Cotxeamb les propietatsmarca,modeliany. - Crea un constructor per inicialitzar aquestes propietats.
- Afegeix un mètode
mostrarDetallsque imprimeixi les propietats del cotxe.
class Cotxe {
String marca;
String model;
int any;
Cotxe(this.marca, this.model, this.any);
void mostrarDetalls() {
print('Marca: $marca, Model: $model, Any: $any');
}
}
void main() {
Cotxe cotxe1 = Cotxe('Toyota', 'Corolla', 2020);
cotxe1.mostrarDetalls(); // Sortida: Marca: Toyota, Model: Corolla, Any: 2020
}Exercici 2: Herència i Sobreescriptura
- Crea una classe
Vehicleamb les propietatsmarcaimodel. - Defineix una classe
Cotxeque hereti deVehiclei afegeixi la propietatany. - Sobreescriu el mètode
mostrarDetallsper incloure la propietatany.
class Vehicle {
String marca;
String model;
Vehicle(this.marca, this.model);
void mostrarDetalls() {
print('Marca: $marca, Model: $model');
}
}
class Cotxe extends Vehicle {
int any;
Cotxe(String marca, String model, this.any) : super(marca, model);
@override
void mostrarDetalls() {
super.mostrarDetalls();
print('Any: $any');
}
}
void main() {
Cotxe cotxe1 = Cotxe('Toyota', 'Corolla', 2020);
cotxe1.mostrarDetalls();
// Sortida:
// Marca: Toyota, Model: Corolla
// Any: 2020
}Resum
En aquesta secció, hem après els conceptes bàsics de la programació orientada a objectes en Dart, incloent classes, objectes, herència, polimorfisme i encapsulació. Hem vist com definir classes i crear objectes, com utilitzar la herència per reutilitzar codi, com aplicar el polimorfisme per tractar objectes de diferents tipus de manera uniforme, i com utilitzar l'encapsulació per protegir les dades. A més, hem practicat aquests conceptes amb exercicis pràctics. Amb aquests fonaments, estàs preparat per aplicar la POO en els teus projectes de Flutter.
Curs de Desenvolupament Flutter
Mòdul 1: Introducció a Flutter
- Què és Flutter?
- Configuració de l'Entorn de Desenvolupament
- Comprensió de l'Arquitectura de Flutter
- Creació de la Teva Primera Aplicació Flutter
Mòdul 2: Conceptes Bàsics de Programació en Dart
- Introducció a Dart
- Variables i Tipus de Dades
- Sentències de Flux de Control
- Funcions i Mètodes
- Programació Orientada a Objectes en Dart
Mòdul 3: Widgets de Flutter
- Introducció als Widgets
- Widgets Stateless vs Stateful
- Widgets Bàsics
- Widgets de Disseny
- Widgets d'Entrada i Formulari
Mòdul 4: Gestió de l'Estat
Mòdul 5: Navegació i Enrutament
- Introducció a la Navegació
- Navegació Bàsica
- Rutes Nomenades
- Passar Dades Entre Pantalles
- Deep Linking
Mòdul 6: Xarxes i APIs
- Obtenir Dades d'Internet
- Analitzar Dades JSON
- Gestió d'Errors de Xarxa
- Ús d'APIs REST
- Integració de GraphQL
Mòdul 7: Persistència i Emmagatzematge
- Introducció a la Persistència
- Preferències Compartides
- Emmagatzematge de Fitxers
- Base de Dades SQLite
- Ús de Hive per a l'Emmagatzematge Local
Mòdul 8: Conceptes Avançats de Flutter
- Animacions en Flutter
- Pintura Personalitzada i Canvas
- Canals de Plataforma
- Isolates i Concurrència
- Optimització del Rendiment
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries
- Proves de Widgets
- Proves d'Integració
- Tècniques de Depuració
Mòdul 10: Desplegament i Manteniment
- Preparació per al Llançament
- Construcció per a iOS
- Construcció per a Android
- Integració i Desplegament Continu (CI/CD)
- Manteniment i Actualització de la Teva Aplicació
