Giới thiệu về Java

Nhằm làm nội dung blog phong phú hơn. Tôi trân trọn giới thiệu loạt bài Nhập môn Java.

Java là một trong những nền tảng công nghệ phổ biến nhất hiện nay. Nó tồn tại ở rất nhiều ứng dụng.

Đó có thể là một trang Web nào đó được viết toàn bộ hoặc một phần với Công nghệ Java.

Đó cũng có thể là trình điều khiển chiếc máy giặt, chiếc tủ lạnh, tivi có chức năng điều khiển thông minh.

Và đó cũng có thể là những ứng dụng đang chạy trên chiếc Smartphone Android của bạn.

Vậy điều gì làm cho Java trở thành một nền tảng công nghệ phổ biến và có nhiều ứng dụng đến vậy?

Hy vọng với loạt bài “Nhập môn Java” này sẽ giúp bạn tự trả lời câu hỏi trên.

“Công nghệ” Java là gì?

Cho tới bây giờ, tôi vẫn đang sử dụng cụm từ “Công nghệ Java” trong bài viết này. Tại sao tôi không sử dụng cụm từ “Ngôn ngữ lập trình Java”?

Thật ra mà nói Java nhiều hơn cả một “ngôn ngữ lập trình”. Đó là một “platform” với nhiều thành phần khác nhau giúp bạn phát triển phần mềm / ứng dụng trên nhiều nền tảng khác nhau.

Và chương trình viết trên “platform Java” tất nhiên có thể được viết bằng “Ngôn ngữ lập trình Java”. Tuy nhiên, ngày nay có rất nhiều ngôn ngữ “viết cho platform Java” khác nhau ngoài “ngôn ngữ lập trình Java”. Một số ví dụ tiêu biểu như:
– Scala
– Kotlin
– Groovy
– ….

Bạn không nghe (đọc) nhầm đâu! Đúng là như vậy. Ngôn ngữ lập trình về cơ bản là tập hợp các quy tắc, các “syntax” để viết ra các “chỉ dẫn” để máy tính thực hiện các tác vụ khác nhau.

Vậy, điều gì khiến cho chương trình được viết bằng những ngôn ngữ khác nhau như trên lại đều đáp ứng được Platform Java (tôi đang viết theo quy tắc tiếng Việt và “mượn từ” tiếng Anh, nếu viết theo tiếng anh phải là Java Platform)?

Các thành phần của Java Platform

Để hiểu được tại sao Java Platform lại có nhiều ngôn ngữ và chương trình của nó có thể chạy được trên nhiều thiết bị, loại thiết bị khác nhau chúng ta cần xem xét các cấu phần của nó.

Java Virtual Machine (JVM)

Đây chính là thành phần làm cho Java có thể chạy được trên nhiều loại thiết bị khác nhau.

Vậy nó là gì? Hãy chú ý cụm từ “Virtual Machine”, về cơ bản đây là một miêu tả của một “máy tính ảo” để chạy Chương trình Java bytecode.

Để hiểu tại sao lại cần có “Java Virtual Machine” để chạy “chương trình Java” (mà lại còn là bytecode nữa chứ) thì chúng ta cần hiểu cách các chương trình máy tính được viết và được chạy để chúng thực thi các tác vụ.

Các ngôn ngữ lập trình máy tính mà bạn viết nhìn trông “khá” gần với ngôn ngữ con người (ở đây hầu hết là Tiếng Anh, tôi cũng chưa biết có ngôn ngữ lập trình nào KHÔNG “bắt chước” tiếng Anh không).

Hiển nhiên là những chiếc máy tính không thể “hiểu” được những thứ “ngôn ngữ này”.

Các chương trình máy tính là tập hợp các chỉ thị (lệnh) để có thể thực thi nhằm đạt được một kết quả nào đó (output) từ các thông số đầu vào (input).

Các lệnh này sẽ được thực hiện bởi CPU máy tính. Bản chất của CPU máy tính là một tập hợp các transitors. Nói cho dễ hiểu transitor là một “công tắt”. Khi bật công tắt này thì”có điện” và nó đại diện cho giá trị “1”. Khi tắt công tắt này thì “không có điện” và nó đại diện cho giá trị “0”.

“Có” hoặc “Không”, không có giá trị thứ ba nào ở đây, và đó là cái người ta gọi là hệ Nhị phân.

Các ngôn ngữ lập trình sẽ miêu tả lệnh ở dạng “bậc cao” (ngôn ngữ lập trình bậc cao), ví dụ như “cộng hai số 1 và 2”, “in số 3 ra màn hình”, vv… Các lệnh này sẽ được biên dịch và thông dịch thành các lệnh mà CPU máy tính có thể “hiểu” và chạy được.Xin phép không nói quá sâu để tránh làm loãng chủ đề về Java. Nếu có thời gian tôi sẽ viết bài chuyên sâu hơn về “Chương trình máy tính”.

Có một điều là không phải cứ “mã nhị phân” là CPU sẽ thực hiện được. Chúng ta có rất nhiều loại CPU, ví dụ như X86/x64 của Intel/AMD, các loại CPU dựa trên kiến trúc ARM, vv..

Điều oái ăm là mỗi một loại kiến trúc CPU chỉ hiểu một loại lệnh khác nhau. Hay nói cách khác mỗi một kiến trúc CPU sẽ có “tập lệnh” khác nhau. Điều đó làm cho chương trình viết cho CPU x86/x64 không thể chạy được trên CPU theo kiến trúc ARM.

Hơn nữa, các “chương trình thông thường” không thể tự “chạy” được, nó cần một nền tảng gọi là “Hệ điều hành”. Hệ điều hành về cơ bản là một tập hợp các chương trình máy tính để giúp “điều hành” máy tính. Nó giúp người sử dụng “giao tiếp” với máy tính qua một “giao diện người – máy”. Hệ điều hành sẽ giúp “chạy” các chương trình do bạn viết ra. Chương trình máy tính thông thường “không cần” tự tìm cách kết nối với bàn phím, chuột hay màn hình. Nó chỉ cần quan tâm “input” là gì và tính toán, thực hiện các lệnh để cho ra “output”. Hệ điều hành sẽ cung cấp “input” cho các chương trình máy tính, và cũng chính nó sẽ lấy “output” để giao tiếp với người dùng.

Tất nhiên, chương trình được viết cho Windows không thể chạy được trên MacOS, hay Android, IOS.

Một hệ điều hành sẽ cung cấp cho nhà lập trình một tập hợp các API (Application Programming Interface) để giúp chương trình có thể chạy được trên nền hệ điều hành đó. API là các “hàm” giúp bạn gọi để yêu cầu Hệ điều hành “hỗ trợ” chương trình của bạn làm gì đó. Ví dụ như kết nối thiết bị ngoại vi, nhận tham số đầu vào, “vẽ” giao diện, kết nối mạng, vv…

Vì API là khác nhau giữa các hệ điều hành, nên việc viết chương trình cho hệ điều hành này rất khó “port” qua Hệ điều hành khác và bạn phải “viết lại” rất nhiều ở những phần chương trình của bạn “giao tiếp” với hệ điều hành.

Công nghệ Java ra đời để giải quyết rắc rối trên.

Mô hình JVM, nguồn: WikiPedia

Java đưa ra khái niệm “Java Virtual Machine”. Bạn cứ hiểu nó là “một máy tính ảo” với tập lệnh riêng. Và tập lệnh này được thể hiện dưới dạng “Java bytecode”. Khi một chương trình Java được chạy, nó sẽ được “load” và “Java Virtual Machine” (JVM).

Lúc này, JVM sẽ chịu trách nhiệm “kết nối” giũa chương trình Java bytecode với hệ điều hành, phần cứng, vv.

Do đó, bạn sẽ tiết kiệm rất nhiều thời gian khi chương trình Java của bạn, về cơ bản là mã nguồn Java của bạn “có khả năng” chạy được ở “hầu hết” thiết bị có JVM.

Tất nhiên mỗi hệ điều hành có những phương thức giao tiếp riêng, và bạn vẫn phải “viết lại” một số mã chuyên biệt cho hệ điều hành đó và không phải “chương trình Java” nào cũng có thể chạy trên nhiều thiết bị khác nhau (vd Android Apps được chạy trên một nền tảng chuyên biệt), nhưng “Java Platform” giúp bạn tiết kiệm rất nhiều thời gian.

Class Libraries

Như đã nói ở trên, nếu bạn viết một chương trình bằng “C/C++”, để “giao tiếp” được với hệ điều hành, phần cứng, bạn phải trực tiếp gọi các api có liên quan, hoặc “import” những thư viện được viết sẵn cho ngôn ngữ của mình để gọi “gián tiếp” những API của hệ điều hành.

Java cũng cung cấp một tập hợp các “interface” như vậy. Nó cung cấp một bộ “API” để có thể thực hiện những đoạn mã “common” hoặc giao tiếp với hệ điều hành. Một số “thư viện” phổ biến:
– java.lang : cungg cấp các hàm cơ bản của ngôn ngữ Java hay các giao tiếp với JVM (JRE)
– Một số I/O libraries: java.io, jva.nio, java.net, vv..
– java.math: các hàm toán học
– ….

Bạn cũng có thể viết “thư viện” của chính mình để tái sử dụng cho nhiều chương trình khác nhau hoặc cung cấp thư viện của mình cho cộng đồng Java để cùng nhau sử dụng.

Java Development Kit (JDK)

Là một tập hợp rất, rất nhiều công cụ khác nhau để giúp bạn phát triển ứng dụng Java của mình.

Một số công cụ phổ biến:
– jar : để quản lý thư viện Java Class được đóng gói trong các gói *.jar
– java: để “chạy” các chương trình Java (đã được dịch thành bytecode), về cơ bản nó sẽ “load” các chương trình java vào JVM để “chạy”.
– javac: viết tắt của “Java Compiler”, đây là trình biên dịch “Ngôn ngữ lập trình Java” thành “Java bytecode”.
– …

Trên đây là những gì cơ bản của “Java Platform”. Trong loạt bài tiếp theo chúng ta sẽ tìm hiểu cách phát triển những ứng dụng Java khác nhau. Tất nhiên tôi sẽ dùng “Ngôn ngữ lập trình Java” để minh họa.

Sài Gòn, 27 tháng 1, 2021
Công Hậu (Jason)

Gửi bình luận