Khác biệt giữa bản sửa đổi của “Mẫu hình”

Nội dung được xóa Nội dung được thêm vào
VolkovBot (thảo luận | đóng góp)
n robot Dời: ko:패러다임
chuyển sang bài mẫu hình lập trình
Dòng 42:
Danh từ này cũng được dùng trong khoa [[điều khiển học]] (''cybernetics''). Ở đây nó có nghĩa (trong một ý bao quát) là một (khái niệm) chưong trình sơ khai để giảm thiểu khối hỗn độn sang một dạng có trật tự. Hãy lưu ý những sự tương tự của từ này với khái niệm <code>entropy</code> trong hóa học và vật lý. Một mẫu hình là một hình thức ngăn cấm tiến hành các tương tác nhằm làm tăng tổng entropy của hệ thống. Để tạo được một mẫu hình cần có một hệ thống kín lại chấp nhận được mọi thay đổi. Do đó, một mẫu hình có thể chỉ áp dụng cho một hệ thống mà nó chưa đạt đến giai doạn cuối của nó.
 
=== Trong khoa tin học ===
{{bài chính|mẫu hình lập trình}}
==== Ý nghĩa chung ====
Trong tin học, một '''mẫu hình về lập trình''' là một kiểu [[lập trình]] mà nó là ''kiểu có tính mẫu hình'' trong tiến hành về [[công nghệ phần mềm]].
 
Một mẫu hình lập trình cung cấp (và xác định) quan điểm mà [[người lập trình]] có về sự thực thi của chương trình. Thí dụ: trong [[lập trình hướng đối tượng]], các lập trình viên có thể xem một chương trình như là một tập họp của các đối tượng có tính tương tác, trong khi đó, trong [[lập trình chức năng]], nó là một chương trình có thể được xem như là một chuỗi các đánh giá của các hàm vô thức.
 
Các nhóm khác nhau trong [[công nghệ phần mềm]] đề xướng các ''phương pháp'' khác nhau, các [[ngôn ngữ lập trình]] khác nhau tức là các ''mẫu hình lập trình'' khác nhau. Một số ngôn ngữ được thiết kế để hỗ trợ một mẫu hình đặc thù ([[Java]] hỗ trợ lập trình hướng đối tượng trong khi [[Haskell]] hỗ trợ lập trình chức năng). Số ngôn ngữ khác lại hỗ trợ nhiều mẫu hình (như [[Python]] và [[Common Lisp]]).
 
Một số mẫu hình lập trình cấm các thao tác mà chính ngôn ngữ đó có. Chẳng hạn, lập trình cấu trúc không cho phép sử dụng lệnh <code>goto</code>.
 
Quan hệ giữa các mẫu hình lập trình và các ngôn ngữ lập trình có thể phức tạp vì một ngôn ngữ có thể hỗ trợ nhiều mẫu hình lập trình. Thí dụ như [[C++]] được thiết kế để hỗ trợ các phần tử của [[lập trình thủ tục]], [[lập trình hướng đối tượng]] và [[lập trình tiêu bản]].
 
Mặc dù vậy, những người thiết kế và những người lập trình quyết định làm thế nào để xây dựng một chương trình dùng các phần tử của mẫu hình. Người ta có thể viết một chương trình hoàn toàn theo kiểu lập trình thủ tục trong C++, cũng có thể viết chương trình hoàn toàn hướng đối tượng, hay viết chương trình có các phần tử của cả hai mẫu hình.
 
==== Một số thí dụ về mẫu hình trong tin học ====
*[[Lập trình cấu trúc]]- so sánh với [[Lập trình không cấu trúc]] (''unstructured programming'')
*[[Lập trình mệnh lệnh]] (''imperative programming''), so sánh với [[Lập trình khai báo]] (''declarative programming'')
*[[Lập trình truyền báo]] (''message passing programming''), so sánh với [[Lập trình mệnh lệnh]] (''imperative programming'')
*[[Lập trình thủ tục]] (''procedural programming''), so sánh với [[Lập trình chức năng]] (''functional programming'')
*[[Lập trình bậc giá trị]] (''value-level programming''), so sánh với [[Lập trình bậc chức năng]] (''function-level programming'')
*[[Lập trình điều khiển theo luồng]] (''flow-driven programming''), so sánh với [[Lập trình điều khiển theo sự kiện]] (''event-driven programming'')
*[[Lập trình vô hướng]] (''scalar programming''), so sánh với [[Lập trình mảng]] (''array programming'')
*[[Lập trình cưỡng chế]] (''constraint programming''), so sánh với [[Lập trình Lô gíc]] (''logic programming'')
*[[Lập trình định hướng thành phần]] (''[[:en:Software componentry|component-oriented programming]])'' (như [[OLE]])
*[[Lập trình định dạng]] (''aspect-oriented programming'') (như [[AspectJ]])
*[[Lập trình kí hiệu]] (''symbolic programming'') (như [[Mathematica]])
*[[Lập trình định hướng bảng]] (''table-oriented programming'') (như [[FoxPro]] của [[Microsoft]])
*[[Lập trình ống]] (''pipeline programming'') (như [[pipeline (Unix)|dòng lệnh UNIX]])
*[[Lập trình hậu đối tượng]] (''post-object programming'')
*[[Lập trình định hướng chủ thể]] (''subject-oriented programming'')
*[[Lập trình phản xạ]] (''reflective programming'')
*[[Lập trình dòng dữ liệu]] (''[[:en:Dataflow|dataflow programming]]'') (như các [[Bản chiết tính]] hay ''spreadsheet'')
 
== Nguồn gốc ==