Membaca melalui artikel pedas tentang kelemahan OOP yang mendukung beberapa paradigma lain saya telah menemukan contoh bahwa saya tidak dapat menemukan terlalu banyak kesalahan.
Saya ingin terbuka dengan argumen penulis, dan meskipun saya secara teoritis dapat memahami poin mereka, satu contoh khususnya saya mengalami kesulitan mencoba membayangkan bagaimana itu akan lebih baik diimplementasikan dalam, katakanlah, bahasa FP.
// 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.
Perhatikan bahwa saya tidak mencari bantahan untuk atau melawan argumen penulis untuk "Apakah ada alasan rasional mengapa 3 perilaku ini harus dikaitkan dengan hierarki data?".
Apa yang secara khusus saya tanyakan adalah bagaimana contoh ini akan dimodelkan / diprogram dalam bahasa FP (Kode aktual, bukan secara teoritis)?