Tôi có thể sử dụng gì thay vì Giao diện trong Ruby (hoặc bất kỳ ngôn ngữ động nào khác)?


9

Mục tiêu của tôi là xác định hợp đồng giữa các lớp.

Tôi thích gõ vịt và tất cả nhưng tôi cũng muốn xác định giao diện giữa các lớp khác nhau trong ứng dụng của mình để xác định rõ phương thức gọi từ bên ngoài và phương thức phụ kiện nào không được sử dụng bởi lớp khác .

Ví dụ trong Java, tôi có thể định nghĩa giao diện Persistor với các phương thức như get () và save () và sau đó định nghĩa lớp JdbcPersistor với tất cả các phương thức tôi cần để duy trì trên cơ sở dữ liệu. Và có thể một RestPersistor khác với các phương thức khác để lưu trên máy chủ restserver từ xa.

Tôi không yêu cầu giao diện trong Ruby, chỉ để biết liệu có cách nào gọn gàng để giữ sự khác biệt này không. Tôi thích Ruby nhưng tôi chỉ làm việc với các dự án nhỏ với nó.


Tôi nghĩ rằng điều này thuộc về StackOverflow ...
thorsten müller

2
@thorsten Stack Overflow dành cho các vấn đề triển khai cụ thể (nghĩa là có vấn đề về mã). Các câu hỏi thiết kế chương trình chung là về chủ đề ở đây trên Lập trình viên.

@Mark: cảm ơn đã sửa. Tôi nghĩ rằng nó quá cụ thể trên Ruby (và đã bỏ lỡ câu cuối của Uberto). Vì vậy, tôi cập nhật kiến ​​thức của tôi về faq. (Vẫn đang tìm đường quanh đây)
thorsten müller

+1 Câu hỏi xuất sắc. Tôi quan tâm nếu có cách nào khác ngoài viết, đọc và cập nhật hàng tấn tài liệu hoặc sử dụng một số quy ước ngớ ngẩn như các phương pháp phụ kiện nội bộ trước đó với dấu gạch dưới hoặc đại loại như thế.
Joonas Pulakka

+1 Nhân tiện, PLT Vợt có hỗ trợ cho các hợp đồng và rất năng động. Thêm một cái gì đó tương tự như Ruby sẽ là một dự án thú vị.
Larry Coleman

Câu trả lời:


5

Điều này đã được trả lời trong ngữ cảnh của giao diện C # và Ruby trên stackoverflow: /programming/3505521/in-ruby-what-is-the-equivalent-to-an-interface-in-c .

Tóm tắt: không có tương đương chính xác trong Ruby vì gõ vịt làm cho giao diện chính thức không cần thiết. Thay vào đó, hãy xem xét thử nghiệm để tuân thủ "giao diện" hoặc hợp đồng sử dụng respond_to?.


2
có nhưng điều này không ngăn cản mã truy cập vào phương thức không nên
Uber đến

2

Một số ngôn ngữ gõ động có giao diện hoặc khái niệm tương tự. Ví dụ, Objective-C có các giao thức. Nhưng hầu hết không. Để có hiệu quả trong một ngôn ngữ động, bạn phải quên những gì bạn biết về các ngôn ngữ gõ tĩnh, nắm lấy bản chất động của ngôn ngữ. Các ngôn ngữ được gõ động thường tránh sử dụng các giao diện.


1

Trong Perl 5, cả MooseMoo đều cung cấp các vai trò (hoặc đặc điểm) có thể yêu cầu thực hiện các phương thức nhất định. Moose cũng đi kèm với hệ thống kiểu thời gian chạy cho phép bạn xác định một duck_type, đó là một kiểu khai báo các đối tượng có một bộ phương thức cần thiết.

Các vai trò được thực hiện bởi chính các lớp (hoặc các vai trò khác) và cũng cung cấp việc thực hiện và hành vi, không chỉ giao diện. Nhưng họ cũng (ít nhất là trong Moose) xử lý những việc như phát hiện xung đột phương thức.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.