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
abstractper 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
Shapeamb un mètode abstractedouble area(). - Crea dues subclasses
CircleiRectangleque 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 classeShapeque 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
