Cosa posso usare al posto delle interfacce in Ruby (o in qualsiasi altro linguaggio dinamico)?

9

Il mio obiettivo è definire i contratti tra le classi.

Mi piace la digitazione anatra e tutto, ma vorrei anche definire un'interfaccia tra diversi livelli della mia applicazione per definire chiaramente quali sono i metodi da chiamare dall'esterno e quali sono i metodi accessori che non dovrebbero essere usati da l'altro livello.

Ad esempio in Java posso definire un'interfaccia Persistor con metodi come get () e save () e quindi definire una classe JdbcPersistor con tutti i metodi che devo perseguire sul database. E forse un altro RestPersistor con altri metodi per il salvataggio su un server di ripristino remoto.

Non sto chiedendo interfacce in Ruby, solo per sapere se c'è un modo pulito per mantenere questa distinzione. Mi piace Ruby ma ho lavorato solo su piccoli progetti con esso.

    
posta Uberto 27.01.2011 - 12:43
fonte

3 risposte

5

Questo è stato risolto nel contesto delle interfacce C # e Ruby su stackoverflow: link .

Riassunto: non esiste un equivalente esatto in Ruby poiché la digitazione anatra rende superflua un'interfaccia formale. Prendi invece in considerazione la verifica della conformità a una "interfaccia" o un contratto utilizzando respond_to? .

    
risposta data 27.01.2011 - 14:37
fonte
2

Alcune lingue con caratteri dinamici hanno interfacce o un concetto simile. Ad esempio, Objective-C ha protocolli. Ma la maggior parte non lo fa. Per essere efficace in un linguaggio dinamico, devi dimenticare ciò che sai delle lingue tipizzate staticamente, abbracciare la natura dinamica della lingua. Le lingue digitate in modo dinamico generalmente evitano l'uso delle interfacce.

    
risposta data 27.01.2011 - 17:01
fonte
1

In Perl 5, entrambi Moose e Moo fornisce ruoli (o tratti) che possono richiedere l'implementazione di determinati metodi. Moose è inoltre dotato di un sistema di tipo runtime che consente di definire un duck_type , che è un tipo che dichiara gli oggetti con un set di metodi richiesto.

I ruoli sono implementati dalle classi (o da altri ruoli) e forniscono anche implementazione e comportamento, non solo l'interfaccia. Ma anche loro (almeno in Moose) gestiscono cose come il rilevamento dei conflitti di metodo.

    
risposta data 27.01.2011 - 17:33
fonte

Leggi altre domande sui tag