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

Giáo trình Java, Java, Java: Object-Oriented Problem Solving (Ấn bản lần thứ 3 - Tác giả Ralph Morelli và Ralph Walde, Khoa Khoa học Máy tính, Trinity College, Hartford, CT) được thiết kế phục vụ cho học phần Nhập môn Khoa học Máy tính (Introduction to Computer Science - CS1) hoặc môn học nâng cao ngắn hạn "Java như một ngôn ngữ thứ hai" (Java as a Second Language) trong chương trình đào tạo đại học ngành Khoa học Máy tính và Công nghệ Thông tin.

Mục tiêu học tập của giáo trình là trang bị cho người học tư duy giải quyết vấn đề dựa trên mô hình đối tượng, nắm bắt cấu trúc ngôn ngữ Java, nguyên lý thiết kế hướng đối tượng (Object-Oriented Design - OOD) và kỹ năng phân tích, phân rã bài toán phức tạp thành các thành phần tương tác.

Cấu trúc giáo trình áp dụng phương pháp tiếp cận "đối tượng ngay từ đầu" (objects-first / objects-early). Thay vì tiếp cận theo hướng lập trình thủ tục truyền thống (dạy cấu trúc rẽ nhánh, vòng lặp trước), giáo trình giới thiệu khái niệm đối tượng, lớp, phương thức và cơ chế truyền thông điệp ngay từ các chương mở đầu.

Điểm đặc thù của tài liệu là sự kết hợp đồng bộ giữa mô hình hóa bằng ngôn ngữ UML (Unified Modeling Language), hệ thống bài tập thực hành phát triển trò chơi tương tác và việc phát hành toàn bộ nội dung dưới giấy phép bản quyền mở Creative Commons Attribution 4.0 International (CC BY 4.0) sau khi bản quyền được chuyển giao từ nhà xuất bản Pearson Education / Prentice-Hall.

   [ PHẦN I ]                 [ PHẦN II ]                [ PHẦN III ]
Nền tảng OOP & Java       Cấu trúc ngôn ngữ & OOP    Chủ đề chuyên sâu
  (Chương 0 - 4)              (Chương 5 - 9)          (Chương 10 - 16)

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

+----------------------------------------------------------------------------------------------------+
|                      KHUNG NỘI DUNG GIẢNG DẠY THEO HỌC KỲ (13 TUẦN - CS1)                          |
+------+-----------------------------------------------------------------+---------------------------+
| Tuần | Chủ đề kiến thức                                                | Phân bổ chương giáo trình |
+------+-----------------------------------------------------------------+---------------------------+
| 01   | Hướng đối tượng, Mô hình UML, Thiết kế & Phát triển chương trình | Chương 0, Chương 1        |
| 02-03| Định nghĩa Đối tượng, Lớp, Phương thức, Tham số, Cấu trúc if-else| Chương 2, Chương 3        |
| 04   | Giao diện người dùng & Nhập/Xuất dữ liệu (I/O)                  | Chương 4                  |
| 05   | Kiểu dữ liệu cơ bản và Toán tử trong Java                       | Chương 5                  |
| 06-07| Cấu trúc lặp và Lập trình có cấu trúc (Structured Programming)  | Chương 6                  |
| 08   | Xử lý chuỗi (String Processing)                                 | Chương 7                  |
| 09   | Cơ chế Kế thừa (Inheritance) & Đa hình (Polymorphism)           | Chương 8                  |
| 10   | Xử lý Mảng và Thuật toán trên mảng (Array Processing)           | Chương 9                  |
| 11   | Giải quyết vấn đề bằng Đệ quy (Recursive Problem Solving)       | Chương 12                 |
| 12   | Chủ đề nâng cao: Xử lý ngoại lệ (Exceptions)                    | Chương 10                 |
| 13   | Chủ đề nâng cao: Giao diện GUI hoặc Lập trình đa luồng (Threads)| Chương 11, Chương 14/15   |
+------+-----------------------------------------------------------------+---------------------------+

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

Toàn bộ tài liệu gồm 17 chương (từ Chương 0 đến Chương 16), phân chia theo lộ trình phát triển kiến thức có tính hệ thống:

  (Nền tảng           (Mở rộng cú pháp    (Độ tin cậy &         (Hệ thống nâng cao,
  khái niệm)          & Cơ chế OOP)       Thuật toán)           Mạng & Cấu trúc DL)
  • Chương 0: Máy tính, Đối tượng và Java (Computers, Objects, and Java): Giới thiệu cấu trúc phần cứng (CPU, ALU, bộ nhớ chính RAM, bộ nhớ phụ), phần mềm hệ thống, phần mềm ứng dụng, chu trình nạp - thực thi (fetch-execute cycle), mạng máy tính, giao thức HTTP/HTML, cùng các khái niệm sơ khởi về đối tượng, thuộc tính (attributes), hành vi (actions) và biểu diễn bằng biểu đồ UML.
  • Chương 1: Thiết kế và Phát triển Chương trình Java (Java Program Design and Development): Phân tích vòng đời phần mềm (đặc tả, phân rã bài toán, thiết kế lớp, thiết kế dữ liệu, thiết kế phương thức/thuật toán, cài đặt mã, kiểm thử và gỡ lỗi). Minh họa qua ví dụ thiết kế lớp Riddle và chương trình HelloWorld.
  • Chương 2 & 3: Đối tượng và Phương thức (Objects & Methods): Hướng dẫn định nghĩa lớp, khởi tạo đối tượng qua hàm dựng (constructor), phân biệt biến thực thể (instance variable) với biến lớp (class variable), cơ chế truyền tham trị (pass-by-value) và truyền tham chiếu (pass-by-reference), kiểm thử qua trò chơi OneRowNim.
  • Chương 4: Thiết kế Giao diện Nhập/Xuất Người dùng (Input/Output: Designing the User Interface): Xây dựng giao diện dòng lệnh dựa trên BufferedReader, giới thiệu giao diện đồ họa GUI/applet và đọc dữ liệu tệp thông qua lớp java.util.Scanner.
  • Chương 5, 6, 7 & 9: Cú pháp và Cấu trúc điều khiển cơ bản: Khảo sát kiểu dữ liệu số, ký tự, logic; toán tử số học/logic; cấu trúc rẽ nhánh switch-case, if-else; cấu trúc lặp (while, for, do-while); xử lý chuỗi ký tự qua java.lang.String, StringBuffer; thuật toán tìm kiếm và sắp xếp trên mảng một chiều, mảng hai chiều.
  • Chương 8: Kế thừa và Đa hình (Inheritance and Polymorphism): Trình bày lớp trừu tượng (abstract classes), giao diện (interfaces), mối quan hệ lớp cha - lớp con (superclass - subclass), minh họa thông qua cây phân cấp lớp quân cờ (ChessPiece, Pawn, Bishop, King với các phương thức moveTo(), castle(), thuộc tính inCheck) và các lớp mã hóa mật mã (Cipher).
  • Chương 10 đến 16: Các chủ đề nâng cao:
    • Chương 10: Hệ thống phân cấp Exception, khối try-catch-finally, tạo ngoại lệ tự định nghĩa và hộp thoại JOptionPane.
    • Chương 11: Luồng nhập/xuất (Streams), tuần tự hóa đối tượng (Object Serialization).
    • Chương 12: Giải quyết vấn đề bằng đệ quy (chuỗi, mảng, hình fractal, đệ quy đuôi).
    • Chương 13 & 14: Lập trình giao diện Java Swing theo kiến trúc Model-View-Controller (MVC), mô hình sự kiện, quản lý bố cục (Layout Managers), tiến trình đa luồng (Threads), đồng bộ và ứng dụng vào trò chơi Pong.
    • Chương 15 & 16: Lập trình Socket, kiến trúc Client/Server phân tán, Java Servlets, JSP, khung cấu trúc dữ liệu Java Collections Framework (LinkedList, Stack, Queue, Set, Map, cây nhị phân tìm kiếm Binary Search Tree).

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

Giáo trình xây dựng hệ thống tri thức xoay quanh các nguyên lý kỹ thuật phần mềm và khoa học máy tính:

  1. Nguyên lý trừu tượng hóa đối tượng (Object Abstraction): Xem chương trình là một tập hợp các đối tượng tương tác, truyền nhận thông điệp thay vì tập hợp các lệnh tuần tự.
  2. Các nguyên lý thiết kế hướng đối tượng nòng cốt:
    • Chia để trị (Divide-and-Conquer): Tách bài toán lớn thành các lớp chuyên biệt đảm nhiệm từng phần việc.
    • Đóng gói và che giấu thông tin (Encapsulation & Information Hiding): Ẩn cấu trúc dữ liệu nội bộ thông qua phạm vi truy cập private, chỉ cung cấp phương thức công khai public qua giao diện lớp.
    • Tính tổng quát và mở rộng (Generality & Extensibility): Thiết kế lớp có khả năng tái sử dụng hoặc mở rộng tính năng qua cơ chế kế thừa.
  3. Mô hình thực thi ngôn ngữ: Phân tích nguyên lý biên dịch (Compiler) sang mã Bytecode và thông dịch (Interpreter) qua máy ảo, giải thích cơ chế độc lập nền tảng ("Write once, run anywhere").

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical Skills): Khả năng lập trình Java đúng quy chuẩn cú pháp, sử dụng thành thạo bộ công cụ JDK, thư viện lớp chuẩn (java.lang, java.util, java.io, javax.swing, java.net), xây dựng cấu trúc điều khiển và quản lý luồng dữ liệu.
  • Kỹ năng phân tích (Analytical Skills): Phương pháp nhận diện thực thể thông qua quy tắc tìm danh từ (tìm lớp/đối tượng) và tìm động từ (tìm hành vi/phương thức) từ bản đặc tả yêu cầu; biểu diễn thiết kế bằng biểu đồ UML chuẩn hóa.
  • Kỹ năng thực hành (Practical Competencies): Quy trình viết mã tinh chỉnh từng bước (stepwise refinement), kỹ thuật lần vết thuật toán (tracing algorithm) trên bảng dữ liệu mẫu, phân biệt và sửa chữa lỗi cú pháp (syntax errors) cũng như lỗi ngữ nghĩa/lô-gíc (semantic errors).

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

Giáo trình triển khai phương pháp sư phạm "Design-first" (Ưu tiên thiết kế trước khi gõ mã). Tác giả thiết lập quy tắc: việc viết mã quá sớm mà thiếu phân tích cấu trúc sẽ làm gia tăng thời gian phát triển và khó kiểm soát lỗi. Quá trình học tập được dẫn dắt theo chu trình phần mềm 4 giai đoạn: Đặc tả (Specification) $\rightarrow$ Phân rã & Thiết kế (Design) $\rightarrow$ Cài đặt mã (Implementation) $\rightarrow$ Kiểm thử & Gỡ lỗi (Testing & Debugging).

Hệ thống bài tập và nghiên cứu tình huống (Case Studies) được lồng ghép xuyên suốt qua các trò chơi tương tác thực tế như:

  • Thiết kế lớp câu đố Riddle (lưu trữ câu hỏi, câu trả lời).
  • Xây dựng trò chơi rút que One Row Nim (phát triển từ mức bàn điều khiển dòng lệnh đến giao diện mạng phân tán nhiều người chơi).
  • Mô hình hóa bàn cờ vua với các ràng buộc di chuyển theo từng quân cờ.
  • Mô phỏng chuyển động trong trò chơi Pong đa luồng.

Hình thức đánh giá năng lực người học bao gồm:

  • Self-Study Exercises with Answers: Bài tập tự kiểm tra kiến thức đi kèm đáp án cuối mỗi chương, giúp sinh viên tự đánh giá mức độ hiểu các khái niệm cơ bản.
  • Programming, Debugging, and Design Tips: Các chỉ dẫn thực hành cô đọng cảnh báo các lỗi phổ biến về cú pháp, gợi ý chuẩn mực viết mã (Coding Conventions) và phương pháp tối ưu hóa thiết kế.
  • End-of-Chapter Exercises: Hệ thống bài tập đa dạng phân chia thành bài tập lý thuyết (điền khuyết, phân biệt khái niệm) và bài tập lập trình dự án.
  • In the Laboratory: Các bài thực hành chuyên sâu đặt tại trang web bổ trợ, phục vụ cho các giờ học trên phòng máy có giảng viên hướng dẫn.

Điểm nổi bật và cập nhật của giáo trình

+---------------------------+-------------------------------------------------------------------------+
| Hạng mục thay đổi         | Nội dung chi tiết trong Ấn bản lần thứ 3 (Third Edition)               |
+---------------------------+-------------------------------------------------------------------------+
| Tái cấu trúc chương mở đầu| Tái tổ chức Chương 0 và Chương 1; giản lược hóa nhịp độ giới thiệu UML  |
|                           | và khái niệm đối tượng ban đầu.                                         |
+---------------------------+-------------------------------------------------------------------------+
| Tách biệt chủ đề Đa hình  | Đưa nội dung Kế thừa và Đa hình phức tạp về Chương 8 riêng biệt thay vì |
|                           | phân tán trong 5 chương đầu như ấn bản 2.                               |
+---------------------------+-------------------------------------------------------------------------+
| Cập nhật Java 1.5 Scanner | Đưa lớp Scanner vào Chương 2 và Chương 4 để tối ưu hóa việc nhập dữ liệu|
|                           | từ bàn phím và tệp tin.                                                 |
+---------------------------+-------------------------------------------------------------------------+
| Tái thiết kế Chương 4     | Cung cấp đồng thời hai hướng tiếp cận độc lập: Giao diện dòng lệnh     |
|                           | (BufferedReader) và Giao diện đồ họa (GUI/Applet).                      |
+---------------------------+-------------------------------------------------------------------------+
| Thay thế ví dụ trung tâm  | Thay thế ví dụ CyberPet cũ bằng hệ thống trò chơi và câu đố logic       |
|                           | (Riddle, One Row Nim, Chess, Pong).                                     |
+---------------------------+-------------------------------------------------------------------------+
| Mở rộng Mạng & Web        | Mở rộng Chương 15 với nội dung Java Servlets và Java Server Pages (JSP). |
+---------------------------+-------------------------------------------------------------------------+
| Khung Java Collections    | Tái định hướng Chương 16 vào việc sử dụng Java Collections Framework    |
|                           | (List, LinkedList, Stack, Queue, Set, Map, Binary Search Tree).         |
+---------------------------+-------------------------------------------------------------------------+
| Bản quyền & Phân phối     | Chuyển sang mô hình sách mở mã nguồn mở Creative Commons (CC BY 4.0).   |
+---------------------------+-------------------------------------------------------------------------+

So với các ấn bản đầu tiên (2000, 2003 do Prentice-Hall phát hành), Ấn bản lần thứ 3 (Third Edition) bổ sung nhiều điều chỉnh:

  • Điều chỉnh nhịp độ giới thiệu khái niệm: Chương 0 và Chương 1 được viết lại nhằm làm chậm nhịp độ cung cấp kiến thức mới cho người mới bắt đầu. Nội dung về Đa hình (Polymorphism) được rút ra khỏi các chương đầu để gom thành một chương chuyên sâu (Chương 8).
  • Cập nhật công nghệ: Đưa vào sử dụng lớp java.util.Scanner của Java 1.5 phục vụ các thao tác nhập dữ liệu cơ bản.
  • Lựa chọn linh hoạt về giao diện: Viết lại toàn bộ Chương 4, cho phép giảng viên linh hoạt chọn lựa giữa giao diện dòng lệnh dựa trên BufferedReader hoặc giao diện đồ họa GUI/applet.
  • Đổi mới ví dụ thực hành: Thay thế các ví dụ về vật nuôi ảo (CyberPet) trong các ấn bản trước bằng hệ thống trò chơi bàn cờ, câu đố logic và mô phỏng tương tác.
  • Mở rộng công nghệ mạng và cấu trúc dữ liệu: Bổ sung kiến thức mạng nâng cao với Java Servlets, JSP tại Chương 15 và cấu trúc lại Chương 16 tập trung vào khung tập hợp chuẩn Java Collections Framework kết hợp kiểu dữ liệu tổng quát (Generics).
  • Phiên bản rút gọn (Essentials Edition): Đóng gói nội dung từ Chương 0 đến Chương 12 thành một ấn bản riêng biệt phục vụ các khóa học CS1 tiêu chuẩn không yêu cầu phần mạng hay giao diện nâng cao.

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

  • Sinh viên đại học: Phù hợp cho sinh viên năm thứ nhất hoặc năm thứ hai chuyên ngành Khoa học Máy tính, Kỹ thuật Phần mềm, Hệ thống Thông tin tham gia học phần CS1 hoặc sinh viên đã biết ngôn ngữ khác (C, C++, Pascal) muốn chuyển đổi sang Java.
  • Yêu cầu tiên quyết (Prerequisites): Tài liệu không yêu cầu người học phải có kiến thức lập trình từ trước. Chương 0 cung cấp đầy đủ các khái niệm cơ bản về kiến trúc phần cứng, biểu diễn nhị phân và hệ điều hành.
  • Giảng viên và cơ sở đào tạo: Giáo trình cung cấp sẵn khung đề cương mẫu 13 tuần học kỳ (xem Bảng 2 trong sách). Giảng viên có thể tùy chọn hướng giảng dạy giao diện đồ họa hoặc dòng lệnh, đồng thời chọn lọc các chuyên đề nâng cao ở cuối khóa (Ngoại lệ, Đa luồng, Sockets, Cấu trúc dữ liệu).
  • Người tự học và nghiên cứu: Lập trình viên có nhu cầu củng cố phương pháp luận thiết kế hướng đối tượng (OOD) bài bản, rèn luyện kỹ năng vẽ biểu đồ lớp UML và làm chủ tư duy phân tích hệ thống.

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

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

Giáo trình phù hợp nhất với sinh viên bắt đầu học lập trình trong các khóa học Khoa học Máy tính đại cương (CS1) hoặc người học đã nắm một ngôn ngữ thủ tục (như C hay Pascal) cần học tư duy hướng đối tượng bài bản qua Java.

2. Cần kiến thức nền nào để học giáo trình này?

Người học không cần có kinh nghiệm viết mã trước đó. Toàn bộ kiến thức cơ bản về nguyên lý máy tính, bộ nhớ, chu trình xử lý của CPU, hệ điều hành và cách thức dịch mã (biên dịch/thông dịch) đều được trình bày chi tiết tại Chương 0.

3. Điểm khác biệt của giáo trình này so với các tài liệu lập trình Java khác là gì?

Điểm khác biệt cốt lõi là phương pháp tiếp cận "Objects-early" kết hợp biểu đồ UML chuẩn hóa xuyên suốt. Sách không đi theo lối mòn lập trình thủ tục (dạy biến, rẽ nhánh, vòng lặp trước rồi mới đưa vào class ở giữa kỳ), mà hướng dẫn người học nhìn nhận chương trình như một tập hợp các đối tượng tương tác ngay từ đầu.

+-------------------------------+-----------------------------------+
| Lập trình thủ tục truyền thống| Phương pháp "Objects-Early"       |
| (C, Pascal, Java kiểu cũ)     | (Giáo trình Java, Java, Java)     |
+-------------------------------+-----------------------------------+
| 1. Biến, biểu thức, cú pháp   | 1. Đối tượng & Lớp (Class/Object) |
| 2. Cấu trúc rẽ nhánh, vòng lặp| 2. Giao tiếp qua phương thức      |
| 3. Thủ tục / Hàm rời rạc      | 3. Thiết kế OOD & Biểu đồ UML     |
| 4. Đến giữa kỳ mới học Class  | 4. Cú pháp & Cấu trúc bổ trợ sau  |
+-------------------------------+-----------------------------------+

4. Làm sao để tự học hiệu quả với tài liệu này?

Người học nên tuân thủ nguyên tắc "thiết kế trước khi viết mã" (Design-first) và tinh chỉnh từng bước (stepwise refinement). Tránh viết toàn bộ mã nguồn lớn rồi mới biên dịch; thay vào đó, hãy thiết kế biểu đồ lớp, viết từng phương thức, biên dịch kiểm tra lỗi cú pháp, sau đó lần vết thuật toán (algorithm tracing) trên giấy để loại trừ lỗi ngữ nghĩa.

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

Giáo trình có trang web đồng hành (Companion Web Site) cung cấp hệ thống slide bài giảng PowerPoint, các bài thực hành phòng lab (In the Laboratory), mã nguồn mẫu của các ca nghiên cứu (Riddle, One Row Nim, Pong) và 8 phụ lục kỹ thuật tra cứu (Phụ lục A đến H về JDK, Unicode, Từ khóa, Độ ưu tiên toán tử, Lớp lồng nhau, Autoboxing).


Kết luận

Giáo trình Java, Java, Java: Object-Oriented Problem Solving (Third Edition) của Ralph Morelli và Ralph Walde cung cấp khung tham chiếu học thuật toàn diện về lập trình hướng đối tượng. Bằng việc kết hợp chặt chẽ giữa nguyên lý thiết kế OOD, chuẩn mô hình hóa UML và kỹ thuật lập trình Java hiện đại, tài liệu đáp ứng đầy đủ yêu cầu giảng dạy môn học CS1 tại bậc đại học.

Lộ trình học tập đề xuất là tiếp thu tuần tự Phần I (Chương 0–4) để nắm vững tư duy đối tượng, hoàn thiện các kỹ thuật ngôn ngữ ở Phần II (Chương 5–9) và lựa chọn các module chuyên sâu tại Phần III (Chương 10–16) tùy theo định hướng chuyên môn về hệ thống, mạng hoặc cấu trúc dữ liệu. Người học có thể khai thác mã nguồn mở và hệ thống tài liệu đi kèm trên trang web chính thức của tác giả để tối ưu hóa quá trình học tập.