Code Monkey home page Code Monkey logo

descubriendomensajes's Introduction

I. Descubriendo métodos faltantes

Queremos tener la posibilidad de ir descubriendo qué métodos necesita cada clase de un diseño que se va armando. Para eso, crear una clase ADescubrir, subclase de Object, que no agregue comportamiento. Cuando una instancia de un descendiente de ADescubrir recibe un mensaje que no puede procesar, se debe registrar, de forma tal que se pueda consultar para cada clase, qu ́e mensajes se le enviaron a alguna instancia que no pudo responder, y para cada uno de estos mensajes, cuántas veces. A cada descendiente de ADescubrir se le tiene que poder preguntar:

  • qué mensajes se le han enviado a sus instancias, que no han podido responder
  • dado un mensaje, cuántas veces se lo ha enviado.

Ambas deben ser consultas a la clase, p.ej.

Perro.mensajesRecibidos
Perro.cuantasVecesRecibiste(:ladrar)

donde Perro es descendiente de ADescubrir. Ejemplo: si se crea la clase Perro, y despu ́es de hace lo siguiente

lassie = Perro.new
toby = Perro.new
lassie.ladrar
toby.ladrar
toby.ladrar
toby.correr

la respuesta a Perro.mensajesRecibidos debe ser [:ladrar, :correr], y Perro.cuantasVecesRecibiste(:ladrar) debe devolver 3.

II. A qué clases me parezco

Poder preguntarle a un descendiente de ADescubrir qu ́e clases existentes (no los descendientes de ADescubrir, sino las “clases de verdad”) se le parecen. P.ej.

Perro.queClasesSeMeParecen

La clase D, que es una clase que desciende de ADescubrir, se parece a una clase C si: se le envió al menos un mensaje a D, y todos los mensajes que se le enviaron a D, los entienden las instancias de C. P.ej. si los mensajes que recibieron instancias de Cuchuflito son :size y :upcase, entonces la respuesta a Cuchuflito.queClasesSeMeParecen debe incluir String, porque los Strings entienden estos dos mensajes.

III. Generación de métodos faltantes

Poder pedirle a un descendiente de ADescubrir que cree métodos para todos los mensajes que se le enviaron al menos n veces, donde el n es un parámetro. Los métodos agregados deben devolver el String "Soy un XXXX y me estan enviando el mensaje YYYY", donde XXXX es la clase e YYYY es el selector. Sobre el ejemplo de la parte 1, después de evaluar

Perro.crearMetodosParaMensajesFaltantes(2)

al hacer

lassie.ladrar

tiene que entender el mensaje, y tiene que devolver

Soy un Perro y me estan enviando el mensaje ladrar

Adicionalmente a crearMetodosParaMensajesFaltantes(n), tiene que implementarse también una variante, que se llame crearMetodosParaMensajesFaltantesConDescendientes(n), que cree los métodos de acuerdo a lo recién explicado, para la clase que recibe el mensaje (hasta acá es igual al método pedido antes) y también para todos sus descendientes (esto es lo que tiene de distinto el nuevo método). P.ej. si hago

ADescubrir.crearMetodosParaMensajesFaltantesConDescendientes(2)

lo hace para ADescubrir, y también para todos sus descendientes.

IV. Bonus

Lo mismo del punto 3, pero en lugar de crear los métodos, generar un archivo de texto con el fuente. P.ej. si el único mensaje para agregar es Perro.ladrar, entonces el archivo tiene que tener esta forma.

class Perro
  def ladrar
    return "Soy un Perro y me estan enviando el mensaje ladrar"
  end
end

descubriendomensajes's People

Contributors

faloi avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.