Tôi biết và hiểu giá trị của giao diện trong Java. Bạn mã vào giao diện, và sau đó bạn có thể thay đổi triển khai của bạn mà không cần phải thay đổi bất kỳ mã nào bằng cách sử dụng giao diện. Thường thì thuật ngữ "hợp đồng" được sử dụng trong kết nối với các giao diện. Cách tôi hiểu nó là giao diện xác định "hợp đồng" giữa ứng dụng và việc thực hiện.Giao diện Java - Chính xác trong hợp đồng là gì?
Vì vậy, khi tôi tạo triển khai, tôi phải hoàn thành hợp đồng. Câu hỏi của tôi là, chính xác trong hợp đồng mà tôi phải thực hiện là gì?
Rõ ràng, ở mức tối thiểu bạn phải cung cấp các phương thức có cùng chữ ký với giao diện. Mã sẽ không biên dịch theo cách khác. Đó có phải là tất cả "hợp đồng" đòi hỏi phải không? Có vẻ như sẽ có nhiều hơn.
Ví dụ: tôi đã đọc các bài báo tranh luận về giá trị của thử nghiệm cho giao diện so với việc triển khai thử nghiệm cụ thể hoặc thực hiện cả hai. Tôi thấy giá trị lớn trong việc kiểm tra giao diện để bạn biết đầu vào nào có kết quả mong đợi. Dường như với tôi rằng điều này cũng sẽ là một phần của giao diện "hợp đồng". Mỗi lần thực hiện giao diện sẽ tạo ra cùng một kết quả đầu ra từ cùng một đầu vào. Rõ ràng không có cách nào để thực thi hợp đồng này trong mã, nhưng nó có thể được thực thi thông qua các trường hợp thử nghiệm. Tôi có sai trong suy nghĩ của tôi ở đây không?
Cuối cùng, những tác dụng phụ mà triển khai có? Ở đây, tôi chủ yếu nói về bất kỳ sự kiên trì nào có thể xảy ra như là một phần của việc thực hiện. Nói rằng tôi có một thực hiện đó là tiết kiệm một số hồ sơ để DB trong khi nó preforms hoạt động. Điều này bằng cách nào đó sẽ là một phần của giao diện "hợp đồng"? Nếu vậy, làm thế nào bạn có thể thực thi hợp đồng này? Từ cấp độ giao diện, tôi không có ý tưởng thực hiện những gì đang thực sự làm. Tất cả những gì tôi biết là tôi cung cấp cho nó đầu vào, và nó cho tôi một đầu ra, mà tôi có thể kiểm tra. Có bất kỳ sự kiên trì nào xảy ra cũng được coi là "đầu ra" không? Nếu vậy, tôi chỉ không thấy làm thế nào điều này có thể được kiểm tra và thi hành. Tôi là người đề xuất về sự thiếu hiểu biết kiên trì, vì vậy tôi có thể biết rằng một số nội dung nào đó phải được giữ nguyên, nhưng tôi không biết cách giữ nguyên trạng thái. Vì vậy, tôi chỉ không làm thế nào để nói khi một cái gì đó thực sự tồn tại. Nó có thể đơn giản nếu giao diện của bạn có một số hoạt động CRUD đơn giản, nhưng tôi muốn suy nghĩ về các giao diện phức tạp hơn.
Tôi hy vọng câu hỏi của tôi có ý nghĩa và ai đó có thể cung cấp một số phản hồi tốt. Tôi muốn thảo luận về điều này nói chung, nhưng tôi có thể cung cấp một ví dụ cụ thể nếu nó không rõ ràng những gì tôi đang nói về.
Để kiểm tra 'hợp đồng', hãy viết các bài kiểm tra đơn vị cho giao diện, mà mọi triển khai đều phải gọi trước (có cách để thực hiện việc này). Nếu có các phần cụ thể cho việc triển khai cần phải được kiểm tra, điều đó sẽ xuất hiện tiếp theo. Nói chung, bạn muốn tất cả các bài kiểm tra có hiệu quả phụ ít nhất có thể. Vì vậy, khi thử nghiệm các công cụ kiên trì, bạn thường sử dụng các đối tượng giả thay cho các đối tượng tồn tại (Thực tế); từ đoạn mã gọi, nó _is_ một đối tượng tồn tại - nó không bao giờ kết thúc trong một cơ sở dữ liệu. –
http://en.wikipedia.org/wiki/Design_by_contract tìm kiếm "hợp đồng cho mỗi phương pháp thường sẽ chứa các thông tin sau đây ..." Không áp dụng nghiêm ngặt cho Java, nhưng vâng ... – Corbin
tài liệu. Đó là những gì xác định rất nhiều thông tin bổ sung về hợp đồng của một giao diện cụ thể. Lưu ý: "Mọi việc triển khai giao diện sẽ tạo ra cùng một kết quả đầu ra từ cùng một đầu vào". sẽ không đúng đối với một giao diện IBook và một GetPage (1) gọi nếu mỗi thực hiện đại diện cho một cuốn sách khác nhau ... –