Tujuan saya adalah mendefinisikan kontrak antar kelas.
Saya suka mengetik bebek dan semua tetapi saya juga ingin mendefinisikan antarmuka antara berbagai lapisan aplikasi saya untuk secara jelas menentukan metode mana yang dipanggil dari eksternal, dan mana yang merupakan metode aksesori yang tidak boleh digunakan oleh lapisan lain .
Sebagai contoh di Jawa saya dapat mendefinisikan antarmuka Persistor dengan metode seperti get () dan save () dan kemudian mendefinisikan kelas JdbcPersistor dengan semua metode yang saya butuhkan untuk bertahan di database. Dan mungkin RestPersistor lain dengan metode lain untuk menghemat pada restserver jarak jauh.
Saya tidak meminta antarmuka di Ruby, hanya untuk mengetahui apakah ada cara yang rapi menjaga perbedaan ini. Saya suka Ruby tetapi saya hanya bekerja pada proyek-proyek kecil dengannya.
sumber
Jawaban:
Ini dijawab dalam konteks antarmuka C # dan Ruby on stackoverflow: /programming/3505521/in-ruby-what-is-the-equivalent-to-an-interface-in-c .
Ringkasnya: tidak ada padanan yang tepat di Ruby karena mengetik bebek membuat antarmuka formal tidak diperlukan. Sebagai gantinya, pertimbangkan pengujian untuk kepatuhan terhadap "antarmuka" atau penggunaan kontrak
respond_to?
.sumber
Beberapa bahasa yang diketik secara dinamis memiliki antarmuka, atau konsep yang serupa. Sebagai contoh, Objective-C memiliki protokol. Tetapi kebanyakan tidak. Agar efektif dalam bahasa yang dinamis, Anda harus melupakan apa yang Anda ketahui tentang bahasa yang diketik secara statis, merangkul sifat dinamis dari bahasa tersebut. Bahasa yang diketik secara dinamis umumnya menghindari penggunaan antarmuka.
sumber
Dalam Perl 5, Moose dan Moo memberikan peran (atau sifat) yang dapat memerlukan implementasi metode tertentu. Moose juga dilengkapi dengan sistem tipe runtime yang memungkinkan Anda untuk mendefinisikan
duck_type
, yang merupakan tipe yang menyatakan objek yang memiliki serangkaian metode yang diperlukan.Peran diimplementasikan oleh kelas (atau peran lain) sendiri, dan juga menyediakan implementasi dan perilaku, tidak hanya antarmuka. Tetapi mereka juga (setidaknya dalam Moose) menangani hal-hal seperti metode deteksi konflik.
sumber