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
Animal
tiene un métodomakeSound
que imprime un sonido genérico.
- La clase
-
Clases Derivadas
Dog
yCat
:class Dog: Animal { override func makeSound() { print("Woof!") } } class Cat: Animal { override func makeSound() { print("Meow!") } }
- Las clases
Dog
yCat
sobrescriben el métodomakeSound
para 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
Animal
que contiene instancias deDog
yCat
. - Iteramos sobre el array y llamamos al método
makeSound
en 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
Vehicle
con un métodomove
que imprima "Vehicle is moving". - **Crear dos clases derivadas
Car
yBicycle
que sobrescriban el métodomove
para imprimir "Car is driving" y "Bicycle is pedaling", respectivamente. - **Crear un array de
Vehicle
que contenga instancias deCar
yBicycle
. - **Iterar sobre el array y llamar al método
move
en 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