Lập trình dựa trên nguyên mẫu

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  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  
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 
 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

Xem thêm 

 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

Đọc thêm 

 
 Class Warfare: Classes vs. Prototypes, by Brian Foote.
 
 Using Prototypical Objects to Implement Shared Behavior in Object Oriented Systems, by Henry Lieberman, 1986.

Lý thuyết kiểu
Mẫu hình lập trình
Lập trình hướng đối tượng
Lập trình dựa trên nguyên mẫu