Lịch sử phát triển của ngôn ngữ Java
Năm 1991, Jame Gosling và các cộng sự của mình làm việc tại công ty Sun Microsystems muốn xây dựng một ngôn ngữ chạy nhanh, hiệu quả và độc lập với thiết bị dùng để điều khiển các thiết bị điện tử dân dụng như tivi, đầu video,…Ban đầu, ngôn ngữ có tên là “Oak” nhưng sau này nhóm nhận thấy đã tồn tại một ngôn ngữ lập trình trùng tên nên đã quyết định đổi tên thành Java. Java là tên của quán cà phê nơi ông và các cộng sự của mình thường đến uống, thiết kế và xây dựng ngôn ngữ Java.
Tháng 6 năm 1995, lần đầu tiên Java được Sun Microsystems giới thiệu rộng rãi ra công chúng và ngôn ngữ này nhanh chóng trở thành ngôn ngữ lập trình yêu thích của các lập trình viên chuyên nghiệp.
Java được xây dựng dựa trên nền tảng của ngôn ngữ C/C++, nghĩa là sử dụng cú pháp của ngôn ngữ lập trình C và đặc trưng hướng đối tượng của ngôn ngữ C++. Do đó, Java là ngôn ngữ lập trình hướng đối tượng.
Những đặc trưng của ngôn ngữ Java
Đơn giản
Java bỏ đi các đặc trưng phức tạp của C và C++ như: các thao tác về con trỏ, định nghĩa chồng toán tử, không sử dụng lệnh goto, không sử dụng tập tin header (.h), cấu trúc struct và union cũng được loại bỏ.
Hướng đối tượng
Java là ngôn ngữ lập trình hoàn toàn hướng đối tượng, mọi thực thể trong hệ thống đều được xem là đối tượng.
Độc lập phần cứng và hệ điều hành
Mục tiêu chính của các nhà thiết kế và phát triển Java là xây dựng ngôn ngữ độc lập với phần cứng và các hệ điều hành khác nhau.
Tính độc lập với phần cứng được hiểu theo nghĩa một chương trình Java nếu được chạy đúng trên phần cứng của một họ máy nào thì nó cũng sẽ chạy đúng trên các họ máy khác. Một chương trình chỉ chạy đúng trên một số họ cụ thể được xem là phụ thuộc vào phần cứng.
Tính độc lập với hệ điều hành được hiểu là một chương trình Java có thể chạy được trên tất cả các hệ điều hành. Một chương trình chỉ chạy được trên một số loại hệ điều hành nhất định gọi là phụ thuộc vào hệ điều hành.
Một chương trình Java có thể chạy trên hầu hết các hệ nền mà không cần phải thay đổi gì, điều này đã được những người lập trình đặt cho nó một khẩu hiệu “viết một lần, chạy mọi nơi”, điều này là không thể có đối với các ngôn ngữ lập trình khác.
Mạnh mẽ
Java là ngôn ngữ yêu cầu chặt chẽ về kiểu dữ liệu, việc ép kiểu tự động bừa bãi của C, C++ nay được hạn chế trong Java, điều này làm chương trình rõ ràng, ít lỗi hơn. Java kiểm tra lúc biên dịch và cả trong thời gian thông dịch, vì vậy, Java loại bỏ một số loại lỗi lập trình nhất định. Java không sử dụng con trỏ và các phép toán con trỏ. Java kiểm tra tất cả các truy cập đến mảng, chuỗi khi thực thi để đảm bảo các truy cập đó không vượt ra ngoài giới hạn kích thước. Quá trình cấp phát, giải phóng được thực hiện tự động nhờ sử dụng dịch vụ thu gom các đối tượng không còn sử dụng nữa.
Hỗ trợ lập trình theo thread
Đây là tính năng cho phép viết một chương trình có nhiều đoạn mã lệnh được chạy song song với nhau. Với Java ta có thể viết các chương trình có khả năng chạy song song một cách dễ dàng, hơn nữa việc đồng bộ tài nguyên dùng chung trong Java cũng rất đơn giản. Điều này là không thể đối với một số ngôn ngữ lập trình khác như C/C++,...
Phân tán
Java hỗ trợ các mô hình tính toán phân tán: client/ server, các thủ tục triệu gọi từ xa RPC, RMI, CORBA, WebService.
Thông dịch
Các chương trình Java cần được thông dịch trước khi chạy, một chương trình java được biên dịch thành mã byte code – mã độc lập với hệ nền. Trình thông dịch Java ánh xạ mã byte code này lên mỗi nền cụ thể, điều này khiến java chậm đi phần nào.
Bảo mật
Java cung cấp môi trường quản lý thực thi chương trình với nhiều mức kiểm soát tính an toàn:
- Dữ liệu và phương thức được đóng gói trong lớp. Chúng chỉ được truy xuất qua giao diện được cung cấp bởi các lớp.
- Trình biên dịch kiểm soát để bảo đảm mã là an toàn, và tuân theo các nguyên tắc của Java.
- Đảm bảo bởi trình thông dịch. Chúng kiểm tra xem mã bytecode có đảm bảo an toàn trước khi thực thi hay không.
- Kiểm soát quá trình nạp các lớp vào bộ nhớ để giám sát việc vi phạm giới hạn truy cập trước khi nạp vào hệ thống.
Soạn thảo, biên dịch và thực thi một ứng dụng Java
Cài đặt bộ công cụ phát triển JDK (Java Development Kit)
Trước hết chúng ta cần download bộ JDK với phiên bản mới nhất tại địa chỉ:http://www.oracle.com/technetwork/java/javase/downloads/index.html
Một số lệnh thường được sử dụng trong quá trình lập trình với Java:
javac : trình biên dịch mã nguồn thành mã byte, sau quá trình biên dịch này Java sẽ phát sinh các file có phần mở rộng .class
Cú pháp: javac [option] filename.java
java: trình thông dịch của Java, dùng để thực thi các ứng dụng
Cú pháp: java [option] classname
appletviewer: trình thông dịch dùng để thực thi các ứng dụng applet thay vì sử dụng các trình duyệt để thực thi.
Cú pháp: appletviewer [option] url
Cài đặt IDE
Cần lựa chọn môi trường phát triển tích hợp (IDE) thích hợp để phát triển ứng dụng một cách nhanh chóng và hiệu quả. Trong quá trình cài đặt IDE cần chỉ định vị trí JDK đã được cài đặt trong máy của bạn, thực hiện các bước cài đặt theo hướng dẫn của từng IDE riêng biệt.
Đối với ngôn ngữ lập trình Java, hiện tại có một số các IDE nổi tiếng như Netbean, Eclipse, JCreator,…Tuy nhiên, hiện tại hai IDE hiệu quả nhất là Netbean và Eclipse.
Môi trường thực thi Java
Máy ảo Java
Máy ảo Java JVM cung cấp các định nghĩa về:
- Các câu lệnh
- Các thanh ghi
- Định dạng tập tin class
- Ngăn xếp tại thời điểm thực thi (Runtime stack)
- Trình thu gom rác tại vùng nhớ heap
- Vùng nhớ
- Cơ chế báo cáo các lỗi nghiêm trọng
- Hỗ trợ thời gian độ chính xác cao
Máy ảo Java thực hiện 3 nhiệm vụ chính như sau:
- Nạp mã (Loads code): được thực hiện bởi class loader
- Kiểm tra mã (Verifies code): được thực hiện bởi bytecode verifier
- Thực thi mã (Executes code): được thực hiện bởi runtime interpreter
- Class Loader:
+ Nạp tất cả các lớp cần thiết để thực thi chương trình.
+ Duy trì các lớp của hệ thống trong các không gian riêng biệt.
+ Tránh thực thi các chương trình mà mã bytecode có sự thay đổi không hợp lệ.
Bytecode Verifier
Tất cả các lớp được import vào hệ thống đều được kiểm tra bởi bytecode verifier nhằm đảm bảo:
+ Mã tuân thủ các đặc tả của JVM
+ Mã không vi phạm tính toàn vẹn của hệ thống
+ Mã không gây tràn ngăn xếp (overflow và underflow)
+ Đảm bảo tính đúng đắn trong quá trình truyền tham số trong mã
+ Không có sự chuyển đổi dữ liệu bất hợp lý.
Trình thu gom rác
Trình thu gom rác bao gồm những đặc điểm sau;
- Tự động kiểm tra và giải phòng bộ nhớ không còn được sử dụng. Java sẽ giải phòng các vùng nhớ đã cấp phát cho đối tượng không còn được sử dụng, các đối tượng này là các đối tượng mà sau một khoảng thời gian nhất định không có các truy cập được hiểu là rác.
- Cung cấp một thread mức thấp của hệ thống để giám sát việc cấp phát bộ nhớ.
Những loại ứng dụng có thể phát triển bởi Java
Ngôn ngữ lập trình Java ngày nay được sử dụng phổ biến và có thể được sử dụng để phát triển các loại ứng dụng dưới đây:
- Ứng dụng Console: ứng dụng giao diện dòng lệnh
- Ứng dụng Applet: Applet là chương trình được tạo ra để sử dụng trên Internet thông qua trình duyệt hỗ trợ Java. Khi trang web hiển thị, applet sẽ được tải về và thực thi tại trình duyệt.
- Ứng dụng desktop: ứng dụng cho phép người dùng tương tác, khai thác hệ thống thông qua giao diện đồ họa.
- Ứng dụng web: ứng dụng cho phép người dùng tương tác, khai thác hệ thống thông qua môi trường web sử dụng trình duyệt.
- Ứng dụng nhúng: ứng dụng được xây dựng cho các thiết bị như điều khiển tivi, thiết bị di động,…
Các khái niệm:
Trừu tượng hóa:
Trừu tượng hóa là một kỹ thuật chỉ trình bày những đặc điểm cần thiết của vấn đề mà không trình bày những chi tiết cụ thể hay những lời giải thích phức tạp cho vấn đề đó. Hay nó khác hơn nó là một kỹ thuật tập trung vào thứ cần thiết và phớt lờ đi những thứ không cần thiết.
Sự trừu tượng hóa đã không ngừng phát triển trong các ngôn ngữ lập trình, nhưng chỉ ở mức dữ liệu và thủ tục. Trong lập trình hướng đối tượng việc này được nâng lên một mức cao hơn – mức đối tượng. Sự trừu tượng hóa được phân thành trừu tượng hóa dữ liệu và trừu tượng hóa chương trình:
- Trừu tượng hóa dữ liệu: là tiến trình xác định và nhóm các thuộc tính và các hành động liên quan đến một thực thể đặc thù trong ứng dụng đang phát triển.
- Trừu tượng hóa chương trình: là một sự trừu tượng hóa dữ liệu làm cho các dịch vụ thay đổi theo dữ liệu.
Tóm lại, trừu tượng hóa là quá trình xác định và nhóm các thuộc tính và hành động liên quan đến một thực thể cụ thể, xét trong sự liên quan với các ứng dụng đang phát triển.
Những ưu điểm của việc trừu tượng hóa:
- Tập trung vào vấn đề.
- Xác định những đặc tính thiết yếu và những hành động cần thiết.
- Giảm thiểu những chi tiết không cần thiết
Tính đóng gói
- Tính đóng gói là một khái niệm lập trình quan trọng, hỗ trợ việc phân tách các trạng thái và hành vi của một đối tượng. Điều này giúp che giấu các dữ liệu của đối tượng mô tả trạng thái của đối tượng đó đối với sự thay đổi do các thành phần bên ngoài. Điều này được gọi là sự che giấu thông tin tránh những tác nhân bên ngoài nhìn thấy cấu trúc bên trong của đối tượng.
- Tính đóng gói cho phép người dùng sử dụng giao diện để truy cập dữ liệu.
- Giúp cho quá trình bảo trì bảo dưỡng hiệu quả hơn.
Gói
Gói dùng để phân hoạch không gian lưu trữ tên lớp, giao diện thành các vùng dễ quản lý hơn, gói thể hiện tính đóng gói trong Java.
Đặc điểm của gói:
- Một gói có thể chứa các gói khác bên trong nó.
- Không thể có hai lớp trùng tên trong một gói.
- Tên gói thường được viết bằng chữ in thường.
Thông thường, chương trình của chúng ta sẽ nằm trong một gói chính. Tên của gói chính là tên của chương trình. Trong gói này thường chỉ chứa một lớp là lớp chứa phương thức main. Các lớp khác thường được đặt trong các gói con trong gói chính
Định nghĩa gói:
Tạo một gói bằng cách đặt từ khóa package tại dòng đầu tiên của tập tin nguồn java. Bất kỳ lớp nào khai báo trong lớp này đều thuộc gói này hoặc các lớp có đặt từ khóa package tại dòng đầu tiên của tập tin nguồn cũng thuộc gói này. Nếu từ khóa package không được chỉ định thì các lớp sẽ được đặt vào gói mặc định. Cú pháp:
package PackageName;
Java sử dụng hệ thống thư mục để lưu trữ các gói. Các lớp thuộc gói sẽ được chứa trong thư mục cùng tên PackageName. Chúng ta có thể tạo các gói lồng nhau (phân cấp), khi đó sử dụng dấu chấm để phân biệt một gói với gói cha của nó. Sự phân cấp các gói phải được ánh xạ vào hệ thống tập tin. Java xem gốc của cây phân cấp gói được định nghĩa bởi biến môi trường CLASSPATH.
package PackageName1.[PackageName2.[PackageName3]];
Ví dụ: package java.awt.datatransfer;
Được lưu trữ trong thư mục java\awt\datatransfer với hệ điều hành Windows.
Sử dụng gói:
Java cung cấp cho chúng ta hai cách sử dụng gói như sau:
- Sử dụng từ khóa import:
import java.awt.Point;
Point point = new Point(1,2);
- Sử dụng trực tiếp:java.awt.Point point = new Point(1,2);
Lớp
Lớp định nghĩa hai thành phần chính là thuộc tính và phương thức, được gọi là các thành phần của lớp đại diện cho tập hợp các đối tượng cùng loại. Trong đó, thuộc tính đại diện cho dữ liệu và phương thức đại diện cho các hành vi của đối tượng thuộc lớp.
Đối tượng
Lớp là nguyên mẫu mô tả những đặc tính, hành vi của một đối tượng cụ thể. Để có thể sử dụng thực thể mà lớp định nghĩa, chúng ta phải tạo đối tượng thuộc lớp đó. Chính vì vậy, lớp là một khuôn mẫu để tạo ra các đối tượng cùng loại còn đối tượng là một thể hiện của một lớp cụ thể. Mỗi đối tượng riêng biệt có những đặc tính riêng biệt mô tả đối tượng ấy hoặc các hành vi của đối tượng
Thuộc tính
Mỗi một thuộc tính mô tả một đặc tính của đối tượng. Do đó, nó nắm giữ dữ liệu của đối tượng nhằm định nghĩa một đối tượng cụ thể. Các giá trị của thuộc tính chỉ có thể được khởi tạo sau khi đối tượng được tạo ra
Phương thức
Phương thức định nghĩa cách thức thực thi một hành động, xác định cách thức thao tác trên các dữ liệu của đối tượng, mô tả hành vi của đối tượng. Mỗi một phương thức thường định nghĩa một chức năng tác động lên dữ liệu của đối tượng.
Thông điệp
Thông điệp là một lời yêu cầu thực thi một hành động, bao gồm: đối tượng nhận thông điệp, tên phương thức cần thực hiện, các tham đối truyền cho phương thức. Truyền thông điệp là hành động mà một đối tượng này triệu gọi một hay nhiều phương thức của đối tượng khác để yêu cầu cung cấp thông tin.
Sự kiện
Sự kiện là một sự việc xảy ra tại một thời điểm nhất định của một đối tượng. Khi đó để phản hồi các tác động của sự kiện thì đối tượng thực thi một hay nhiều các phương thức.
0 Comment:
Đăng nhận xét
Thank you for your comments!