TỔNG QUAN VỀ GIÁO TRÌNH BÀI TẬP LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI ECLIPSE IDE

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

Tài liệu "Bài Tập Lập Trình Hướng Đối Tượng" (Object Oriented Programming Exercises) là tập tài liệu hướng dẫn thực hành được biên soạn cho hệ đào tạo đại học thuộc khối ngành Công nghệ thông tin và Kỹ thuật phần mềm. Trong chương trình đào tạo kỹ sư và cử nhân công nghệ thông tin, học phần Lập trình hướng đối tượng (OOP) giữ vị trí bản lề, đóng vai trò chuyển tiếp từ tư duy lập trình cấu trúc/thủ tục (như C/C++) sang phương pháp luận mô hình hóa hướng đối tượng hiện đại, làm cơ sở trực tiếp cho các môn học nâng cao như Cấu trúc dữ liệu và giải thuật, Thiết kế mẫu (Design Patterns), Kiến trúc phần mềm và Phát triển ứng dụng doanh nghiệp.

Mục tiêu học tập của tài liệu tập trung vào việc rèn luyện năng lực ứng dụng thực tế:

  • Làm chủ môi trường phát triển tích hợp (IDE) Eclipse và công cụ quản lý dự án Java.
  • Nắm vững cú pháp cốt lõi của ngôn ngữ lập trình Java, từ các cấu trúc điều khiển cơ bản đến các thư viện chuẩn.
  • Hiện thực hóa bốn nguyên lý cơ bản của lập trình hướng đối tượng: Đóng gói (Encapsulation), Kế thừa (Inheritance), Đa hình (Polymorphism) và Trừu tượng (Abstraction).
  • Khai thác và vận dụng khung tập hợp Java Collections Framework để tổ chức, quản lý dữ liệu động.

Cấu trúc tài liệu được thiết kế theo mô hình thực hành định hướng (hands-on approach) với 5 module nối tiếp nhau, từ làm quen công cụ đến các mô hình phân cấp phức tạp. Điểm đặc thù của tài liệu là sự kết hợp chặt chẽ giữa đặc tả lược đồ lớp chuẩn UML (Unified Modeling Language), các yêu cầu kiểm soát ràng buộc dữ liệu chặt chẽ (validation logic) và quy chuẩn viết tài liệu mã nguồn (Javadoc/Documentation comment).


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

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

Tài liệu được phân bổ thành 5 module kiến thức từ mức độ làm quen công cụ đến lập trình hệ thống hướng đối tượng chuyên sâu:

  1. Module 0: Làm quen với Eclipse IDE

    • Thiết lập không gian làm việc (Workspace Launcher), tạo và chuyển đổi workspace (File -> Switch Workspace).
    • Quản lý cấu trúc dự án: Tạo Java Project, tạo Package theo cấu trúc phân cấp thư mục (ví dụ: chuong01\tuan01\bai01), tạo Class tuân thủ quy tắc đặt tên TitleCase.
    • Cấu hình môi trường: Thiết lập chuẩn mã hóa ký tự UTF-8 cho toàn bộ workspace (Window -> Preferences -> General -> Workspace) để hỗ trợ xử lý Unicode tiếng Việt.
    • Thao tác thư viện và xuất bản phần mềm: Cấu hình Build Path (Add to Build Path, Referenced Libraries), liên kết thư mục mã nguồn (Configure Build Path), và đóng gói ứng dụng thực thi (Export Runnable JAR file).
    • Sử dụng phím tắt và editing template: Ctrl-Space (gợi ý mã, template main, sysout), F11 (chạy tập tin hiện tại), Ctrl+F11 (biên dịch và chạy toàn bộ project), F2 (đổi tên định danh), Ctrl-Shift-L (tra cứu danh mục phím tắt).
  2. Module 1: Java căn bản

    • Phân chia bài tập theo cấu trúc package: phan01, phan02, phan03.
    • Phần 1 - Nhập xuất dữ liệu: Sử dụng System.out.printf() định dạng chuỗi, số thực (%5.3f), căn lề (-), ký tự đặc biệt (\n, \t, \\); nhập dữ liệu với lớp java.util.Scanner (nextInt(), nextDouble(), nextLine()).
    • Phần 2 - Hệ thống toán tử: Toán tử số học, toán tử nối chuỗi, toán tử một ngôi, toán tử tăng/giảm tiền tố và hậu tố (pre-increment, post-increment), toán tử quan hệ, toán tử logic và toán tử điều kiện ba ngôi.
    • Phần 3 - Cấu trúc lặp và điều khiển: Rẽ nhánh với if-else, switch-case; vòng lặp for, while, do-while; phát sinh số ngẫu nhiên với lớp java.util.Random (nextInt(), nextDouble(), nextBoolean()); xử lý chuỗi với String.split() và Character.isDigit(); thuật toán số học (kiểm tra số nguyên tố, dãy Fibonacci, ước số chung lớn nhất) và mảng số nguyên/chuỗi.
  3. Module 2: Các khái niệm cơ bản Lập trình hướng đối tượng

    • Quy ước ký hiệu tầm vực trong UML: public (+), private (-), protected (#), package (~).
    • Cài đặt lớp (Class) và đối tượng (Object): Xây dựng constructor mặc định, constructor đầy đủ tham số; định nghĩa phương thức getter và setter có tích hợp logic kiểm tra tính hợp lệ của dữ liệu (gán giá trị mặc định hoặc phát sinh ngoại lệ khi vi phạm).
    • Cơ chế biểu diễn đối tượng qua phương thức toString(); định dạng tiền tệ và số thực với Locale("vi", "vn"), NumberFormat, DecimalFormat; xử lý thời gian với LocalDate và DateTimeFormatter.
    • Danh mục bài tập tiêu biểu: Lớp tọa độ ToaDo, Point, hình học Cylinder, HinhTamGiac (xác thực điều kiện tạo tam giác, tính chu vi/diện tích), quản lý kết quả học tập DiemSinhVien, quản lý phương tiện ThongTinDangKyXe (tính thuế trước bạ theo dung tích xilanh), quản lý kho HangThucPham (kiểm tra hạn dùng qua isBefore, isAfter), quản lý tài chính Account (chuyển khoản, tính lãi suất), quan hệ kết tập HinhTron - ToaDo, KhachHang - SoTietKiem, LopHocPhan, CD - CDList, CongNhan - DanhSachCongNhan, Order - Product - LineItem.
  4. Module 3: Kế thừa – Đa hình

    • Phân tích và thiết kế cây kế thừa: Tách các thuộc tính và phương thức chung vào lớp cha (Superclass), mở rộng tại các lớp con (Subclass) bằng từ khóa extends.
    • Lớp trừu tượng (abstract class) và phương thức trừu tượng (abstract method): Cài đặt phương thức không có thân hàm ở lớp cơ sở và ghi đè (@Override) tường minh tại các lớp dẫn xuất.
    • Đa hình (Polymorphism): Xử lý tập hợp các đối tượng thuộc các lớp con khác nhau thông qua kiểu tham chiếu của lớp cha; xây dựng giao diện menu tương tác động.
    • Hệ thống bài toán nghiệp vụ phân cấp:
      • ChuyenXe phân cấp thành ChuyenXeNoiThanh (số tuyến, số km) và ChuyenXeNgoaiThanh (nơi đến, số ngày).
      • Sach phân cấp thành SachGiaoKhoa (tính tiền theo tình trạng mới/cũ) và SachThamKhao (tính tiền kèm thuế).
      • GiaoDich phân cấp thành GiaoDichVang và GiaoDichTienTe (tính tiền theo tỉ giá USD, Euro, VN).
      • Employee phân cấp đa tầng: SalariedEmployee, HourlyEmployee, CommissionEmployee và BasePlusCommission.
      • HangHoa phân cấp thành HangThucPham, HangDienMay, HangSanhSu (tính VAT 5% hoặc 10%, đánh giá mức độ bán buôn, tiêu thụ, tồn kho).
      • Person phân cấp thành Student, Employee, Customer, quản lý tập trung qua lớp Management.
      • Shape phân cấp thành Circle, Quad, Rectangle, Triangle, Polygon, điều khiển vẽ qua Drawing.drawShape().
      • Quản lý biểu thuế phương tiện: XeDap, XeMay, XeOToKhach, XeOToTai.
      • Phân loại học vị: SinhVienTrungCap, SinhVienCaoDang, SinhVienDaiHoc, SinhVienLienKet.
  5. Module 4: Tập hợp (Collections Framework)

    • Hệ thống phân cấp các giao diện và lớp triển khai trong Java:
Interface Đặc tả tính chất Lớp triển khai cụ thể (Concrete Classes)
Collection Giao diện cơ sở định nghĩa các thao tác quản lý nhóm đối tượng Interface gốc
Set Tập hợp các phần tử duy nhất, không trùng lặp HashSet, LinkedHashSet
SortedSet Kế thừa Set, duy trì các phần tử theo thứ tự sắp xếp TreeSet
List Tập hợp duy trì danh sách phần tử theo thứ tự chỉ mục, cho phép trùng lặp ArrayList, Vector, LinkedList
Map Quản lý tập hợp ánh xạ theo cấu trúc khóa - giá trị (Key - Value) HashMap, Hashtable, LinkedHashMap
SortedMap Kế thừa Map, duy trì các ánh xạ được sắp xếp theo khóa TreeMap
  • Ứng dụng cấu trúc dữ liệu vào bài toán thực tế:
    • Thao tác tập hợp trên TreeSet: Hội (addAll), Hiệu (removeAll), Giao (retainAll).
    • Quản lý danh sách đối tượng sinh viên, tối ưu hóa đếm ký tự chuỗi bằng Map.
    • Quản lý cơ sở vật chất: Phân loại PhongHoc thành PhongLyThuyet, PhongMayTinh, PhongThiNghiem, kiểm tra tiêu chuẩn phòng học đạt chuẩn (diện tích, ánh sáng 10m²/bóng đèn, máy chiếu, số lượng máy tính, bồn rửa).
    • Hệ thống quản lý công ty phần mềm SoftwareHouse: Phân cấp nhân sự Programmer, Administrator, ProjectLeader, quản lý danh sách và tính lương kèm phụ cấp đặc thù.
    • Mô hình quản lý đào tạo đại học: Cấu trúc quan hệ phức hợp giữa Person, Student, Faculty, Course, Section, và Enrolment (sử dụng Set<Section>, Set<Enrolment>).
    • Danh bạ điện thoại và danh sách liên kết hai chiều với LinkedList.

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

Tài liệu xây dựng nền tảng lý thuyết vững chắc về lập trình hướng đối tượng:

  • Đóng gói (Encapsulation): Ẩn giấu trạng thái nội tại của đối tượng bằng tầm vực private, cung cấp giao diện truy xuất và biến đổi an toàn qua getter/setter, đảm bảo toàn vẹn dữ liệu thông qua logic kiểm tra ràng buộc ngay tại constructor và setter.
  • Kế thừa (Inheritance): Thiết lập cấu trúc thứ bậc, tái sử dụng các trường dữ liệu và hành vi từ lớp cha, mở rộng chức năng ở lớp con bằng cơ chế kế thừa đơn (extends).
  • Đa hình (Polymorphism): Vận dụng cơ chế liên kết động (dynamic binding), ghi đè phương thức (method overriding) để các đối tượng thuộc các kiểu dữ liệu khác nhau có thể phản hồi cùng một thông điệp theo các cách thức đặc thù.
  • Trừu tượng hóa (Abstraction): Định nghĩa các khung mẫu nghiệp vụ thông qua lớp trừu tượng (abstract class) và giao diện (interface), che giấu chi tiết cài đặt và tập trung vào các hành vi cốt lõi.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Cấu hình IDE Eclipse, quản lý Build Path, đóng gói tập tin JAR thực thi, xử lý chuỗi và định dạng xuất nâng cao, thao tác thành thạo các cấu trúc dữ liệu trong Java Collections Framework (List, Set, Map).
  • Kỹ năng phân tích thiết kế (Analytical skills): Chuyển đổi từ mô tả nghiệp vụ thực tế thành lược đồ lớp UML; xác định đúng các mối quan hệ kết tập (aggregation), phụ thuộc (dependency) và kế thừa (generalization).
  • Kỹ năng lập trình thực tế (Practical competencies): Xây dựng các ứng dụng hoàn chỉnh xử lý danh sách đối tượng, thực hiện đầy đủ các chức năng thêm, xóa, sửa, tìm kiếm, sắp xếp (dùng Comparator, Arrays.sort), và kết xuất bảng biểu ra màn hình console.

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

Phương pháp sư phạm (Pedagogical Approach)

Giáo trình áp dụng triệt để phương pháp dạy học qua thực hành (Lab-based learning) và giải quyết vấn đề (Problem-based learning). Tiến trình học tập đi từ việc làm quen với công cụ biên dịch, tiếp cận cú pháp dòng lệnh, đến việc thiết kế và lập trình các hệ thống đa lớp. Mỗi chủ đề lý thuyết đều được chuyển hóa trực tiếp thành các yêu cầu bài tập có đặc tả dữ liệu đầu vào, ràng buộc nghiệp vụ và khuôn mẫu kết xuất đầu ra.

Bài tập và bài toán tình huống (Case Studies)

Hệ thống bài tập trải dài qua các tình huống thực tế:

  • Quản lý tài chính - ngân hàng: Mở sổ tiết kiệm, tính tiền lãi theo số tháng gửi thực tế, chuyển khoản tài khoản Account.
  • Quản lý kho vận - thương mại: Đánh giá hạn sử dụng hàng thực phẩm, tính thuế trước bạ xe máy và ô tô, tính doanh thu chuyến xe, quản lý hóa đơn bán hàng Order - LineItem.
  • Quản lý tổ chức - giáo dục: Quản lý đăng ký học phần Enrolment, phân loại phòng học đạt chuẩn, quản lý bảng lương nhân sự theo từng vị trí chuyên môn.

Quy chuẩn thực hành và nộp bài

Tài liệu quy định nghiêm ngặt về chuẩn mực lưu trữ và định danh:

  • Không gian làm việc đặt tên theo quy tắc: MaSV_HoTen.
  • Tên dự án chuẩn hóa theo từng module: Module01, Module02, Module03, Module04.
  • Phân chia package khoa học theo từng bài tập hoặc từng phần: bai01, bai02, phan01, phan02...
  • Quy ước đặt tên: Tên package viết thường toàn bộ; tên class bắt đầu bằng chữ hoa theo định dạng TitleCase.
  • Viết tài liệu kỹ thuật đầy đủ: Bắt buộc viết Javadoc comment (documentation comment) mô tả mục đích của lớp, tham số (@param), và giá trị trả về (@return).

Phương pháp đánh giá và tự học

  • Đánh giá định lượng: Đánh giá thông qua việc hoàn thành các bài tập bắt buộc được chỉ định rõ trong từng module (Module 1: bài 1-2, 3-16; Module 2: bài 1-14; Module 3: bài 1-6; Module 4: bài 4-8).
  • Kiểm thử biên (Edge Case Testing): Yêu cầu sinh viên chủ động tạo các đối tượng vi phạm ràng buộc dữ liệu (ví dụ: ngày hết hạn trước ngày sản xuất, số tài khoản âm, ba cạnh không tạo thành tam giác) để kiểm tra tính ổn định của mã nguồn.
  • Tự học qua mã nguồn mẫu: Phụ lục giáo trình cung cấp mã nguồn hoàn chỉnh của lớp DiemSinhVien và lớp kiểm thử SinhVienTest, làm mẫu chuẩn về cấu trúc code, cách dùng this(), cách kiểm tra dữ liệu trong setter và cách định dạng chuỗi xuất.

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

Tích hợp công nghệ chuẩn hóa

  • Sử dụng môi trường Eclipse IDE chuyên nghiệp với các tính năng hỗ trợ lập trình cao cấp: Code Completion (Ctrl-Space), quản lý Perspectives (Java Default), quản lý liên kết mã nguồn qua Build Path và xuất file thực thi Runnable JAR.
  • Tiếp cận thư viện xử lý ngày tháng hiện đại java.time.LocalDate và java.time.format.DateTimeFormatter, thay thế hoàn toàn cho các lớp xử lý ngày tháng cũ (java.util.Date), giúp việc tính toán và kiểm tra mốc thời gian (isBefore(), isAfter()) đạt độ chính xác cao.
  • Sử dụng các lớp định dạng chuẩn quốc tế: java.text.NumberFormat, java.text.DecimalFormat, kết hợp thiết lập bản địa java.util.Locale để định dạng tiền tệ và số thực chính xác theo quy chuẩn tiếng Việt hoặc quốc tế.

Gắn kết chặt chẽ với thiết kế hướng đối tượng thực tế

  • Toàn bộ các bài tập từ Module 2 trở đi đều đi kèm lược đồ lớp UML chi tiết, giúp người học làm quen với chuẩn giao tiếp quốc tế trong kỹ nghệ phần mềm.
  • Các yêu cầu nghiệp vụ mô phỏng chính xác logic vận hành thực tế:
    • Phân loại thuế tiêu thụ đặc biệt của ô tô dựa trên số lượng chỗ ngồi (dưới 5 chỗ chịu thuế 50%, từ 5 chỗ trở lên chịu thuế 30%).
    • Phân loại hàng hóa khó bán hay bán chậm trong siêu thị dựa trên số lượng tồn kho và thời gian lưu kho.
    • Phân bổ phụ cấp công ty phần mềm theo ngôn ngữ lập trình (lập trình viên Java nhận phụ cấp 20%).

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

Phân loại người học và điều kiện tiên quyết

  • Sinh viên mục tiêu: Sinh viên năm thứ nhất hoặc năm thứ hai chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm, Hệ thống thông tin, Mạng máy tính và Khoa học dữ liệu tại các trường đại học và cao đẳng.
  • Kiến thức tiên quyết (Prerequisites):
    • Đã học qua học phần Nhập môn lập trình hoặc Kỹ thuật lập trình cơ bản.
    • Nắm vững tư duy thuật toán, cấu trúc rẽ nhánh, vòng lặp, mảng một chiều và các khái niệm kiểu dữ liệu cơ bản trên ngôn ngữ C/C++ hoặc tương đương.

Hướng dẫn dành cho giảng viên và người tự học

  • Đối với giảng viên: Sử dụng giáo trình làm tài liệu hướng dẫn thực hành chính thức tại phòng máy (Lab manual), làm ngân hàng đề kiểm tra quá trình, hoặc làm tài liệu khung để giao bài tập lớn/tiểu luận môn học.
  • Đối với người tự học: Có thể đi tuần tự theo 5 module từ cài đặt công cụ đến giải quyết các bài toán lớn. Khai thác tối đa phần hướng dẫn giải (HD) và phụ lục mã nguồn mẫu để tự kiểm tra đối chiếu kết quả.

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

1. Giáo trình này phù hợp với ai?

Tài liệu được biên soạn phục vụ trực tiếp cho sinh viên bậc đại học và cao đẳng khối ngành công nghệ thông tin đang theo học môn Lập trình hướng đối tượng, cũng như các lập trình viên muốn chuyển đổi nền tảng sang ngôn ngữ Java.

2. Cần kiến thức nền nào để học tốt tài liệu này?

Người học cần có nền tảng cơ bản về logic lập trình (biến, kiểu dữ liệu, câu lệnh điều kiện, vòng lặp, hàm) từ các ngôn ngữ lập trình cơ sở như C hoặc C++.

3. Điểm khác biệt của tài liệu so với các sách lý thuyết thuần túy là gì?

Tài liệu lược bỏ các phần diễn giải lý thuyết hàn lâm, tập trung 100% vào hệ thống bài tập thực hành được mô hình hóa bằng lược đồ UML, đi kèm các ràng buộc nghiệp vụ cụ thể và hướng dẫn kỹ thuật từng bước trên Eclipse IDE.

4. Làm sao để tự học và thực hành hiệu quả theo tài liệu?

Người học nên cài đặt đúng phiên bản JDK và Eclipse IDE theo hướng dẫn ở Module 0, thực hiện đầy đủ các bài tập bắt buộc theo từng module, tự tay gõ mã nguồn thay vì sao chép, và luôn viết lớp Test chứa hàm main để kiểm thử toàn diện các trường hợp dữ liệu hợp lệ cũng như vi phạm ràng buộc.

5. Có tài liệu bổ trợ nào đi kèm trong giáo trình không?

Giáo trình tích hợp sẵn phần tóm tắt lý thuyết các giao diện trong Java Collections Framework, các đoạn code hướng dẫn cú pháp xử lý nhanh (HD) ở mỗi bài tập khó, cùng phụ lục mã nguồn mẫu hoàn chỉnh của lớp thực thể DiemSinhVien và lớp kiểm thử SinhVienTest.


Kết luận

Tài liệu "Bài Tập Lập Trình Hướng Đối Tượng Với Eclipse IDE" là tập tài liệu học tập có tính cấu trúc và thực tiễn cao, cung cấp lộ trình rèn luyện toàn diện từ thao tác công cụ, cú pháp Java căn bản, bốn nguyên lý lập trình hướng đối tượng đến việc làm chủ Java Collections Framework.

Lộ trình học tập khuyến nghị là hoàn thành tuần tự từ Module 0 đến Module 4, kết hợp việc đọc hiểu lược đồ thiết kế UML và rèn luyện kỹ năng kiểm thử dữ liệu thực tế. Để đạt kết quả tối ưu, người học cần trang bị môi trường máy tính cài đặt sẵn bộ công cụ phát triển Java (JDK) cùng phần mềm Eclipse IDE và tham khảo thêm tài liệu tra cứu API chính thức của ngôn ngữ Java.