Tóm tắt Exagg'itive (TM)
Bạn nhận được một vài điều.
- Di truyền nguyên mẫu và nhân bản
- Bổ sung động các tính chất mới
- Sự tồn tại của các đối tượng của các phiên bản khác nhau (mức đặc tả) của cùng một lớp.
- Các đối tượng thuộc các phiên bản gần đây hơn (mức đặc tả) sẽ có thêm thuộc tính "tùy chọn".
- Hướng nội của tài sản, cũ và mới
- Hướng nội quy tắc xác nhận (thảo luận bên dưới)
Có một nhược điểm chết người.
- Trình biên dịch không kiểm tra các chuỗi sai chính tả cho bạn.
- Các công cụ tái cấu trúc tự động sẽ không đổi tên các tên khóa thuộc tính cho bạn - trừ khi bạn trả tiền cho các tên ưa thích.
Vấn đề là, bạn có thể có được sự hướng nội bằng cách sử dụng, ừm, hướng nội. Đây là những gì thường xảy ra:
- Cho phép phản chiếu.
- Thêm một thư viện nội tâm lớn vào dự án của bạn.
- Đánh dấu các phương thức và thuộc tính đối tượng khác nhau bằng các thuộc tính hoặc chú thích.
- Hãy để thư viện hướng nội làm điều kỳ diệu.
Nói cách khác, nếu bạn không cần phải giao tiếp với FP, bạn không cần phải nghe lời khuyên của Rich Hickey.
Cuối cùng, nhưng không phải là ít nhất (cũng không phải là đẹp nhất), mặc dù sử dụng String
làm khóa thuộc tính có ý nghĩa đơn giản nhất, bạn không phải sử dụng String
s. Nhiều hệ thống cũ, bao gồm Android ™, sử dụng ID số nguyên rộng rãi trong toàn bộ khung để tham khảo các lớp, thuộc tính, tài nguyên, v.v.
Android là nhãn hiệu của Google Inc.
Bạn cũng có thể làm cho cả hai thế giới hạnh phúc.
Đối với thế giới Java, hãy triển khai các getters và setters như bình thường.
Đối với thế giới FP, hãy thực hiện
Object getPropertyByName(String name)
void setPropertyByName(String name, Object value) throws IllegalPropertyChangeException
List<String> getPropertyNames()
Class<?> getPropertyValueClass(String name)
Bên trong các chức năng này, vâng, mã xấu, nhưng có các plugin IDE sẽ bổ sung cho bạn, sử dụng ... uh, một plugin thông minh đọc mã của bạn.
Phía Java của mọi thứ sẽ vẫn hoạt động như bình thường. Họ sẽ không bao giờ sử dụng phần xấu xí đó của mã. Bạn thậm chí có thể muốn ẩn nó khỏi Javadoc.
Phía FP của thế giới có thể viết bất kỳ mã "leet" nào họ muốn và họ thường không mắng bạn về việc mã bị chậm.
Nói chung, sử dụng bản đồ (túi tài sản) thay cho đối tượng là điều phổ biến trong phát triển phần mềm. Nó không phải là duy nhất cho lập trình chức năng hoặc bất kỳ loại ngôn ngữ cụ thể. Nó có thể không phải là một cách tiếp cận thành ngữ cho bất kỳ ngôn ngữ nào, nhưng có những tình huống đòi hỏi nó.
Cụ thể, tuần tự hóa / giải tuần tự hóa thường đòi hỏi một kỹ thuật tương tự.
Chỉ cần một số suy nghĩ chung về "bản đồ là đối tượng".
- Bạn vẫn phải cung cấp một chức năng để xác nhận "bản đồ là đối tượng". Sự khác biệt là "ánh xạ như đối tượng" cho phép các tiêu chí xác nhận linh hoạt hơn (ít hạn chế hơn).
- Bạn có thể dễ dàng thêm các trường bổ sung vào "bản đồ dưới dạng đối tượng".
- Để cung cấp một đặc tả về yêu cầu tối thiểu của một đối tượng hợp lệ, bạn sẽ cần:
- Liệt kê bộ khóa "yêu cầu tối thiểu" dự kiến trong bản đồ
- Đối với mỗi khóa có giá trị cần được xác thực, hãy cung cấp hàm xác thực giá trị
- Nếu có các quy tắc xác thực cần kiểm tra nhiều giá trị chính, hãy cung cấp điều đó.
- Lợi ích là gì? Cung cấp đặc tả theo cách này là hướng nội: bạn có thể viết chương trình để truy vấn bộ khóa được yêu cầu tối thiểu và để có được chức năng xác thực cho mỗi khóa.
- Trong OOP, tất cả những thứ này được cuộn lại thành một hộp đen, với tên "đóng gói". Thay cho logic xác thực có thể đọc bằng máy, người gọi chỉ có thể đọc "tài liệu API" có thể đọc được của con người (nếu may mắn là nó tồn tại).