Lập trình dựa trên nguyên mẫu
Mẫu hình lập trình |
---|
|
Lập trình dựa trên nguyên mẫu (tiếng Anh: prototype-based programming) là một kiểu lập trình hướng đối tượng, trong đó việc tái sử dụng hành vi (được gọi là kế thừa) được thực hiện thông qua quá trình tái sử dụng các đối tượng hiện có thông qua ủy quyền đóng vai trò nguyên mẫu (prototype). Mô hình này cũng có thể được gọi là lập trình nguyên mẫu, hướng mẫu, không phân lớp hoặc lập trình dựa trên thực thể. Delegation (tiếng Việt: ủy nhiệm hàm hay ủy quyền) là tính năng ngôn ngữ hỗ trợ lập trình dựa trên nguyên mẫu.
Lập trình dựa trên nguyên mẫu sử dụng các đối tượng tổng quát, sau đó có thể được nhân bản và mở rộng. Lấy trái cây làm ví dụ, một đối tượng "trái cây" sẽ đại diện cho các tính chất và chức năng của trái cây nói chung. Một đối tượng "chuối" sẽ được nhân bản từ đối tượng "trái cây" và các thuộc tính chung dành riêng cho chuối sẽ được thêm vào. Mỗi đối tượng "chuối" riêng lẻ sẽ được nhân bản từ đối tượng "chuối" chung. So sánh với mẫu hình dựa trên lớp, trong đó một lớp "trái cây" sẽ được mở rộng bởi một lớp "chuối".
Ngôn ngữ lập trình hướng nguyên mẫu đầu tiên là Self, được phát triển bởi David Ungar và Randall Smith Lưu trữ 2009-11-12 tại Wayback Machine vào giữa những năm 1980 để nghiên cứu các chủ đề trong thiết kế ngôn ngữ hướng đối tượng. Kể từ cuối những năm 1990, các mẫu hình không lớp (classless paradigm) ngày càng trở nên phổ biến. Một số ngôn ngữ hướng nguyên mẫu hiện tại là JavaScript (và các hiện thực ECMAScript khác như JScript và Flash 's ActionScript 1.0), Lua, Cecil, NewtonScript, Io, Ioke, MOO, REBOL và AHK.
Thiết kế và hiện thực
[sửa | sửa mã nguồn]Kế thừa nguyên mẫu trong JavaScript được Douglas Crockford mô tả là:
Ngôn ngữ hỗ trợ lập trình dựa trên nguyên mẫu
[sửa | sửa mã nguồn]- Actor-Based Concurrent Language (ABCL): ABCL/1, ABCL/R, ABCL/R2, ABCL/c+
- Agora
- AutoHotkey
- Cecil và Diesel of Craig Chambers
- ColdC
- COLA
- Common Lisp
- ECMAScript
- ActionScript 1.0, used by Adobe Flash và Adobe Flex
- E4X
- JavaScript
- JScript
- Io
- Ioke
- Lisaac
- Logtalk
- LPC
- Lua
- M2000
- Maple
- MOO
- Neko
- NewtonScript
- Object Lisp
- Obliq
- Omega
- OpenLaszlo
- Perl, with the Class::Prototyped module
- Python with prototype.py.
- R, with the proto package
- REBOL
- Self
- Seph
- SmartFrog
- Etoys
- TADS
- Tcl with snit extension
- Umajin[1]
Xem thêm
[sửa | sửa mã nguồn]- Lập trình dựa trên lớp (tương phản)
- Kế thừa khác biệt
- Mẫu hình lập trình
Tham khảo
[sửa | sửa mã nguồn]- ^ Proprietary scripting language. http://www.davidbrebner.com/?p=4 has some basic examples of use.
Đọc thêm
[sửa | sửa mã nguồn]- Abadi, Martin; Luca Cardelli (1996). A Theory of Objects. Springer-Verlag. ISBN 978-1-4612-6445-3.
- Class Warfare: Classes vs. Prototypes, by Brian Foote.
- Noble, James; Taivalsaari, Antero; Moore, Ivan biên tập (1999). Prototype-Based Programming: Concepts, Languages and Applications. Springer-Verlag. ISBN 981-4021-25-3.
- Using Prototypical Objects to Implement Shared Behavior in Object Oriented Systems, by Henry Lieberman, 1986.