Tổng quan về giáo trình

Nội dung tài liệu thuộc "Chương VI: Tổng quan về lập trình hướng đối tượng", đóng vai trò là học phần cơ sở ngành quan trọng trong chương trình đào tạo kỹ sư Công nghệ thông tin và Kỹ thuật phần mềm (tham chiếu gói định danh package oop.cnpm). Chương học giữ vị trí chuyển tiếp phương pháp luận lập trình, định hướng người học thay đổi mô hình tư duy từ lập trình cấu trúc truyền thống sang mô hình lập trình hướng đối tượng (OOP).

Mục tiêu học tập (learning outcomes) của học phần bao gồm:

  1. Phân tích và chuyển đổi các thực thể trong thế giới thực thành các mô hình đối tượng phần mềm thông qua hai yếu tố cốt lõi: trạng thái (state/attribute) và hành vi (behaviour/method).
  2. Phân biệt sự khác nhau mang tính bản chất giữa mô hình hướng cấu trúc ($Data\ structures + Algorithms = Program$) và mô hình hướng đối tượng ($Objects + Messages = Program$).
  3. Nắm vững và phân tích bốn nguyên lý cơ bản: Trừu tượng hóa (Abstraction), Mô-đun hóa (Modularity), Phân cấp (Hierarchy) và Đóng gói (Encapsulation).
  4. Thực hành khai báo cấu trúc lớp, bao gồm thuộc tính, phương thức, chữ ký phương thức (signature), thành viên bất biến (final), gói (package) và cơ chế che giấu dữ liệu (data hiding) bằng ngôn ngữ lập trình Java.

Cấu trúc tài liệu tiếp cận theo trình tự logic quy nạp: bắt đầu từ việc quan sát thực tế (ví dụ xe ô tô, xe đạp, mô hình hóa quan hệ thực thể giữa Tom, Car, House, Tree), trừu tượng hóa thành các khái niệm lý thuyết, và kết thúc bằng việc chuẩn hóa cú pháp kỹ thuật trong Java. Điểm đặc sắc của giáo trình là tính nhất quán về mặt thuật ngữ học thuật, cung cấp các bảng ma trận quyền truy cập rõ ràng và sơ đồ phân cấp trực quan nhằm giúp người học hình thành tư duy kiến trúc phần mềm chuẩn xác.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Nội dung chương trình được phân chia thành 6 chủ đề chính theo tiến trình sư phạm chặt chẽ:

  1. Bản chất của Đối tượng (Object) trong thế giới thực và phần mềm:

    • Đối tượng thực tế được định nghĩa là thực thể cụ thể có thể quan sát, cảm nhận được, mang trạng thái và hành động (ví dụ chiếc ô tô có màu sắc, tốc độ, quãng đường; các hành động đạp ga để tăng tốc, đạp phanh để giảm tốc).
    • Đối tượng phần mềm mô hình hóa các thực thể thực tế, ánh xạ trạng thái thành thuộc tính (attribute/property) và hành động thành phương thức (method). Một đối tượng cụ thể được gọi là một thể hiện (instance).
  2. Cơ chế tương tác và so sánh mô hình lập trình:

    • Khái niệm gửi thông điệp (message passing) giữa các đối tượng thay thế cho cơ chế gọi hàm (function call). Lời gọi hàm chỉ định chính xác mã thực thi duy nhất, trong khi thông điệp là lời yêu cầu dịch vụ để đối tượng nhận tự quyết định cách thực thi.
    • So sánh phương thức luận: Hướng cấu trúc tổ chức theo công thức cấu trúc dữ liệu kết hợp giải thuật, trong khi hướng đối tượng tổ chức bằng tập hợp các đối tượng tương tác qua thông điệp.
  3. Lớp đối tượng (Class) và Thể hiện (Instance):

    • Lớp đóng vai trò là bản thiết kế (blueprint) hoặc mẫu (prototype) chung cho các đối tượng cùng loại (ví dụ lớp XeDap định nghĩa cấu trúc chung cho các xe đạp thể hiện ở trạng thái bánh răng thứ 3 hoặc thứ 5).
    • Lớp là mô hình khái niệm mang tính trừu tượng, còn đối tượng là thực thể tồn tại thực sự mang dữ liệu cụ thể.
  4. Bốn nguyên lý cơ bản của Lập trình Hướng đối tượng:

    • Trừu tượng hóa (Abstraction): Loại bỏ chi tiết cụ thể, giữ lại đặc tính chung theo ngữ cảnh (ví dụ thông tin khóa học đại số lúc 9:00 sáng ngày thứ 3, 5, 7 đối với sinh viên và giáo viên). Bao gồm:
      • Trừu tượng hóa điều khiển: Dùng chương trình con và luồng điều khiển (ví dụ phép gán a := (1 + 2) * 5) thay vì can thiệp thanh ghi hoặc mã nhị phân.
      • Trừu tượng hóa dữ liệu: Tách biệt thuộc tính trừu tượng với chi tiết thực thi (ví dụ phân loại thực thể sinh học: organisms $\rightarrow$ mammals $\rightarrow$ humans).
    • Mô-đun hóa (Modularity): Phân rã hệ thống lớn thành các thành phần quản lý được (ví dụ hệ thống quản lý siêu thị gồm: hệ thống kế toán, quản lý xuất nhập sách, quản lý nhân viên).
    • Phân cấp (Hierarchy): Xây dựng cấu trúc cây thể hiện mức độ trừu tượng hóa (ví dụ phân cấp tài sản: Tài sản $\rightarrow$ Tài khoản ngân hàng, Chứng khoán, Bất động sản $\rightarrow$ Tiết kiệm, Tiền gửi, Cổ phiếu).
    • Đóng gói (Encapsulation): Gom nhóm thuộc tính và phương thức trong một đơn vị lớp duy nhất.
  5. Cấu trúc khai báo Lớp và Gói trong Java:

    • Định nghĩa lớp với tên lớp là danh từ số ít (ví dụ Student, BankAccount).
    • Tổ chức lớp theo gói (package oop.cnpm; hoặc java.io) để phân định không gian tên và quan hệ logic.
  6. Khai báo thành viên, Thành viên bất biến và Che giấu dữ liệu:

    • Khai báo thuộc tính và phương thức với chữ ký phương thức (signature) gồm tên, số lượng và kiểu tham số; quy tắc lệnh return.
    • Thành viên bất biến sử dụng từ khóa final (ví dụ final double PI = 3.141592653589793;, public final int VAL_THREE = 39;, private final int[] A = { 1, 2, 3, 4, 5, 6 };).
    • Kỹ thuật che giấu dữ liệu (data hiding) bằng cách thiết lập thuộc tính ở mức private, cung cấp phương thức truy cập (accessor/getter - getX) và phương thức biến đổi (mutator/setter - setX).

Kiến thức nền tảng được xây dựng

Giáo trình cung cấp hệ thống lý thuyết nền tảng gồm:

  • Lý thuyết trừu tượng hóa hai cấp độ: Phân định rõ giữa trừu tượng hóa điều khiển (cấp độ thực thi giải thuật) và trừu tượng hóa dữ liệu (cấp độ mô hình hóa kiểu dữ liệu người dùng).
  • Nguyên lý phân cấp độ trừu tượng: Các phần tử ở cùng cấp trong sơ đồ phân cấp có cùng mức độ trừu tượng hóa; đi lên là gia tăng tính trừu tượng, đi xuống là giảm tính trừu tượng để tiến tới thực thi cụ thể.
  • Mô hình bảo vệ dữ liệu: Kiểm soát truy cập thông qua ma trận 3 mức độ (Cùng lớp, Cùng gói, Khác gói) kết hợp với 3 từ khóa định danh (public, không khai báo/default, private).
Chỉ định truy cập Cùng lớp (Same Class) Cùng gói (Same Package) Khác gói (Different Package)
public Có (Yes) Có (Yes) Có (Yes)
Không có (Mặc định) Có (Yes) Có (Yes) Không (No)
private Có (Yes) Không (No) Không (No)

Kỹ năng phát triển

Người học hoàn thiện ba nhóm năng lực kỹ thuật:

  • Năng lực kỹ thuật (Technical skills): Thành thạo cú pháp Java chuẩn về khai báo package, class, các chỉ định truy cập, khai báo mảng/hằng số bất biến với final, thiết lập chữ ký phương thức và kiểu trả về void hoặc giá trị cụ thể.
  • Năng lực phân tích (Analytical skills): Khả năng trích rút các thuộc tính quan trọng của đối tượng thế giới thực theo ngữ cảnh bài toán; xác định ranh giới giữa các mô-đun trong hệ thống phần mềm lớn.
  • Năng lực thực hành thiết kế (Practical competencies): Xây dựng các lớp an toàn dữ liệu, ngăn chặn việc sửa đổi trái phép bằng cơ chế private field đi kèm cặp phương thức chuẩn hóa Getter/Setter.

Phương pháp giảng dạy và học tập

Giáo trình triển khai phương pháp tiếp cận sư phạm theo mô hình cấu trúc hóa khái niệm:

  1. Phương pháp sư phạm (Pedagogical approach):

    • Giáo trình sử dụng phương pháp đối chiếu trực tiếp (Comparative method) giữa các cặp khái niệm song song: Gọi hàm đối chiếu với Gửi thông điệp, Hướng cấu trúc đối chiếu với Hướng đối tượng, Lớp đối chiếu với Đối tượng. Cách tiếp cận này giúp loại bỏ sự nhầm lẫn giữa định nghĩa mô hình khái niệm và thể hiện bộ nhớ trong quá trình thực thi.
  2. Hệ thống ví dụ và Bài tập tình huống (Case studies):

    • Case study mô hình hóa thực thể: Phân tích tương tác giữa người và phương tiện/nhà ở (Tom drives Car, Tom lives in House).
    • Case study quản lý tài chính (BankAccount): Mô tả lớp tài khoản với hai thuộc tính owner (chuỗi), balance (số thực) và hai phương thức nghiệp vụ debit(double): boolean, credit(double).
    • Case study quản lý hồ sơ sinh viên (Student): Minh họa việc khởi tạo các thể hiện khác nhau (Nguyễn Thu Hương, Nguyễn Hoàng Nam) chia sẻ cùng tập thuộc tính (name, address, studentID, dateOfBirth).
    • Case study phân rã hệ thống: Minh họa nguyên lý mô-đun hóa qua mô hình phân chia Hệ thống quản lý siêu thị thành các hệ thống con độc lập (Hệ thống kế toán, Hệ thống quản lý xuất nhập sách, Hệ thống quản lý nhân viên).
  3. Phương pháp đánh giá và Hướng dẫn tự học:

    • Đánh giá kiến thức thông qua việc kiểm tra tính chính xác của chữ ký phương thức, khả năng phân quyền truy cập dựa trên bảng ma trận phạm vi, và kỹ thuật bao bọc dữ liệu (encapsulation).
    • Tự học bằng cách thực hành viết các lớp mẫu, gán các giá trị hằng số toán học/mảng với final, và kiểm tra tính hợp lệ của luồng điều khiển khi gọi các lệnh return.

Điểm nổi bật và cập nhật

Tài liệu thể hiện các điểm nhấn kỹ thuật mang tính hệ thống cao:

  • Hệ thống hóa sự khác biệt giữa Lập trình Cấu trúc và Lập trình Hướng đối tượng: Tài liệu chuẩn hóa sự đối sánh thông qua công thức kinh điển của Niklaus Wirth được tái cấu trúc: $$\text{Hướng cấu trúc: } \text{Data Structures} + \text{Algorithms} = \text{Program}$$ $$\text{Hướng đối tượng: } \text{Objects} + \text{Messages} = \text{Program}$$ Sự chuyển dịch này làm rõ rằng trong OOP, dữ liệu không còn bị thụ động xử lý bởi các thuật toán ngoại vi mà được đóng gói bên trong đối tượng, tương tác độc lập qua thông điệp.

  • Phân định rõ bản chất giữa "Gửi thông điệp" và "Gọi hàm": Tài liệu làm rõ: Lời gọi hàm xác định chính xác đoạn mã duy nhất sẽ thực thi; trong khi gửi thông điệp là hành vi yêu cầu dịch vụ, trao quyền cho đối tượng nhận tự quyết định phương thức thực thi tương ứng.

  • Chuẩn hóa kỹ thuật lập trình Java hiện đại:

    • Tách biệt rõ ràng 3 mức độ truy cập: public, private và phạm vi mặc định (package-private).
    • Quy ước định danh: Tên lớp là danh từ số ít mang tính trừu tượng; tên gói (package) viết hoàn toàn bằng chữ thường và phân tách bằng dấu chấm (package oop.cnpm;).
    • Quy chuẩn bảo vệ dữ liệu với thành viên bất biến final và mẫu hàm truy xuất getX / hiệu chỉnh setX.

Đối tượng sử dụng giáo trình

Tài liệu được thiết kế phục vụ các nhóm đối tượng học thuật cụ thể:

  • Sinh viên đại học/cao học:

    • Sinh viên chuyên ngành Khoa học máy tính, Công nghệ thông tin, Kỹ thuật phần mềm đang học các học phần Lập trình hướng đối tượng, Lập trình Java hoặc Kiến trúc phần mềm.
    • Học viên cao học cần củng cố lại lý thuyết trừu tượng hóa và các nguyên lý mô hình hóa hướng đối tượng cơ sở.
  • Điều kiện tiên quyết (Prerequisites):

    • Người học cần nắm vững kiến thức nhập môn lập trình cơ bản: các kiểu dữ liệu nguyên thủy, cấu trúc rẽ nhánh, vòng lặp, và khái niệm hàm/thủ tục trong các ngôn ngữ lập trình cấu trúc (như C hoặc Pascal).
  • Ứng dụng cho Giảng viên:

    • Làm khung đề cương bài giảng lý thuyết và giáo án thực hành cho học phần OOP.
    • Sử dụng các sơ đồ phân cấp tài sản, bảng phân quyền truy cập và các ví dụ lớp chuẩn (BankAccount, Student) làm học liệu trực quan trong giảng dạy.
  • Mục đích tự học và tra cứu:

    • Lập trình viên đang chuyển đổi mô hình tư duy từ lập trình thủ tục sang lập trình đối tượng.
    • Tài liệu tra cứu nhanh về quy tắc thiết kế chữ ký hàm, cú pháp khai báo gói và kiểm soát phạm vi thành viên lớp trong Java.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với đối tượng người học nào?

Giáo trình phù hợp với sinh viên đại học khối ngành Công nghệ thông tin, Kỹ thuật phần mềm hoặc người tự học đã có kiến thức nền tảng về lập trình cấu trúc cơ bản và đang bắt đầu tiếp cận mô hình hướng đối tượng với ngôn ngữ Java.

2. Cần chuẩn bị những kiến thức nền tảng nào trước khi học chương này?

Người học cần hiểu rõ khái niệm về biến, kiểu dữ liệu, các luồng điều khiển cơ bản (điều kiện, vòng lặp) và cách thức xây dựng hàm/chương trình con (subprogram) trong các ngôn ngữ lập trình cấu trúc.

3. Điểm khác biệt căn bản giữa mô hình Hướng cấu trúc và Hướng đối tượng được nêu trong giáo trình là gì?

Mô hình hướng cấu trúc xem chương trình là sự kết hợp giữa cấu trúc dữ liệu và giải thuật ($Data\ structures + Algorithms = Program$), trong đó hàm can thiệp trực tiếp lên dữ liệu. Mô hình hướng đối tượng tổ chức chương trình thành tập hợp các đối tượng độc lập giao tiếp với nhau bằng thông điệp ($Objects + Messages = Program$).

4. Làm thế nào để áp dụng nguyên lý Che giấu dữ liệu (Data hiding) đúng chuẩn Java?

Khai báo toàn bộ các trường dữ liệu (thuộc tính) với chỉ định truy cập private để bảo vệ bên trong lớp, sau đó cung cấp các phương thức public bao gồm Accessor (getX) để đọc dữ liệu và Mutator (setX) để sửa đổi dữ liệu một cách có kiểm soát.

5. Giáo trình cung cấp những dạng tài liệu và ví dụ minh họa nào?

Tài liệu cung cấp các lược đồ lớp mẫu chuẩn UML sơ bộ (lớp BankAccount, Student), các ví dụ thực tế về phương tiện (XeDap, ô tô), mô hình phân cấp tài sản, sơ đồ mô-đun hóa hệ thống siêu thị, bảng ma trận quyền truy cập 3 cấp độ và các đoạn mã khai báo mẫu trong ngôn ngữ Java.


Kết luận

Nội dung "Chương VI: Tổng quan về lập trình hướng đối tượng" thiết lập hệ thống khái niệm chuẩn mực từ lý thuyết mô hình hóa đến cú pháp triển khai cụ thể trên nền tảng ngôn ngữ Java. Bằng việc phân tích sâu các nguyên lý Trừu tượng hóa, Mô-đun hóa, Phân cấp và Đóng gói, tài liệu cung cấp nền tảng tư duy thiết kế phần mềm độc lập với ngôn ngữ cụ thể, đồng thời quy chuẩn hóa kỹ năng viết mã an toàn thông qua cơ chế che giấu dữ liệu và chỉ định quyền truy cập.

Lộ trình học tập đề xuất:

  1. Tiếp cận bản chất đối tượng và cơ chế gửi thông điệp từ các ví dụ thế giới thực.
  2. Phân tích 4 nguyên lý cơ bản và cấu trúc phân cấp trừu tượng.
  3. Thực hành khai báo lớp, gói (package) và quản lý quyền truy cập trong Java.
  4. Triển khai thiết kế các lớp hoàn chỉnh với thành viên bất biến (final) và các cặp phương thức Getter/Setter.

Tài liệu tham khảo bổ trợ được tích hợp bao gồm thư viện chuẩn java.io, các quy ước đặt tên chuẩn Java và các mô hình thiết kế lớp ứng dụng trong quản lý ngân hàng và hồ sơ sinh viên.