Programming paradigms · Các mô hình lập trình
What is a paradigm?
- A programming paradigm is a style of organising a program.
- The same problem can be solved in different styles.
- Python lets you mix several paradigms in one program.
Mô hình lập trình là gì?
- Một mô hình lập trình là phong cách tổ chức chương trình.
- Một bài toán có thể được giải quyết bằng nhiều phong cách khác nhau.
- Python cho phép bạn kết hợp nhiều mô hình trong một chương trình.
Imperative and procedural
- Imperative code is a list of steps that change the program's state.
- It says how to do something, step by step (loops, assignments).
- Procedural style groups those steps into reusable procedures and functions.
Thủ tục và mệnh lệnh
- Code mệnh lệnh là danh sách các bước thay đổi trạng thái của chương trình.
- Nó nói về cách làm điều gì đó, từng bước một (vòng lặp, gán giá trị).
- Phong cách thủ tục nhóm các bước đó thành các thủ tục và hàm có thể tái sử dụng.
def total(nums):
result = 0
for n in nums:
result = result + n
return result
print(total([2, 4, 6]))
Object-oriented
- Object-oriented code bundles data and the methods that act on it into objects.
- You model the problem as a set of classes that talk to each other.
- It suits large programs because each class is a self-contained part.
Hướng đối tượng
- Code hướng đối tượng gom dữ liệu và các phương thức tác động lên nó vào các đối tượng.
- Bạn mô hình hóa bài toán thành một tập hợp các lớp giao tiếp với nhau.
- Nó phù hợp với các chương trình lớn vì mỗi lớp là một phần tự chứa đựng.
class Counter:
def __init__(self):
self.count = 0
def add(self):
self.count = self.count + 1
c = Counter()
c.add()
c.add()
print(c.count)
Declarative
- Declarative code says what you want, not how to compute it.
- The language or library works out the steps for you.
- Examples: a database query (SQL), or a Python list comprehension.
Khai báo
- Code khai báo nói về bạn muốn điều gì, chứ không phải cách tính toán.
- Ngôn ngữ hoặc thư viện sẽ tự tính ra các bước cho bạn.
- Ví dụ: truy vấn cơ sở dữ liệu (SQL), hoặc list comprehension trong Python.
nums = [1, 2, 3, 4, 5]
print(sum(nums)) # say WHAT: the total
print([n * n for n in nums]) # a list comprehension
Low-level
- Low-level code is close to the machine: assembly and machine code.
- The CPU runs it directly, so it is fast but hard to write.
- High-level languages like Python are translated down to it before running.
Mức thấp
- Code mức thấp gần với máy tính: assembly và mã máy.
- CPU chạy trực tiếp code này, nên nó nhanh nhưng khó viết.
- Các ngôn ngữ cấp cao như Python được dịch xuống mức thấp trước khi chạy.
Common mistakes
- Procedural is steps; object-oriented is objects with data and methods; declarative describes the result.
- Match the paradigm to the problem.
Lỗi thường gặp
- Thủ tục là các bước; hướng đối tượng là các đối tượng với dữ liệu và phương thức; khai báo mô tả kết quả.
- Chọn mô hình phù hợp với bài toán.
Now you try
- Each task solves a small problem in a different paradigm.
- Press Check answer to test your code.
Bây giờ bạn thử
- Mỗi bài toán giải quyết một vấn đề nhỏ theo một mô hình khác nhau.
- Nhấn Check answer (Kiểm tra câu trả lời) để thử mã của bạn.
Procedural style. Write sum_list(nums) that uses a loop and an accumulator to add up the list and return the total. · Phong cách thủ tục. Viết sum_list(nums) sử dụng vòng lặp và biến tích lũy để cộng tổng danh sách và trả về tổng số.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Declarative style. Write evens(nums) that returns a list of the even numbers, using a single list comprehension [... for ... if ...]. · Phong cách khai báo. Viết evens(nums) trả về danh sách các số chẵn, sử dụng một danh sách sinh ra từ biểu thức (list comprehension) [... for ... if ...].
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.
Object-oriented style. Write a class Bag whose __init__(self, items) stores a list, and whose method total(self) returns the sum of those items. · Phong hướng đối tượng. Viết một class Bag mà trong __init__(self, items) lưu trữ một danh sách, và method total(self) trả về tổng của các phần tử đó.
Click Run to see the output here. · Nhấn Chạy để xem kết quả ở đây.