Según tengo entendido, una interfaz de Java está destinada a imponer un diseño al diseñar métodos para que las clases que implementan la interfaz rellenen. ¿Es esta la idea con un módulo de Ruby también? Veo que al igual que con Interfaces en Java, no puedes instanciar un módulo en Ruby.¿Es un módulo Ruby equivalente a una interfaz Java?
Respuesta
Creo que igualaría un módulo a algo más parecido a un método de extensión en C#. Está agregando funcionalidad a una clase existente que en realidad está definida en otro lugar. No existe un análogo exacto ni en C# ni en Java, pero definitivamente no lo consideraría una interfaz porque se deriva tanto la implementación como la interfaz.
No. Un módulo en ruby es más parecido a una clase estática. No soy un desarrollador de Java, pero estoy adivinando que las interfaces Java son similares a las interfaces C#, es decir, definen un contrato, pero no una implementación.
No debería, aunque tengo experiencia en ruby, es en la creación de videojuegos (RGSS/2). Estoy seguro de que ignoro muchas cosas que un veterano programador de rubíes sabría.
así que si un 'ruby'' module' es como 'Java'' static class', entonces ¿es un 'ruby'' module' como 'C#' 'namespace'? – mmcrae
Un módulo en ruby es un poco de alcance/espacio de nombres que se puede agregar a otras cosas. Se usan con dos propósitos distintos pero relacionados: agrupar un montón de cosas relacionadas (constantes, clases, etc.) que pertenecen juntas y luego agregarlas a algún otro ámbito (como la herencia múltiple).
Por ejemplo, hay módulos denominados como Comparable y Enumerable, entre otros, que encapsulan la funcionalidad que esperaría que tuviera algo si se aplicaran estos adjetivos. Al proporcionar una definición básica (un método que compara dos instancias para Comparable y un iterador para Enumerable) puede importar el módulo y encontrarse con la interfaz completa.
Por otro lado, hay módulos como Net que raramente incluiría en una clase pero que proporcionan un conjunto de funcionalidades tales como Net :: HTTP, Net :: FTP, Net :: SMTP, y así sucesivamente.
En el medio hay cosas como Matemáticas y Proceso que pueden usarse de una forma u otra.
- MarkusQ
La respuesta corta es no.
Aquí está el razonamiento, una interfaz Java/C# define las firmas de métodos que una clase de implementación proporcionará como mínimo.
Además:
- Con los módulos de rubí no existe tal contrato debido a la pato-escribir.
- Los módulos son solo una forma de extraer la funcionalidad común para una fácil reutilización. La relación más cercana son los métodos de extensión C#, pero esos no son una coincidencia exacta ya que existen en un contexto estático.
- Los módulos pueden agregar estado a una clase existente.
- Los módulos pueden tener métodos estáticos
- Los módulos pueden actuar como espacios de nombres
Ejemplo:
module SimpleConversation
class NamespacedExample
def poke
puts "ouch"
end
end
attr_accessor :partner_name
def converse
partner_name ||= "Slowpoke"
speak + "\n#{partner_name}: Yes they are"
end
def self.yay
puts "yay"
end
end
class Foo
include SimpleConversation
attr_accessor :name
def speak
name ||= "Speedy"
"#{name}: tacos are yummy"
end
end
x = Foo.new
x.name = "Joe"
x.partner_name = "Max"
puts x.speak
puts x.converse
y = SimpleConversation::NamespacedExample.new
y.poke
SimpleConversation.yay
Desde el punto de vista formal de módulos en Ruby implemento diseño patrón llamado "mixin". http://en.wikipedia.org/wiki/Mixin
Se puede comparar con los rasgos PHP. http://php.net/manual/en/language.oop5.traits.php
Dicha arquitectura es útil en idiomas que no permiten la herencia múltiple, p. Ej. Ruby, PHP.
- 1. ¿Es posible crear un alias para un módulo en Ruby?
- 2. Ruby "es" equivalente
- 3. ¿Tiene Ruby/Rails un equivalente a ++?
- 4. ¿Hay un OO Perl equivalente a una interfaz?
- 5. ¿Cuál es el equivalente de Ruby para StringReader de Java?
- 6. Método de clase en Ruby (equivalente a static en JAVA)
- 7. ¿Archivo Java .properties equivalente para Ruby?
- 8. Oracle es equivalente a java System.currentTimeMillis()?
- 9. ¿Qué es una interfaz en Java?
- 10. Equivalente a "continuar" en Ruby
- 11. Ruby equivalente a PHP $ this
- 12. ¿qué es una interfaz estática en java?
- 13. Cuál es el equivalente a "Método de referencia" en Ruby
- 14. Java equivalente a app.config?
- 15. ¿Hay un equivalente Ruby del Wicket de Java?
- 16. ¿Cuál es el equivalente Ruby de os.walk de Python?
- 17. ¿Hay un Java equivalente a libevent?
- 18. ¿Cuál es el equivalente Ruby de "pythonic"?
- 19. lanzar un objeto a una interfaz en java?
- 20. ¿Cuál es el equivalente de Ruby al módulo de multiprocesamiento de Python?
- 21. ¿Qué es el equivalente "sys.stdout.write()" en Ruby?
- 22. ¿Hay un Java equivalente a MISRA C?
- 23. ¿Cuál es la diferencia entre "incluir módulo" y "extender módulo" en Ruby?
- 24. ¿Hay un equivalente a memcpy() en Java?
- 25. Haciendo que un módulo herede de otro módulo en Ruby
- 26. Equivalente a Ruby Enumerable.collect que devuelve un Enumerable?
- 27. Java equivalente a .NET System.InvalidOperationException
- 28. Python equivalente a cada_slice de Ruby (conteo)
- 29. El módulo de Ruby dado argumentos llama a un método?
- 30. ruby externalized Módulo SQL
Para mi propio beneficio aquí, ¿me equivoco en mi evaluación? Así es como los he estado usando hasta ahora, tal vez me estoy perdiendo algo. –
Puede incluir un módulo en una clase Ruby y heredar su comportamiento, al menos los métodos de instancia. Eche un vistazo a http://www.ruby-doc.org/core/classes/Module.html – tvanfosson
Es cierto, lo sabía, rara vez lo uso en el fabricante de rpg. Gracias, veo el punto ahora. –