Đọc qua một bài viết đầy gay gắt về những nhược điểm của OOP để ủng hộ một số mô hình khác, tôi đã gặp một ví dụ mà tôi không thể tìm thấy quá nhiều lỗi.
Tôi muốn cởi mở với các lập luận của tác giả, và mặc dù về mặt lý thuyết tôi có thể hiểu được điểm của họ, một ví dụ cụ thể là tôi đang gặp khó khăn khi tưởng tượng làm thế nào nó sẽ được thực hiện tốt hơn bằng ngôn ngữ FP.
Từ: http://www.smashcompany.com/tĩ/object-oriented-programming-is-an-Exensive-disaster-which-must-end
// Consider the case where “SimpleProductManager” is a child of
// “ProductManager”:
public class SimpleProductManager implements ProductManager {
private List products;
public List getProducts() {
return products;
}
public void increasePrice(int percentage) {
if (products != null) {
for (Product product : products) {
double newPrice = product.getPrice().doubleValue() *
(100 + percentage)/100;
product.setPrice(newPrice);
}
}
}
public void setProducts(List products) {
this.products = products;
}
}
// There are 3 behaviors here:
getProducts()
increasePrice()
setProducts()
// Is there any rational reason why these 3 behaviors should be linked to
// the fact that in my data hierarchy I want “SimpleProductManager” to be
// a child of “ProductManager”? I can not think of any. I do not want the
// behavior of my code linked together with my definition of my data-type
// hierarchy, and yet in OOP I have no choice: all methods must go inside
// of a class, and the class declaration is also where I declare my
// data-type hierarchy:
public class SimpleProductManager implements ProductManager
// This is a disaster.
Lưu ý rằng tôi không tìm kiếm phản bác hoặc phản đối lập luận của người viết vì "Có bất kỳ lý do hợp lý nào tại sao 3 hành vi này nên được liên kết với hệ thống phân cấp dữ liệu không?".
Điều tôi đặc biệt hỏi là làm thế nào ví dụ này được mô hình hóa / lập trình bằng ngôn ngữ FP (Mã thực tế, không phải trên lý thuyết)?