Mixins

En Ruby, además de herencia, tenemos mixins: una forma flexible de reutilizar código, que nos es útil cuando queremos agregar el mismo método a clases en jerarquías de herencia diferentes.

Por ejemplo, en nuestro problema de guerreros, murallas y magos, podríamos hacer lo siguiente:

# module en Ruby nos permite declarar mixins
module Defensor
  def defender_de!(enemigo)
    #...
  end
end

module Atacante
  def atacar!(enemigo)
    #...
  end
end

class Mago < Unidad
end

class Guerrero < Unidad
  # include Defensor nos permite declarar que Guerrero, además de sus propios métodos y los de Unidad, 
  # tiene los métodos definidos en el mixin Defensor
  include Defensor
  include Atacante
end

class Muralla < Unidad
  include Defensor
end

Veamos si se entiende:

¡Nos olvidamos de declarar la clase Misil! ¿Lo hacés por nosotros? Tiene que heredar de Unidad e incluir el mixin Atacante

Tenés que iniciar sesión antes de empezar a enviar tus soluciones