El polimorfismo es uno de los pilares fundamentales de la programación orientada a objetos (POO). En Swift, el polimorfismo permite que una clase o estructura pueda ser tratada como una instancia de su clase base o protocolo, lo que facilita la reutilización de código y la flexibilidad en el diseño de software.
Conceptos Clave
- Polimorfismo de Subtipo: Permite que una instancia de una clase derivada sea tratada como una instancia de su clase base.
- Polimorfismo Paramétrico: Permite que funciones o métodos operen en diferentes tipos de datos sin cambiar su implementación.
- Sobrescritura de Métodos: Permite que una clase derivada proporcione una implementación específica de un método que ya está definido en su clase base.
Ejemplo Práctico
Clases Base y Derivadas
Primero, definamos una clase base Animal y dos clases derivadas Dog y Cat.
class Animal {
func makeSound() {
print("Some generic animal sound")
}
}
class Dog: Animal {
override func makeSound() {
print("Woof!")
}
}
class Cat: Animal {
override func makeSound() {
print("Meow!")
}
}Uso del Polimorfismo
Ahora, veamos cómo podemos usar el polimorfismo para tratar instancias de Dog y Cat como instancias de Animal.
Salida esperada:
Explicación del Código
-
Definición de la Clase Base
Animal:class Animal { func makeSound() { print("Some generic animal sound") } }- La clase
Animaltiene un métodomakeSoundque imprime un sonido genérico.
- La clase
-
Clases Derivadas
DogyCat:class Dog: Animal { override func makeSound() { print("Woof!") } } class Cat: Animal { override func makeSound() { print("Meow!") } }- Las clases
DogyCatsobrescriben el métodomakeSoundpara proporcionar su propia implementación.
- Las clases
-
Uso del Polimorfismo:
let animals: [Animal] = [Dog(), Cat(), Dog()] for animal in animals { animal.makeSound() }- Creamos un array de
Animalque contiene instancias deDogyCat. - Iteramos sobre el array y llamamos al método
makeSounden cada instancia. Gracias al polimorfismo, se llama a la implementación correcta del método según el tipo real del objeto.
- Creamos un array de
Ejercicio Práctico
Ejercicio 1: Polimorfismo con Vehículos
- **Definir una clase base
Vehiclecon un métodomoveque imprima "Vehicle is moving". - **Crear dos clases derivadas
CaryBicycleque sobrescriban el métodomovepara imprimir "Car is driving" y "Bicycle is pedaling", respectivamente. - **Crear un array de
Vehicleque contenga instancias deCaryBicycle. - **Iterar sobre el array y llamar al método
moveen cada instancia.
Solución
class Vehicle {
func move() {
print("Vehicle is moving")
}
}
class Car: Vehicle {
override func move() {
print("Car is driving")
}
}
class Bicycle: Vehicle {
override func move() {
print("Bicycle is pedaling")
}
}
let vehicles: [Vehicle] = [Car(), Bicycle(), Car()]
for vehicle in vehicles {
vehicle.move()
}Salida esperada:
Resumen
En esta sección, hemos aprendido sobre el polimorfismo en Swift, un concepto clave en la programación orientada a objetos. Hemos visto cómo las clases derivadas pueden sobrescribir métodos de la clase base y cómo podemos tratar instancias de clases derivadas como instancias de su clase base. También hemos practicado estos conceptos con ejemplos y ejercicios prácticos.
En la siguiente sección, exploraremos los Protocolos, que son una parte esencial de la programación en Swift y nos permiten definir interfaces comunes para clases, estructuras y enumeraciones.
Curso de Programación en Swift
Módulo 1: Introducción a Swift
- Introducción a Swift
- Configuración del Entorno de Desarrollo
- Tu Primer Programa en Swift
- Sintaxis y Estructura Básica
- Variables y Constantes
- Tipos de Datos
Módulo 2: Control de Flujo
Módulo 3: Funciones y Closures
- Definición y Llamada de Funciones
- Parámetros de Función y Valores de Retorno
- Closures
- Funciones de Orden Superior
Módulo 4: Programación Orientada a Objetos
Módulo 5: Swift Avanzado
Módulo 6: Swift y Desarrollo de iOS
- Introducción al Desarrollo de iOS
- Fundamentos de UIKit
- Storyboards y Interface Builder
- Redes en Swift
- Core Data
- Fundamentos de SwiftUI
