Основная проблема императивных языков программирования — их низкая приближенность к естественным языкам.
ООП эту проблему частями решил, упорядочив данные и логику по классам объектов, но все равно это выглядит сложно для понимания. Основная проблема здесь в том, что императивные языки не приспособлены для работы с иерархиями объектов и вложенными вызовами методов.
Например, у меня есть иерархия классов работы с заказами на продукты для клиентов:
// Клиент
class Customer {
int inn
String name
String address
String phone
}
// Клиенты
class Customers {
Customer findByInn(inn)
void add(Customer customer)
}
// Продукт
class Product {
String article
String name
double price
}
// Продукты
class Products {
Product findByArticle(article)
void add(Product product)
}
// Заказ
class Order {
int num
Customer customer
List<OrderDetail> details = []
OrderDetail findByPos(pos)
void add(OrderDetail detail)
}
// Товар заказа
class OrderDetail {
int pos
Product product
def count = 1
def getSum() { count * product.price }
}
// Заказы
class Orders {
Order findByNum(num)
void add(Order order)
}
Сама бизнес логика описания работы будет выглядеть вот так:Читать полностью »