Les classes abstractes són un concepte fonamental en la programació orientada a objectes (OOP) que permeten definir una estructura base per a altres classes. En Dart, les classes abstractes es declaren amb la paraula clau abstract
i no es poden instanciar directament. Aquestes classes poden contenir mètodes abstractes (sense implementació) que han de ser implementats per les subclasses, així com mètodes concrets (amb implementació).
Conceptes Clau
-
Declaració de Classes Abstractes:
- Utilitza la paraula clau
abstract
per declarar una classe abstracta. - Les classes abstractes no es poden instanciar directament.
- Utilitza la paraula clau
-
Mètodes Abstractes:
- Són mètodes que no tenen implementació a la classe abstracta.
- Les subclasses han d'implementar aquests mètodes.
-
Mètodes Concrets:
- Són mètodes que tenen una implementació a la classe abstracta.
- Les subclasses poden utilitzar aquests mètodes tal com estan o sobreescriure'ls.
Exemple Pràctic
Declaració d'una Classe Abstracta
abstract class Animal { // Mètode abstracte void makeSound(); // Mètode concret void sleep() { print('Sleeping...'); } }
Implementació d'una Subclasse
class Dog extends Animal { // Implementació del mètode abstracte @override void makeSound() { print('Bark!'); } } class Cat extends Animal { // Implementació del mètode abstracte @override void makeSound() { print('Meow!'); } }
Utilització de les Subclasses
void main() { Dog dog = Dog(); dog.makeSound(); // Output: Bark! dog.sleep(); // Output: Sleeping... Cat cat = Cat(); cat.makeSound(); // Output: Meow! cat.sleep(); // Output: Sleeping... }
Exercicis Pràctics
Exercici 1: Crear una Classe Abstracta
- Declara una classe abstracta anomenada
Shape
amb un mètode abstractedouble area()
. - Crea dues subclasses
Circle
iRectangle
que implementin el mètodearea()
.
abstract class Shape { double area(); } class Circle extends Shape { double radius; Circle(this.radius); @override double area() { return 3.14 * radius * radius; } } class Rectangle extends Shape { double width; double height; Rectangle(this.width, this.height); @override double area() { return width * height; } } void main() { Circle circle = Circle(5); print('Area of Circle: ${circle.area()}'); // Output: Area of Circle: 78.5 Rectangle rectangle = Rectangle(4, 5); print('Area of Rectangle: ${rectangle.area()}'); // Output: Area of Rectangle: 20 }
Exercici 2: Afegir Mètodes Concrets
- Afegeix un mètode concret
void describe()
a la classeShape
que imprimeixi un missatge genèric. - Sobreescriu el mètode
describe()
a les subclasses per proporcionar una descripció específica.
abstract class Shape { double area(); void describe() { print('This is a shape.'); } } class Circle extends Shape { double radius; Circle(this.radius); @override double area() { return 3.14 * radius * radius; } @override void describe() { print('This is a circle with radius $radius.'); } } class Rectangle extends Shape { double width; double height; Rectangle(this.width, this.height); @override double area() { return width * height; } @override void describe() { print('This is a rectangle with width $width and height $height.'); } } void main() { Circle circle = Circle(5); circle.describe(); // Output: This is a circle with radius 5. print('Area of Circle: ${circle.area()}'); // Output: Area of Circle: 78.5 Rectangle rectangle = Rectangle(4, 5); rectangle.describe(); // Output: This is a rectangle with width 4 and height 5. print('Area of Rectangle: ${rectangle.area()}'); // Output: Area of Rectangle: 20 }
Errors Comuns i Consells
-
No Implementar Mètodes Abstractes:
- Si una subclasse no implementa tots els mètodes abstractes de la seva classe base, es produirà un error de compilació.
- Consell: Assegura't d'implementar tots els mètodes abstractes a les subclasses.
-
Intentar Instanciar una Classe Abstracta:
- Intentar crear una instància d'una classe abstracta produirà un error.
- Consell: Utilitza subclasses concretes per crear instàncies.
Resum
En aquesta secció, hem après sobre les classes abstractes en Dart, incloent com declarar-les, com definir mètodes abstractes i concrets, i com implementar subclasses que hereten d'aquestes classes abstractes. També hem vist exemples pràctics i exercicis per reforçar els conceptes apresos. Les classes abstractes són una eina poderosa per crear jerarquies de classes ben estructurades i reutilitzables.
Curs de Programació en Dart
Mòdul 1: Introducció a Dart
- Introducció a Dart
- Configuració de l'Entorn de Desenvolupament
- El Teu Primer Programa en Dart
- Sintaxi i Estructura Bàsica
Mòdul 2: Conceptes Bàsics de Dart
Mòdul 3: Col·leccions
Mòdul 4: Programació Orientada a Objectes en Dart
Mòdul 5: Funcionalitats Avançades de Dart
Mòdul 6: Gestió d'Errors i Depuració
Mòdul 7: Paquets i Biblioteques de Dart
Mòdul 8: Dart per a Web i Mòbil
- Introducció a Flutter
- Construcció d'una Aplicació Simple amb Flutter
- Dart per al Desenvolupament Web