Les interfícies són un concepte fonamental en la programació orientada a objectes (OOP) que permeten definir contractes que les classes poden implementar. En Dart, les interfícies no es declaren explícitament com en alguns altres llenguatges de programació (com Java). En canvi, qualsevol classe pot actuar com una interfície, i altres classes poden implementar aquesta interfície.

Conceptes Clau

  1. Definició d'Interfície: En Dart, qualsevol classe pot ser utilitzada com una interfície.
  2. Implementació d'Interfície: Les classes poden implementar múltiples interfícies.
  3. Contracte: Una interfície defineix un contracte que les classes que la implementen han de seguir.

Definició d'Interfície

En Dart, una interfície es defineix simplement creant una classe amb mètodes i propietats sense implementació. Aquí teniu un exemple:

class Animal {
  void ferSoroll();
}

En aquest exemple, Animal actua com una interfície amb un mètode ferSoroll que no té implementació.

Implementació d'Interfície

Una classe que implementa una interfície ha de proporcionar una implementació per a tots els mètodes i propietats definits en la interfície. Aquí teniu un exemple:

class Gos implements Animal {
  @override
  void ferSoroll() {
    print('Guau!');
  }
}

class Gat implements Animal {
  @override
  void ferSoroll() {
    print('Miau!');
  }
}

En aquest exemple, les classes Gos i Gat implementen la interfície Animal i proporcionen les seves pròpies versions del mètode ferSoroll.

Exemple Pràctic

Vegem un exemple més complet que inclou diverses interfícies i classes que les implementen:

class Volador {
  void volar();
}

class Caminador {
  void caminar();
}

class Ocell implements Volador, Caminador {
  @override
  void volar() {
    print('L\'ocell està volant.');
  }

  @override
  void caminar() {
    print('L\'ocell està caminant.');
  }
}

class Avio implements Volador {
  @override
  void volar() {
    print('L\'avió està volant.');
  }
}

void main() {
  Ocell ocell = Ocell();
  ocell.volar();
  ocell.caminar();

  Avio avio = Avio();
  avio.volar();
}

Exercicis Pràctics

Exercici 1

Descripció: Crea una interfície Nadador amb un mètode nadar. Implementa aquesta interfície en dues classes: Peix i Humà.

Solució:

class Nadador {
  void nadar();
}

class Peix implements Nadador {
  @override
  void nadar() {
    print('El peix està nedant.');
  }
}

class Huma implements Nadador {
  @override
  void nadar() {
    print('L\'humà està nedant.');
  }
}

void main() {
  Peix peix = Peix();
  peix.nadar();

  Huma huma = Huma();
  huma.nadar();
}

Exercici 2

Descripció: Crea una interfície Conductor amb un mètode conduir. Implementa aquesta interfície en dues classes: Cotxe i Bicicleta.

Solució:

class Conductor {
  void conduir();
}

class Cotxe implements Conductor {
  @override
  void conduir() {
    print('El cotxe està conduint.');
  }
}

class Bicicleta implements Conductor {
  @override
  void conduir() {
    print('La bicicleta està conduint.');
  }
}

void main() {
  Cotxe cotxe = Cotxe();
  cotxe.conduir();

  Bicicleta bicicleta = Bicicleta();
  bicicleta.conduir();
}

Errors Comuns i Consells

  1. No Implementar Tots els Mètodes: Si una classe implementa una interfície, ha de proporcionar implementacions per a tots els mètodes de la interfície. Si no ho fa, es produirà un error de compilació.
  2. Confusió amb Herència: Recorda que implementar una interfície no és el mateix que heretar d'una classe. Una classe pot implementar múltiples interfícies, però només pot heretar d'una sola classe.

Conclusió

Les interfícies són una eina poderosa per definir contractes en la programació orientada a objectes. En Dart, qualsevol classe pot actuar com una interfície, i altres classes poden implementar aquestes interfícies per proporcionar funcionalitats específiques. Amb la pràctica, l'ús d'interfícies esdevindrà una part natural del teu flux de treball de programació.

© Copyright 2024. Tots els drets reservats