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
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
- Defineix una superclasse anomenada
Animal
amb una propietatname
i un mètodemakeSound()
. - Crea una subclasse anomenada
Dog
que hereti deAnimal
i sobreescrigui el mètodemakeSound()
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
- Afegeix una propietat
breed
a la subclasseDog
. - 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.
Curs de Programació en Swift
Mòdul 1: Introducció a Swift
- Introducció a Swift
- Configuració de l'Entorn de Desenvolupament
- El Teu Primer Programa en Swift
- Sintaxi i Estructura Bàsica
- Variables i Constants
- Tipus de Dades
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Closures
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Closures
- Funcions d'Ordre Superior
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Swift Avançat
Mòdul 6: Swift i Desenvolupament iOS
- Introducció al Desenvolupament iOS
- Conceptes Bàsics de UIKit
- Storyboards i Interface Builder
- Xarxes en Swift
- Core Data
- Conceptes Bàsics de SwiftUI