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.