window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versión: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster ya existe') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() ¿TENER O SER? - The Codest
The Codest
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Industrias
    • Fintech y Banca
    • E-commerce
    • Adtech
    • Tecnología sanitaria
    • Fabricación
    • Logística
    • Automoción
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
Flecha atrás VOLVER
2016-09-10
Desarrollo de software

¿TENER O SER?

Katarzyna Jaruga

Durante el aprendizaje de la programación orientada a objetos, y después de dominar los conceptos básicos de objetos, campos y métodos, se dedica la mayor parte del tiempo a la herencia. Herencia significa que adquirimos parte de la implementación de una clase base. Basta con crear una subclase de una clase base para heredar todos los campos y métodos no privados.

Un coche y un avión son vehículos, por lo que es obvio que ambas clases deben expandirse a partir de su clase base común llamada Vehículo. Este es un ejemplo académico típico, pero al decidir sobre la vinculación de estas clases con la relación de herencia, debemos ser conscientes de algunas consecuencias.

Fig. 1 Implementación de la relación de herencia.

En este caso las clases están estrechamente vinculadas entre sí - esto significa que los cambios en el comportamiento de cada clase se puede lograr mediante la realización de cambios en la clase base código. Esto puede ser tanto una ventaja como una desventaja - depende del tipo de comportamiento que esperemos. Si la herencia se aplica en el momento equivocado, el proceso de añadir una nueva función puede encontrar algunas dificultades de implementación porque no se ajustará al modelo de clase creado. Tendremos que elegir entre duplicar el código o reorganizar nuestro modelo, y puede ser un proceso que lleve mucho tiempo. Podemos llamar al código que ejecuta la relación de herencia como "abierto-cerrado" -esto significa que está abierto para extensiones pero cerrado para modificaciones. Asumiendo que en la clase Vehículo hay una operación de motor general, definida, de cada vehículo, en el momento en que quisiéramos añadir un modelo de vehículo sin motor (por ejemplo, moto) a nuestra jerarquía de clases, tendríamos que hacer algunos cambios serios en nuestras clases.

clase Vehículo
  def arrancar_motor
  end

  def parar_motor
  end
fin

clase Plane < Vehículo
  def mover
    arrancar_motor
    ...
    parar_motor
  end
fin

Composición

Si sólo nos interesa una parte del comportamiento de la clase existente, una buena alternativa a la herencia es utilizar la composición. En lugar de crear subclases que hereden todos los comportamientos (los que necesitamos y los que no necesitamos en absoluto), podemos aislar las funciones que necesitamos, y equipar nuestros objetos en referencias a ellas. De este modo, abandonamos la idea de que objeto es un tipo de un objeto base, a favor de la afirmación de que contiene sólo algunas partes de sus propiedades.

Fig. 2 Utilización de la composición

Siguiendo este enfoque podemos aislar el código que es responsable del funcionamiento del motor a la clase autónoma llamada Motor y colocar referencia a él sólo en las clases que representan vehículos con motor. Aislar las funciones con el uso de la composición hará que la estructura de la clase Vehículo sea más simple y reforzará la encapsulación de las clases individuales. Ahora, la única forma en que los vehículos pueden tener un efecto sobre el motor es utilizando su interfaz pública, porque ya no tendrán información sobre su implementación. Es más, permitirá usar diferentes tipos de motores en diferentes vehículos, e incluso permitir su intercambio mientras el programa se está ejecutando. Por supuesto, el uso de la composición no es impecable: estamos creando un conjunto de clases vagamente conectadas, que puede ampliarse fácilmente y está abierto a modificaciones. Pero, al mismo tiempo, cada clase está conectada a muchas otras clases, y debe tener información sobre sus interfaces.

clase Vehículo
fin

clase Motor
  def inicio
  end

  def parada
  end
end

class Avión < Vehículo
  def inicializar
    @motor = Motor.nuevo
  end

  def mover
    @motor.iniciar
    @motor.parada
  end

  def cambiar_motor(nuevo_motor)
    @motor = nuevo_motor
  end
fin

La elección

Ambos enfoques descritos tienen ventajas y desventajas, así que ¿cómo elegir entre ellos? La herencia es una especialización, por lo que es mejor aplicarlos sólo para los problemas, en los que hay "es-una" relaciones de tipo - por lo que nos ocupamos de la jerarquía real de los tipos. Debido a que la herencia vincula estrechamente las clases entre sí, en primer lugar, siempre debemos considerar si se debe utilizar la composición o no. La composición debe aplicarse a problemas en los que existan relaciones de tipo "tiene-un", es decir, la clase tiene muchas partes, pero es algo más que un conjunto de clases. Un avión consta de partes, pero por sí solo es algo más: tiene capacidades adicionales, como volar. Siguiendo con este ejemplo, las partes individuales pueden aparecer en diferentes variantes especializadas, y entonces es un buen momento para utilizar la herencia.

Tanto la herencia como la composición son sólo herramientas que los programadores tienen a su disposición, por lo que elegir la herramienta adecuada para un problema concreto requiere experiencia. Así que practiquemos y aprendamos de nuestros errores 🙂 .

Artículos relacionados

Desarrollo de software

Crear aplicaciones web preparadas para el futuro: ideas del equipo de expertos de The Codest

Descubra cómo The Codest destaca en la creación de aplicaciones web escalables e interactivas con tecnologías de vanguardia, ofreciendo experiencias de usuario fluidas en todas las plataformas. Descubra cómo nuestra experiencia impulsa la transformación...

EL MEJOR
Desarrollo de software

Las 10 mejores empresas de desarrollo de software de Letonia

Conozca las principales empresas de desarrollo de software de Letonia y sus innovadoras soluciones en nuestro último artículo. Descubra cómo estos líderes tecnológicos pueden ayudarle a mejorar su negocio.

thecodest
Soluciones para empresas y escalas

Fundamentos del desarrollo de software Java: Guía para externalizar con éxito

Explore esta guía esencial sobre el desarrollo de software Java outsourcing con éxito para mejorar la eficiencia, acceder a la experiencia e impulsar el éxito de los proyectos con The Codest.

thecodest
Desarrollo de software

La guía definitiva para subcontratar en Polonia

El auge de las outsourcing en Polonia está impulsado por los avances económicos, educativos y tecnológicos, que fomentan el crecimiento de las TI y un clima favorable a las empresas.

TheCodest
Soluciones para empresas y escalas

Guía completa de herramientas y técnicas de auditoría informática

Las auditorías informáticas garantizan sistemas seguros, eficientes y conformes. Obtenga más información sobre su importancia leyendo el artículo completo.

The Codest
Jakub Jakubowicz CTO y Cofundador

Suscríbase a nuestra base de conocimientos y manténgase al día de la experiencia del sector informático.

    Quiénes somos

    The Codest - Empresa internacional de desarrollo de software con centros tecnológicos en Polonia.

    Reino Unido - Sede central

    • Oficina 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polonia - Centros tecnológicos locales

    • Parque de oficinas Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Embajada del Cerebro, Konstruktorska
      11, 02-673 Varsovia, Polonia

      The Codest

    • Inicio
    • Quiénes somos
    • Servicios
    • Case Studies
    • Saber cómo
    • Carreras profesionales
    • Diccionario

      Servicios

    • Asesoramiento
    • Desarrollo de software
    • Desarrollo backend
    • Desarrollo Frontend
    • Staff Augmentation
    • Desarrolladores de backend
    • Ingenieros de la nube
    • Ingenieros de datos
    • Otros
    • Ingenieros de control de calidad

      Recursos

    • Hechos y mitos sobre la cooperación con un socio externo de desarrollo de software
    • De EE.UU. a Europa: ¿Por qué las startups estadounidenses deciden trasladarse a Europa?
    • Comparación de los polos de desarrollo de Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filipinas), Eurasia (Turquía)
    • ¿Cuáles son los principales retos de los CTO y los CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condiciones de uso del sitio web

    Copyright © 2025 por The Codest. Todos los derechos reservados.

    es_ESSpanish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean nl_NLDutch etEstonian elGreek es_ESSpanish