Tin học cơ bản

Học tập, chia sẻ kiến thức cơ bản về tin học.

Các mẫu Design Pattern

Hệ thống các mẫu design pattern hiện có 23 mẫu được định nghĩa trong cuốn "Design patterns Elements of Reusable Object Oriented Software
Có thể chúng ta đã gặp Design patterns ở đâu đó trong các ứng dụng, cũng có thể chúng ta đã từng sử dụng những mẫu tương tự như Design pattern để giải quyết những tình huống của mình, nhưng chúng ta không rõ hoặc không có một khái niệm gì về nó. 

Các tác giả của cuốn sách là Erich GammaRichard HelmRalph Johnson và John Vlissides, hay còn được biết đến với các tên "Gang of Four"hay đơn giản là "GoF". Hệ thống các mẫu này có thể nói là đủ và tối ưu cho việc giải quyết hết các vấn đề của bài toán phân tích thiết kế và xây dựng phần mềm trong thời điểm hiện tại. Hệ thống các mẫu design pattern được chia thành 3 nhóm: nhóm Creational (5 mẫu), nhóm Structural (7 mẫu) và nhóm Behavioral (11 mẫu).
Quyển sách là tập hợp 23 mẫu thiết kế được phát hành bởi Erich Gamma, Richard Helm, Ralph Johnson và John Vlissides, trong một nghiên cứu của họ năm 1995. Với tựa đề gốc là “Design Patterns: Elements of Reusable Object-Oriented Software”. Tạm dịch “Mẫu thiết kế: những thành phần tái sử dụng trong lập trình hướng đối tượng”. Họ được giới lập trình gọi là Bộ tứ Gang of Four, hay GoF. (ND: Bộ tứ ở đây là ẩn dụ với Tên nhóm nhạc nổi tiếng Gang Of Four của Anh hay Bộ tứ quyền lực Mafia trong tác phẩm Bố già hay là bộ tứ quyền lực chính trị của Trung quốc, ở VN cũng có bộ tứ quyền lực của Vietnam Next Top Model…).

Đã có rất nhiều sự thay đổi kể từ khi xuất hiện, một số trong 23 mẫu được sử dụng nhiều, số khác ít khi được sử dụng. Tôi sẽ nói đến đầy đủ 23 mẫu trong cuốn sách này, nhưng tôi sẽ nhấn mạnh ở những mẫu thường được sử dụng hơn. Và kể cả mẫu mới không có trong sách của GoF, trong chương 11.


Có một sự thật là, bạn không chỉ phải nhớ kỹ từng mẫu thiết kế, bạn phải hiểu sâu sắc về nó, để có thể áp dụng đúng đắn trong thực tiễn. Tôi cũng sẽ lưu ý nhiều về lập trình hướng đối tượng xuyên suốt quyển sách này. Lập trình hướng đối tượng OOP là một bước tiến tuyệt vời trong lĩnh vực lập trình. Nhưng có quá nhiều lập trình viên sử dụng chúng một cách tùy tiện, thiếu chiều sâu, và điều đó gây ra nhiều rắc rối tiềm ẩn.
STT
Tên
Mục đích
Nhóm Creational (nhóm kiến tạo)
1
Abstract Factory
Cung cấp một interface cho việc tạo lập các đối tượng (có liên hệ với nhau) mà không cần qui định lớp khi hay xác định lớp cụ thể (concrete) tạo mỗi đối tượng
Tần suất sử dụng: cao
2
Builder
Tách rời việc xây dựng (construction) một đối tượng phức tạp khỏi biểu diễn của nó sao cho cùng một tiến trình xây dựng có thể tạo được các biểu diễn khác nhau.
Tần suất sử dụng: trung bình thấp
3
Factory Method
Định nghĩa Interface để sinh ra đối tượng nhưng để cho lớp con quyết định lớp nào được dùng để sinh ra đối tượng Factory method cho phép một lớp chuyển quá trình khởi tạo đối tượng cho lớp con.
Tần suất sử dụng: cao
4
Prototype
Qui định loại của các đối tượng cần tạo bằng cách dùng một đối tượng mẫu, tạo mới nhờ vào sao chép đối tượng mẫu này.
Tần suất sử dụng: trung bình
5
Singleton
Đảm bảo 1 class chỉ có 1 instance và cung cấp 1 điểm truy xuất toàn cục đến nó.
Tần suất sử dụng: cao trung bình
Nhóm Structural (nhóm cấu trúc)
6
Adapter
Do vấn đề tương thích, thay đổi interface của một lớp thành một interface khác phù hợp với yêu cầu người sử dụng lớp.
Tần suất sử dụng: cao trung bình
7
Bridge
Tách rời ngữ nghĩa của một vấn đề khỏi việc cài đặt ; mục đích để cả hai bộ phận (ngữ nghĩa và cài đặt) có thể thay đổi độc lập nhau.
Tần suất sử dụng: trung bình
8
Composite
Tổ chức các đối tượng theo cấu trúc phân cấp dạng cây; Tất cả các đối tượng trong cấu trúc được thao tác theo một cách thuần nhất như nhau.
Tạo quan hệ thứ bậc bao gộp giữa các đối tượng. Client có thể xem đối tượng bao gộp và bị bao gộp như nhau -> khả năng tổng quát hoá trong code của client -> dễ phát triển, nâng cấp, bảo trì.
Tần suất sử dụng: cao trung bình
9
Decorator
Gán thêm trách nhiệm cho đối tượng (mở rộng chức năng) vào lúc chạy (dynamically).
Tần suất sử dụng: trung bình
10
Facade
Cung cấp một interface thuần nhất cho một tập hợp các interface trong một “hệ thống con” (subsystem). Nó định nghĩa 1 interface cao hơn các interface có sẵn để làm cho hệ thống con dễ sử dụng hơn.
Tần suất sử dụng: cao
11
Flyweight
Sử dụng việc chia sẻ để thao tác hiệu quả trên một số lượng lớn đối tượng “cở nhỏ” (chẳng hạn paragraph, dòng, cột, ký tự…).
Tần suất sử dụng: thấp
12
Proxy
Cung cấp đối tượng đại diện cho một đối tượng khác để hỗ trợ hoặc kiểm soát quá trình truy xuất đối tượng đó. Đối tượng thay thế gọi là proxy.
Tần suất sử dụng: cao trung bình
Nhóm Behavioral (nhóm tương tác)
13
Chain of Responsibility
Khắc phục việc ghép cặp giữa bộ gởi và bộ nhận thông điệp; Các đối tượng nhận thông điệp được kết nối thành một chuỗi và thông điệp được chuyển dọc theo chuỗi nầy đến khi gặp được đối tượng xử lý nó.Tránh việc gắn kết cứng giữa phần tử gởi request với phần tử nhận và xử lý request bằng cách cho phép hơn 1 đối tượng có có cơ hội xử lý request . Liên kết các đối tượng nhận request thành 1 dây chuyền rồi “pass” request xuyên qua từng đối tượng xử lý đến khi gặp đối tượng xử lý cụ thể.
Tần suất sử dụng: trung bình thấp
14
Command
Mỗi yêu cầu (thực hiện một thao tác nào đó) được bao bọc thành một đối tượng. Các yêu cầu sẽ được lưu trữ và gởi đi như các đối tượng.Đóng gói request vào trong một Object , nhờ đó có thể nthông số hoá chương trình nhận request và thực hiện các thao tác trên request: sắp xếp, log, undo…
Tần suất sử dụng: cao trung bình
15
Interpreter
Hỗ trợ việc định nghĩa biểu diễn văn phạm và bộ thông dịch cho một ngôn ngữ.
Tần suất sử dụng: thấp
16
Iterator
Truy xuất các phần tử của đối tượng dạng tập hợp tuần tự (list, array, …) mà không phụ thuộc vào biểu diễn bên trong của các phần tử.
Tần suất sử dụng: cao
17
Mediator
Định nghĩa một đối tượng để bao bọc việc giao tiếp giữa một số đối tượng với nhau.
Tần suất sử dụng: trung bình thấp
18
Memento
Hiệu chỉnh và trả lại như cũ trạng thái bên trong của đối tượng mà vẫn không vi phạm việc bao bọc dữ liệu.
Tần suất sử dụng: thấp
19
Observer
Định nghĩa sự phụ thuộc một-nhiều giữa các đối tượng sao cho khi một đối tượng thay đổi trạng thái thì tất cả các đối tượng phụ thuộc nó cũng thay đổi theo.
Tần suất sử dụng: cao
20
State
Cho phép một đối tượng thay đổi hành vi khi trạng thái bên trong của nó thay đổi , ta có cảm giác như class của đối tượng bị thay đổi.
Tần suất sử dụng: trung bình
21
Strategy
Bao bọc một họ các thuật toán bằng các lớp đối tượng để thuật toán có thể thay đổi độc lập đối với chương trình sử dụng thuật toán.Cung cấp một họ giải thuật cho phép client chọn lựa linh động một giải thuật cụ thể khi sử dụng.
Tần suất sử dụng: cao trung bình
22
Template method
Định nghĩa phần khung của một thuật toán, tức là một thuật toán tổng quát gọi đến một số phương thức chưa được cài đặt trong lớp cơ sở; việc cài đặt các phương thức được ủy nhiệm cho các lớp kế thừa.
Tần suất sử dụng: trung bình
23
Visitor
Cho phép định nghĩa thêm phép toán mới tác động lên các phần tử của một cấu trúc đối tượng mà không cần thay đổi các lớp định nghĩa cấu trúc đó.
Tần suất sử dụng: thấp

[Tự học SQL] Học SQL cơ bản và nâng cao

SQL (là viết tắt của Structured Query Language – Ngôn ngữ truy vấn mang tính cấu trúc) được sử dụng để thực hiện các hoạt động trên các bản ghi được ghi lại trong Database (Cơ sở dữ liệu), chẳng hạn như cập nhật các bản ghi, xóa các bản ghi, tạo và sửa đổi các bảng, …

SQL chỉ là một ngôn ngữ truy vấn, chứ không phải là một Cơ sở dữ liệu. Để thực hiện các truy vấn SQL, bạn cần cài đặt bất cứ Cơ sở dữ liệu nào, như Oracle, MySQL, MongoDB, PostGres SQL, SQL Server, DB2, …

Dưới đây là danh sách các bài hướng dẫn học SQL cơ bản và nâng cao:
Cơ bản về SQL
SQL là gì
Các khái niệm RDBMS
Database là gì
Cú pháp SQL cơ bản
Kiểu dữ liệu
Toán tử
Biểu thức (Expression)
SQL Database
Lệnh Create Database
Lệnh Drop Database
Lệnh Select Database
Lệnh Rename Database
SQL Table
Lệnh Create Table
Lệnh Drop Table
Lệnh Delete Table
Lệnh Rename Table
Lệnh Truncate Table
Lệnh ALter Table
Sao chép bảng
Bảng tạm (Temp Table)

[Tự học xử lý ảnh] CÁC PHƯƠNG PHÁP PHÁT HIỆN BIÊN






4.1. Khái quát về biên các kỹ thuật biên
4.1.1 Khái quát ̀ biên
Biên vấn đề quan trọng trong trích chọn đặc điểm nhằm tiến tới hiểu ảnh. Cho đến nay chưa định nghĩa chính xác về biên, trong mỗi ứng  dụng người ta đưa ra các độ đo khác nhau về biên, một trong các độ đo đó  độ đo về sự thay đổi đột ngột về cấp xám. dụ: Đối với ảnh đen trắng, một điểm được gọi điểm biên nếu điểm đen ít nhất một điểm trắng bên cạnh. Tập hợp các điểm biên tạo nên biên hay đường bao của     đối tượng. Xuất phát từ sở này người ta thường sử dụng hai phương   pháp phát hiện biên bản:
4.1.1 Phát hiện biên trực tiếp
Phát hiện biên trực tiếp: Phương pháp này làm nổi biên dựa vào sự biến thiên mức xám của ảnh. Kỹ thuật chủ  yếu dùng để phát hiện biên ở  đây dựa vào sự biến  đổi cấp xám theo hướng. Cách tiếp cận theo đạo  hàm bậc nhất của ảnh dựa trên kỹ thuật Gradient, nếu lấy đạo hàm bậc hai của ảnh dựa trên biến đổi gia ta kỹ thuật Laplace.
4.1.2 Phát hiện biên gián tiếp
Phát hiện biên gián tiếp: Nếu bằng cách nào đó ta phân được ảnh thành các vùng thì ranh giới giữa các vùng đó gọi biên. Kỹ thuật biên phân vùng ảnh hai bài toán đối ngẫu nhau biên để thực hiện phân lớp đối tượng khi đã phân lớp xong nghĩa đã phân vùng được ảnh ngược lại, khi đã phân vùng ảnh đã được phân lớp thành các đối tượng, do đó thể phát hiện được biên.
Phương pháp phát hiện biên trực tiếp tỏ ra khá hiệu quả ít chịu ảnh hưởng của nhiễu, song nếu sự biến thiên độ sáng không đột ngột, phương pháp tỏ ra kém hiệu quả, phương pháp phát hiện biên gián tiếp tuy khó cài đặt, song lại áp dụng khá tốt trong trường hợp này.
4.2. Phương pháp phát hiện biên cục bộ
Hay còn gọi là phương pháp phát hiện biên trực tiếp, trong phương pháp này có các kỹ thuật sau:
4.2.1.Kỹ thuật phát hiện biên Gradient
Theo định nghĩa, gradient một véctơ các thành phần biểu thị tốc độ thay đổi giá trị của điểm ảnh, ta :
Trong đó, dx, dy khoảng cách (tính bằng số điểm) theo hướng x y.
* Nhận xét:
Tuy ta nói lấy đạo hàm nhưng thực chất chỉ pháng xấp xỉ đạo hàm bằng các kỹ thuật nhân chập (cuộn theo mẫu) ảnh số tín hiệu rời rạc nên đạo hàm không tồn tại.
dụ: Với dx = dy = 1, ta :
Chẳng hạn, ta có ma trận ảnh sau:
4.2.2.Kỹ thuật Prewitt
Kỹ thuật sử dụng 2 mặt nạ nhập chập xấp xỉ đạo hàm theo 2 hướng x    y :

Các bước tính toán của kỹ thuật Prewitt
Ví dụ ta có ảnh I:
4.2.3.Kỹ thuật Sobel
Tương tự như kỹ thuật Prewitt kỹ thuật Sobel sử dụng 2 mặt nạ nhân chập theo 2 hướng x, y :
Các bước tính toán tương tự Prewitt
Bài tập dành cho sinh viên, hãy tính toán tương ̣ với ảnh I đã tính toán với kỹ thuật Prewitt.
4.2.4.Kỹ thuật la bàn
Kỹ thuật sử dụng 8 mặt nạ nhân chập theo 8 hướng 00, 450, 900, 1350, 1800, 2250, 2700, 3150
Các bước tính toán thuật toán La bàn:
Trong đó, Hi được cho như sau:

4.2.3.Kỹ thuật phát hiện biên Laplace
Các phương pháp đánh giá gradient ở trên làm việc khá tốt khi độ sáng thay đổi nét. Khi mức xám thay đổi chậm, miền chuyển tiếp trải rộng, phương pháp cho hiệu quả hơn đó phương pháp sử dụng đạo hàm bậc hai Laplace. 
Toán tử Laplace được định nghĩa như sau:
Nên ta dùng:
Trong thực tế, người ta thường dùng nhiều kiểu mặt nạ khác nhau để xấp xỉ rời rạc đạo hàm bậc hai Laplace. Dưới đây ba kiểu mặt nạ  thường dùng:
Bài tập cho sinh viên, hãy tính toán dùng mặt nạ H, cho ảnh sau:


Bài tập cuối chương 4
Bài tập 4.1. Viết chương trình đọc vào 1 ảnh và ̉ dụng kỹ thuật Prewitt để phát hiện biên cho ảnh, hiển thị biên của ảnh.
Bài tập 4.2. Viết chương trình đọc vào 1 ảnh và ̉ dụng kỹ thuật Sobel để phát hiện biên cho ảnh, hiển thị biên của ảnh.
Bài tập 4.3. Viết chương trình đọc vào 1 ảnh và ̉ dụng kỹ thuật la bàn để phát hiện biên cho ảnh, hiển thị biên của ảnh.
Bài tập 4.4. Viết chương trình đọc vào 1 ảnh và ̉ dụng kỹ thuật phát hiện biên Laplace để phát hiện biên cho ảnh, hiển thị biên của ảnh.

Bài đăng nổi bật

Các mẫu Design Pattern

Hệ thống các mẫu design pattern hiện có 23 mẫu được định nghĩa trong cuốn " Design patterns Elements of Reusable Object Oriented Softwa...