Tổng quan về mẫu thiết kế hướng đối tượng
1. Ôn tập về lập trình hướng đối tượng
Đối tượng là gì ?
Viết code:
Biến (variable)
Hàm (function)
Phép tính
Hai trường phái viết code ngôn ngữ lập trình:
==> Lấy hàm làm trung tâm f1(), f2(), f3(), .. (hướng thủ tục)
Verb + Object : do(SomeThing)
==> Lấy biến làm trung tâm x.do1(), y.does(), z , t... (hướng đối tượng)
Object --> variable (special) : dữ liệu + hàm
===> OOP : hỗ trợ và sử dụng object

Chương trình hướng đối tượng ?
Khai báo lớp và sử dụng đối tượng
Cần tuân thủ 4 tính chất hướng đối tượng
Tính đóng gói (encapsulation) : quy tắc hộp đen (attributes), "Tell , don't ask" (methods) ví dụ : struct Point { int x, y; }
class Student{
//Public Nhà có kho vàng mà ko có cửa
private string name;
private int age;
private double math, literature;
public double getMath();
public double getLiterature():
// Nhà có kho vàng mà cửa không khóa trên cái bảng có chữ để kho vàng
public double caculateGPA();
// Hãy giao cho đối tượng thực hiện công việc đó
}

Kế thừa (Inheritance) :
DRY : copy and paste --> change
Tái sử dụng lại object

Đa hình (Polymorphism) :
Quy tắc "Con có thể đóng vai cha" (một hành động có thể thực hiện theo nhiều cách khác nhau) - Over loading, overriding , runtime
Hàm ảo và liên kết động (Dynamic binding)

Trừu tượng (Abstraction) : che giấu đi chi tiết chỉ giữ lại những thứ phù hợp vs context. Ví dụ: Ari Plane in real world, in the game, game bắn súng, game gì đó ...
Mục đích của lập trình hướng đối tượng : giải quyết các vấn đề mà lập trình hướng thủ tục không giải quyết được. (Giúp cho lập trình viên tạo ra sản phẩm, giảm thời gian bảo trì ...)
Đa hình
Đóng gói
Kế thừa
2. Giới thiệu các mẫu
Bài văn mẫu, mẫu
Design patterns
Lời giải đẹp, thường xuyên gặp, những tri thức --> các lập trình viên về các bài toán trong OOP
Sưu tầm, bài luận điểm hay điểm giở, cài đặt ...

Công việc của chúng ta:
Hiểu - Lời giải
Bàn luận - Hay vs giở, khi nào nên dùng, khi nào không nên dùng
2.1 Phân loại
Phân theo chiều dọc và chiều ngang

Hướng phát triển :
Tạo mẫu thiết kế mới
Mẫu kết hợp (compound patterns)
Mẫu nên tránh (anti-patterns, code smells)
3. Bản thiết kế và thuật ngữ
Bản thiết kế :
sơ đồ UML (class diagram): ôn lại cái ký hiệu

Minh họa mã giải

ví dụ

Các thuật ngữ:
Interface: bắt đầu từ thời kỳ đầu của hướng đối tượng
Khái niệm class:
Declaration : void doSomething() <-- prototype/ skin
Implementation : <-- body
Inheritance :
Subclass : declaration + implementation
Subtype :declaration
--> Interface là phần giao diện chỉ có phần khai báo mà không có kế thừa. Giảm sự phụ thuộc vào lớp kế thừa.
Java and C#: single subclass, multiple subtype.

Complied-time (static) vs run-time (dynamic): update features
Complied-time ==> chỉnh sửa ở nhà máy (source code)
Run-time ==> chỉnh sửa chạy (settings, client source code)
Ví dụ xe máy: khi mua về có thể sửa chữa thậm chí là độ xe.
Bác sỹ và sửa xe

Hard-coded (mã nguồn cố định) vs soft-coded (mã nguồn dễ thay đổi)
//Đề bài : 3 + 5
//Change, update đề bài
//Hard coded
int add(){
return 3 + 5;
}
//soft-coded
int add(x, y){
return x + y;
}
//softer coded
int add(x, y, operation){
return operation(x,y);
}
//More Softer coded
int add(_______________){
}
//Print rectangle
// like this
// ******
// * *
// ******
//Level 1:
void printRectangle(){
}
//Level 2:
void printRectangle(char border='*'){}
//Level 3:
void printRectangle(char border='*', int w, int h){}
//Level 4:
//Level 5:
// Levle 6:
Composition and Wrapper

There is no free lunch ! Không có bản thiết kế hoàn hảo 100%.
4. So sánh ngành lập trình vs xe máy
Giai đoạn (giống nhau): thu thập yêu cầu --> design --> implementation --> test --> maintenance
Library and framework khác nhau gì? <--> động cơ xe máy vs khung sườn (động cơ, bánh xe, bộ chuyển động,...)
Xe máy ngon ? core : chạy ngon, ít tốn xăng <==> bonus : đẹp, độ chế,...

Last updated
Was this helpful?