ruby - Rasgos vs. Interfaces vs. Mixins?
scala oop (1)
Cada tipo de referencia en Java, excepto Object
, deriva de una única superclase.
Por cierto, las clases Java pueden implementar cero o más interfaces.
En términos generales, una interfaz es un contrato que describe los métodos que una clase implementadora está obligada a tener, aunque sin proporcionar directamente una implementación.
En otras palabras, una clase de Java está obligada a cumplir con su contrato y, por lo tanto, a dar implementación a las firmas de métodos proporcionadas por las interfaces que declara implementar.
Una interfaz constituye un tipo. Por lo tanto, puede pasar parámetros y obtener valores de retorno de métodos declarados como tipos de interfaz, lo que requiere que los parámetros y tipos de retorno implementen métodos particulares sin necesariamente proporcionar una implementación concreta para ellos.
Esto establece la base para varios patrones de abstracción, como, por ejemplo, la inyección de dependencia .
Scala, en sí mismo, tiene rasgos. Los rasgos le proporcionan todas las características de las interfaces de Java, con la diferencia significativa de que pueden contener implementaciones de métodos y variables. Los rasgos son una forma inteligente de implementar métodos solo una vez y, de ese modo, distribuir esos métodos en todas las clases que extienden el rasgo. Al igual que las interfaces para clases de Java, puede combinar más de un rasgo en una clase de Scala.
Sin embargo, como no tengo antecedentes de Ruby, te indicaré un extracto de "Beginning Scala" de David Pollak ( enlace de amazon ):
Ruby tiene mixins, que son colecciones de métodos que se pueden mezclar en cualquier clase. Debido a que Ruby no tiene escritura estática y no hay manera de declarar los tipos de parámetros de método, no hay una manera razonable de usar mixins para definir un contrato como interfaces. Los mixins de Ruby proporcionan un mecanismo para componer el código en clases, pero no un mecanismo para definir o aplicar tipos de parámetros.
Las interfaces pueden hacer incluso más de lo que se describe en esta publicación; Como el tema puede ser vasto, le sugiero que investigue más en cada una de las tres direcciones, mientras que si tiene antecedentes en Java, Scala y, por lo tanto, los rasgos son asequibles para aprender.
¿Cuáles son las similitudes y diferencias entre rasgos, combinaciones e interfaces? Estoy tratando de comprender mejor estos conceptos, pero no conozco suficientes lenguajes de programación que implementen estas funciones para comprender realmente las similitudes y diferencias.
Para cada uno de los rasgos, mixins e interfaces.
- ¿Cuál es el problema que se está resolviendo?
- ¿Es la definición del concepto consistente en todos los lenguajes de programación?
- ¿Cuáles son las similitudes entre él y los demás?
- ¿Cuáles son las diferencias entre él y los demás?