C#: OOP + OOAD
Khóa học "C#: OOP + OOAD" giúp bạn chuyển từ viết code theo từng hàm rời rạc sang tổ chức chương trình bằng lớp và đối tượng. Phần OOP dạy cách viết code hướng đối tượng. Phần OOAD dạy cách phân tích yêu cầu và thiết kế hệ thống trước khi viết code.
Bạn sẽ học được gì?
Lớp, đối tượng và đóng gói: trường, phương thức, hàm tạo (constructor), thuộc tính (properties) trong C#, kiểm soát truy cập bằng
publicvàprivate.Kế thừa: tái sử dụng code giữa lớp cha và lớp con, dùng
virtual,override,base, và các lỗi thường gặp khi lạm dụng kế thừa.Đa hình: nạp chồng phương thức (overloading), ghi đè phương thức (overriding), làm việc với lớp cơ sở và interface để code dễ mở rộng.
Trừu tượng:
abstract classvàinterface, khi nào dùng loại nào, và cách áp dụng vào thiết kế hệ thống.Phân tích và thiết kế hướng đối tượng (OOAD): phân tích yêu cầu, xác định đối tượng, thuộc tính và hành vi từ một bài toán thực tế.
Sơ đồ lớp UML: đọc và vẽ Class Diagram, phân biệt các quan hệ kết hợp (Association), tập hợp (Aggregation), hợp thành (Composition) và kế thừa.
Nguyên tắc SOLID và mã nguồn sạch: SRP, OCP, LSP, ISP, DIP, và refactor code chưa tốt theo các nguyên tắc này.
Dự án cuối khóa: bạn tự làm một dự án hoàn chỉnh theo đúng quy trình: phân tích yêu cầu, xác định phạm vi, vẽ sơ đồ lớp UML, áp dụng SOLID, tổ chức thư mục, viết code, rồi hoàn thiện và đánh giá dự án.
Khóa học phù hợp với ai?
Khóa học dành cho những bạn đã nắm C# cơ bản (biến, điều kiện, vòng lặp, mảng, hàm) và muốn viết code có cấu trúc, dễ bảo trì và dễ mở rộng. Đây cũng là nền tảng cần có trước khi học các framework .NET, design pattern hay làm việc trong dự án nhóm.
Khóa học gồm 9 module với gần 300 hoạt động, kết hợp bài đọc, mô phỏng trực quan, bài thực hành viết code và bài kiểm tra sau từng phần.
Nội dung khóa học
Giới thiệu Lập trình hướng đối tượng (OOP)
1 bài học · 5 hoạt động-
Khái niệm Lập trình hướng đối tượng (OOP) là gì?
-
Tại sao cần Lập trình hướng đối tượng?
-
Các khái niệm cốt lõi của OOP (Tổng quan)
-
Kiểm tra kiến thức chung về OOP
-
Thảo luận về ưu nhược điểm của OOP
Đối tượng, Lớp và Đóng gói (Encapsulation)
6 bài học · 34 hoạt động-
Lớp là gì? Đối tượng là gì?
-
Định nghĩa Lớp đầu tiên của bạn trong C#
-
Tạo và Sử dụng Đối tượng
-
Bài tập: Tự định nghĩa lớp và tạo đối tượng
-
Kiểm tra kiến thức về Lớp và Đối tượng
-
Trường (Fields) trong C#
-
Phương thức (Methods) và Hành vi của Đối tượng
-
Thực hành: Thêm trường và phương thức vào lớp
-
Phân tích lỗi thường gặp về Tham số và Giá trị trả về
-
Bài tập: Xây dựng lớp máy tính đơn giản
-
Kiểm tra kiến thức về Trường và Phương thức
-
Đóng gói là gì? Tại sao lại cần Đóng gói?
-
Các Từ khóa Kiểm soát Truy cập (Access Modifiers)
-
Ứng dụng Access Modifiers trong thực tế
-
Phân tích mã nguồn: Đóng gói kém và Đóng gói tốt
-
Kiểm tra kiến thức về Đóng gói và Access Modifiers
-
Giới thiệu về Thuộc tính (Properties)
-
Cú pháp và Các loại Thuộc tính
-
Thực hành: Tạo và sử dụng Thuộc tính
-
Sử dụng Thuộc tính với Logic Validation
-
Bài tập: Thiết kế lớp tài khoản ngân hàng với Properties
-
Kiểm tra kiến thức về Thuộc tính
-
Mục đích của Hàm tạo (Constructors)
-
Các loại Hàm tạo và Nạp chồng Hàm tạo
-
Sử dụng từ khóa 'this' trong Hàm tạo
-
Thực hành: Định nghĩa và sử dụng Hàm tạo
-
Bài tập: Lớp 'Circle' với các Hàm tạo
-
Kiểm tra kiến thức về Hàm tạo
-
Tóm tắt Nguyên lý Đóng gói và Best Practices
-
Phân tích và Cải thiện Đóng gói trong Mã nguồn
-
Thiết kế Lớp 'Employee' với Đóng gói hoàn chỉnh
-
Thảo luận: Thách thức khi áp dụng Đóng gói
-
Luyện tập: Tạo lớp 'Order' với các thành phần đã học
-
Quiz tổng kết: Đóng gói trong C#
Kế thừa (Inheritance) và Tái sử dụng Mã
5 bài học · 29 hoạt động-
Kế thừa là gì?
-
Giới thiệu trực quan về Kế thừa
-
Mối quan hệ 'is-a' và lớp cha, lớp con
-
Phân tích ví dụ Kế thừa đơn giản
-
Kiểm tra kiến thức cơ bản về Kế thừa
-
Cú pháp Kế thừa trong C#
-
Thành viên được kế thừa và Tầm vực truy cập
-
Thực hành Kế thừa cơ bản
-
Phân tích lỗi khi kết hợp Kế thừa và Constructor
-
Xây dựng hệ thống lớp với Kế thừa và Constructor
-
Kiểm tra Kế thừa và Tầm vực truy cập
-
Kế thừa để Tái sử dụng Mã
-
Thiết kế lớp để tái sử dụng
-
Phân tích mã nguồn tái sử dụng
-
Các ví dụ thực tế về tái sử dụng mã với Kế thừa
-
Tái sử dụng mã và Kế thừa
-
Từ khóa `virtual` và `override`
-
Thực hành ghi đè phương thức với `virtual` và `override`
-
Sử dụng từ khóa `base`
-
Kết hợp virtual, override và base
-
Minh họa `virtual`, `override`, `base`
-
Kiểm tra `virtual`, `override` và `base`
-
Xây dựng hệ thống nhân sự với Kế thừa nâng cao
-
Hạn chế của Kế thừa
-
Khi nào nên sử dụng Kế thừa
-
Kế thừa so với Composition
-
Phân tích và sửa lỗi kế thừa
-
Thảo luận về thiết kế kế thừa
-
Kế thừa và Thực hành tốt nhất
Đa hình (Polymorphism) và Thiết kế linh hoạt
5 bài học · 28 hoạt động-
Khái niệm Đa hình là gì?
-
Ví dụ minh họa Đa hình
-
Lợi ích của Đa hình
-
Kiểm tra kiến thức cơ bản về Đa hình
-
Thảo luận: Đa hình trong đời sống
-
Nạp chồng phương thức là gì?
-
Cú pháp và ví dụ về Nạp chồng phương thức
-
Thực hành Nạp chồng phương thức cơ bản
-
Bài tập: Xây dựng Lớp Xử lý Hình học với Nạp chồng Phương thức
-
Kiểm tra Nạp chồng phương thức
-
Thiết kế các phương thức nạp chồng cho lớp tính toán
-
Ghi đè phương thức là gì và tại sao cần?
-
Từ khóa virtual và override
-
Ví dụ minh họa Ghi đè phương thức
-
Thực hành Ghi đè phương thức với lớp động vật
-
Kiểm tra Ghi đè phương thức và từ khóa
-
Thảo luận: Khi nào dùng Overloading, khi nào dùng Overriding?
-
Đa hình thông qua tham chiếu lớp cơ sở
-
Ví dụ về Đa hình với danh sách lớp cơ sở
-
Đa hình với Interface (giới thiệu)
-
Thực hành xử lý đa dạng đối tượng
-
Phân biệt Upcasting và Downcasting
-
Kiểm tra Đa hình với lớp cơ sở và interface
-
Đa hình giúp tạo mã linh hoạt và dễ mở rộng
-
Ví dụ thực tế về Đa hình trong thiết kế hệ thống
-
Phân tích mã nguồn sử dụng Đa hình trong dự án nhỏ
-
Bài tập: Thiết kế Hệ thống Quản lý Xử lý Tệp tin (File Processing System)
-
Tổng kết Đa hình và ứng dụng
Trừu tượng (Abstraction) với Abstract Class và Interface
6 bài học · 35 hoạt động-
Khái niệm Trừu tượng trong Lập trình hướng đối tượng (OOP)
-
Tại sao chúng ta cần Trừu tượng trong thiết kế phần mềm?
-
Giới thiệu Abstract Class: Khái niệm và Mục đích
-
Cấu trúc cơ bản của một Abstract Class và Abstract Method
-
Thực hành: Định nghĩa Abstract Class và Abstract Method đầu tiên của bạn
-
Kiểm tra kiến thức về Trừu tượng và Abstract Class
-
Các quy tắc và hạn chế khi sử dụng Abstract Class
-
Triển khai Abstract Class và ghi đè phương thức: Ví dụ về Động vật
-
Xây dựng hệ thống quản lý giao dịch ngân hàng với Abstract Class
-
Phân tích mã nguồn: Ứng dụng quản lý nhân sự sử dụng Abstract Class
-
Bài tập: Xây dựng hệ thống quản lý phương tiện giao thông
-
Nắm vững Abstract Class: Kiểm tra thực hành và ứng dụng
-
Khái niệm Interface trong C# và vai trò của nó
-
Interface khác gì Abstract Class? (Tổng quan ban đầu)
-
Thực hành: Định nghĩa Interface và triển khai cơ bản
-
Các quy tắc cơ bản và cú pháp của Interface trong C#
-
Áp dụng Interface cho nhiều lớp với cùng một hành vi
-
Kiến thức nền tảng về Interface: Kiểm tra hiểu biết
-
Kế thừa đa giao diện (Multiple Inheritance) qua Interface
-
Xây dựng hệ thống thanh toán linh hoạt với nhiều Interface
-
Sử dụng Default Interface Methods (C# 8+) để thêm chức năng mà không phá vỡ
-
Phân tích mã nguồn: Hệ thống plugin sử dụng nhiều Interface
-
Bài tập: Hệ thống Thông báo Đa phương thức
-
Vận dụng Interface: Kiểm tra nâng cao
-
So sánh chi tiết Abstract Class và Interface (Phần 1: Khác biệt cấu trúc và khả năng)
-
So sánh chi tiết Abstract Class và Interface (Phần 2: Trường hợp sử dụng và triết lý thiết kế)
-
Khi nào dùng Abstract Class, khi nào dùng Interface? Ví dụ minh họa
-
Thảo luận tình huống thiết kế: Lựa chọn Abstraction cho hệ thống mới
-
Thực hành: Chuyển đổi thiết kế từ Abstract Class sang Interface và ngược lại
-
Phân biệt Abstract Class và Interface: Bài kiểm tra tổng hợp
-
Lợi ích của Trừu tượng trong thiết kế phần mềm hiện đại
-
Ví dụ thực tế: Cách các framework C# lớn sử dụng Abstract Class và Interface
-
Refactor mã nguồn để tăng tính trừu tượng và giảm sự phụ thuộc
-
Bài tập: Thiết kế Hệ thống Quản lý Thiết bị IoT với Nguyên lý Trừu tượng
-
Tổng hợp và ứng dụng Trừu tượng: Kiểm tra cuối module
Giới thiệu Phân tích & Thiết kế hướng đối tượng (OOAD)
4 bài học · 23 hoạt động-
OOAD là gì?
-
Lịch sử và sự phát triển của OOAD
-
Tại sao OOAD lại quan trọng?
-
Vị trí của OOAD trong vòng đời phát triển phần mềm (SDLC)
-
Thảo luận: Các trường hợp ứng dụng OOAD trong thực tế
-
Kiểm tra kiến thức tổng quan về OOAD
-
Thu thập và làm rõ yêu cầu hệ thống
-
Kịch bản sử dụng (Use Case) và vai trò của nó trong phân tích
-
Ví dụ về Use Case cho hệ thống quản lý thư viện
-
Thực hành: Viết mô tả Use Case cho một bài toán đơn giản
-
Kiểm tra kiến thức về phân tích yêu cầu và Use Case
-
Khái niệm Đối tượng và Lớp trong ngữ cảnh OOAD
-
Kỹ thuật xác định danh từ và động từ
-
Thực hành tương tác: Xác định đối tượng từ mô tả văn bản
-
Thuộc tính (Attributes) của đối tượng
-
Hành vi (Behaviors/Methods) của đối tượng
-
Bài tập: Phân tích và Thiết kế Hướng đối tượng cho Hệ thống Quản lý Sân bóng đá mini
-
Kiểm tra khả năng xác định các thành phần hướng đối tượng
-
Vai trò của mô hình hóa trong OOAD
-
Giới thiệu sơ lược về Sơ đồ lớp (Class Diagram)
-
Phân tích một Class Diagram đơn giản
-
Bài tập: Thiết kế Sơ đồ lớp cho Hệ thống Quản lý Thư viện
-
Kiểm tra kiến thức về chuyển đổi từ phân tích sang thiết kế
Mối quan hệ giữa các lớp và Sơ đồ lớp UML (Class Diagram)
8 bài học · 37 hoạt động-
Giới thiệu các loại mối quan hệ giữa các lớp
-
Kế thừa trong OOP: Nhắc lại và Ứng dụng
-
Biểu diễn Kế thừa trong sơ đồ lớp UML
-
Phân tích mã nguồn C# với kế thừa
-
Kiểm tra kiến thức về Kế thừa và biểu diễn UML
-
Giới thiệu về Kết hợp (Association)
-
Đa số (Multiplicity) trong Kết hợp
-
Thực hành: Ví dụ minh họa Kết hợp và Đa số
-
Viết mã C# cho mối quan hệ Kết hợp
-
Kiểm tra về Kết hợp và Đa số
-
Khái niệm Tập hợp (Aggregation)
-
Minh họa Tập hợp trong đời sống và mã nguồn
-
Phát hiện Tập hợp trong mã nguồn C#
-
Phân biệt Tập hợp và Kết hợp
-
Hợp thành (Composition) - Mối quan hệ mạnh mẽ
-
So sánh Tập hợp và Hợp thành
-
Bài tập: Mô hình hóa hệ thống máy tính với Hợp thành (Composition)
-
Kiểm tra về Hợp thành và so sánh với các mối quan hệ khác
-
Các nguyên tắc khi lựa chọn mối quan hệ giữa các lớp
-
Thảo luận tình huống thiết kế hệ thống nhỏ
-
Thực hành: Phân tích và đề xuất mối quan hệ cho bài toán thực tế
-
Review mã nguồn và đề xuất cải tiến mối quan hệ
-
Tổng hợp các mối quan hệ và lựa chọn phù hợp
-
Sơ đồ lớp UML là gì? Tại sao cần nó?
-
Cấu trúc của một lớp trong UML
-
Đối chiếu mã C# với sơ đồ lớp UML đơn giản
-
Thực hành: Xây dựng lớp C# từ mô tả UML
-
Nhận diện thành phần lớp trong UML
-
Quy trình vẽ Sơ đồ lớp UML
-
Thực hành: Vẽ sơ đồ lớp UML từ ví dụ thực tế
-
Bài tập: Thiết kế Sơ đồ lớp (Class Diagram) cho Hệ thống Quản lý Thư viện
-
Đọc và giải thích sơ đồ lớp UML
-
Các yếu tố nâng cao trong Sơ đồ lớp UML
-
Thực hành: Đọc và hiểu mã nguồn từ sơ đồ UML phức tạp
-
Phân tích sơ đồ lớp trong tình huống thực tế
-
Bài tập: Phân tích và Thiết kế Hệ thống Quản lý Thư viện
-
Đánh giá khả năng đọc hiểu sơ đồ lớp phức tạp
Nguyên tắc thiết kế hướng đối tượng cơ bản và Mã nguồn sạch
7 bài học · 35 hoạt động-
Mã nguồn sạch là gì?
-
Tầm quan trọng của thiết kế tốt trong OOP
-
Dấu hiệu của một mã nguồn kém chất lượng (Code Smells)
-
Nhận diện Code Smells cơ bản trong mã nguồn
-
Kiểm tra kiến thức về mã nguồn sạch và Code Smells
-
Giới thiệu Nguyên tắc Đơn nhiệm (SRP)
-
Ví dụ minh họa SRP trong thực tế
-
Phân tích mã vi phạm SRP
-
Áp dụng SRP để refactor mã
-
Kiểm tra về Nguyên tắc Đơn nhiệm (SRP)
-
Giới thiệu Nguyên tắc Mở/Đóng (OCP)
-
Cách thiết kế để tuân thủ OCP với Đa hình và Interface
-
Phân tích mã vi phạm và tuân thủ OCP
-
Mở rộng chức năng mà không sửa đổi mã nguồn hiện có
-
Kiểm tra về Nguyên tắc Mở/Đóng (OCP)
-
Giới thiệu Nguyên tắc Thay thế Liskov (LSP)
-
Phân tích ví dụ vi phạm và tuân thủ LSP
-
Phân tích ví dụ vi phạm và tuân thủ LSP
-
Thực hành: Thiết kế lại lớp để tuân thủ LSP
-
Kiểm tra về Nguyên tắc Thay thế Liskov (LSP)
-
Giới thiệu Nguyên tắc Tách biệt Giao diện (ISP)
-
Tại sao giao diện lớn là một vấn đề?
-
Thực hành: Tách giao diện lớn thành các giao diện nhỏ hơn
-
So sánh thiết kế với và không có ISP
-
Kiểm tra về Nguyên tắc Tách biệt Giao diện (ISP)
-
Giới thiệu Nguyên tắc Đảo ngược Phụ thuộc (DIP)
-
Lợi ích của việc giảm sự phụ thuộc trực tiếp
-
Thực hành: Áp dụng Dependency Injection để tuân thủ DIP
-
Đánh giá mã nguồn về DIP
-
Kiểm tra về Nguyên tắc Đảo ngược Phụ thuộc (DIP)
-
Refactoring là gì và khi nào cần refactor?
-
Các kỹ thuật Refactoring phổ biến
-
Thực hành: Refactor một đoạn mã nhỏ
-
Phân tích và đề xuất refactor cho một bài toán cụ thể
-
Tổng kết kiến thức về SOLID và Refactoring
Xây dựng dự án thực tế với OOP & OOAD
5 bài học · 41 hoạt động-
Giới thiệu dự án mẫu và các yêu cầu ban đầu
-
Kỹ thuật thu thập và phân tích yêu cầu cơ bản
-
Xác định các đối tượng chính và thuộc tính ban đầu
-
Thực hành: Xác định yêu cầu từ kịch bản
-
Kiểm tra kiến thức về phân tích yêu cầu
-
Thảo luận về các yêu cầu không rõ ràng
-
Xác định phạm vi và giới hạn của dự án
-
Bài tập: Phân tích và Thiết lập Phạm vi Dự án Quản lý Thư viện
-
Từ yêu cầu đến các đối tượng trong hệ thống
-
Hướng dẫn xác định các lớp và thuộc tính
-
Xác định các hành vi (phương thức) cho từng lớp
-
Thực hành xác định lớp, thuộc tính và phương thức
-
Xác định các mối quan hệ ban đầu giữa các lớp
-
Bài tập: Xây dựng mô hình đối tượng cho hệ thống Quản lý Cửa hàng Máy tính
-
Kiểm tra kiến thức OOA
-
Bài tập Phân tích Hướng đối tượng: Hệ thống Quản lý Đơn hàng
-
Chuyển đổi mô hình OOA sang OOD
-
Hướng dẫn vẽ Sơ đồ lớp UML cơ bản
-
Áp dụng Nguyên tắc Đơn trách nhiệm (SRP) và Nguyên tắc Mở/Đóng (OCP)
-
Phân tích mã nguồn và tìm vi phạm SRP/OCP
-
Áp dụng Nguyên tắc Thay thế Liskov (LSP) và Nguyên tắc Tách giao diện (ISP)
-
Thực hành refactor theo LSP và ISP
-
Áp dụng Nguyên tắc Đảo ngược Phụ thuộc (DIP)
-
Kiểm tra kiến thức OOD và SOLID
-
Thiết kế Sơ đồ lớp UML chi tiết cho dự án mẫu
-
Cấu trúc dự án C# theo mô hình hướng đối tượng
-
Hướng dẫn tạo project và các lớp cơ bản
-
Triển khai các lớp và thuộc tính ban đầu
-
Xây dựng các phương thức và xử lý logic nghiệp vụ
-
Viết mã cho các chức năng CRUD (Create, Read, Update, Delete) cơ bản
-
Giới thiệu công cụ Debugging trong Visual Studio
-
Kiểm tra kiến thức về triển khai mã C#
-
Bài tập: Triển khai Quản lý Danh sách Công việc (Todo List)
-
Xử lý đầu vào/đầu ra và hiển thị thông tin
-
Thêm các tính năng bổ sung và cải thiện giao diện người dùng
-
Các phương pháp kiểm thử đơn vị cơ bản (Unit Testing)
-
Hướng dẫn kiểm thử đơn vị một chức năng nhỏ
-
Tự kiểm tra mã nguồn theo các nguyên tắc OOP/OOAD
-
Kiểm tra tổng hợp kiến thức dự án
-
Hoàn thiện dự án, viết báo cáo ngắn gọn về thiết kế và triển khai
-
Thảo luận về các thách thức và giải pháp trong quá trình làm dự án