OOP & Design Patterns (Vietnamese)

oop

TÓM TẮT KHÓA HỌC MẪU THIẾT KẾ HƯỚNG ĐỐI TƯỢNG.

Mình xây dựng khóa học này hoàn toàn miễn phí với mục đích ôn tập, hệ thống lại kiến thức của bản thân sau một khoảng thời gian đã làm việc.
OOP là một trong những kiến thức nền tảng không thể thiếu sau khi bạn tốt nghiệp. Đây là kiến thức mà mình thấy đối với bạn sinh viên nào mới ra trường cũng sẽ được hỏi trong các bài phỏng vấn.
Các bạn sinh viên còn đang đi học hoặc các bạn mới ra trường, nếu muốn được học offline, có người ra bài tập, rồi có người kiểm tra, đánh giá, góp ý, hoặc các bạn muốn thực hành trên những dự án thực tế thì liên hệ mình nhé
SĐT: 0344820000
Email: hr@kickoff.tech

NỘI DUNG:

  1. Các tính chất trong ngôn ngữ lập trình hướng đối tượng.
    • Tính kế thừa (Inheritance)
      • Tính chất này giúp một lớp con kế thừa những thuộc tính và phương thức của lớp cha đã được xây dựng, implement trước ở lớp cha, mà không cần định nghĩa lại.
    • Tính đóng gói (Encapsulation)
      • Tính chất này giúp giới hạn việc tiếp cận trực tiếp tới những thuộc tính trên đối tượng bằng cách thông qua những method trung gian. Từ đó mình có thể quản lý được việc sử dụng, sửa đổi những thuộc tính bên trong của một đối tượng. Cụ thể mình cung cấp method để sử dụng thuộc tính bên trong, cái nào không cho sử dụng thì không public method ra ngoài đối tượng.
    • Tính đa hình (Polymorphism)
      • Tính đa hình được thể hiện khi phương thức của một đối tượng được gọi. Cùng một method, tuy nhiên nếu đối tượng đó được tạo ra từ Class này sẽ thực thi một kiểu, nếu đối tượng đó tạo từ Class kia thì cách thực thi bên trong sẽ khác. Ví dụ cụ thể, mình có class Parent có method sing(), có 2 class kế thừa từ class này là Son, Daughter. Son, Daughter sẽ thực thi method sing() theo cách của nó, ví dụ như chất dọng, tông, hát hay, hát dở.
    • Tính trừu tượng (Abstraction)
      • Đây là một đặc trưng quan trọng của ngôn ngữ lập trình hướng đối tượng. Khi bên ngoài sử dụng một đối tượng, hoặc giữa các đối tượng tương tác với nhau. Thông qua tên phương thức mình có thể hình dung nó làm được gì, và không cần quan tâm bên trong. Mình chỉ thấy những phương thức của đối tượng đó cung cấp, không cần quan tâm chi tiết bên trong được thực thi như thế nào, phần implementation của phương thức được che mờ đi.
      • Suy nghĩ theo hướng Abstraction tại thời điểm thiết kế ứng dụng. Chúng ta sẽ tập trung vào việc dựng interface của Class, có nghĩa là tập trung vào việc, nó sẽ tương tác với Class khác ra sao, được sử dụng như thế nào. Còn sau này bước sang thời kì implement details, mình sẽ tiến hành implement sau. Có một số syntax để nhấn mạnh việc này như Abstract Class, Abstract Method, Interface.
  2. Mẫu thiết kế hướng đối tượng là gì?
    • Mẫu thiết kế hướng đối tượng là giải pháp mang tính thiết kế chi tiết cho một số bài toán đặc trưng, được các Developer rút ra trong quá trình phát triển phần mềm.
  3. Cách học mẫu thiết kế hướng đối tượng.
    • Mình có thể nói mẫu thiết kế hướng đối tượng là di sản do ông cha ta để tại ^^. Just kidding. Trong quá trình phát triển phần mềm các chuyên gia rút ra được những mẫu thiết kế hướng đối tượng để giải quyết một số bài toán có những đặc điểm như vậy, thì hướng xử lý lâu dài sẽ tốt.
    • Một số quan niệm sai làm khi học designer pattern là người học nhớ chi tiết mẫu này code như thế nào, cụ thể thằng này kế thừa thằng kia ra sao.
    • Học design pattern, chúng ta nên đi từ bài toán và ứng với bài toán đó mẫu thiết kế nào phù hợp. Tại thời điểm đó, chúng ta không cần quan tâm tới mẫu đó được implement ra sao. Vì tùy ngôn ngữ mà cách implement của pattern đó sẽ khác.
    • Ví dụ cách học đúng đi từ bài toán:
      • Bài toán khi một hệ thống chỉ cần tạo ra một đối tượng từ class đó thôi –> nghĩ tới mẫu Singleton liền. Implement thì tùy ngôn ngữ sẽ khác. Bài toán thực tế, connection tới database, logging. Mình chỉ cần một đối tượng, thực thể tạo ra từ Class đó là được.
      • Gặp bài toán, để thực hiện một công việc trải qua nhiều step, mỗi step đó tùy loại đội tượng sẽ chạy theo kiểu khác nhau –> Mẫu template.
  4. Một số mẫu thiết kế hướng đối tượng.
    • Nhóm Creational Patterns.
      • Factory Pattern
      • Abstract Factory Pattern
      • Singleton Pattern
      • Builder Pattern
      • Prototype Pattern
      • Decorator Pattern
    • Nhóm Structural Patterns.
      • Adapter Pattern
      • Bridge Pattern
      • Filter Pattern
      • Composite Pattern
      • Facade Pattern
      • Flyweight Pattern
      • Proxy Pattern
    • Nhóm Behavioral Patterns.
      • Chain of Responsibilities Pattern
      • Command Pattern
      • Interpreter Pattern
      • Iterator Pattern
      • Mediator Pattern
      • Memento Pattern
      • Observer Pattern
      • State Pattern
      • Strategy Pattern
      • Template Pattern
  5. Các thiết kế Class Diagram

Nguồn tham khảo:
https://www.geeksforgeeks.org/abstraction-in-c/
https://www.tutorialspoint.com/design_pattern