Herencia de Clases en Programación Orientada a Objetos

Clase 16 de 27Curso de Programación Orientada a Objetos en Swift

Resumen

Domina la herencia en Swift con un ejemplo claro y práctico: crea una superclase con propiedades y métodos comunes, y extiéndela con subclases que añaden comportamientos específicos. Así reutilizas código, evitas duplicidades y construyes jerarquías que escalan sin esfuerzo.

¿Qué es la herencia y por qué acelera tu desarrollo?

La herencia permite que una clase hija adquiera automáticamente las propiedades y métodos de su clase madre. Si necesitas una clase “igual pero con algo más”, la subclase hereda lo común y añade lo propio. En el ejemplo, Vehicle sirve como base para especializar en Bicycle y Tandem.

  • Superclase: define lo común a todos los tipos.
  • Subclase: hereda y agrega nuevas características.
  • Propiedad autocomputada: calcula su valor al accederse.
  • Beneficio clave: menos código repetido y más claridad.

¿Cómo se implementa la herencia con clases en Swift?

Partimos de un Playground nuevo y definimos una jerarquía simple. Observa cómo cada subclase amplía a la anterior sin reescribir lo ya hecho.

¿Cómo se define la superclase vehicle?

class Vehicle {
    var currentSpeed: Double = 0.0
    var description: String {
        return "viajando a \(currentSpeed) kilómetros por hora"
    }
    func makeNoise() {
        // do nothing: cada vehículo hará su propio ruido.
    }
}

let someVehicle = Vehicle()
print(someVehicle.description) // "viajando a 0.0 kilómetros por hora"
  • Modela lo común: velocidad y description como propiedad autocomputada.
  • Prepara un método para especializar: makeNoise() sin implementación aquí.

¿Cómo hereda bicycle y añade propiedades?

class Bicycle: Vehicle {
    var hasBasket: Bool = false
}

let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15
print(bicycle.description) // "viajando a 15.0 kilómetros por hora"
  • Bicycle es “un vehículo con algo extra”: hasBasket.
  • Hereda currentSpeed, description y makeNoise() de Vehicle.

¿Cómo especializa tandem sobre bicycle?

class Tandem: Bicycle {
    var currentNumberOfPassengers: Int = 0
}

let tandem = Tandem()
tandem.hasBasket = true
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22
print(tandem.description) // "viajando a 22.0 kilómetros por hora"
  • Tandem hereda de Bicycle y agrega currentNumberOfPassengers.
  • Modifica propiedades heredadas y mantiene el acceso a description.

¿Qué jerarquías conviene practicar y qué habilidades desarrollas?

A partir de Vehicle, crea árboles de clases para un videojuego con distintos tipos de vehículos. Úsalos como ejercicio de diseño: define qué comparte el padre y qué añade cada hijo.

  • Desde Vehicle: coche, moto, barco, bicicleta.
  • Desde coche: Fórmula uno, coche de calle, tanqueta, furgoneta.
  • Desde moto: moto eléctrica, moto de gasolina, patineta.
  • Desde barco: transatlántico, yate, barquita de pesca.

Propiedades y métodos a considerar en los hijos. - Cilindrada y tipo de motor. - Tipo de combustible o capacidad eléctrica. - Acciones específicas: ruidos distintos en makeNoise().

Habilidades que refuerzas al practicar. - Modelar una jerarquía con clase madre e hijos. - Detectar atributos comunes vs. específicos. - Instanciar objetos y modificar propiedades heredadas. - Prepararte para sobrescribir variables y métodos más adelante.

¿Qué vehículos añadirías y qué propiedades los hacen únicos? Comparte ideas y casos de uso en comentarios.