Java - Hệ thống Mô-đun

Giới thiệu về Hệ thống Mô-đun Java

Xin chào, các nhà lập trình Java mới nhất! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới Hệ thống Mô-đun của Java. Tôi, như một giáo viên khoa học máy tính bạn thân thiện, sẽ hướng dẫn bạn qua chủ đề thú vị này bước từng bước. Đừng lo nếu bạn mới bắt đầu học lập trình – chúng ta sẽ bắt đầu từ những điều cơ bản và học cùng nhau lên cao!

Java - Module System

Mô-đun là gì?

Hãy bắt đầu với một so sánh đơn giản. Hãy tưởng tượng bạn đang xây một lâu đài LEGO. Mỗi gói LEGO đại diện cho một đoạn mã, và hướng dẫn sẽ chỉ bạn cách ghép chúng lại. Trong Java, một mô-đun như một phần của lâu đài bạn đã xây sẵn – nó là một tập hợp mã liên quan hoạt động cùng nhau để thực hiện các chức năng cụ thể.

Trong các thuật ngữ kỹ thuật, một mô-đun trong Java là một đơn vị mã tự chứa bao gồm:

  1. Các lớp và giao diện
  2. Tài nguyên (như hình ảnh hoặc tệp cấu hình)
  3. Định nghĩa rõ ràng về những gì nó cần từ các mô-đun khác
  4. Khai báo về những gì nó cung cấp cho các mô-đun khác

Hãy tưởng tượng nó như một hộp công cụ rất tự nhiên hóa nơi mọi thứ đều có vị trí và mục đích riêng.

Tính năng của Hệ thống Mô-đun Java

Hệ thống Mô-đun Java, được giới thiệu trong Java 9, mang lại nhiều tính năng thú vị. Hãy khám phá chúng một:

1. Kết hợp mạnh mẽ

Bạn nhớ khi còn nhỏ và có một hộp bí mật để giữ trữ kho báu của mình không? Các mô-đun hoạt động tương tự. Chúng cho phép bạn quyết định những phần mã nào có thể thấy được bởi người khác và những phần mã nào là "kho báu bí mật" của bạn.

module com.myapp.secretbox {
exports com.myapp.secretbox.api;
}

Trong ví dụ này, chỉ các lớp trong gói com.myapp.secretbox.api mới có thể thấy được bởi các mô-đun khác. Mọi thứ khác đều bị ẩn!

2. Cấu hình đáng tin cậy

Các mô-đun rõ ràng viết ra những gì họ cần từ các mô-đun khác. Như tạo một danh sách mua sắm trước khi đi đến siêu thị – bạn biết chính xác những gì cần và sẽ không quên điều gì cả!

module com.myapp.kitchen {
requires com.myapp.fridge;
requires com.myapp.stove;
}

Ở đây, mô-đun kitchen của chúng ta đang nói rằng nó cần các mô-đun fridgestove để hoạt động đúng.

3. Hiệu suất cải thiện

Với các mô-đun, Java có thể thông minh hơn trong việc tải chỉ mã mà nó cần. Như chỉ đeo những bộ quần áo mà bạn thực sự sẽ mặc cho chuyến đi, thay vì toàn bộ tủ quần áo của bạn!

Định nghĩa một Mô-đun

Bây giờ, hãy quay tay lên và tạo mô-đun đầu tiên của chúng ta. Chúng ta sẽ bắt đầu bằng cách tạo một tệp có tên module-info.java trong thư mục gốc của tệp mã nguồn của chúng ta.

module com.myapp.greetings {
exports com.myapp.greetings.api;
}

Định nghĩa đơn giản này tạo ra một mô-đun có tên com.myapp.greetings và làm gói com.myapp.greetings.api có thể sử dụng bởi các mô-đun khác.

Thêm các Mô-đun phụ thuộc

Thỉnh thoảng, mô-đun của chúng ta có thể cần sử dụng mã từ các mô-đun khác. Chúng ta có thể xác định các phụ thuộc này bằng cách sử dụng từ khóa requires.

module com.myapp.greetings {
requires com.myapp.translations;
exports com.myapp.greetings.api;
}

Trong ví dụ này, mô-đun greetings của chúng ta cần mô-đun translations để hoạt động đúng.

Thêm các Mô-đun tùy chọn

Như thế nào khi chúng ta có một mô-đun là tốt để có nhưng không hoàn toàn cần thiết? Đó là nơi các mô-đun tùy chọn có ích!

module com.myapp.greetings {
requires com.myapp.translations;
requires static com.myapp.fancyfonts;
exports com.myapp.greetings.api;
}

Từ khóa static cho biết mô-đun fancyfonts là tùy chọn. Mô-đun greetings của chúng ta sẽ hoạt động mà không có nó, nhưng có thể sử dụng fancyfonts nếu có sẵn.

Thêm các Mô-đun chuyển tiếp

Thỉnh thoảng, chúng ta muốn chuyển tiếp các phụ thuộc của mình đến các mô-đun phụ thuộc vào chúng ta. Chúng ta có thể làm điều này bằng cách sử dụng từ khóa transitive.

module com.myapp.greetings {
requires transitive com.myapp.translations;
exports com.myapp.greetings.api;
}

Bây giờ, bất kỳ mô-đun nào yêu cầu com.myapp.greetings sẽ tự động có quyền truy cập vào com.myapp.translations cũng.

Xuất các Lớp Công khai

Khi chúng ta muốn làm sẵn các gói cụ thể để các mô-đun khác sử dụng, chúng ta sử dụng từ khóa exports.

module com.myapp.greetings {
exports com.myapp.greetings.api;
exports com.myapp.greetings.utils to com.myapp.testing;
}

Trong ví dụ này, chúng ta đang làm gói api có thể sử dụng bởi tất cả các mô-đun, nhưng gói utils chỉ có thể sử dụng bởi mô-đun com.myapp.testing.

Cho phép Lập trình Tưởng nhìn

Thỉnh thoảng, chúng ta cần cho phép các mô-đun khác sử dụng lập trình tưởng nhìn trên các lớp của chúng ta. Chúng ta có thể làm điều này bằng cách sử dụng từ khóa opens.

module com.myapp.greetings {
exports com.myapp.greetings.api;
opens com.myapp.greetings.internal to com.myapp.testing;
}

Điều này cho phép mô-đun com.myapp.testing sử dụng lập trình tưởng nhìn trên các lớp trong gói com.myapp.greetings.internal.

Tạo và Sử dụng các Mô-đun Java

Bây giờ đã quay lại các khái niệm cơ bản, hãy để chúng lại và tạo một ứng dụng mô-đun đơn giản. Chúng ta sẽ tạo hai mô-đun: com.myapp.greetingscom.myapp.main.

Trước tiên, hãy tạo mô-đun com.myapp.greetings:

// module-info.java
module com.myapp.greetings {
exports com.myapp.greetings;
}

// com/myapp/greetings/Greeter.java
package com.myapp.greetings;

public class Greeter {
public static String greet(String name) {
return "Hello, " + name + "!";
}
}

Bây giờ, hãy tạo mô-đun com.myapp.main sử dụng mô-đun greetings của chúng ta:

// module-info.java
module com.myapp.main {
requires com.myapp.greetings;
}

// com/myapp/main/Main.java
package com.myapp.main;

import com.myapp.greetings.Greeter;

public class Main {
public static void main(String[] args) {
System.out.println(Greeter.greet("Java Modules"));
}
}

Để biên dịch và chạy ứng dụng mô-đun này, chúng ta sử dụng các lệnh sau:

javac -d mods --module-source-path src $(find src -name "*.java")
java --module-path mods -m com.myapp.main/com.myapp.main.Main

Và voilà! Bạn đã tạo và chạy thành công ứng dụng mô-đun Java đầu tiên của mình.

Kết luận

Chúc mừng bạn đã hoàn thành giới thiệu về Hệ thống Mô-đun Java! Chúng ta đã trải qua nhiều nội dung, từ việc hiểu được mô-đun là gì đến việc tạo ra và sử dụng chúng trong một ứng dụng thực tế. Nhớ rằng, như học lái xe đạp, việc nắm vững mô-đun cần thực hành. Đừng sợ thử nghiệm và gặp lỗi – đó là cách chúng ta học tốt nhất!

Khi bạn tiếp tục hành trình với Java, bạn sẽ thấy rằng các mô-đun giúp bạn tạo ra các ứng dụng có cấu trúc, an toàn và hiệu quả hơn. Họ như nguyên liệu bí mật giúp kỹ năng lập trình của bạn lên từ tốt đến xuất sắc.

Tiếp tục lập trình, tiếp tục học hỏi và quan trọng nhất, hãy thích thú nó! Chờ đợi chuyến hành trình tiếp theo, chúc bạn một ngày modulating vui vẻ!

Credits: Image by storyset