Các mô hình lập trình
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| paradigm/ˈpærədaɪm/ | mô hình |
| low-level/ləʊ ˈlevl/ | cấp thấp |
| imperative/ɪmˈperətɪv/ | lệnh |
| declarative/dɪˈklærətɪv/ | phát biểu |
| functional/ˈfʌŋkʃənl/ | hàm |
| pure functions/pjʊə ˈfʌŋkʃnz/ | hàm thuần túy |
| logic/ˈlɒdʒɪk/ | logic |
Chương trình giống hệt nhau, được viết theo bốn cách khác nhau
- Yêu cầu tất cả khách hàng ở Vương quốc Anh và một lập trình viên C viết một vòng lặp trên mảng. Một lập trình viên Haskell viết một hàm lọc. Một lập trình viên Prolog xác định một quy tắc và đặt câu hỏi. Một người dùng SQL viết
SELECT * FROM Customer WHERE Country = 'UK'. - Chỉ có cái đầu tiên nói cách thức thực hiện. Những cái khác nói kết quả mong muốn và để máy tính tự quyết định cách làm, cho phép máy sắp xếp lại công việc, sử dụng chỉ mục, hoặc chạy trên tám nhân xử lý.
- Không loại nào tốt hơn về mặt tổng quát. Điểm khác biệt là những quyết định nào bị ngôn ngữ lấy đi khỏi bạn, và đó chính xác là định nghĩa của một tham chiếu (paradigm).
- Bài học này là các tham chiếu mà chương trình học nêu tên: mức thấp, lệnh hành và tuyên bố.
Lập trình mức thấp
- Lập trình mức thấp hoạt động gần với phần cứng, trong mã máy hoặc ngôn ngữ assembly, với quyền truy cập trực tiếp vào thanh ghi, địa chỉ bộ nhớ và từng lệnh riêng lẻ.
- Lợi ích: kiểm soát tối đa và tốc độ, cùng lượng code nhỏ nhất có thể, điều này quan trọng khi chỉ có vài kilobyte bộ nhớ.
- Nhược điểm: nó đặc thù kiến trúc, do đó phải được viết lại cho bộ xử lý khác, và rất khó viết cũng như khó bảo trì.
- Được sử dụng nơi phần cứng cần được ra lệnh chính xác: trình điều khiển thiết bị, firmware, bộ điều khiển nhúng, và vòng lặp bên trong của hệ thống thời gian thực.
- Thực hành các phương thức trỏ ngay lập tức, trực tiếp, gián tiếp, theo chỉ số và tương đối trong bài học ngôn ngữ assembly. Đường dẫn ví dụ minh họa cho thấy tại sao cùng một toán hạng lại tạo ra kết quả khác nhau.
Điều nào sau đây đúng với lập trình cấp thấp? Chọn tất cả các phương án áp dụng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Sự kiểm soát đòi hỏi nỗ lực: assembly chậm khi viết và khó bảo trì, đó là lý do nó chỉ giới hạn ở trình điều khiển và firmware.
Lập trình mệnh lệnh
- Lập trình mệnh lệnh, còn gọi là thủ tục, là dãy các lệnh thay đổi trạng thái của chương trình: gán, điều kiện, vòng lặp và gọi các thủ tục.
- Lập trình viên xác định cách thức kết quả sẽ được tính toán, từng bước một. Các biến chứa trạng thái là trọng tâm.
- Đây là phong cách của Python, C, Java và giả mã, và là thứ mà hầu hết mọi người đều học đầu tiên.

Một lệnh sau một lệnh, mỗi lệnh thay đổi dữ liệu đang được lưu trữ
Lập trình mệnh lệnh (thủ tục) dựa trên:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Code mệnh lệnh đưa ra các lệnh từng bước (gán, vòng lặp, gọi) làm thay đổi trạng thái.
Lập trình tuyên bố
- Lập trình tuyên bố nêu lên kết quả mong muốn, chứ không phải cách thức. Phần chạy (runtime) sẽ tự tính ra các bước.
- Lập trình hàm tổ hợp các hàm thuần túy, không có hiệu ứng phụ: cùng một đầu vào luôn tạo ra cùng một đầu ra, và không có gì bên ngoài hàm thay đổi. Haskell và Lisp là ví dụ.
- Lập trình logic nêu lên sự thật và quy tắc, và một engine trả lời các truy vấn bằng suy luận. Prolog là ví dụ.
- SQL là ngôn ngữ tuyên bố gần như ai cũng đã gặp: câu truy vấn nói rõ những dòng nào được mong muốn, và cơ sở dữ liệu quyết định cách tìm chúng.
Phòng thí nghiệm khái niệm lập trình
Connect examples to the programming idea they show.
Lập trình khai báo có nghĩa là bạn xác định:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Code khai báo (hàm, logic, SQL) nêu mục tiêu; hệ thời gian chạy quyết định các bước.
Một hàm thuần túy (lập trình hàm):
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Tính thuần túy có nghĩa là không có tác dụng phụ và kết quả xác định, giúp code hàm dễ suy luận hơn.
Các mô hình khai báo (hàm, logic, SQL) nêu cái GÌ cần tính toán và để hệ thời gian chạy quyết định CÁCH làm, trong khi code mệnh lệnh liệt kê từng bước.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Một truy vấn SQL nói rõ những hàng nào bạn muốn, không phải cách quét bảng — ngược lại với code mệnh lệnh từng bước.
Một hàm thuần túy luôn cho cùng kết quả với cùng đầu vào và không có ____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Đó là lý do cho phép nó được thử nghiệm độc lập, chạy song song an toàn và có kết quả được lưu cache.
Ví dụ minh họa: xác định tham chiếu
FOR i ← 1 TO n : total ← total + A[i] : NEXT i— mệnh lệnh: dãy các lệnh thay đổi trạng thái được lưu giữ trongtotal.SELECT Name FROM Customer WHERE Country = 'UK'— tuyên bố: nó nói rõ những dòng nào được mong muốn và không nói cách tìm kiếm.LDD 200 : ADD 201 : STO 202— mức thấp: các lệnh assembly trỏ trực tiếp đến vị trí bộ nhớ.parent(X, Y) :- father(X, Y).— tuyên bố, cụ thể là lập trình logic: một quy tắc từ đó engine suy ra câu trả lời.- Hãy nêu tên tham chiếu và đặc điểm của đoạn code chứng minh điều đó.
Gắn mỗi đoạn fragment với mô hình của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Lệnh thay đổi trạng thái, phát biểu mong muốn, chỉ thị trỏ vào bộ nhớ, và quy tắc suy luận.
So sánh chúng
| Tham chiếu | Nêu lên | Điểm mạnh | Ứng dụng điển hình |
|---|---|---|---|
| mức thấp | chỉ thị chính xác | kiểm soát, tốc độ, kích thước | trình điều khiển, firmware |
| mệnh lệnh | cách thức, từng bước | trực tiếp và quen thuộc | lập trình chung |
| tuyên bố | kết quả mong muốn | súc tích, phần chạy tối ưu hóa | truy vấn, quy tắc, biến đổi dữ liệu |
- Các ngôn ngữ hiện đại kết hợp chúng. Python mang tính mệnh lệnh nhưng có tính năng hàm; SQL nằm bên trong các chương trình được viết theo phong cách mệnh lệnh. Một tham chiếu là một phong cách, không phải bức tường ngăn cách.
Gắn mỗi mô hình với ý tưởng cốt lõi của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Mệnh lệnh nói HOW từng bước; OO mô hình hóa đối tượng; hàm dùng hàm thuần túy; khai báo nêu mục tiêu.
Sự khác biệt cốt lõi giữa lập trình mệnh lệnh và khai báo là gì?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Vì phiên bản khai báo không cố định CÁCH làm, hệ thời gian chạy có thể sắp xếp lại công việc, sử dụng chỉ mục hoặc song song hóa nó.
Ví dụ minh họa: tại sao hiệu ứng phụ lại quan trọng
- Một hàm thuần túy không có hiệu ứng phụ. Giải thích một lợi ích.
- Vì cùng một đầu vào luôn tạo ra cùng một đầu ra và không có gì bên ngoài thay đổi, một hàm thuần túy có thể được kiểm thử độc lập: không cần thiết lập, không có trạng thái ẩn cần sắp xếp.
- Nó cũng có thể được chạy cùng lúc an toàn, vì hai lần gọi không thể can thiệp lẫn nhau, và kết quả của nó có thể được lưu缓存 (cache).
- Sự tương phản: một thủ tục mệnh lệnh cập nhật biến toàn cục sẽ hoạt động khác nhau tùy thuộc vào những gì đã chạy trước đó, đó chính là nguyên nhân khiến các lỗi như vậy khó tìm thấy.
Điểm số dễ mất
- Mệnh lệnh nói cách thức; tuyên bố nói kết quả mong muốn. Sự tương phản này là câu trả lời cho hầu hết các câu hỏi ở đây.
- Nhược điểm của mức thấp là nó đặc thù kiến trúc và khó bảo trì, chứ không phải vì nó "lỗi thời".
- Một hàm thuần túy không có hiệu ứng phụ và cho cùng một đầu ra cho cùng một đầu vào. Cả hai vế đều cần thiết.
- SQL là tuyên bố. Đây là ví dụ mà đề thi thường xuyên sử dụng nhất, nên hãy nhận diện nó.
Bạn đã nắm vững
- một tham chiếu là một phong cách cấu trúc hóa code, và các ngôn ngữ hiện đại kết hợp nhiều loại
- mức thấp: mã máy hoặc assembly, truy cập phần cứng trực tiếp, kiểm soát và tốc độ tối đa, nhưng đặc thù kiến trúc và khó bảo trì
- mệnh lệnh: dãy các lệnh thay đổi trạng thái, xác định cách thức; phong cách của Python, C và giả mã
- tuyên bố: nêu lên kết quả mong muốn và để phần chạy quyết định cách thức, như lập trình hàm với hàm thuần túy, lập trình logic với sự thật và quy tắc, và SQL