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

Phạm Văn Nghĩa sinh năm 1996 tại thôn 5 xã Thọ Lâm huyện Thọ Xuân tỉnh Thanh Hoá là một nhà lập trình viên tốt nghiệp Đại Học Trần Đại Nghĩa khoa CNTT tốt nghiệp loại khá với các công cụ 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ư JScriptFlash '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
  • 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

Tham khảo

Đọc thêm

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