La herència és un dels pilars fonamentals de la programació orientada a objectes (OOP). Permet crear una nova classe (classe derivada) que hereta els membres (propietats, mètodes, etc.) d'una classe existent (classe base). Això facilita la reutilització del codi i la creació de jerarquies de classes.
Conceptes Clau
- Classe Base (Superclasse): La classe de la qual s'hereten els membres.
- Classe Derivada (Subclasse): La classe que hereta els membres de la classe base.
- Membres Heretats: Propietats, mètodes i altres membres que es transmeten de la classe base a la classe derivada.
- Modificadors d'Accés: Controlen la visibilitat dels membres heretats (public, protected, private).
Sintaxi Bàsica
// Definició de la classe base public class Animal { public string Nom { get; set; } public void Menjar() { Console.WriteLine("L'animal està menjant."); } } // Definició de la classe derivada public class Gos : Animal { public void Bordar() { Console.WriteLine("El gos està bordant."); } }
Explicació del Codi
-
Classe Base
Animal
:- Té una propietat
Nom
. - Té un mètode
Menjar()
.
- Té una propietat
-
Classe Derivada
Gos
:- Hereta la propietat
Nom
i el mètodeMenjar()
de la classeAnimal
. - Defineix un mètode addicional
Bordar()
.
- Hereta la propietat
Exemple Pràctic
public class Program { public static void Main(string[] args) { Gos meuGos = new Gos(); meuGos.Nom = "Rex"; meuGos.Menjar(); meuGos.Bordar(); } }
Sortida Esperada
Exercicis Pràctics
Exercici 1: Crear una Jerarquia de Classes
-
Descripció: Crea una classe base
Vehicle
amb propietatsMarca
iModel
, i un mètodeConduir()
. Després, crea una classe derivadaCotxe
que afegeixi una propietatNombreDePortes
i un mètodeTocarClaxon()
. -
Solució:
public class Vehicle { public string Marca { get; set; } public string Model { get; set; } public void Conduir() { Console.WriteLine("El vehicle està conduint."); } } public class Cotxe : Vehicle { public int NombreDePortes { get; set; } public void TocarClaxon() { Console.WriteLine("El cotxe està tocant el claxon."); } } public class Program { public static void Main(string[] args) { Cotxe meuCotxe = new Cotxe(); meuCotxe.Marca = "Toyota"; meuCotxe.Model = "Corolla"; meuCotxe.NombreDePortes = 4; meuCotxe.Conduir(); meuCotxe.TocarClaxon(); } }
Exercici 2: Herència i Polimorfisme
-
Descripció: Crea una classe base
Empleat
amb una propietatNom
i un mètodeTreballar()
. Després, crea dues classes derivadesEnginyer
iDissenyador
que sobreescriguin el mètodeTreballar()
per mostrar missatges específics. -
Solució:
public class Empleat { public string Nom { get; set; } public virtual void Treballar() { Console.WriteLine("L'empleat està treballant."); } } public class Enginyer : Empleat { public override void Treballar() { Console.WriteLine("L'enginyer està dissenyant un sistema."); } } public class Dissenyador : Empleat { public override void Treballar() { Console.WriteLine("El dissenyador està creant un disseny."); } } public class Program { public static void Main(string[] args) { Empleat[] empleats = new Empleat[2]; empleats[0] = new Enginyer { Nom = "Anna" }; empleats[1] = new Dissenyador { Nom = "Joan" }; foreach (Empleat empleat in empleats) { Console.WriteLine($"{empleat.Nom} està treballant:"); empleat.Treballar(); } } }
Sortida Esperada
Anna està treballant: L'enginyer està dissenyant un sistema. Joan està treballant: El dissenyador està creant un disseny.
Errors Comuns i Consells
-
Oblidar el Modificador
virtual
ooverride
:- Quan es vol sobreescriure un mètode de la classe base, assegura't que el mètode de la classe base estigui marcat com
virtual
i el mètode de la classe derivada comoverride
.
- Quan es vol sobreescriure un mètode de la classe base, assegura't que el mètode de la classe base estigui marcat com
-
No Inicialitzar Propietats Heretades:
- Recorda que les propietats heretades de la classe base també han de ser inicialitzades si és necessari.
-
Confusió amb els Modificadors d'Accés:
- Utilitza
protected
si vols que els membres siguin accessibles només dins de la classe base i les seves derivades.
- Utilitza
Resum
En aquesta secció, hem après sobre la herència en C#, com crear classes base i derivades, i com utilitzar els membres heretats. També hem vist exemples pràctics i exercicis per reforçar els conceptes. La herència és una eina poderosa per a la reutilització del codi i la creació de jerarquies de classes, facilitant així el desenvolupament de programari modular i mantenible.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització