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?