Introducció

L'herència és un concepte fonamental en la programació orientada a objectes (OOP) que permet crear una nova classe basada en una classe existent. La nova classe hereta les propietats i mètodes de la classe existent, la qual es coneix com a classe base o superclasse. La nova classe es coneix com a subclasse o classe derivada.

Conceptes Clau

  • Superclasse (Classe Base): La classe de la qual s'hereten propietats i mètodes.
  • Subclasse (Classe Derivada): La classe que hereta propietats i mètodes de la superclasse.
  • Herència Simple: Swift només permet l'herència simple, és a dir, una subclasse només pot heretar d'una única superclasse.
  • Override: La subclasse pot sobreescriure mètodes i propietats de la superclasse per proporcionar una implementació específica.

Sintaxi Bàsica

Definició d'una Superclasse

class Vehicle {
    var currentSpeed = 0.0
    
    func describe() -> String {
        return "Traveling at \(currentSpeed) miles per hour"
    }
}

Definició d'una Subclasse

class Bicycle: Vehicle {
    var hasBasket = false
}

Utilització de la Subclasse

let bike = Bicycle()
bike.currentSpeed = 15.0
bike.hasBasket = true
print(bike.describe())  // Output: Traveling at 15.0 miles per hour

Sobreescriptura de Mètodes

La subclasse pot sobreescriure mètodes de la superclasse per proporcionar una implementació específica. Per fer-ho, es fa servir la paraula clau override.

Exemple de Sobreescriptura

class Car: Vehicle {
    var gear = 1
    
    override func describe() -> String {
        return super.describe() + " in gear \(gear)"
    }
}

Utilització de la Subclasse amb Sobreescriptura

let car = Car()
car.currentSpeed = 50.0
car.gear = 3
print(car.describe())  // Output: Traveling at 50.0 miles per hour in gear 3

Propietats Heretades

Les subclasses hereten totes les propietats de la superclasse i poden afegir-ne de noves.

Exemple amb Propietats Heretades

class Train: Vehicle {
    var numberOfCarriages = 0
    
    override func describe() -> String {
        return super.describe() + " with \(numberOfCarriages) carriages"
    }
}

let train = Train()
train.currentSpeed = 100.0
train.numberOfCarriages = 12
print(train.describe())  // Output: Traveling at 100.0 miles per hour with 12 carriages

Exercicis Pràctics

Exercici 1: Crear una Subclasse

  1. Defineix una superclasse anomenada Animal amb una propietat name i un mètode makeSound().
  2. Crea una subclasse anomenada Dog que hereti de Animal i sobreescrigui el mètode makeSound() per imprimir "Woof!".

Solució

class Animal {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func makeSound() {
        print("Some generic sound")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Woof!")
    }
}

let dog = Dog(name: "Buddy")
dog.makeSound()  // Output: Woof!

Exercici 2: Afegir Propietats a la Subclasse

  1. Afegeix una propietat breed a la subclasse Dog.
  2. Modifica el mètode makeSound() per incloure la raça del gos en la sortida.

Solució

class Dog: Animal {
    var breed: String
    
    init(name: String, breed: String) {
        self.breed = breed
        super.init(name: name)
    }
    
    override func makeSound() {
        print("\(name) the \(breed) says Woof!")
    }
}

let dog = Dog(name: "Buddy", breed: "Golden Retriever")
dog.makeSound()  // Output: Buddy the Golden Retriever says Woof!

Conclusió

L'herència és una eina poderosa en Swift que permet reutilitzar codi i crear jerarquies de classes. Comprendre com definir subclasses, sobreescriure mètodes i afegir noves propietats és essencial per escriure codi orientat a objectes de manera eficient. Amb aquests coneixements, estàs preparat per explorar conceptes més avançats com el polimorfisme i els protocols.

© Copyright 2024. Tots els drets reservats