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
private
ipublic
.
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
Cotxe
amb les propietatsmarca
,model
iany
. - Crea un constructor per inicialitzar aquestes propietats.
- Afegeix un mètode
mostrarDetalls
que 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
Vehicle
amb les propietatsmarca
imodel
. - Defineix una classe
Cotxe
que hereti deVehicle
i afegeixi la propietatany
. - Sobreescriu el mètode
mostrarDetalls
per 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ó