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

Giáo trình Lập trình hướng đối tượng (Mã môn học: MH27) do ThS. Lê Thị Thùy Trang chủ biên, được ban hành chính thức theo Quyết định số 459/QĐ-NSG ngày 31 tháng 8 năm 2022 của Hiệu trưởng Trường Cao đẳng Bách Khoa Nam Sài Gòn. Tài liệu được biên soạn dựa trên khung chương trình chung môn Tin học của Bộ Lao động – Thương binh và Xã hội, phục vụ trực tiếp cho công tác đào tạo hệ Cao đẳng ngành Tin học ứng dụng và là môn học cơ sở bắt buộc thuộc khối ngành Công nghệ thông tin.

Về thời lượng đào tạo, giáo trình được thiết kế cho tổng thời lượng 45 giờ, bao gồm 15 giờ lý thuyết, 28 giờ thực hành trên máy và 2 giờ kiểm tra định kỳ (không phân bổ thời gian cho thảo luận/thí nghiệm riêng biệt).

Mục tiêu học tập của giáo trình được xác định cụ thể trên ba phương diện:

  • Về mặt kiến thức: Người học phát biểu được các nguyên lý cơ bản của thiết kế hướng đối tượng; phân tích được bản chất của đối tượng và biến tham chiếu; nắm vững cây kế thừa, cơ chế đa hình; trình bày được các khái niệm về lập trình tổng quát và cấu trúc dữ liệu tổng quát.
  • Về mặt kỹ năng: Người học có khả năng giải quyết và xây dựng giải pháp lập trình hướng đối tượng cho các bài toán quy mô nhỏ; đặc tả được sơ đồ lớp bằng ngôn ngữ mô hình hóa UML với cú pháp cơ bản; cài đặt hoàn chỉnh các thiết kế hướng đối tượng trên ngôn ngữ lập trình Java.
  • Về năng lực tự chủ và trách nhiệm: Hình thành khả năng tự nghiên cứu các ngôn ngữ lập trình hướng đối tượng khác cùng hệ thống thư viện đi kèm; rèn luyện tác phong làm việc cẩn thận, chính xác theo chuẩn công nghiệp.

Giáo trình có cấu trúc tổng thể gồm 9 bài học, tiếp cận theo tiến trình từ cơ chế vận hành của môi trường máy ảo Java, hệ thống lý thuyết mô hình hóa đối tượng, cú pháp cài đặt chi tiết trên Java cho đến các cấu trúc dữ liệu, luồng vào/ra và các mẫu thiết kế cơ bản. Điểm đặc sắc của tài liệu là tỷ trọng giờ thực hành chiếm hơn 60% tổng thời lượng, tích hợp các ví dụ minh họa và bài tập nghiệp vụ thực tế có mã nguồn tham khảo chi tiết.


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

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

Nội dung 9 bài học trong giáo trình được phân bổ theo trình tự logic chặt chẽ:

  • Bài 1: Mở đầu
    Khái quát lịch sử ngôn ngữ Java (James Gosling khởi xướng năm 1991 tại Sun Microsystems, phát hành năm 1994, Oracle mua lại năm 2010); kiến trúc độc lập nền tảng dựa trên tiêu chí "Write Once, Run Anywhere" (WORA); bản chất của Máy ảo Java (JVM), mã Bytecode và bộ công cụ phát triển JDK; phân biệt Java Application và Java Applet (loại bỏ hoàn toàn từ năm 2017); quy trình biên dịch bằng javac, thực thi bằng java qua Command Prompt và hướng dẫn thiết lập dự án trên NetBeans IDE.
  • Bài 2: Các khái niệm về lập trình hướng đối tượng
    Tổng quan biên niên sử phát triển ngôn ngữ lập trình (từ công trình của Ada Lovelace 1842–1849, máy tính điện tử thập niên 1940, Short Code, Simula, Pascal, C, C++, Python, JavaScript đến Java 1996 và C# 2001); đối sánh lập trình hướng thủ tục (POP) và lập trình hướng đối tượng (OOP); định nghĩa 4 nguyên lý trụ cột: Đóng gói (Encapsulation), Kế thừa (Inheritance), Đa hình (Polymorphism), Trừu tượng hóa (Abstraction).
  • Bài 3: Lớp và đối tượng trong Java
    Định nghĩa lớp và đối tượng; các phương thức tạo đối tượng (new, newInstance(), clone(), factory); bản chất vùng nhớ đối tượng và biến tham chiếu; cơ chế đóng gói và 4 mức độ truy cập (default, private, public, protected); phân biệt 8 kiểu nguyên thủy (boolean, byte, char, short, int, long, float, double) với kiểu tham chiếu/đối tượng; cơ chế gán, so sánh == so với phương thức .equals(); cơ chế truyền tham số tham trị (pass by value); từ khóa this, thành viên static, tổ chức package, tham số dòng lệnh args và quan hệ kết hợp (Composition).
  • Bài 4: Thừa kế
    Cú pháp kế thừa với từ khóa extends; kỹ thuật ghi đè phương thức (@Override); từ khóa super; kiểm soát truy cập và che giấu dữ liệu thông qua các phương thức getter/setter; ứng dụng từ khóa final cho biến, phương thức, lớp (phân tích quy tắc constructor không thể khai báo final); so sánh chi tiết giữa quan hệ thừa kế ("is-a") và quan hệ kết hợp/composition ("has-a").
  • Bài 5: Đa hình
    Cơ chế chuyển kiểu Upcasting và Downcasting (sử dụng toán tử instanceof và ép kiểu an toàn); phân biệt liên kết động (Dynamic Binding tại runtime) và liên kết tĩnh (Static Binding tại compile-time); khai báo và triển khai lớp trừu tượng (abstract class), phương thức trừu tượng (abstract method); giải pháp đa thừa kế trong Java thông qua interface; phân tích hai mẫu thiết kế kinh điển: Mẫu Prototype (giao diện Cloneable, phương thức clone()) và Mẫu Template Method.
  • Bài 6: Lập trình tổng quát
    Xây dựng lớp tổng quát (Generic Class), phương thức tổng quát (Generic Method); cơ chế kiểu con và ký tự đại diện (Wildcards ?); các hạn chế, ràng buộc tham số kiểu dữ liệu; mối quan hệ tương tác giữa lập trình tổng quát và tính thừa kế.
  • Bài 7: Cấu trúc dữ liệu
    Khảo sát cấu trúc dữ liệu cơ bản; các lớp bao gói (Wrapper Classes) tương ứng cùng các lớp tiện ích String, StringBuffer, Math, Array; các kiểu dữ liệu tập hợp tổng quát (Containers) chuẩn như List, Set.
  • Bài 8: Luồng dữ liệu
    Khái niệm về luồng dữ liệu (Streams); cơ chế tổng quát lắp ráp các luồng khi thực hiện đọc/ghi; các luồng cơ bản dùng trong xử lý tệp tin (File I/O) và mở rộng cho các nguồn dữ liệu ngoại vi khác.
  • Bài 9: Thiết kế hướng đối tượng
    Giới thiệu hệ thống các nguyên tắc cốt lõi nhằm xây dựng thiết kế phần mềm hướng đối tượng chuẩn mực và sơ lược ứng dụng các mẫu thiết kế (Design Patterns).

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

Giáo trình xác lập hệ thống lý thuyết nền tảng xoay quanh các khái niệm:

  • Kiến trúc phần mềm độc lập nền tảng: Phân tích nguyên lý biên dịch mã nguồn .java thành tệp mã trung gian .class (Bytecode) và vai trò của máy ảo JVM thông dịch thành lệnh máy tại thời điểm thực thi.
  • Bản chất bộ nhớ và quản lý đối tượng: Phân biệt ranh giới giữa vùng nhớ lưu trữ dữ liệu đối tượng và biến con trỏ/tham chiếu; cơ chế quản lý vòng đời đối tượng từ khi cấp phát qua new đến khi thu hồi.
  • Nguyên lý hướng đối tượng:
    1. Đóng gói: Bảo vệ trạng thái nội bộ bằng bổ từ private, chỉ cho phép truy cập qua get/set.
    2. Kế thừa: Tái sử dụng và mở rộng mã nguồn từ lớp cha sang lớp con bằng extends.
    3. Đa hình: Một hành động được thể hiện bằng nhiều phương thức khác nhau qua cơ chế nạp chồng (Overloading) và ghi đè (Overriding).
    4. Trừu tượng: Lược bỏ chi tiết cài đặt, chỉ giữ lại các thuộc tính và hành vi cốt lõi phục vụ bài toán thông qua abstract class và interface.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Cài đặt môi trường JDK, thao tác biên dịch mã nguồn qua giao diện dòng lệnh và trên IDE NetBeans; khai báo lớp, định nghĩa hàm tạo, triển khai đa kế thừa qua interface; sử dụng thư viện java.util.ArrayList, các lớp bao gói và xử lý luồng dữ liệu file I/O.
  • Kỹ năng phân tích (Analytical skills): Phân tích bài toán thế giới thực thành các mô hình thực thể; đánh giá và lựa chọn giải pháp thiết kế tối ưu giữa quan hệ kế thừa ("is-a") và quan hệ kết hợp ("has-a"); phân biệt cơ chế so sánh giá trị bằng .equals() và so sánh tham chiếu ô nhớ bằng toán tử ==.
  • Năng lực thực thi thực tế (Practical competencies): Xây dựng hoàn chỉnh các module quản lý dữ liệu hướng đối tượng như hệ thống quản lý danh mục sách thư viện (Sach, ThuVien), hệ thống quản lý hồ sơ học sinh (HocSinh), và hệ thống tính toán cấu trúc hình học (HinhHoc, HinhTron, HinhVuong).

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

Giáo trình áp dụng phương pháp sư phạm tích hợp lý thuyết gắn liền với thực hành máy tính. Mỗi bài học được biên soạn theo cấu trúc 3 phần chuẩn hóa:

  1. Xác định mục tiêu bài học (về kiến thức, kỹ năng cần đạt).
  2. Trình bày nội dung lý thuyết đi kèm các bảng so sánh và sơ đồ cấu trúc.
  3. Hệ thống ví dụ mẫu từng bước (code walkthrough) và bài tập thực hành độc lập.

Hệ thống bài tập và case studies trong tài liệu được thiết kế bám sát các nghiệp vụ lập trình thực tế:

  • Case Study Quản lý Thư viện (Bài 2): Yêu cầu xây dựng lớp Sach (gồm các thuộc tính maSach, tuaDe, tacGia, namXuatBan, soLuong, phương thức getter/setter, toString()) và lớp ThuVien sử dụng ArrayList<Sach> để thực thi các chức năng thêm mới (themSach), xóa sách (xoaSach), tìm kiếm theo mã (timKiemSachTheoMa), tìm kiếm theo tựa đề (timKiemSachTheoTuaDe) và xuất danh sách.
  • Case Study Quản lý Học sinh (Bài 3): Xây dựng lớp HocSinh với các trường dữ liệu maHocSinh, ten, tuoi, diemTrungBinh, thực hiện kiểm soát truy cập và cập nhật điểm số qua lớp thực thi Main.
  • Case Study Cấu trúc Hình học (Bài 4): Xây dựng lớp cơ sở HinhHoc chứa thuộc tính mauSac và phương thức tính tinhDienTich(), tinhChuVi(); thiết lập các lớp con HinhTron (bổ sung trường banKinh) và HinhVuong (bổ sung trường canh), thực hiện ghi đè phương thức để tính toán diện tích, chu vi dựa trên hằng số Math.PI.
  • Minh họa Thiết kế Mẫu (Bài 5): Cài đặt mẫu Prototype qua cấu trúc Shape và Rectangle kế thừa giao diện Cloneable; cài đặt mẫu Template Method qua lớp trừu tượng Game với khung phương thức play() gọi tuần tự initialize(), start(), end(), triển khai cụ thể trên lớp Cricket.

Phương pháp đánh giá kết quả học tập gồm 2 giờ kiểm tra chính thức kết hợp đánh giá thường xuyên qua 28 giờ thực hành. Học viên được hướng dẫn tự học thông qua việc tự gõ mã nguồn, kiểm tra thông báo lỗi của trình biên dịch javac, thử nghiệm thay đổi các bổ từ truy cập để trực quan hóa phạm vi hoạt động của dữ liệu.


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

  • Tính chuẩn xác và cập nhật về mặt lịch sử công nghệ: Giáo trình trình bày cụ thể quá trình chuyển giao công nghệ từ Sun Microsystems sang Oracle (năm 2010), đồng thời ghi nhận sự điều chỉnh kỹ thuật đối với Java Applet khi thành phần này đã bị loại bỏ hoàn toàn từ năm 2017, định hướng người học tập trung hoàn toàn vào xây dựng Java Application độc lập.
  • Phương pháp phân tích trực quan qua bảng dữ liệu: Giáo trình tối ưu hóa việc tiếp thu kiến thức bằng cách sử dụng các bảng đối sánh trực quan, tiêu biểu như bảng phân tích chi tiết sự khác nhau giữa biến tham chiếu và đối tượng thực thể trong bộ nhớ, bảng so sánh lập trình thủ tục (POP) và lập trình hướng đối tượng (OOP).
  • Làm rõ ranh giới các cơ chế thực thi: Tài liệu giải thích bản chất truyền tham số trong Java (luôn là tham trị - pass by value), sự khác biệt khi áp dụng cho biến nguyên thủy (sao chép giá trị) và biến tham chiếu (sao chép địa chỉ ô nhớ), cũng như phân định rõ giữa phép so sánh tham chiếu (==) và so sánh nội dung (equals()).
  • Liên kết với các tiêu chuẩn thiết kế phần mềm chuyên nghiệp: Nội dung không dừng lại ở mức cú pháp cơ bản mà mở rộng đến các mẫu thiết kế hướng đối tượng (Prototype, Template Method), quy chuẩn đóng gói mã nguồn bằng Package, lập trình dòng lệnh và kỹ thuật lập trình tổng quát (Generics), tạo nền tảng cho việc xây dựng các ứng dụng doanh nghiệp và phần mềm quy mô lớn.

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

  • Sinh viên mục tiêu: Học sinh – sinh viên trình độ Cao đẳng thuộc ngành Tin học ứng dụng và các chuyên ngành Công nghệ thông tin liên quan; tài liệu phục vụ cho học phần chuyên môn ở giai đoạn kiến thức cơ sở ngành.
  • Kiến thức tiên quyết (Prerequisites): Người học cần có kiến thức cơ bản về tin học đại cương, hiểu biết về cấu trúc máy tính, hệ điều hành và tư duy giải thuật căn bản (biến, biểu thức, câu lệnh rẽ nhánh, vòng lặp).
  • Đối với giảng viên: Tài liệu là khung chuẩn để xây dựng đề cương bài giảng chi tiết, kế hoạch giảng dạy 45 giờ (phân bổ lý thuyết – thực hành), cung cấp hệ thống mã nguồn mẫu và đề bài thực hành có đáp án chuẩn hóa.
  • Đối với người tự học và tra cứu: Cung cấp tài liệu tra cứu có cấu trúc hệ thống cho lập trình viên mới bắt đầu với Java, người cần củng cố bản chất các nguyên lý OOP, cơ chế bộ nhớ và cách triển khai các cấu trúc dữ liệu cơ bản.

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

  1. Giáo trình này phù hợp với đối tượng nào?
    Tài liệu được biên soạn phục vụ trực tiếp cho học sinh – sinh viên bậc Cao đẳng ngành Tin học ứng dụng và các ngành Công nghệ thông tin theo khung chương trình của Bộ Lao động – Thương binh và Xã hội.

  2. Cần kiến thức nền nào để học giáo trình?
    Người học cần hoàn thành khối kiến thức tin học cơ sở, có kỹ năng thao tác trên hệ điều hành và nắm vững tư duy logic lập trình căn bản (biến, điều kiện, vòng lặp).

  3. Điểm khác biệt của giáo trình so với các tài liệu khác là gì?
    Giáo trình tập trung vào phân tích bản chất máy ảo (JVM/Bytecode), cơ chế quản lý bộ nhớ (đối tượng so với biến tham chiếu), đồng thời phân bổ thời lượng thực hành áp dụng chiếm đa số (28/45 giờ) kèm lời giải mẫu hoàn chỉnh.

  4. Làm sao để tự học giáo trình hiệu quả?
    Người học cần tiến hành cài đặt môi trường JDK và NetBeans IDE theo hướng dẫn ở Bài 1, trực tiếp nhập và thực thi từng đoạn mã minh họa, sau đó tự giải quyết độc lập các bài tập tổng hợp ở cuối mỗi bài học.

  5. Có những công cụ và tài nguyên nào được đề cập trong giáo trình?
    Tài liệu hướng dẫn sử dụng công cụ biên dịch dòng lệnh (javac, java), môi trường NetBeans IDE, cùng các thư viện chuẩn của Java như java.util.ArrayList, các lớp tiện ích Math, String, StringBuffer và các giao diện chuẩn như Cloneable.


Kết luận

Giáo trình Lập trình hướng đối tượng của tác giả ThS. Lê Thị Thùy Trang (Trường Cao đẳng Bách Khoa Nam Sài Gòn) là tài liệu đào tạo mang tính hệ thống, gắn kết giữa lý thuyết nguyên lý phần mềm và kỹ năng thực thi mã nguồn Java thực tế.

Lộ trình học tập được định hình khoa học theo tiến trình 9 bài:

  1. Thiết lập môi trường và công cụ thực thi Java (Bài 1).
  2. Nắm vững 4 nguyên lý hướng đối tượng và sự tiến hóa của ngôn ngữ (Bài 2).
  3. Làm chủ cơ chế quản lý lớp, đối tượng, bộ nhớ và phạm vi truy cập (Bài 3).
  4. Khai thác tính kế thừa và tối ưu hóa quan hệ kết hợp (Bài 4).
  5. Ứng dụng tính đa hình, liên kết động, interface và các mẫu thiết kế (Bài 5).
  6. Mở rộng xử lý dữ liệu với lập trình tổng quát Generic, Cấu trúc dữ liệu Container, Luồng vào/ra Stream I/O và Nguyên tắc thiết kế (Bài 6 đến Bài 9).

Tài nguyên hỗ trợ đi kèm bao gồm hệ thống mã nguồn mẫu được biên dịch sẵn trên NetBeans IDE, tài liệu hướng dẫn cú pháp và thư viện API Java chuẩn.