Message Passing

Ý tưởng cốt lõi của lập trình hướng dữ liệu là xử lý các phép toán chung trong các chương tình bằng việc giải quyết rõ ràng các phần của bảng operation-and-type trong hình 2.22. Kỹ thuật lập trình chúng ta đã sử dụng để tổ chức hệ thống trong bài data tag yêu cầu gửi đến đúng procedure dựa trên loại dữ liệu bằng việc có mỗi phép toán đối xử việc gửi đến đúng procedure của chính nó. Thật sư, điều này làm phân tách bảng operation-and-type thành các dòng, với mỗi toán tử chung tạo ra việc trình bày một dòng của bảng.

Một chiến lược thực thi thay thế là phân tách bảng thành các cột, thay vì sử dụng “các operation hoàn hảo” nó gửi đến procedure dựa trên các loại dữ liệu, để làm việc với “các đối tượng dự liệu hoàn hảo” nó gửi đến các tên của operation. Chúng ta có thể thực hiện bằng cách gán những thứ là một data object, như là một số retangular, được trình bày như là một procedure nó được đối xử như là một input yêu cầu tên phép toán và trình diễn phép toán được chỉ thị. Trong khuôn khổ đó, make-from-real-imag có thể được viết như sau

(define (make-from-real-imag x y)
(define (dispatch op)
(cond ((eq? op 'real-part) x)
((eq? op 'imag-part) y)
((eq? op 'magnitude) (sqrt (+ (square x) (square y))))
((eq? op 'angle) (atan y x))
(else (error "Unknown op: MAKE-FROM-REAL-IMAG" op))))
dispatch)

Procedure apply-generic tương ứng, nó áp dụng một phép toán chung đến một đối số, bây giờ đơn giản gọi tên phép toán đến data object và để cho object làm việc.

(define (apply-generic op arg) (arg op))

Chú ý rằng, giá trị trả được trả về bởi make-from-real-imag là một procedure – procedure dispatch nội bộ. Đây là procedure được thực hiện khi applu-generic gửi yêu cầu một phép toán để trình diễn.

Phong cách lập trình này được gọi là “messing passing”.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *