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 i public.

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

  1. Defineix una classe Cotxe amb les propietats marca, model i any.
  2. Crea un constructor per inicialitzar aquestes propietats.
  3. 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

  1. Crea una classe Vehicle amb les propietats marca i model.
  2. Defineix una classe Cotxe que hereti de Vehicle i afegeixi la propietat any.
  3. Sobreescriu el mètode mostrarDetalls per incloure la propietat any.
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

Mòdul 2: Conceptes Bàsics de Programació en Dart

Mòdul 3: Widgets de Flutter

Mòdul 4: Gestió de l'Estat

Mòdul 5: Navegació i Enrutament

Mòdul 6: Xarxes i APIs

Mòdul 7: Persistència i Emmagatzematge

Mòdul 8: Conceptes Avançats de Flutter

Mòdul 9: Proves i Depuració

Mòdul 10: Desplegament i Manteniment

Mòdul 11: Flutter per a Web i Escriptori

© Copyright 2024. Tots els drets reservats