Meu objetivo é definir contratos entre classes.
Eu gosto de digitar duck e tudo, mas também gostaria de definir uma interface entre diferentes camadas do meu aplicativo para definir claramente qual é o método a ser chamado a partir do externo e quais são os métodos acessórios que não devem ser usados pela outra camada .
Por exemplo, em Java, posso definir uma interface Persistor com métodos como get () e save () e, em seguida, definir uma classe JdbcPersistor com todos os métodos necessários para persistir no banco de dados. E talvez outro RestPersistor com outros métodos para salvar em um restserver remoto.
Não estou pedindo interfaces em Ruby, apenas para saber se existe uma maneira elegante de manter essa distinção. Eu gosto de Ruby, mas trabalhei apenas em pequenos projetos.
fonte
Respostas:
Isso foi respondido no contexto de interfaces C # e Ruby no stackoverflow: /programming/3505521/in-ruby-what-is-the-equivalent-to-an-interface-in-c .
Resumido: não existe um equivalente exato no Ruby, pois a digitação com patos torna desnecessária uma interface formal. Em vez disso, considere testar a conformidade com uma "interface" ou contrato usando
respond_to?
.fonte
Algumas linguagens de tipo dinâmico têm interfaces ou um conceito semelhante. Por exemplo, Objective-C possui protocolos. Mas a maioria não. Para ser eficaz em uma linguagem dinâmica, você precisa esquecer o que sabe sobre linguagens de tipo estaticamente, abraçar a natureza dinâmica da linguagem. Linguagens tipicamente dinamicamente evitam o uso de interfaces.
fonte
No Perl 5, o Moose e o Moo fornecem funções (ou características) que podem exigir a implementação de certos métodos. O Moose também vem com um sistema de tipo de tempo de execução que permite definir a
duck_type
, que é um tipo que declara objetos com um conjunto de métodos necessário.As funções são implementadas pelas próprias classes (ou outras funções) e também fornecem implementação e comportamento, não apenas a interface. Mas eles também (pelo menos no Moose) lidam com coisas como a detecção de conflitos de métodos.
fonte