2008-11-13 36 views
5

Trong Paradigm hướng đối tượng, tôi sẽ tạo ra một mô hình đối tượng/khái niệm trước khi tôi bắt đầu thực hiện nó bằng cách sử dụng ngôn ngữ OO.Có điều gì giống như một mô hình chức năng không?

Có điều gì song song với mô hình đối tượng trong lập trình hàm hay không. Nó được gọi là mô hình chức năng? hoặc chúng ta tạo ra cùng một mô hình khái niệm trong cả hai mô hình trước khi thực hiện nó bằng một trong các ngôn ngữ ..

Có bài viết/sách nào tôi có thể đọc về mô hình chức năng trong trường hợp nó tồn tại không?

hoặc đặt theo cách khác ... ngay cả khi chúng tôi đang sử dụng ngôn ngữ lập trình hàm, chúng tôi có bắt đầu với mô hình đối tượng không?

Trả lời

0

Mô hình/sơ đồ lưu đồ và/hoặc quy trình có thể được sử dụng làm mô hình chức năng cho các chương trình không phải OO. Nhưng nó vẫn không mang lại cảm giác ranh giới tương tự như của mô hình OO.

http://en.wikipedia.org/wiki/Functional_model

6

Thực tế là có. Có một dạng đặc tả cho các ngôn ngữ chức năng dựa trên các kiểu dữ liệu trừu tượng được gọi là đặc tả đại số. Hành vi của chúng rất giống với các đối tượng theo một số cách, tuy nhiên các cấu trúc là logic và toán học, và không thay đổi như các cấu trúc hàm.

Một ngôn ngữ đặc tả chức năng cụ thể được sử dụng trong lớp Thuật toán và Cấu trúc dữ liệu trong Đại học Buenos Aires có máy phát điện, quan sát viên và các hoạt động bổ sung. Trình tạo là một biểu thức vừa là một thể hiện vừa là một thành phần có thể có của kiểu dữ liệu. Ví dụ, đối với một cây nhị phân (ADT bt), chúng tôi có các nút rỗng và các nút nhị phân. Vì vậy, chúng tôi sẽ có máy phát điện:

-nil 
-bin(left:bt, root: a, right:bt) 

Trường hợp còn lại là bt, gốc là giá trị chung và phải là một bt khác. Vì vậy, nil là một hình thức hợp lệ của bt, nhưng bin (bin (nil, 1, nil), 2, nil) cũng hợp lệ, biểu thị cây nhị phân có nút gốc có giá trị là 2, nút con trái với giá trị là 1 và nút con phải null. Vì vậy, đối với một chức năng có nghĩa là, tính toán số lượng các nút trong một cây, bạn xác định một người quan sát ADT, và bạn xác định một tập các tiên đề ánh xạ tới mỗi máy phát. Vì vậy, ví dụ:

numberOfNodes(nil) == 0 
numberOfNodes(bin(left,x,right))== 1 + numberOfNodes(left) + numberOfNodes(right) 

này có lợi thế của việc sử dụng các định nghĩa đệ quy hoạt động, và có hơn, bất động sản chính thức thú vị mà bạn có thể sử dụng một cái gì đó gọi là cảm ứng cấu trúc để chứng minh rằng đặc điểm kỹ thuật của bạn là đúng (có, bạn chứng minh rằng thuật toán của bạn sẽ tạo ra kết quả phù hợp).

Đây là một chủ đề khá khoa học hiếm thấy bên ngoài các vòng kết nối học thuật, nhưng bạn nên hiểu rõ hơn về thiết kế chương trình có thể thay đổi cách bạn nghĩ về thuật toán và cấu trúc dữ liệu. Các thư mục thích hợp bao gồm:

Bernot, G., Bidoit, M., và Knapik, T. 1995. thông số kỹ thuật quan sát và giả định việc không phân biệt. Thuyết. Tính toán. Sci. 139, 1-2 (Mar. 1995), 275-314. DOI = http://dx.doi.org/10.1016/0304-3975(94)00017-D

Guttag, J. V. và Horning, J. J. 1993. Đường thông tin: Ngôn ngữ và công cụ cho Thông số chính thức . Springer-Verlag New York , Inc. Abstraction và Đặc điểm kỹ thuật trong phát triển phần mềm, Barbara Liskov y John Guttag, MIT Press, 1986.

tắc cơ bản của đại số Specification 1. Phương trình và ban đầu Semantics. H. Ehrig y B. MAHR Springer-Verlag, Berlin, Heidelberg, New York, Tokyo, Đức, 1985.

Với các liên kết tương ứng: http://www.cs.st-andrews.ac.uk/~ifs/Resources/Notes/FormalSpec/AlgebraicSpec.pdf http://nms.lcs.mit.edu/larch/pub/larchBook.ps

Đó là một heck của một thú vị đề tài.

+1

NẾU bạn là thành lập trình với các kiểu dữ liệu đệ quy, hãy xem bài báo "Lập trình chức năng với Chuối, Ống kính, Phong bì và Dây thép gai" [1]. Nó rất thú vị và bắt tôi rất nhiều. [1]: = http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.125 – Tetha

1

Trong cả hai mô hình OO và FP, bạn tạo mô hình miền của bạn (vấn đề bạn đang giải quyết) và sau đó tạo các đối tượng trong chương trình của bạn để phản ánh các đối tượng miền. Có một số khác biệt, trong đó cách đối tượng của chương trình phản chiếu các đối tượng miền bị ảnh hưởng bởi mô hình và ngôn ngữ bạn đang sử dụng. Một số ví dụ (trong Haskell):

Các vấn đề liên quan