Bảo mật và Máy ảo Java. Đặc điểm của ngôn ngữ Java

Trong hướng dẫn này, chúng tôi sẽ trình bày mọi thứ bạn cần biết trước khi bắt đầu học lập trình trên Java. Bạn sẽ tìm hiểu về các khả năng của nền tảng, cách sử dụng và cách bắt đầu học Java đúng đắn.

Ngôn ngữ lập trình Java là gì?

Năm 1991, Green Team, một bộ phận của Sun Microsystems, do James Gosling, đã tạo ra một ngôn ngữ để lập trình hộ gia đình các thiết bị điện tử... Vào thời điểm đó nó được gọi là Oak ("Gỗ sồi"). Tại sao lại là "Oak"? Đơn giản vì cái cây này mọc bên ngoài cửa sổ phòng làm việc của Gosling.

Đội Xanh đã trình diễn việc sử dụng Gỗ sồi trên một TV tương tác. Nhưng đối với truyền hình cáp kỹ thuật số những năm đó, công nghệ này quá tiên tiến. Đồng thời, Internet đã trở nên phổ biến, ngôn ngữ lập trình mới là phù hợp nhất.

Sau một thời gian, ngôn ngữ mới được đổi tên thành Green, và sau đó - ở Java, để vinh danh cà phê từ đảo Java. Do đó, logo Java mô tả một cốc cà phê.

Trong quá trình phát triển của Java, C / C ++ đã trở nên phổ biến, vì vậy Gosling đã làm cho cú pháp của ngôn ngữ này tương tự như C / C ++ và thực hiện nguyên tắc “ viết một lần, chạy mọi nơi". Năm 1995, Sun Microsystems phát hành phiên bản chính thức đầu tiên của Java. Và đồng thời, nó đã được thông báo rằng Java sẽ được đưa vào trình duyệt. Netscape Navigator.

Năm 2010, Sun Microsystems, cùng với ngôn ngữ lập trình Java, được mua lại bởi Tập đoàn Oracle.

Lịch sử phiên bản Java

  1. Tháng 6 năm 1991 - bắt đầu dự án phát triển ngôn ngữ lập trình Java.
  2. JDK 1.0 - tháng 1 năm 1996.
  3. JDK 1.1 - tháng 2 năm 1997.
  4. J2SE 1.2 - tháng 12 năm 1998.
  5. J2SE 1.3 - tháng 5 năm 2000.
  6. J2SE 1.4 - tháng 2 năm 2002.
  7. J2SE 5.0 - tháng 9 năm 2004.
  8. Java SE 6 - tháng 12 năm 2006.
  9. Java SE 7 - tháng 7 năm 2011.
  10. Java SE 8 - ngày 18 tháng 3 năm 2014.
  11. Java SE 9 - ngày 21 tháng 9 năm 2017.

Các chức năng của ngôn ngữ lập trình Java

Java là một ngôn ngữ đa nền tảng

Mã Java được viết trên một nền tảng ( đó là hệ điều hành) có thể chạy không thay đổi trên các nền tảng khác.

bắt đầu Java máy ảo Java được sử dụng ( Máy ảo Java, JVM). JVM xử lý mã byte, và sau đó bộ xử lý xử lý mã nhận được từ JVM. Tất cả các máy ảo đều hoạt động theo một cách giống nhau, vì vậy cùng một đoạn mã hoạt động giống nhau trên tất cả các hệ điều hành, điều này làm cho Java trở thành một ngôn ngữ lập trình đa nền tảng.

Ngôn ngữ lập trình hướng đối tượng

Có nhiều kiểu lập trình khác nhau, và một trong những kiểu phổ biến nhất là lập trình hướng đối tượng. Với cách tiếp cận này vấn đề khó khăn chia nhỏ thành những cái nhỏ hơn bằng cách tạo ra các đối tượng. Điều này làm cho mã có thể được sử dụng lại.

Các hàm hướng đối tượng được tìm thấy trong nhiều ngôn ngữ lập trình, bao gồm Java, Python và C ++. Nếu bạn nghiêm túc về việc học lập trình, thì phương pháp hướng đối tượng rất đáng được đưa vào chương trình học của bạn.

Java nhanh

Phiên bản đầu tiên ngôn ngữ lập trình Java thường bị chỉ trích là chậm chạp. Nhưng ngày nay tình hình đã thay đổi đáng kể. Các phiên bản JVM mới hơn chạy nhanh hơn nhiều và các bộ xử lý diễn giải chúng ngày càng nhanh hơn.

Java là một trong những ngôn ngữ lập trình nhanh nhất hiện nay. Mã Java được tối ưu hóa tốt chạy nhanh gần như các ngôn ngữ lập trình cấp thấp như C / C ++ và nhanh hơn nhiều so với Python, PHP, v.v.

Java là một nền tảng an toàn

Java là:

  • một nền tảng an toàn để phát triển và khởi chạy các ứng dụng;
  • cung cấp các công cụ để quản lý bộ nhớ tự động, làm giảm khả năng bị tổn thương của mã;
  • đảm bảo truyền dữ liệu an toàn.

Thư viện lõi mở rộng

Một trong những lý do khiến Java được sử dụng rộng rãi là do thư viện tiêu chuẩn khổng lồ. Nó chứa hàng trăm lớp và phương thức từ các gói khác nhau để làm cho cuộc sống của các nhà phát triển dễ dàng hơn. Ví dụ,

java.lang là các hàm nâng cao cho chuỗi, mảng, v.v.

java.util là một thư viện để làm việc với cấu trúc dữ liệu, biểu thức chính quy, ngày và giờ, v.v.

kava.io là một thư viện để nhập / xuất tệp, xử lý ngoại lệ, v.v.

Sử dụng Nền tảng Java

Trước khi học Java lập trình từ đầu, bạn cần biết rằng hơn 3 tỷ thiết bị trên khắp thế giới đang chạy trên nền tảng này. Chính xác thì bạn có thể sử dụng nó để làm gì:

  1. Ứng dụng Android - Để phát triển các ứng dụng Android, ngôn ngữ lập trình Java thường được sử dụng cùng với SDK Android (từ bộ phát triển phần mềm tiếng anh - bộ phát triển phần mềm).
  2. Ứng dụng web - Java được sử dụng để xây dựng các ứng dụng web bằng các chương trình phía máy chủ, khuôn khổ Struts và JSP. Một số ứng dụng web phổ biến được viết bằng Java bao gồm Google.com, Facebook.com, eBay.com, LinkedIn.com.

Cần lưu ý rằng các trang web này không nhất thiết phải được viết riêng bằng Java và có thể sử dụng các ngôn ngữ lập trình khác.

  1. Phát triển phần mềm- các chương trình như Eclipse, OpenOffice, Vuze, MATLAB và nhiều chương trình khác được viết bằng Java.
  2. Xử lý dữ liệu lớn - Để xử lý dữ liệu lớn, bạn có thể sử dụng khung Hadoop được viết bằng Java.
  3. Hệ thống giao dịch- sử dụng nền tảng Nền tảng giao dịch Oracle Extreme Java, bạn có thể viết các chương trình để giao dịch.
  4. Thiết bị nhúng- Ngày nay, hàng tỷ thiết bị được cung cấp bởi công nghệ Java Embedded của Oracle, chẳng hạn như TV, thẻ SIM, đầu đĩa Blu-ray, v.v.

Cũng thế lập trình trên Java được sử dụng để phát triển trò chơi, ứng dụng khoa học ( ví dụ, để xử lý ngôn ngữ tự nhiên) và trong nhiều lĩnh vực khác.

Thuật ngữ Java bạn nên biết

Java là một tập hợp các công nghệ ( ngôn ngữ lập trình và nền tảng máy tính ) được thiết kế để tạo và chạy phần mềm. Tuy nhiên, thuật ngữ Java thường được dùng để chỉ chính ngôn ngữ lập trình.

Ngôn ngữ lập trình Java là một ngôn ngữ lập trình hướng đối tượng đa nền tảng mục đích chung với nhiều cơ hội.

Java 9 là phiên bản Java mới nhất tại thời điểm viết bài này.

Java EE, Java Me và Java SE - Những tên này là viết tắt của Java Enterprise Edition, Micro Edition và Phiên bản tiêu chuẩn, tương ứng.

Java EE nhắm mục tiêu các ứng dụng chạy trên máy chủ. Java ME được thiết kế cho các thiết bị hạn chế về nguồn điện, chẳng hạn như thiết bị nhúng. Java SE là phiên bản tiêu chuẩn của Java để viết các chương trình thông thường.

Nếu bạn là người mới Lập trình Java, chúng tôi khuyên bạn nên bắt đầu với Java SE.

JVM - Máy ảo Java (" Máy ảo Java") Là một chương trình cho phép máy tính chạy các chương trình được viết bằng Java.

JRE - Môi trường thời gian chạy Java (" thời gian chạy Java") Bao gồm JVM, các thư viện tương ứng và các thành phần khác cần thiết để chạy chương trình. Nhưng không có trình biên dịch, trình gỡ lỗi hoặc các công cụ phát triển khác trong JRE.

JDK - Bộ công cụ phát triển Java (bộ Nhà phát triển Java) chứa JRE và các công cụ phát triển khác như trình biên dịch, trình gỡ lỗi, v.v.

Cách chạy Java trên hệ điều hành của bạn

Cách chạy Java trên Mac OS

Đây là những việc cần làm đối với Java lập trình từ đầu và cài đặt nền tảng trên Mac OS X hoặc macOS:

  1. Tải xuống phiên bản Java mới nhất ( JDK) với Các trang tải xuống Java SE.
  2. Nhấp đúp vào tệp DMG đã tải xuống và làm theo hướng dẫn của trình cài đặt.
  3. Để xác minh cài đặt, hãy mở một thiết bị đầu cuối và nhập lệnh sau:

javac –version

Nếu Java được cài đặt đúng, phiên bản chương trình ( ví dụ javac 1.8.0_60).

Bước tiếp theo là cài đặt IDE ( môi trường phát triển tích hợp) để viết và chạy mã Java. Chúng tôi sẽ cài đặt phiên bản miễn phí của IntelliJ IDEA và chạy Java trên đó. Đây là những gì bạn cần làm cho việc này:

  1. Đi đến Trang tải xuống IntelliJ và tải xuống Phiên bản Cộng đồng miễn phí.
  1. Mở tệp DMG đã tải xuống và làm theo hướng dẫn cài đặt. Để truy cập nhanh, bạn có thể di chuyển IntelliJ IDEA vào thư mục Ứng dụng.
  2. Mở IntelliJ IDEA. Chọn tùy chọn “Không nhập cài đặt” (“ Không nhập cài đặt") Và nhấp vào" Ok ". Sau đó, chấp nhận chính sách bảo mật của Jetbrains bằng cách nhấp vào nút "Chấp nhận".
  3. Bây giờ bạn có thể tùy chỉnh giao diện cho chính mình. Bạn cũng có thể bỏ qua bước này và để mọi thứ như mặc định. Nếu không chắc chắn, chỉ cần bỏ qua bước này bằng cách nhấp vào nút Bỏ qua tất cả và Đặt mặc định. Bỏ qua mọi thứ và đặt cài đặt mặc định»).


  1. Chương trình sẽ hiển thị cho bạn một trang chào mừng. Nhấp vào nút "Tạo dự án mới" Tạo một dự án mới»).
  2. Trong cửa sổ tiếp theo, chọn "Java" trong khung bên trái và nhấp vào "Mới" ở đầu cửa sổ chương trình để chọn "JDK". Tại đây, bạn cần chọn vị trí mà bạn đã cài đặt JDK, sau đó nhấp vào Tiếp theo.


  1. Bạn sẽ có tùy chọn để tạo một dự án từ mẫu ("Tạo dự án từ mẫu"). Bỏ qua nó và nhấp vào nút Tiếp theo.
  2. Trong bước tiếp theo của quá trình cài đặt ngôn ngữ lập trình Java nhập tên cho dự án và nhấp vào Kết thúc.
  3. Trong ngăn bên trái, bạn sẽ thấy dự án của mình. Nếu bảng điều khiển không hiển thị, hãy chuyển đến menu Chế độ xem> Công cụ Windows> Dự án.
  4. Đi tới Hello> New> Java và đặt tên lớp. Chúng tôi đặt tên nó là First.


  1. Để chạy chương trình bạn vừa viết, hãy vào Run> Run ... Nhấp vào First ( đó là tên của tệp chúng tôi đã tạo


Cách chạy Java trên Linux

Để chạy các ví dụ từ bài học lập trình từ đầu Java trên Linux sẽ cần Bộ phát triển JAVA SE ( JDK) và IDE để phát triển các dự án của bạn. Làm theo hướng dẫn từng bước để bắt đầu với Java.

Cài đặt Java

  1. Mở một thiết bị đầu cuối và nhập lệnh sau để Cài đặt Java:

    sudo add-apt-repository ppa: webupd8team / java


    cập nhật apt sudo; sudo apt install oracle-java8-installer

  1. Chấp nhận thỏa thuận cấp phép và các điều khoản sử dụng bằng cách nhấp vào "OK" và "Có", tương ứng.
  2. Bạn đã cài đặt Java. Để kiểm tra xem cài đặt có thành công hay không, hãy nhập lệnh sau vào một thiết bị đầu cuối:

java –version

Nếu phiên bản hiện tại được hiển thị, quá trình cài đặt đã thành công. Nếu không, hãy kiểm tra với Trang trợ giúp của Oracle.

Cài đặt IntelliJ IDEA

  1. Đi đến.


  1. Tải xuống Phiên bản Cộng đồng miễn phí bằng cách nhấp vào nút Tải xuống.
  2. Sau khi tải xuống thay đổi thư mục trong thiết bị đầu cuối vào thư mục tải xuống và giải nén tệp tar Java vào thư mục / opt bằng lệnh sau:

sudo tar xf .tar.gz -C / opt /

  1. Sau khi giải nén, hãy thay đổi thư mục thành thư mục bin của chương trình IntelliJ IDEA:

    cd / opt / / thùng rác

  2. Để khởi động IDE, hãy nhập lệnh sau:
  3. Chúng tôi chọn "Không nhập cài đặt" (" Không nhập cài đặt") Và nhấp vào" OK ". Sau đó, chúng tôi chấp nhận chính sách bảo mật của Jetbrains bằng cách nhấp vào nút "Chấp nhận".
  4. Bây giờ để vượt qua các khóa học lập trình Java, bạn có thể tùy chỉnh giao diện cho mình. Tạo lối tắt trên màn hình để truy cập nhanh vào chương trình. Sau đó, để khởi chạy IDE, hãy nhấp vào "Tiếp theo" trong tất cả các bước sau.
  5. Chương trình sẽ hiển thị một trang chào mừng. Nhấp vào "Tạo dự án mới" Tạo một dự án mới»).
  6. Trong cửa sổ tiếp theo, chọn Java trong ngăn bên trái và đảm bảo rằng Java được chọn trong hàng SDK dự án. Nếu không, hãy chọn vị trí bạn đã cài đặt JDK: / usr / lib / jvm / java-8-oracle.


  1. Nhấn "Tiếp theo" hai lần và tạo một dự án.
  2. Trong bước tiếp theo, nhập tên cho dự án và nhấp vào Kết thúc. Bây giờ bạn sẽ thấy dự án của mình trong ngăn bên trái. Nếu bảng điều khiển này không hiển thị, hãy chuyển đến menu Chế độ xem> Công cụ Windows> Dự án.
  3. Thêm một lớp Java mới. Chọn src trong ngăn bên trái click chuột phải và đi tới Mới> Lớp Java. Đặt tên lớp. Không được có khoảng trắng trong tên lớp.


  1. Viết mã Java và lưu dự án.
  2. Để chạy chương trình, vào Run> Run ... Nhấp vào HelloWorld ( Tên dự án) - chương trình sẽ biên dịch tệp và chạy nó.


Cách chạy Java trên Windows (XP, 7, 8 & 10)

Để thành thạo Java các nguyên tắc cơ bản của lập trình và việc chạy nền tảng trên Windows sẽ yêu cầu Bộ phát triển JAVA SE (JDK) và IDE để phát triển các dự án. Làm theo hướng dẫn từng bước dưới đây:

Cài đặt Java

  1. Trong phần Bộ công cụ phát triển Java SE ở đầu bảng, nhấp vào Chấp nhận thỏa thuận cấp phép ( Chấp nhận thỏa thuận cấp phép"). Sau đó bấm vào Liên kết Windows(x64) nếu bạn có hệ điều hành 64 bit hoặc Windows (x86) nếu bạn có hệ điều hành 32 bit.

  1. Sau khi tải xuống, hãy chạy tệp cài đặt và làm theo hướng dẫn xuất hiện trên màn hình. Nhấp chuột " Kế tiếp". Chọn tất cả các chức năng bằng cách nhấp vào " Tính năng này sẽ được cài đặt trên cục bộ ổ cứng "Và sao chép vị trí cài đặt ( nó được đánh dấu bằng màu vàng) trong "Notepad", rồi nhấp vào " Kế tiếp».


  1. Trong quá trình cài đặt, bạn sẽ được nhắc cài đặt JRE. Nhấp vào Tiếp theo và sau đó Kết thúc để hoàn tất cài đặt.
  2. Bây giờ bạn cần chỉnh sửa biến PATH. Đi đến Bảng điều khiển> Hệ thống và Bảo mật> Hệ thống... Trong ngăn bên trái, hãy chọn " Các thông số hệ thống bổ sung ”.

  1. Nhấp chuột " Biến môi trường "... Trong chuong " Biến hệ thống " tìm biến PATH và trong cửa sổ tiếp theo, hãy nhấp vào "Chỉnh sửa".

  1. Chọn tất cả văn bản trong " Giá trị biến " và sao chép nó vào một tệp văn bản riêng biệt. Điều này sẽ giúp bạn dễ dàng chỉnh sửa và kiểm tra lỗi hơn. Xem nếu văn bản được sao chép có chứa dòng: C: \ ProgramData \ Oracle Java javapath; ... Nếu vậy, bạn có thể chuyển sang bước tiếp theo. Nếu không, hãy dán vị trí cài đặt đã sao chép trước đó vào đầu biến và thêm bin vào cuối dòng như sau: C: \ Program Files (x 86) \ Java jdk 1.8.0_112 bin; Xin lưu ý rằng phiên bản JDK của bạn (jdk 1.8.0_112) có thể khác. Sao chép giá trị của biến và dán vào cửa sổ PATH.


  1. Nhấp chuột " VÂNG"Để lưu các thay đổi của bạn.
  2. Để kiểm tra xem nền tảng có được cài đặt đúng cách hay không giới thiệu về lập trình Java, mở dòng lệnh bằng cách gõ cmd ở dòng Tìm kiếm trên Windows hoặc thông qua lệnh "Run ..." ( Windows - R). Nhập lệnh java -version. Nếu phiên bản Java hiện tại được hiển thị, quá trình cài đặt đã thành công. Nếu không, hãy kiểm tra với Trang trợ giúp của Oracle.

Cài đặt IntelliJ IDEA

  1. Đi đến Trang tải xuống IntelliJ IDEA.
  2. Tải xuống Phiên bản Cộng đồng miễn phí bằng cách nhấp vào Tải xuống.


  1. Sau khi tải xuống, hãy chạy tệp thiết lập và làm theo hướng dẫn xuất hiện trên màn hình. Sau đó, tạo lối tắt trên màn hình cho 64-bit và thêm các liên kết với phần mở rộng .java. Nhấp vào "Tiếp theo" và tiến hành cài đặt.


  1. Sau khi cài đặt, hãy mở IntelliJ IDEA bằng cách nhấp vào biểu tượng trên màn hình của bạn.
  2. Chọn “Không nhập cài đặt” (“ Không nhập cài đặt") Và nhấp vào" OK ". Sau đó, chúng tôi chấp nhận chính sách bảo mật của Jetbrains bằng cách nhấp vào "Chấp nhận".
  3. Bây giờ bạn có thể tùy chỉnh giao diện cho chính mình. Bạn cũng có thể bỏ qua bước này và để mọi thứ như mặc định bằng cách nhấp vào nút Bỏ qua tất cả và Đặt mặc định.
  4. Chương trình sẽ hiển thị một trang chào mừng. Nhấp vào "Tạo dự án mới" Tạo một dự án mới»).


  1. Trong cửa sổ tiếp theo, chọn "Java" trong khung bên trái và nhấp vào "Mới" ở đầu cửa sổ chương trình để chọn JDK. Ở đây bạn cần chọn vị trí mà JDK đã được cài đặt trong quá trình cài đặt Java, sau đó nhấp vào "Tiếp theo".
  2. IntelliJ IDEA sẽ tìm thấy JDK và nhận ra nó. Bạn không cần phải kiểm tra bất kỳ tùy chọn nào khác, chỉ cần nhấp vào Tiếp theo.
  3. Trên màn hình tiếp theo, nhập tên cho dự án: HelloWorld và nhấp vào Kết thúc. Nếu chương trình thông báo rằng thư mục không tồn tại, hãy nhấp vào "OK". Nếu bạn không thấy ngăn bên trái, hãy chuyển đến Chế độ xem> Công cụ Windows> Dự án.
  4. Để đặt tên lớp, hãy chọn thư mục src trong ngăn bên trái. Nhấp chuột phải vào nó, đi tới New> Java và đặt tên cho lớp. Không được có khoảng trắng trong tên lớp.


  1. Viết mã và lưu dự án Java bài học lập trình.
  2. Để chạy chương trình, vào Run> Run ... Nhấp vào HelloWorld - chương trình sẽ biên dịch tệp và chạy nó.


Chương trình Java đầu tiên của bạn

Để giới thiệu cho người dùng ngôn ngữ lập trình mới, hãy sử dụng chương trình Hello World. Đây là một chương trình đơn giản có in dòng chữ Hello, World! Trong phần này, chúng tôi sẽ dạy bạn cách viết chương trình này trong Java bằng IntelliJ IDEA.

  1. Mở IntelliJ IDEA.
  2. Đi tới Tệp> Mới> Dự án ...> Java ( trong thanh điều hướng bên trái).
  3. Đặt tên dự án từ khóa học lập trình J a va. Chúng tôi sẽ đặt tên nó là Hello World và nhấp vào Hoàn tất.
  4. Bây giờ chúng ta cần tạo một lớp Java mới.
  5. Chọn thư mục src trong ngăn bên trái, sau đó đi tới Tệp> Mới> Lớp Java và đặt tên cho lớp mới là HelloWorld.
  6. Sao chép mã sau vào HelloWorld.java và lưu nó.

public class HelloWorld (public static void main (String args) (


// in ra "Hello, World!"


System.out.println ("Xin chào, Thế giới!");

  1. Nhấp vào nút bắt đầu ( Chạy). Nếu mọi thứ đều theo thứ tự, bạn sẽ thấy dòng chữ Hello, World!

Làm cách nào để học Java?

Tài liệu chính thức của Java

Oracle, công ty sở hữu Java, xuất bản các hướng dẫn chất lượng. Tài liệu chính thức bao gồm tất cả các tính năng của Java và được cập nhật thường xuyên.

Lưu ý: tiêu cực duy nhất là tài liệu Java chính thức không phải lúc nào cũng được viết bằng ngôn ngữ đơn giản nhất.

Nếu bạn thực sự muốn học lập trình trên Java, mua cuốn sách tốt... Tất nhiên, không thể đọc 1000 trang trong một ngày. Nhưng một hướng dẫn tốt sẽ giúp bạn học lập trình.

Java: Hướng dẫn Hoàn chỉnh (Phiên bản thứ 10)

Một cuốn sách xuất sắc cho những ai mới bắt đầu học Java. Phiên bản mới nhất bao gồm tất cả các tính năng của phiên bản Java 8.

Cuốn sách bao gồm mọi thứ cần biết về lập trình Java, bao gồm cú pháp, từ khóa và các nguyên tắc cơ bản về lập trình cũng như thư viện Java API. Các ứng dụng Java và nhiều hơn nữa.

Triết lý Java (Tái bản lần thứ 4)

Nếu bạn đang chuyển sang Java từ một ngôn ngữ lập trình khác, cuốn sách này là dành cho bạn. Nếu bạn đang bắt đầu từ đầu, tốt nhất là nên đọc nó kết hợp với một cuốn sách khác.

Tham khảo bỏ túi Java 8.: Xe cứu thương Lập trình viên Java

Cuốn sách này cung cấp câu trả lời rõ ràng cho những câu hỏi nảy sinh khi dạy J lập trình ava từ đầu... Cô ấy giới thiệu ngắn gọn tất cả các khái niệm cơ bản của Java (bao gồm Java 9). Bạn không muốn lật qua hàng trăm trang để tìm dòng phù hợp? Mua cuốn sách này.

Thay cho một kết luận

Nếu bạn bắt đầu học Java, bạn sẽ không nhầm - nó là một ngôn ngữ lập trình đầy hứa hẹn với nhiều khả năng đa dạng.

Trước khi tiếp tục với học Java, sử dụng một số mẹo:

  • Đừng đọc các bài viết hướng dẫn và ví dụ như một cuốn tiểu thuyết. Cách duy nhất trở thành một lập trình viên giỏi có nghĩa là viết rất nhiều mã.
  • Nếu bạn đang di chuyển từ một ngôn ngữ lập trình khác (giả sử, C #), bạn không cần phải viết mã kiểu C #.
  • Tìm các cộng đồng Java trực tuyến. Khi bạn đã học cách viết các chương trình Java đơn giản, hãy tìm các trang web và diễn đàn Java phổ biến. Cố gắng giải quyết các vấn đề mà các lập trình viên khác gặp phải. Đây là một cách tuyệt vời để mở rộng kiến ​​thức của chính bạn. Ngoài ra, nếu bạn gặp khó khăn, bạn sẽ biết nơi để yêu cầu giúp đỡ.

Chúng tôi hy vọng bài viết này sẽ thúc đẩy bạn học Java và giúp bạn bắt đầu với các chương trình đầu tiên của mình.

Bản dịch của bài báo “ Học lập trình Java. Hướng dẫn chi tiết”Được chuẩn bị bởi nhóm dự án thân thiện

Chúng ta sẽ nói về cú pháp Java cơ bản cho người mới bắt đầu. Cú pháp của một ngôn ngữ lập trình là một tập hợp các quy tắc chi phối cách nó được viết và diễn giải ...

Gửi công việc tốt của bạn trong cơ sở kiến ​​thức là đơn giản. Sử dụng biểu mẫu bên dưới

Các sinh viên, nghiên cứu sinh, các nhà khoa học trẻ sử dụng nền tảng tri thức trong học tập và làm việc sẽ rất biết ơn các bạn.

Đăng trên http://www.allbest.ru/

Đại học Kỹ thuật Bang Nizhny Novgorod

Viện Công nghệ Thông tin và Điện tử Vô tuyến

Khoa Tin học và Hệ thống Điều khiển

Phương pháp và phương tiện bảo vệ thông tin máy tính

"Hệ thống bảo mật Java"

Nizhny Novgorod, 2007

1. Cách thức hoạt động của Java

2. Bảo vệ các ứng dụng Java

3. Mô hình bảo mật JDK1.2

4. Kiến trúc mật mã Java

5. Tổ chức đối tượng của cơ chế bảo mật

Thư mục

1. Nguyên lý hoạt độngJava

Công nghệ Java dựa trên mô hình máy khách-máy chủ và một chương trình Java bao gồm một số khối, mỗi khối thực hiện một phần cụ thể của nhiệm vụ tổng thể. Về phía khách hàng, chỉ có những khối là cần thiết vào lúc này. Hơn nữa, các khối được sử dụng thường xuyên nhất được lưu trữ trong bộ nhớ đệm trên đĩa cứng hoặc trong RAM của máy tính người dùng. Vì khối được tải từ máy chủ, nên có thể quản lý một hệ thống như vậy từ máy chủ, tức là một cách tập trung. Điều này cũng đảm bảo rằng người dùng luôn sử dụng phiên bản mới nhất của chương trình.

Thành phần chính của công nghệ này là một bộ xử lý Java ảo, là một môi trường để thực thi các lệnh Java, hay còn được gọi là bytecodes. Bất kỳ chương trình Java nào cũng phải tuân thủ đặc tả Bộ xử lý ảo Java, đặc tả này xác định đầy đủ tập lệnh Java, các kiểu dữ liệu mà bộ xử lý Java xử lý và các thanh ghi của nó.

Ngoài bộ xử lý ảo, công nghệ Java bao gồm (như một phần tử tùy chọn) một ngôn ngữ lập trình hướng đối tượng được xây dựng trên cơ sở ngôn ngữ C ++, trong đó các cơ chế mới đã được thêm vào để đảm bảo an ninh và phân phối máy tính.

Các tính năng của Java là các applet. Một applet là một chương trình nhỏ, trong đó một số chức năng bắt buộc phải được xác định. Applet được tải xuống qua mạng và có thể chạy trên trình duyệt Web hỗ trợ ngôn ngữ Java. Đây là một phần của công nghệ Java được thiết kế để sử dụng trên Internet, và do đó, việc bảo vệ phải mở rộng cho cả bản thân applet và cho máy khách mạng sử dụng applet.

2. Bảo vệJava-applets

Applet là thành phần dễ bị tấn công nhất của công nghệ Java theo quan điểm bảo mật, vì chúng có thể được sử dụng bởi bất kỳ máy khách nào. Đó là lý do tại sao các phương pháp bảo vệ nghiêm ngặt nhất được cung cấp cho các applet. Mặc dù các trình duyệt khác nhau và người xem applet có thể bảo vệ thông tin người dùng khỏi bị tấn công theo nhiều cách khác nhau, nhưng nói chung, một applet nên bị cấm theo những điều sau:

· Kiểm tra sự tồn tại và các thông số của một tập tin cụ thể;

· Để truy cập máy tính từ xa qua mạng;

· Nhận danh sách các phiên giao tiếp mạng mà máy tính cục bộ thiết lập với các máy tính khác;

· Nhận thông tin về người dùng hoặc danh bạ chính của họ;

· Thoát trình thông dịch Java;

Các thành phần công nghệ Java sau đây cung cấp các quy tắc này.

· Bản thân bộ xử lý Java ảo, liên tục giám sát trạng thái của nó.

· Một bộ nạp cho các applet và các chương trình Java, điều khiển các mã được tải.

· Trình quản lý bảo mật (Secu-rityManager), kiểm soát và ngăn chặn các hành động nguy hiểm của các applet.

Lớp SecurityManager liệt kê các phương thức được hệ thống sử dụng để kiểm soát các hoạt động của applet tùy thuộc vào đặc điểm của môi trường.

Chức năng của trình nạp là xác minh mã bytecodes, nghĩa là kiểm tra tính đúng đắn của phần tử đã nhận của chương trình Java và tính toàn vẹn của nó. Trong quá trình xác minh, phát hiện ra những điều sau:

Phiên bản của khối nhận được có tương ứng với phiên bản của phần còn lại của các phần tử hệ thống hay không;

· Chương trình có tuân theo đặc điểm kỹ thuật của một bộ xử lý ảo Java cụ thể hay không;

Mục đích của việc kiểm tra này là để xác định việc sử dụng không đúng hướng dẫn có thể khiến bộ xử lý ảo hoạt động sai và để xác minh tính toàn vẹn của applet.

Các cơ chế bảo vệ của công nghệ này đã được nghiên cứu rất kỹ lưỡng, nhưng việc triển khai chúng vẫn chưa hoàn hảo. Do đó, sau đây là danh sách nhỏ các "cuộc tấn công" có thể xảy ra.

Chặn một dịch vụ

Kết quả là công việc của người dùng bị chặn một phần hoặc hoàn toàn và trình duyệt thậm chí có thể bị vô hiệu hóa. Đây là một danh sách xa hoàn toàn. các lựa chọn khả thi như một "cuộc tấn công":

Điền vào toàn bộ giải phóng bộ nhớ;

· Nắm bắt các lớp hệ thống quan trọng.

Các kênh "bí mật"

Các kênh này cho phép nhận thông tin ngay cả khi thông qua hệ thống bảo mật (tường lửa). Sự tồn tại của các kênh "bí mật" trong trình duyệt khiến nó trở nên rất nguy hiểm. Các hành động sau của applet có thể được sử dụng như một kênh "bí mật":

· Gửi thư qua cổng SMTP của máy chủ (hơn nữa, thư được gửi thay mặt cho người dùng đang làm việc với applet);

· Yêu cầu tìm kiếm theo một URL không tồn tại, trong đó dữ liệu cần thiết cho "cracker" được chuyển dưới dạng tham số;

· Cố gắng truy cập một địa chỉ không tồn tại (một chuỗi các thư mục có thể chứa dữ liệu cần thiết).

Thông tin được biết đến với các applet

Với sự trợ giúp của thông tin này, bạn có thể nhận được một số thông tin mà sau này có thể được sử dụng bởi anh ta để "hack". Thông tin này thậm chí có thể được truyền qua tường lửa qua các kênh bí mật, được mô tả ở trên. Applet thường biết thông tin hệ thống sau:

· thời gian hệ thống;

· Tên và phiên bản của hệ điều hành;

· Kiến trúc bộ xử lý.

Việc cân bằng giữa khả năng của các ứng dụng có thể tải xuống và bảo mật hệ thống máy khách là rất khó. Các giải pháp được đề xuất không thể được thực hiện độc lập với một nền tảng cụ thể, điều này mâu thuẫn với yêu cầu về tính di động tuyệt đối của các chương trình Java.

3. Mô hình bảo mậtJDK1.2

Công nghệ Java cung cấp một số dòng bảo mật có thể được chia thành ba nhóm:

· Độ tin cậy của ngôn ngữ;

· Kiểm soát khi nhận và tải xuống các chương trình;

· Kiểm soát trong quá trình thực hiện các chương trình.

Java cung cấp bảo mật thông qua các điều khiển tĩnh và động. Một Java khác - quản lý bộ nhớ tự động, loại bỏ sự xuất hiện của các con trỏ "lủng lẳng".

Kiểm soát việc nhận và tải xuống các chương trình là nhiều giai đoạn trong Java. Đầu tiên, các thành phần phần mềm có thể được ký điện tử để kiểm soát tính toàn vẹn và tính xác thực của chúng. Thứ hai, trình xác minh bytecode, ngoài việc kiểm tra chung định dạng của thông tin nhận được, còn cố gắng đảm bảo rằng không có các hành động sai sau:

• giả mạo con trỏ (ví dụ, lấy một con trỏ do thực hiện một phép tính số học);

· Vi phạm quyền truy cập vào các thành phần của lớp;

· Gọi các phương thức của các đối tượng với một tập hợp các tham số không hợp lệ;

· Chuyển đổi kiểu không hợp lệ;

· Tràn hoặc cạn kiệt ngăn xếp.

Kiểm soát trong quá trình thực hiện chương trình có thể được chia thành hai cấp độ. Trên mức độ thấp hơn Máy ảo Java không cho phép vượt ra ngoài ranh giới của các mảng và các hành động không chính xác tương tự. Ở cấp cao nhất, trình quản lý bảo mật thực hiện kiểm tra xác thực quyền truy cập có ý nghĩa, do đó thực thi chính sách bảo mật đã chọn.

Tiếp tục phân chia thành các nhóm và cấp độ, sẽ hữu ích khi làm nổi bật hai khía cạnh sau của bảo mật Java:

· Bảo vệ môi trường thời gian chạy Java và tài nguyên của nền tảng phần cứng và phần mềm khỏi phần mềm độc hại;

· Sự khác biệt về quyền truy cập của các đối tượng đối với các tài nguyên của cấp độ ứng dụng.

Mục đích chính của các biện pháp bảo mật trong Java là bảo vệ môi trường Java khỏi phần mềm độc hại. Để đạt được mục tiêu này, khái niệm "hộp cát" ( hộp cát) - một môi trường đóng, trong đó các chương trình không đáng tin cậy có thể chạy. Applet nhận được qua mạng được coi là như vậy. Tất cả mã "gốc" (nghĩa là các chương trình nằm trên máy tính cục bộ) được coi là hoàn toàn đáng tin cậy và mọi thứ có sẵn cho máy ảo Java đều có sẵn cho nó.

Các hạn chế của hộp cát bao gồm hạn chế quyền truy cập vào hệ thống tệp cục bộ, mạng lưới với tất cả các máy chủ ngoại trừ nguồn của applet (máy chủ mà từ đó applet được nhận), v.v. Với những hạn chế này, bảo mật tổng thể được đảm bảo, nhưng các applet có rất ít chỗ để hoạt động.

Để giải quyết vấn đề này bằng cách nào đó, chúng tôi đã đưa ra khái niệm về chữ ký điện tử, do nhà phân phối applet đưa ra. Máy Java, theo chính sách bảo mật của nó, chia các nhà phân phối và theo đó, các applet của họ thành hai loại - đáng tin cậy và không đáng tin cậy. Các applet đáng tin cậy đã được đánh đồng về quyền với mã "gốc".

Ba khái niệm cơ bản đã hình thành:

· Nguồn của chương trình;

· Luật pháp và nhiều quyền;

· Chính sách bảo mật.

Nguồn của chương trình được xác định bởi một cặp (bộ định vị tài nguyên chung - URL, các nhà phân phối chương trình). URL có thể trỏ đến một tệp trên hệ thống tệp cục bộ hoặc đến một tài nguyên trên hệ thống từ xa.

Luật là một khái niệm trừu tượng, như thường lệ trong Java, là các lớp và đối tượng. Trong hầu hết các trường hợp, quyền được xác định bởi hai chuỗi ký tự - tên tài nguyên và hành động. Ví dụ: một tệp có thể hoạt động như một tài nguyên và một lần đọc có thể hoạt động như một hành động.

Chính sách bảo mật xác định sự tương ứng giữa nguồn và quyền của các chương trình nhận được từ nó. Các chương trình "gốc" không có bất kỳ đặc quyền bảo mật nào và bạn có thể có bất kỳ chính sách nào đối với chúng.

Trên thực tế, có một cơ chế quyền truy cập truyền thống cho các hệ điều hành và hệ quản trị cơ sở dữ liệu hiện đại với các tính năng sau:

· Đối tượng của quyền truy cập không phải là người dùng, mà là nguồn của chương trình. Tuy nhiên, về mặt hình thức, chúng ta có thể giả định rằng trong quá trình thực thi một chương trình, nguồn của nó trở thành;

· Không có khái niệm về chủ sở hữu của tài nguyên, mà (chủ sở hữu) có thể thay đổi các quyền; cái sau được đặt riêng bởi chính sách bảo mật.

Mô hình bảo mật trong JDK 1.2

4. Kiến trúc mật mãJava

Xác thực mạnh mẽ, kiểm soát toàn vẹn và bảo mật là không thể nếu không có mật mã.

Kiến trúc mật mã Java (JCA) được thiết kế để cung cấp các dịch vụ sau:

· Thiết lập / xác minh chữ ký điện tử;

· Tính toán của hàm băm;

· Tạo cặp khóa công khai / bí mật;

· Tạo chứng chỉ xác nhận tính xác thực của khóa công khai;

· Lưu trữ chìa khóa, cũng như chứng chỉ của các đối tác đáng tin cậy;

· Chuyển đổi các khóa từ một biểu diễn có cấu trúc ẩn thành một biểu diễn có thể hiểu được chung và ngược lại;

· Tạo các tham số của thuật toán mật mã;

· Tạo (giả) số ngẫu nhiên;

· mã hóa đối xứng;

· Phát triển một vật liệu quan trọng chung.

Ngoài ra, kiến ​​trúc mật mã phải đáp ứng các yêu cầu công nghệ sau:

· Cung cấp sự độc lập khỏi các thuật toán và việc triển khai chúng;

· Đảm bảo tính tương thích lẫn nhau của việc triển khai;

· Đảm bảo khả năng mở rộng của tập hợp các thuật toán và việc triển khai chúng.

Mỗi dịch vụ có thể được cung cấp một số thuật toán, mỗi thuật toán có thể có một số cách triển khai. Ví dụ: các thuật toán MD5 / SHA-1 được thiết kế để tính toán hàm băm (cũng như "Hàm băm" GOST của Nga), để tạo và xác minh chữ ký điện tử - các thuật toán RSA / DSA, "Thủ tục" GOST của Nga để phát triển và xác minh chữ ký điện tử "v.v.

API của các dịch vụ được thiết kế để phản ánh chức năng của chúng ở dạng độc lập về mặt thuật toán. Việc triển khai được gọi là một nhà cung cấp dịch vụ mật mã - một gói hoặc một nhóm các gói có chứa một triển khai. Ứng dụng có khả năng chọn các thuật toán và nhà cung cấp dịch vụ trong số những thuật toán có sẵn.

Hai mặt hàng cuối cùng trong danh sách các dịch vụ (mã hóa đối xứng và tạo tài liệu khóa chung) phải tuân theo các hạn chế xuất khẩu của Hoa Kỳ, do đó, không giống như các dịch vụ được liệt kê còn lại, chúng được thiết kế như một phần mở rộng (Java Cryptography Extension, JCE), là một sản phẩm riêng biệt.

Hệ thống phân cấp của các dịch vụ mật mã, thuật toán và triển khai

5. Tổ chức đối tượngcơ chế bảo mật

tiền điện tử bảo vệ ứng dụng java

Các cơ chế bảo mật trong JDK 1.2 được đóng gói trong bốn gói chính và ba gói bổ sung. Dưới đây là một số trong số họ

· java.security- chứa các giao diện và lớp tạo nên khuôn khổ của các cơ chế bảo mật. Điều này bao gồm các công cụ kiểm soát truy cập đã thảo luận ở trên, cũng như phương tiện mật mã chẳng hạn như tạo chữ ký điện tử, tính toán hàm băm, v.v.

· java.security.interfaces- phương tiện để tạo các khóa RSA và DSA.

· javax.crypto- giao diện và các lớp cho mã hóa đối xứng.

Điều quan trọng nhất theo quan điểm khái niệm, các giao diện và lớp được tập trung trong gói java.security.

Chính sách bảo mật

Chính sách bảo mật thiết lập sự tương ứng giữa các nguồn chương trình và quyền truy cập của chúng. Trong máy Java, tại một thời điểm, nó được đại diện bởi một đối tượng của một lớp là đối tượng kế thừa của một lớp trừu tượng Chính sách... Phương pháp lớp học Chính sách cho phép bạn lấy / đặt chính sách hiện tại, cũng như tìm ra các quyền truy cập được liên kết với một nguồn chương trình nhất định.

Kiểm tra quyền truy cập

Bạn có thể sử dụng hai phương tiện để kiểm soát quyền truy cập:

Trình quản lý bảo mật tích hợp có tên AccessController;

Trình quản lý bảo mật thay đổi động - Quản lí an ninh.

Lớp học AccessController cung cấp một phương pháp duy nhất để kiểm tra một quyền đã cho trong ngữ cảnh hiện tại - checkPermission.

Giao diện và lớp mật mã

Tổ chức đối tượng của hệ thống con mật mã Java phản ánh một cách tự nhiên tổ chức mật mã được mô tả ở trên. Mỗi dịch vụ tương ứng với một lớp trừu tượng mô tả giao diện lập trình (dịch vụ) của nó, cũng như một lớp mô tả giao diện lập trình của nhà cung cấp dịch vụ. Các lớp quan trọng là Các nhà cung cấpBảo vệ... Phần đầu tiên tóm tắt các phương pháp chung của các nhà cung cấp dịch vụ mật mã và phần thứ hai tóm tắt các phương pháp quản lý nhà cung cấp và các tham số thuật toán.

Thư mục

1.http: //www.jetinfo.ru/1998/11-12/1/article1.11-12.19981237.html

2.http: //vestnik.sci.pfu.edu.ru/archiv-cs/articles-cs/2004-3-1/pdf/kulyabov-2004.pdf

3.http: //ru.wikipedia.org/wiki/Java

4.http: //infocity.kiev.ua/hack/content/hack081.phtml

5.http: //citforum.uar.net/security/web/java_seq.shtml

6.http: //www.htc-cs.ru/press/tribune/java.html

7.http: //www.ccc.ru/magazine/depot/00_11/print.html?web3.htm

Đã đăng trên Allbest.ru

Tài liệu tương tự

    Kiến trúc Java và Java RMI, các thuộc tính chính, hệ thống cơ sở và các phần tử của chúng. Bảo mật và Máy ảo Java. API Java. Một ví dụ về việc sử dụng ứng dụng RMI. Làm việc với chương trình "Máy tính". Tính linh hoạt, tính di động của các nền tảng.

    hạn giấy bổ sung 12/03/2013

    Khái niệm và các tính năng chức năng của Thẻ Java như Các phiên bản Java-patforms cho các thiết bị có tài nguyên máy tính cực kỳ hạn chế, đánh giá khả năng của nó và các tài nguyên cần thiết. Phân tích mức độ bảo mật của nền tảng, sự tương tác của các thành phần.

    bản trình bày được thêm vào ngày 19/05/2014

    Khả năng mạng của ngôn ngữ lập trình. Lợi ích của việc sử dụng các ứng dụng Java. Các lớp có trong thư viện java.awt. Tạo giao diện người dùng. Một kết nối ổ cắm với máy chủ. Đồ họa trong Java. Giá trị của các màu cấu thành.

    giấy hạn bổ sung ngày 11/10/2014

    Lịch sử hình thành ngôn ngữ Java. Các nguyên tắc cơ bản của lập trình hướng đối tượng. Cấu trúc, các tính năng cú pháp và ví dụ về các khả năng ứng dụng của việc sử dụng ngôn ngữ Java, các ưu điểm của nó. Triển vọng làm việc như một lập trình viên Java.

    hạn giấy bổ sung 14/12/2012

    Cơ sở của giao diện người dùng. Tính năng của các gói java.awt.geom, java.awt, các lớp java.awt.Graphics và java.awt.Graphics2D. Nguyên thủy đồ họa cơ bản và làm việc với các luồng. Liệt kê chương trình và thành phần của các phép biến đổi affine.

    hướng dẫn sử dụng, thêm 30/06/2009

    Kiến trúc mức lệnh nền tảng Java, Định dạng tệp lớp Java. Một trình biên dịch hợp ngữ cho phép bạn tạo các tệp lớp có thể được xử lý chính xác bởi JVM thực và hỗ trợ tất cả các lệnh mã bytecode của Java và các tính năng JVM cần thiết.

    hạn giấy, bổ sung 17/09/2008

    Một tài liệu tham khảo lịch sử ngắn gọn về sự phát triển của ngôn ngữ Java. Phân tích miền. Nền tảng Java, phiên bản doanh nghiệp và phiên bản độc lập. Applet, servlet, ứng dụng gui. Phát triển mã chương trình, ứng dụng console. Kết quả của applet, servlet.

    hạn giấy, bổ sung 23/12/2015

    Lợi thế của việc sử dụng các chương trình được viết bằng Java, các yêu cầu đối với chúng và các cài đặt trên máy khách. Triển khai và cập nhật "tự động" tiếp theo của các phiên bản GUI của ứng dụng khách bằng công nghệ Web Java Khởi động trong môi trường Windows.

    bản tóm tắt được thêm vào ngày 16/05/2011

    Tạo ngôn ngữ lập trình bằng ứng dụng Java. Lịch sử của tên và logo Java. Tổng quan về nhiều loại trình soạn thảo văn bản hiện đại. Xử lý chuỗi. Các phương thức trong lớp String. Java: các tác vụ xử lý văn bản. Ví dụ về lập trình.

    hạn giấy, bổ sung 19/07/2014

    Ngôn ngữ đánh dấu mở rộng XML. Mô tả loại tài liệu DTD. Ý nghĩa của XML và nền tảng Java. Tổng quan về trình phân tích cú pháp DOM và SAX tiêu chuẩn. Công nghệ Java Servlet, Java Trang máy chủ(JSP), JavaBeans. Chức năng chung của sản phẩm phần mềm. Mô hình dữ liệu.

Phần này được chia thành sáu phần. Các vấn đề về bảo mật của máy tính phân tán nói chung được thảo luận và vấn đề bảo mật liên quan đến mã thực thi được xem xét. Có sáu bước để xây dựng một cơ chế bảo mật linh hoạt và khả thi. Việc thực hiện các cơ chế bảo vệ trong kiến ​​trúc của ngôn ngữ Java cũng được xem xét. Như trong bất kỳ công nghệ mới, có những câu hỏi mở liên quan đến bảo mật trong Java vẫn đang được thảo luận trên Web và các diễn đàn khác.

Phần này xem xét khái niệm bảo mật trong bối cảnh chung của tương tác trên Web và cách thức bảo mật được thực hiện thông qua mã thực thi.

Đầu tiên, hãy xem xét tính hai mặt bảo mật của Web và sự phát triển của Web như một phương tiện trong bối cảnh của tính hai mặt đó. Sau đó, bạn có thể bắt đầu mô tả vấn đề bảo mật trong ngữ cảnh của mã thực thi.

Chương trình nhận được từ mạng phải có một mức độ tin cậy nhất định từ phía người dùng. Nó được cung cấp một số tài nguyên máy tính, nếu không nó sẽ không thể thực hiện bất kỳ hành động hữu ích... Tuy nhiên, chương trình này được viết bởi một người không có nghĩa vụ chính thức đối với người dùng. Nếu ai đó là tin tặc, thì mã thực thi kết quả có thể là một chương trình nguy hiểm tiềm ẩn với các khả năng tương tự như một chương trình cục bộ.

Liệu người dùng có nên cách ly hoàn toàn hay không chương trình bên ngoài từ tài nguyên máy tính? Dĩ nhiên là không. Trong trường hợp như vậy, mã thực thi sẽ không thể làm bất cứ điều gì hữu ích. Một giải pháp hoàn chỉnh và hiệu quả hơn cho vấn đề bảo mật có thể được chia thành sáu giai đoạn:

1. Dự kiến ​​mọi hành động và phương pháp xâm nhập nguy hiểm tiềm tàng.

2. Để giảm bất kỳ hành động nguy hiểm nào xuống mức tối thiểu của các hoạt động đơn giản nhất.

3. Xây dựng môi trường lập trình và Ngôn ngữ máy tính nghiêm cấm rõ ràng bộ tối thiểu các hoạt động nguy hiểm và do đó là bất kỳ hành động độc hại nào.

4. Chứng minh một cách hợp lý hoặc, nếu có thể, cho thấy rõ ràng rằng ngôn ngữ và môi trường thực sự được bảo vệ chống lại các phương pháp xâm nhập có chủ ý.

5. Triển khai ngôn ngữ và cho phép các chương trình thực thi chỉ sử dụng ngôn ngữ an toàn đã được phê duyệt đó.

Các kịch bản tấn công bên ngoài có thể được chia thành các nhóm sau (danh sách không đầy đủ):

· Thiệt hại hoặc vi phạm tính toàn vẹn của dữ liệu và / hoặc trạng thái của chương trình đang được thực thi;

· Thu thập hoặc sao chép thông tin bí mật;

· Chặn tài nguyên, do đó chúng không thể truy cập được đối với người dùng và chương trình hợp pháp;

· Thu thập tài nguyên và việc sử dụng chúng bởi một chương trình trái phép bên ngoài;

· Tạo ra các tình huống không nghiêm trọng làm giảm hiệu suất, đặc biệt là trong các thiết bị đầu ra;

· Chỉ định quyền truy cập và sử dụng chúng hoặc máy tính của khách hàng để xâm nhập các phần tử khác của mạng.

Bàn 1.1 liệt kê các nguồn lực tiềm ẩn dễ bị tổn thương, cũng như các loại tác động có thể được sử dụng liên quan đến chúng. Trong một chiến lược bảo vệ tốt, mỗi tài nguyên được ấn định một yếu tố rủi ro và các phương pháp truy cập chúng từ các chương trình thực thi bên ngoài được phát triển.

Bảng1.1 Các đối tượng tiềm ẩn dễ bị tổn thương và các loại tác động

Vi phạm liêm chính

Đánh chặn thông tin

Chặn / thay đổi quyền

Nắm bắt một nguồn tài nguyên

Can thiệp không gây tử vong

Nắm bắt quyền hạn

Hệ thống tập tin

Vi phạm liêm chính

Đánh chặn thông tin

Chặn / thay đổi quyền

Nắm bắt một nguồn tài nguyên

Can thiệp không gây tử vong

Nắm bắt quyền hạn

Thông tin bí mật

Trung tâm

CPU

Các thiết bị đầu ra

Thiết bị đầu vào

Hệ điều hành, trạng thái chương trình

Thay vì nhìn vào mọi thứ những cách khả thi các can thiệp, sơ đồ bảo vệ trong ngôn ngữ Java xác định các đối tượng dễ bị tấn công của các hoạt động chính tiềm ẩn nguy hiểm, rất gần với cách tiếp cận được mô tả ở trên.

Cụ thể, chương trình bảo mật ngôn ngữ Java giải quyết các lỗ hổng sau:

· Kỉ niệm;

· Hệ điều hành / trạng thái của chương trình;

· Hệ thống tệp khách hàng;

Điều này có tính đến các loại can thiệp sau được liệt kê trong bảng. 1,1;

· Vi phạm tính toàn vẹn của các chương trình trong máy khách. Thường do vi rút tự ghi vào bộ nhớ và phá hủy các tệp nhất định khi một sự kiện xảy ra hoặc khi đến một ngày nhất định;

· Chặn / thay đổi quyền sử dụng tài nguyên của máy khách. Thường do vi rút gây ra;

· Đánh chặn thông tin trong máy khách. Ví dụ, dễ dàng thực hiện với lệnh UNIX SENDMAIL;

· Nắm bắt quyền hạn của máy khách. Điều này đạt được bằng cách giả mạo địa chỉ IP. Kiểu tấn công máy tính này được phát minh bởi Kevin Mitnick khi anh ta "hack" một trong những những máy tính cá nhân Chuyên gia Hệ thống An ninh Ts đờmo Shimura. Toàn bộ sự việc này được trình bày chi tiết trên tờ New York Times bestseller Showdown của S đờmo Shimura.

Mức độ bảo mật đầu tiên trong Java là kiến ​​trúc của chính ngôn ngữ, cấu trúc cú pháp và ngữ nghĩa của ngôn ngữ. Hơn nữa, cấu trúc của ngôn ngữ Java được xem xét từ quan điểm bảo mật.

Java là một ngôn ngữ hướng đối tượng hoàn chỉnh; mỗi cấu trúc dữ liệu riêng lẻ (và do đó bắt nguồn từ nó) là một đối tượng đầy đủ chức năng thực sự. Thực tế là mỗi cấu trúc dữ liệu nguyên thủy được đóng khung như một đối tượng đảm bảo sự hiện diện của tất cả các lợi thế lý thuyết của việc bảo vệ các ngôn ngữ OOP trong các chương trình được viết bằng Java, bao gồm cú pháp và ngữ nghĩa của chúng:

· Đóng gói và ẩn dữ liệu trong các khai báo riêng tư;

· Kiểm soát quyền truy cập vào cấu trúc dữ liệu, trong đó; chỉ các phương pháp công khai được sử dụng;

· Khả năng mở rộng và xây dựng thứ bậc của một cấu trúc chương trình phức tạp;

· Không có quá tải hoạt động.

Các lớp và phương thức có thể được khai báo cuối cùng, do đó ngăn chặn việc phân lớp con và ghi đè phương thức. Tuyên bố như vậy không khuyến khích các thay đổi độc hại đối với mã đã xác minh.

Vì lý do an toàn, việc đánh máy được kiểm tra cả tĩnh và động; điều này đảm bảo rằng kiểu khai báo thời gian biên dịch của đối tượng sẽ khớp chính xác với kiểu của đối tượng trong thời gian chạy, ngay cả khi có các chuyển đổi kiểu được thực hiện trên đối tượng đó. Kiểm soát chuyển đổi kiểu ngăn chặn việc cố tình giả mạo kiểu dữ liệu.

Tính năng này, được triển khai trực tiếp bằng ngôn ngữ Java, có lẽ là đảm bảo an ninh chính. Sự vắng mặt của con trỏ trong chương trình Java đảm bảo rằng tất cả các mục dữ liệu luôn có tên. Mọi cấu trúc dữ liệu đơn giản hoặc đoạn mã đều có một mã định danh cho phép bạn kiểm soát hoàn toàn nó.

Java là một ngôn ngữ đa luồng và cung cấp quyền truy cập trực tuyến an toàn vào các cấu trúc và đối tượng dữ liệu. Chương 14 thảo luận chi tiết về các luồng Java và cung cấp các ví dụ ứng dụng.

Mọi đối tượng trong Java đều có một mã băm duy nhất được liên kết với nó. Điều này có nghĩa là trạng thái của chương trình Java có thể được giám sát bất cứ lúc nào.

Tại thời điểm biên dịch, tất cả các biện pháp bảo vệ trong cú pháp Java đều được phân tích, bao gồm kiểm tra tính nhất quán giữa các khai báo riêng tư và công khai, các kiểu chính xác và khởi tạo tất cả các biến thành các giá trị được xác định trước.

Các lớp nguồn của Java được biên dịch thành các mã bytecodes. Trình xác minh bytecode thực hiện nhiều kiểm tra tính nhất quán và bảo mật trên mã đã biên dịch. Khi xác minh bytecodes, các thao tác sau được thực hiện:

· Kiểm tra sự tràn ngăn xếp và sự mất ý nghĩa của con trỏ ngăn xếp;

· Phân tích quyền truy cập vào các thanh ghi;

· Kiểm tra tính đúng đắn của các tham số mã byte;

· Phân tích các luồng bytecodes được tạo bởi các phương thức, đảm bảo tính toàn vẹn của ngăn xếp, kiểm tra các đối tượng nhận được và các đối tượng được trả về bởi các phương thức.

Các lớp Java được mô tả bên trong các gói. Tên lớp được liên kết với tên gói. Các gói đảm bảo rằng mã nhận được từ mạng khác với mã cục bộ. Thư viện lớp được chấp nhận không thể thay thế nhầm hoặc cố ý các thư viện cục bộ của các lớp được kiểm tra hoặc tiếp quản quyền của chúng, ngay cả khi các thư viện đó có những cái tên giống nhau... Nó cũng bảo vệ chống lại các tương tác ngẫu nhiên chưa được kiểm tra giữa các lớp cục bộ và các lớp được chấp nhận.

Ràng buộc muộnđảm bảo rằng địa điểm chính xác tài nguyên thời gian chạy xảy ra vào thời điểm cuối cùng. Liên kết muộn là một rào cản đáng kể đối với các cuộc tấn công bên ngoài vì các quy ước đặc biệt để cấp phát bộ nhớ cho các tài nguyên này.

Theo mặc định, cơ chế tải trực tiếp Java-ioiaccoB được sử dụng để tìm nạp lớp được chỉ định từ tệp nằm trên máy chủ cục bộ.

Bất kỳ cách tải lớp nào khác, bao gồm cả truyền qua mạng, đều yêu cầu một ClassLoader tương ứng. ClassLoader là một lớp con của lớp Java tiêu chuẩn ClassLoader, có các phương thức thực hiện tất cả các cơ chế nhất quán và bảo mật và chạy cho mỗi lớp mới được tải.

Vì lý do bảo mật, ClassLoader không thể thực hiện bất kỳ hành động nhìn trước nào trên các mã byte. Các mã byte có thể được lấy từ một chương trình Java được dịch bởi trình biên dịch Java hoặc trình biên dịch C ++ được sửa đổi để tạo ra các mã byte. Điều này có nghĩa là ClassLoader chỉ bắt đầu sau khi kiểm tra bytecode đến; lớp này chịu trách nhiệm tạo không gian tên cho mã được tải và giải quyết các tham chiếu đến tên lớp được định địa chỉ trong mã kết quả. Điều này tạo ra các không gian tên riêng biệt cho từng gói.

Trong C và C ++, lập trình viên cấp phát bộ nhớ một cách rõ ràng, giải phóng bộ nhớ và theo dõi tất cả các con trỏ đến bộ nhớ được cấp phát. Điều này thường làm phức tạp việc bảo trì chương trình và là một nguồn chính gây ra lỗi tham chiếu lơ lửng do sử dụng con trỏ null và phân bổ bộ nhớ không đúng và định vị giao dịch.

Không có con trỏ nào trong ngôn ngữ Java, vì vậy lập trình viên không phải quản lý bộ nhớ một cách rõ ràng. Việc phân bổ và phân bổ bộ nhớ được thực hiện tự động, theo cách có cấu trúc và khớp với kiểu chính xác. Thu gom rác (chống phân mảnh bộ nhớ) được sử dụng để giải phóng bộ nhớ không sử dụng thay vì các hoạt động theo chương trình rõ ràng. Điều này giúp loại bỏ khả năng xảy ra lỗi cấp phát bộ nhớ và các vấn đề bảo mật tiềm ẩn. Việc phân bổ và giải phóng bộ nhớ theo cách thủ công có thể dẫn đến các hoạt động sao chép, nhân bản và chiếm quyền bất hợp pháp của các đối tượng có thể truy cập, cũng như vi phạm tính toàn vẹn của dữ liệu.

Lớp SecurityManager là một công cụ cơ bản, có thể mở rộng để xây dựng hệ thống bảo mật và cung cấp cơ chế bảo mật cho các thành phần khác của ngôn ngữ Java, bao gồm các thư viện lớp và môi trường bên ngoài (ví dụ: các trình duyệt tương thích với Java và các phương thức phụ thuộc vào máy). Bản thân lớp SecurityManager không được sử dụng trực tiếp (theo mặc định, mỗi lần kiểm tra sẽ tạo ra một số loại ngoại lệ bảo mật); nó là một lớp cơ sở để tạo các lớp con triển khai một tập hợp các phương thức bảo mật nhất định.

Trong số các tính năng khác, lớp SecurityManager cung cấp các phương pháp để nhận dạng các quy trình kiểm tra bảo mật và các phương pháp để thực hiện các kiểm tra sau:

· Bảo vệ chống lại việc cài đặt thêm các trình nạp lớp ClassLoader;

· Khả năng liên kết các thư viện động (được sử dụng cho mã phụ thuộc vào máy);

· Đọc từ tệp các lớp và Ghi vào tệp các lớp;

· Tạo kết nối mạng;

Khả năng kết nối với một số cổng thông tin;

· Cho phép kết nối mạng đến;

· Tính sẵn có của một gói nhất định;

· Thêm một lớp mới vào gói.

Nguồn nguy hiểm chính đối với Java-nporpaMM là mã Java đến từ mạng và thực thi trên máy khách. Java-nporpaMMbi được vận chuyển như vậy được gọi là applet. Một ứng dụng Java có một tập hợp các tính năng và hạn chế được xác định rõ ràng ở cấp độ ngôn ngữ, đặc biệt là về cơ chế bảo mật.

Các hạn chế sau áp dụng cho các applet được tải xuống qua mạng:

· Bạn không thể tạo, đổi tên hoặc sao chép các tệp và thư mục của hệ thống tệp cục bộ;

· Bạn không thể tạo các kết nối mạng tùy ý, ngoại trừ các kết nối đến máy chủ mà từ đó các applet được đọc. Tên máy chủ của máy phải được chỉ định trong URL của trang HTML có chứa thẻ hoặc đặt trong thông số codebase của thẻ ... Địa chỉ IP dạng số của máy chủ không được phép.

Các hạn chế nghiêm ngặt được liệt kê về quyền truy cập vào hệ thống tệp cục bộ áp dụng cho các ứng dụng nhỏ chạy trong môi trường trình duyệt Netscape Navigator 3.0. JDK 1.0 Appletviewer ít hạn chế hơn và người dùng có thể xác định rõ ràng danh sách các tệp mà các applet có thể làm việc.

Applet có thể đọc một số thuộc tính hệ thống bằng cách gọi system.getProperty (khóa chuỗi). Các Applet trong Netscape 3.0 có quyền truy cập không giới hạn vào các thuộc tính này. Sun's JDK 1.0 Appletviewer cho phép bạn kiểm soát riêng quyền truy cập vào từng thuộc tính. Bàn 1.2 liệt kê thông tin được trả về cho những nghĩa khác nhau chìa khóa chính.

chương trình ứng dụng giao diện java

Bảng 1.2 Tính sẵn có của các biến hệ thống

Bàn 1.3 liệt kê các tùy chọn không có sẵn cho các applet trong môi trường trình duyệt Netscape 3.0. JDK 1.0 Appletviewer và trình duyệt HotJava cho phép người dùng kiểm soát quyền truy cập vào một số tài nguyên được chỉ định.

Bảng 1.3 Các biến hệ thống không có sẵn cho các applet

Hệ thống Java tải các applet theo hai cách. Applet có thể được chuyển qua mạng hoặc tải từ hệ thống tệp cục bộ. Cách một applet được tải sẽ xác định các khả năng mà nó cung cấp.

Từ quan điểm bảo mật, các applet cục bộ được phép làm những việc sau:

· Tải các thư viện trong máy khách;

· Thực hiện các quy trình bên ngoài trong máy cục bộ;

· Dừng hoạt động của máy ảo Java.

Vì vậy, Java có một lịch sử phát triển lâu dài và khó khăn, nhưng đã đến lúc xem xét điều gì đã xảy ra với những người sáng tạo, công nghệ này có những đặc tính nào.

Được biết đến rộng rãi nhất, đồng thời gây ra tranh luận sôi nổi nhất, tài sản nhiều- hoặc đa nền tảng... Người ta đã nói rằng nó đạt được thông qua việc sử dụng máy ảo JVM, là một chương trình thông thường được thực thi bởi hệ điều hành và cung cấp cho các ứng dụng Java tất cả các khả năng cần thiết. Vì tất cả các tham số JVM được chỉ định, nhiệm vụ duy nhất còn lại - thực hiện các máy ảo trên tất cả các nền tảng hiện có và được sử dụng.

Sự hiện diện của một máy ảo quyết định nhiều thuộc tính của Java, nhưng bây giờ chúng ta hãy đi sâu vào câu hỏi sau - Java là ngôn ngữ biên dịch hay thông dịch? Trên thực tế, cả hai cách tiếp cận đều được sử dụng.

Mã nguồn của bất kỳ chương trình Java nào được thể hiện bằng các tệp văn bản thông thường có thể được tạo trong bất kỳ trình soạn thảo văn bản hoặc công cụ phát triển chuyên dụng nào và có phần mở rộng .java. Các tệp này được đưa vào trình biên dịch Java, trình biên dịch này sẽ chuyển chúng thành mã byte Java đặc biệt. Chính bộ hướng dẫn nhỏ gọn và hiệu quả này được hỗ trợ bởi JVM và là một phần không thể thiếu của nền tảng Java.

Kết quả của công việc của trình biên dịch được lưu trong tệp nhị phân với phần mở rộng .class. Một ứng dụng Java bao gồm các tệp như vậy được đưa vào đầu vào của máy ảo, máy này bắt đầu thực thi chúng hoặc thông dịch chúng, vì bản thân nó là một chương trình.

Nhiều nhà phát triển lúc đầu chỉ trích gay gắt khẩu hiệu táo bạo của Sun “Viết một lần, chạy khắp nơi”, ngày càng bộc lộ nhiều mâu thuẫn và bất nhất trên nhiều nền tảng khác nhau. Tuy nhiên, phải thừa nhận rằng đơn giản là họ đã quá thiếu kiên nhẫn. Java chỉ mới ra đời và các phiên bản đầu tiên của các thông số kỹ thuật chưa đủ toàn diện.

Không lâu sau, Sun đã đi đến kết luận rằng chỉ xuất bản thông số kỹ thuật một cách tự do (như đã được thực hiện từ rất lâu trước Java) là không đủ. Cũng cần tạo ra các thủ tục đặc biệt để kiểm tra các sản phẩm mới về việc tuân thủ các tiêu chuẩn. Bài kiểm tra đầu tiên như vậy cho JVM chỉ có khoảng 600 lần kiểm tra, một năm sau số lượng của chúng tăng lên mười nghìn và tiếp tục tăng kể từ đó (chính bài kiểm tra này mà MS IE 4.0 không thể vượt qua cùng một lúc). Tất nhiên, các tác giả của máy ảo đã luôn cải tiến chúng, loại bỏ lỗi và tối ưu hóa công việc của chúng. Tuy nhiên, bất kỳ công nghệ nào, ngay cả một công nghệ đã được hình thành rất tốt, cũng cần có thời gian để tạo ra một quá trình thực hiện chất lượng cao. Java 2 Micro Edition (J2ME) hiện đang trải qua một lộ trình phát triển tương tự, nhưng nhiều hơn về sau.

Thuộc tính quan trọng nhất tiếp theo là hướng đối tượng Java, thuộc tính này luôn được đề cập trong tất cả các bài báo và thông cáo báo chí. Bản thân phương pháp tiếp cận hướng đối tượng (OOP) sẽ được thảo luận trong bài giảng tiếp theo, nhưng điều quan trọng cần nhấn mạnh là trong Java hầu hết mọi thứ đều được thực hiện dưới dạng đối tượng - luồng và luồng dữ liệu, kết nối mạng, làm việc với hình ảnh, với giao diện người dùng. ., xử lý lỗi, v.v. Rốt cuộc, bất kỳ ứng dụng Java nào cũng là một tập hợp các lớp mô tả các kiểu đối tượng mới.

Phần thảo luận chi tiết về mô hình đối tượng Java được thực hiện trong suốt khóa học, tuy nhiên, chúng tôi phác thảo các tính năng chính. Trước hết, những người sáng tạo đã từ bỏ đa kế thừa. Nó đã được quyết định rằng nó làm phức tạp quá mức và làm xáo trộn các chương trình. Ngôn ngữ sử dụng một cách tiếp cận thay thế - một loại "giao diện" đặc biệt. Nó được thảo luận chi tiết trong bài giảng tương ứng.

Hơn nữa, Java áp dụng gõ mạnh... Điều này có nghĩa là bất kỳ biến nào và bất kỳ biểu thức nào đều có kiểu đã được biết trước tại thời điểm biên dịch. Cách tiếp cận này được sử dụng để đơn giản hóa việc xác định các vấn đề, bởi vì trình biên dịch ngay lập tức báo cáo lỗi và chỉ ra vị trí của chúng trong mã. Việc tìm kiếm các ngoại lệ (exceptions - đây là cách các tình huống không chính xác được gọi trong Java) trong quá trình thực thi chương trình (thời gian chạy) sẽ yêu cầu kiểm tra phức tạp và nguyên nhân của lỗi có thể được tìm thấy trong một lớp hoàn toàn khác. Vì vậy, bạn cần phải nỗ lực nhiều hơn để viết mã, nhưng độ tin cậy của nó được tăng lên đáng kể (và đây là một trong những mục tiêu cơ bản mà ngôn ngữ mới được tạo ra).

Chỉ có 8 kiểu dữ liệu trong Java không phải là đối tượng. Chúng đã được định nghĩa ngay từ phiên bản đầu tiên và chưa bao giờ thay đổi. Đây là năm kiểu số nguyên: byte, short, int, long, cũng như ký tự char. Sau đó, hai kiểu phân số float và double, và cuối cùng là kiểu boolean. Những kiểu như vậy được gọi là đơn giản, hay nguyên thủy (từ nguyên thủy tiếng Anh), và chúng được thảo luận chi tiết trong bài giảng về kiểu dữ liệu. Tất cả các loại khác là đối tượng hoặc tham chiếu (eng. tài liệu tham khảo).

Vì một số lý do, cú pháp Java đã khiến nhiều người hiểu nhầm. Nó thực sự dựa trên cú pháp của các ngôn ngữ C / C ++, vì vậy nếu bạn nhìn vào mã nguồn của các chương trình được viết bằng các ngôn ngữ này và bằng Java, bạn sẽ không thể hiểu chúng được viết bằng ngôn ngữ nào ngay lập tức. ngôn ngữ nào. Vì một số lý do, điều này đưa ra nhiều lý do để nghĩ rằng Java là một C ++ đơn giản hóa với các tính năng bổ sung như bộ thu gom rác. Chúng ta sẽ xem xét trình thu gom rác tự động bên dưới, nhưng thật sai lầm khi nghĩ rằng Java là cùng một ngôn ngữ với C ++.

Tất nhiên, khi phát triển một công nghệ mới, các tác giả Java đã dựa vào một ngôn ngữ lập trình phổ biến vì nhiều lý do. Đầu tiên, bản thân họ coi C ++ là công cụ chính của họ vào thời điểm đó. Thứ hai, tại sao phải đưa ra một cái gì đó mới trong khi có một cái cũ hoàn toàn phù hợp? Cuối cùng, rõ ràng là cú pháp không quen thuộc sẽ khiến các nhà phát triển sợ hãi và làm phức tạp đáng kể việc giới thiệu một ngôn ngữ mới, và xét cho cùng, Java lẽ ra phải trở nên phổ biến càng nhanh càng tốt. Do đó, cú pháp chỉ được đơn giản hóa một chút để tránh các cấu trúc quá khó hiểu.

Nhưng, như đã đề cập, về cơ bản C ++ không phù hợp với các nhiệm vụ mới mà các nhà phát triển từ công ty Sun tự đặt ra, vì vậy mô hình Java đã được xây dựng lại và phù hợp với các mục tiêu hoàn toàn khác. Những bài giảng sâu hơn sẽ dần dần hé lộ những điểm khác biệt cụ thể.

Đối với mô hình đối tượng, nó được mô phỏng theo các ngôn ngữ như Smalltalk của IBM, hoặc ngôn ngữ Simula được phát triển từ những năm 60 tại Trung tâm Máy tính Na Uy, được nhắc đến bởi người tạo ra Java, James Gosling.

Một đặc tính quan trọng khác của Java - tính dễ học và phát triển - cũng nhận được những điểm gây tranh cãi. Thật vậy, các tác giả đã gặp khó khăn để cứu các lập trình viên khỏi những lỗi phổ biến nhất mà ngay cả những nhà phát triển C / C ++ có kinh nghiệm đôi khi cũng mắc phải. Và vị trí đầu tiên ở đây bị chiếm đóng bởi công việc với bộ nhớ.

Trong Java, ngay từ đầu, cơ chế thu gom rác tự động(từ người thu gom rác tiếng Anh). Giả sử chương trình tạo ra một đối tượng nào đó, làm việc với nó, và sau đó một khoảnh khắc đến khi nó không còn cần thiết nữa. Cần giải phóng bộ nhớ bị chiếm dụng để không ảnh hưởng đến hoạt động bình thường của hệ điều hành. Trong C / C ++, điều này phải được thực hiện rõ ràng từ chương trình. Rõ ràng, với cách tiếp cận này, có hai mối nguy hiểm - hoặc xóa một đối tượng mà người khác cần (và nếu nó thực sự được truy cập, sẽ xảy ra lỗi) hoặc không xóa một đối tượng đã trở nên không cần thiết, nghĩa là rò rỉ bộ nhớ, là chương trình bắt đầu ngốn RAM ngày càng nhiều.

Khi phát triển bằng Java, lập trình viên hoàn toàn không nghĩ đến việc giải phóng bộ nhớ. Bản thân máy ảo sẽ đếm số lượng tham chiếu đến mỗi đối tượng và nếu nó trở thành 0, thì một đối tượng như vậy sẽ được đánh dấu để xử lý bởi bộ thu gom rác. Vì vậy, lập trình viên chỉ phải đảm bảo rằng không có tham chiếu đến các đối tượng không cần thiết. Bộ thu gom rác là một chuỗi thực thi nền thường xuyên quét các đối tượng hiện có và loại bỏ những đối tượng không còn cần thiết. Từ chương trình, bạn không thể ảnh hưởng đến công việc của bộ thu gom rác theo bất kỳ cách nào, bạn chỉ có thể bắt đầu một cách rõ ràng lần vượt qua tiếp theo của nó bằng cách sử dụng chức năng tiêu chuẩn... Rõ ràng rằng điều này giúp đơn giản hóa rất nhiều việc phát triển các chương trình, đặc biệt là đối với các lập trình viên mới làm quen.

Tuy nhiên, các nhà phát triển có kinh nghiệm không hài lòng với thực tế là họ không thể kiểm soát hoàn toàn mọi thứ xảy ra với hệ thống của họ. Không có thông tin chính xác khi nào chính xác một đối tượng không cần thiết sẽ bị xóa, khi nào luồng thu gom rác sẽ bắt đầu hoạt động (và do đó chiếm tài nguyên hệ thống), v.v. Tuy nhiên, với tất cả kinh nghiệm của những lập trình viên như vậy, cần lưu ý rằng số lượng lớn các lỗi của các chương trình được viết bằng C / C ++ là do làm việc không chính xác với bộ nhớ, và đôi khi điều này xảy ra ngay cả với các sản phẩm phổ biến của rất các công ty nghiêm túc.

Ngoài ra, đặc biệt chú trọng đến việc dễ dàng làm chủ công nghệ mới. Như đã đề cập, nó được mong đợi (và những kỳ vọng này là chính đáng, để xác nhận tính đúng đắn của con đường đã chọn!) Java sẽ được sử dụng rộng rãi nhất có thể, ngay cả ở những công ty mà họ chưa bao giờ lập trình ở cấp độ như vậy trước đây ( các thiết bị gia dụng như máy nướng bánh mì và máy pha cà phê tạo trò chơi và các ứng dụng khác cho điện thoại di động Vân vân.). Cũng có một số cân nhắc khác. Sản phẩm dành cho người dùng thông thường, không phải lập trình viên chuyên nghiệp, cần phải đặc biệt đáng tin cậy. Internet đã trở thành World Wide Web vì những người dùng không chuyên đã xuất hiện, và khả năng tạo các applet cũng không kém phần hấp dẫn đối với họ. Họ cần một công cụ đơn giản để xây dựng các ứng dụng mạnh mẽ.

Cuối cùng, sự bùng nổ Internet của những năm 90 đã tạo được động lực và đưa ra các mốc thời gian phát triển mới, nghiêm ngặt hơn. Các dự án dài hạn, thường là trong quá khứ, không còn đáp ứng được nhu cầu của khách hàng, các hệ thống mới phải được tạo ra trong thời gian tối đa là một năm, hoặc thậm chí trong vài tháng.

Ngoài việc giới thiệu bộ thu gom rác, các bước khác đã được thực hiện để tạo điều kiện phát triển. Một số trong số chúng đã được đề cập đến - từ chối đa kế thừa, đơn giản hóa cú pháp, v.v. Khả năng tạo ứng dụng đa luồng đã được triển khai trong phiên bản Java đầu tiên (các nghiên cứu đã chỉ ra rằng điều này rất thuận tiện cho người dùng, và các tiêu chuẩn hiện hành dựa trên hệ thống teletype, đã lỗi thời trong nhiều năm trở lại đây). Các tính năng khác sẽ được thảo luận trong các bài giảng sau. Tuy nhiên, từ lâu người ta đã chấp nhận chung rằng việc xây dựng và duy trì hệ thống trong Java thực sự dễ dàng hơn trong C / C ++. Tuy nhiên, tất cả đều giống nhau, những ngôn ngữ này được tạo ra cho các mục đích khác nhau, và mỗi ngôn ngữ đều có những lợi thế riêng không thể chối cãi.

Thuộc tính quan trọng tiếp theo của Java là tính bảo mật. Sự tập trung ban đầu vào các ứng dụng phân tán, và đặc biệt là quyết định chạy các applet trên máy khách, khiến bảo mật trở thành ưu tiên hàng đầu. Có một loạt các biện pháp đang hoạt động trong bất kỳ máy ảo Java nào. Dưới đây chỉ là một mô tả ngắn gọn về một số trong số họ.

Đầu tiên, đây là các quy tắc làm việc với bộ nhớ. Người ta đã nói rằng việc xóa bộ nhớ được thực hiện tự động. Việc đặt trước của nó cũng được xác định bởi JVM chứ không phải bởi trình biên dịch hoặc từ chương trình một cách rõ ràng; nhà phát triển chỉ có thể chỉ ra rằng anh ta muốn tạo một đối tượng mới khác. Về nguyên tắc, con trỏ đến địa chỉ vật lý không có.

Thứ hai, sự hiện diện của trình thông dịch máy ảo giúp việc loại bỏ mã nguy hiểm ở mọi giai đoạn công việc trở nên dễ dàng hơn nhiều. Bytecode được tải đầu tiên vào hệ thống, thường ở dạng tệp lớp. JVM kiểm tra cẩn thận để đảm bảo rằng tất cả chúng đều tuân theo các quy tắc bảo mật chung của Java và chúng không được tạo ra bởi những kẻ tấn công thông qua một số phương tiện khác (và nếu chúng không bị hỏng khi chuyển tiếp). Sau đó, trong quá trình thực thi chương trình, trình thông dịch có thể dễ dàng kiểm tra tính hợp lệ của từng hành động. Khả năng của các lớp được tải từ đĩa cục bộ hoặc qua mạng khác nhau đáng kể (người dùng có thể dễ dàng gán hoặc xóa các quyền cụ thể). Ví dụ, các applet sẽ không bao giờ truy cập vào hệ thống tệp cục bộ theo mặc định. Những hạn chế dựng sẵn như vậy được tìm thấy trong tất cả các thư viện Java tiêu chuẩn.

Cuối cùng, có một cơ chế để ký các applet và các ứng dụng khác được tải xuống qua mạng. Chứng chỉ đặc biệt đảm bảo rằng người dùng đã nhận được mã đúng như nhà sản xuất đã cấp. Tất nhiên, điều này không cung cấp các biện pháp bảo vệ bổ sung, nhưng nó cho phép khách hàng từ chối làm việc với các ứng dụng từ các nhà sản xuất không đáng tin cậy hoặc ngay lập tức thấy rằng các thay đổi trái phép đã được thực hiện đối với chương trình. Trong trường hợp xấu nhất, anh ta biết ai phải chịu trách nhiệm về thiệt hại.

Tính tổng thể của các thuộc tính được mô tả của Java có thể khẳng định rằng ngôn ngữ này rất thích hợp cho sự phát triển của các ứng dụng Internet và mạng nội bộ (mạng nội bộ của công ty).

Cuối cùng, một đặc điểm phân biệt quan trọng của Java là tính năng động của nó. Ngôn ngữ này được hình thành rất tốt, hàng trăm nghìn nhà phát triển và nhiều công ty lớn đang tham gia vào quá trình phát triển của nó. Các giai đoạn chính của sự phát triển này được tóm tắt trong phần tiếp theo.

Vì vậy, chúng ta hãy tóm tắt. Nền tảng Java có những ưu điểm sau:

  • tính di động, hoặc đa nền tảng ;
  • hướng đối tượng, một mô hình đối tượng hiệu quả đã được tạo ra;
  • cú pháp C / C ++ quen thuộc;
  • mô hình bảo mật tích hợp và minh bạch;
  • định hướng cho các nhiệm vụ Internet, các ứng dụng mạng phân tán;
  • tính năng động, dễ phát triển và bổ sung các tính năng mới;
  • dễ học.

Nhưng không nên cho rằng học dễ hơn nghĩa là bạn không cần học một ngôn ngữ nào cả. Viết các chương trình thực sự tốt, xây dựng các hệ thống lớn, phức tạp, đòi hỏi bạn phải có hiểu biết vững chắc về tất cả các khái niệm và thư viện Java cơ bản được sử dụng. Đây là những gì khóa học này là về.

Các phiên bản và sản phẩm Java chính

Hãy đặt trước ngay sản phẩm ở đây có nghĩa là giải pháp phần mềm của Sun, là “triển khai tham chiếu”.

Vì vậy, Java lần đầu tiên được công bố vào ngày 23 tháng 5 năm 1995. Các sản phẩm chính có sẵn tại thời điểm đó ở dạng phiên bản beta là:

  • Đặc tả ngôn ngữ Java, JLS, đặc tả ngôn ngữ Java (mô tả từ vựng, kiểu dữ liệu, cấu trúc cơ bản, v.v.);
  • Đặc điểm kỹ thuật JVM
  • Bộ phát triển Java, JDK - Một công cụ dành cho nhà phát triển chủ yếu bao gồm các tiện ích, thư viện lớp tiêu chuẩn và bản trình diễn.

Đặc tả ngôn ngữ được viết tốt đến mức nó được sử dụng thực tế không thay đổi cho đến ngày nay. Tất nhiên, một số lượng lớn các giải thích rõ ràng, mô tả chi tiết hơn đã được thực hiện, một số tính năng mới được thêm vào (ví dụ, khai báo các lớp bên trong), nhưng các khái niệm cơ bản vẫn không thay đổi. Khóa học này chủ yếu dựa vào đặc tả ngôn ngữ.

Đặc tả JVM chủ yếu dành cho người tạo máy ảo và do đó hầu như không được các lập trình viên Java sử dụng.

JDK từ lâu đã trở thành một công cụ phát triển ứng dụng cơ bản. Nó không chứa bất kỳ trình soạn thảo văn bản nào, nhưng chỉ hoạt động đã Java hiện có-các tập tin. Trình biên dịch được đại diện bởi tiện ích javac (trình biên dịch java). Máy ảo được thực hiện bởi java. Để khởi chạy thử nghiệm các applet, có một tiện ích đặc biệt gọi là appletviewer. Cuối cùng, một công cụ javadoc được cung cấp để tự động tạo tài liệu từ mã nguồn.

Phiên bản đầu tiên chỉ chứa 8 thư viện tiêu chuẩn:

  • java.lang - các lớp cơ sở cần thiết cho hoạt động của bất kỳ ứng dụng nào (tên là chữ viết tắt của ngôn ngữ);
  • java.util - Nhiều lớp trợ giúp hữu ích
  • java.applet - các lớp để tạo các applet;
  • java.awt, java.awt.peer - thư viện để tạo giao diện người dùng đồ họa (GUI), được gọi là Bộ công cụ cửa sổ trừu tượng, AWT, được mô tả chi tiết trong Bài giảng 11;
  • java.awt.image - các lớp bổ sung để làm việc với hình ảnh;
  • java.io - làm việc với các luồng và tệp;
  • java.net - mạng.

Vì vậy, tất cả các thư viện bắt đầu bằng java, chúng là những thư viện tiêu chuẩn. Tất cả những thứ khác (bắt đầu bằng com, org, v.v.) có thể thay đổi trong bất kỳ phiên bản nào mà không cần hỗ trợ khả năng tương thích.

Phiên bản cuối cùng của JDK 1.0 được phát hành vào tháng 1 năm 1996.

Hãy ngay lập tức giải thích hệ thống đặt tên phiên bản. Ký hiệu phiên bản bao gồm ba chữ số. Đầu tiên luôn là 1. Điều này có nghĩa là nó được hỗ trợ. tương thích đầy đủ giữa tất cả các phiên bản 1.x.x. Nghĩa là, một chương trình được viết bằng JDK cũ hơn sẽ luôn thực thi thành công trên một JDK mới hơn. Khả năng tương thích ngược được duy trì bất cứ khi nào có thể - nếu chương trình được biên dịch bằng JDK mới hơn và không có thư viện mới nào được sử dụng, thì trong hầu hết các trường hợp, các máy ảo cũ sẽ có thể thực thi mã như vậy.

Chữ số thứ hai đã thay đổi từ 0 thành 4 (chữ số cuối cùng tại thời điểm khóa học được tạo). Trong mỗi phiên bản, có sự mở rộng đáng kể của các thư viện tiêu chuẩn (212, 504, 1781, 2130 và 2738 - số lớp và giao diện từ 1,0 đến 1,4), và một số tính năng mới cũng được thêm vào chính ngôn ngữ. Các tiện ích có trong JDK cũng đã thay đổi.

Cuối cùng, chữ số thứ ba cho biết sự phát triển của một phiên bản. Không có gì thay đổi trong ngôn ngữ hoặc thư viện, chỉ có lỗi được loại bỏ, tối ưu hóa được thực hiện, đối số tiện ích có thể được thay đổi (thêm). Vì vậy, phiên bản mới nhất của JDK 1.0 là 1.0.2.

Mặc dù với sự phát triển của phiên bản 1.x, tất nhiên, không có gì bị loại bỏ, một số hàm hoặc lớp không được dùng nữa. Chúng được tuyên bố là không dùng nữa và mặc dù chúng sẽ được hỗ trợ cho đến khi 2.0 được công bố (và chưa có thông tin gì về nó), nhưng chúng tôi không khuyến khích sử dụng chúng.

Cùng với thành công đầu tiên của JDK 1.0, những lời chỉ trích cũng đến. Những bất lợi chính được các nhà phát triển tìm thấy như sau. Đầu tiên, tất nhiên, là hiệu suất. Máy ảo đầu tiên rất chậm. Điều này là do JVM, trên thực tế, là một trình thông dịch, luôn chạy chậm hơn so với việc thực thi mã đã biên dịch. Tuy nhiên, việc tối ưu hóa thành công để loại bỏ lỗ hổng này vẫn còn ở phía trước. Khả năng khá kém của AWT, thiếu hoạt động với cơ sở dữ liệu và những thứ khác cũng đã được ghi nhận.

Vào tháng 12 năm 1996, một phiên bản mới của JDK 1.1 đã được công bố và phiên bản beta ngay lập tức được phát hành để truy cập miễn phí. Phiên bản cuối cùng được phát hành vào tháng 2 năm 1997. Những gì đã được thêm vào trong bản phát hành Java mới?

Tất nhiên, sự chú ý đặc biệt đã được chú ý đến hiệu suất. Nhiều phần của máy ảo đã được tối ưu hóa và viết lại bằng Assembler chứ không phải C như trước. Ngoài ra, kể từ tháng 10 năm 1996, Sun đã phát triển Sản phẩm mới- Trình biên dịch Just-In-Time, JIT. Nhiệm vụ của nó là dịch mã bytecode của chương trình sang mã "gốc" của hệ điều hành. Do đó, thời gian khởi động của chương trình tăng lên, nhưng có thể tăng tốc quá trình thực thi trong một số trường hợp lên đến 50 lần! Kể từ tháng 7 năm 1997, có một bản triển khai cho Windows và JIT được đưa vào JDK như một tiêu chuẩn với khả năng vô hiệu hóa.

Nhiều tính năng mới quan trọng đã được thêm vào. JavaBeans, một công nghệ được công bố vào năm 1996, cho phép bạn tạo các thành phần trực quan có thể dễ dàng tích hợp vào các công cụ phát triển trực quan. JDBC (Java DataBase Connectivity) cung cấp quyền truy cập vào cơ sở dữ liệu. RMI (Remote Method Invocation) giúp dễ dàng tạo các ứng dụng phân tán. Hỗ trợ ngôn ngữ quốc gia và bảo mật đã được cải thiện.

Trong ba tuần đầu tiên, JDK 1.1 đã được tải xuống hơn 220.000 lần và trong vòng chưa đầy một năm là hơn hai triệu lần. Hiện tại, phiên bản 1.1 được coi là hoàn toàn lỗi thời và sự phát triển của nó chỉ dừng lại ở 1.1.8. Tuy nhiên, do trình duyệt phổ biến nhất MS IE vẫn chỉ hỗ trợ phiên bản này nên nó vẫn tiếp tục được sử dụng để viết các applet nhỏ.

Ngoài ra, Sun bắt đầu cung cấp Java Runtime Environment (JRE) vào ngày 11 tháng 3 năm 1997. Trên thực tế, đây là cách triển khai tối thiểu của một máy ảo cần thiết để chạy các ứng dụng Java mà không cần trình biên dịch hoặc các công cụ phát triển khác. Nếu người dùng chỉ muốn chạy các chương trình, đây chính xác là những gì họ cần.

Như bạn có thể thấy, nhược điểm chính vẫn là hỗ trợ yếu cho giao diện người dùng đồ họa (GUI). Vào tháng 12 năm 1996, Sun và Netscape công bố thư viện mới IFC (Internet Foundation Classes), được phát triển hoàn toàn bằng Java bởi Netscape, được thiết kế chỉ để tạo một giao diện cửa sổ phức tạp. Vào tháng 4 năm 1997, có thông báo rằng các công ty đang có kế hoạch kết hợp AWT của Sun và IFC của Netscape để tạo ra một sản phẩm Java Foundation Classes mới, JFC, bao gồm:

  • cửa sổ cải tiến

Ngôn ngữ Java. Giới thiệu.

Trong một thời gian dài, thật khó để tưởng tượng một tạp chí máy tính không có bài báo về ngôn ngữ Java. Ngay cả những tờ báo và tạp chí nổi tiếng như The New York Times, The Washington Post và Business Week cũng viết về ông.

Không thể nhớ rằng đài phát thanh công cộng quốc gia (National Đài phát thanh công cộng) đã từng dành mười phút truyền tải cho một ngôn ngữ lập trình. Tốt hay xấu tùy theo quan điểm. Và khoản đầu tư 100 triệu USD vào việc sản xuất phần mềm được tạo ra bằng một ngôn ngữ lập trình cụ thể ?! Các công ty truyền hình CNN, CNBC và các phương tiện truyền thông khác phương tiện thông tin đại chúng họ chỉ nói chuyện, và họ vẫn nói về cách ngôn ngữ Java có thể và sẽ làm được điều đó.

Tuy nhiên, cuốn sách này dành cho những lập trình viên nghiêm túc, và vì Java là một ngôn ngữ lập trình nghiêm túc nên chúng ta có rất nhiều điều để nói. Vì vậy, chúng tôi sẽ không đi sâu vào phân tích những lời hứa quảng cáo và cố gắng tìm ra đâu là thật, đâu là hư cấu trong đó. Thay vào đó, chúng tôi sẽ mô tả Java như một ngôn ngữ lập trình đầy đủ chi tiết (tất nhiên, bao gồm các tính năng cho phép nó được sử dụng để làm việc trên Internet, trên thực tế, đã gây ra rất nhiều quảng cáo thổi phồng). Sau đó, chúng tôi sẽ cố gắng tách thực tế khỏi tưởng tượng bằng cách giải thích những gì ngôn ngữ Java có thể và không thể làm.

Lúc đầu, có một hố sâu giữa những lời hứa quảng cáo và khả năng thực sự của ngôn ngữ Java. Khi nó trưởng thành, công nghệ trở nên ổn định và đáng tin cậy hơn, và kỳ vọng giảm xuống mức hợp lý. Java hiện đang ngày càng được sử dụng nhiều hơn để tạo ra "phần mềm trung gian" duy trì giao tiếp giữa máy khách và tài nguyên máy chủ (chẳng hạn như cơ sở dữ liệu).

Mặc dù thực tế là những ứng dụng quan trọng không có gì đáng ngạc nhiên, đây là nơi mà ngôn ngữ Java đã chứng tỏ bản thân hữu ích nhất do tính độc lập với máy, khả năng đa luồng và lập trình mạng của nó. Ngoài ra, Java dẫn đầu trong các hệ thống nhúng, trở thành tiêu chuẩn thực tế thiết bị cầm tay, ki-ốt ảo, máy tính trên ô tô, v.v. Tuy nhiên, những nỗ lực đầu tiên để viết lại các chương trình phổ biến cho máy tính cá nhân bằng Java đã không thành công - kết quả là các ứng dụng trở nên tốn ít năng lượng và chậm chạp. Với sự ra đời của phiên bản mới, một số vấn đề này đã được giải quyết, nhưng phải thừa nhận rằng người dùng nói chung hoàn toàn không quan tâm đến ngôn ngữ viết các chương trình họ đã mua. Chúng tôi tin rằng những lợi ích chính của ngôn ngữ Java sẽ đến từ việc tạo ra các loại thiết bị và ứng dụng mới, thay vì viết lại các chương trình hiện có.

Ngôn ngữ Java như một công cụ lập trình

Làm thế nào ngôn ngữ lập trình Java vượt quá những lời hứa quảng cáo của nó. Không nghi ngờ gì nữa, đây là một trong những ngôn ngữ tốt nhất có sẵn cho các lập trình viên nghiêm túc. Java có tiềm năng trở thành một ngôn ngữ lập trình tuyệt vời, nhưng có lẽ bây giờ đã quá muộn. Khi một ngôn ngữ lập trình mới xuất hiện, ngay lập tức nảy sinh vấn đề khó tương thích với phần mềm đã tạo trước đó. Hơn nữa, ngay cả khi có thể thực hiện các thay đổi đối với các chương trình này mà không ảnh hưởng đến văn bản của chúng, thì rất khó để những người sáng tạo ra ngôn ngữ được công chúng hoan nghênh nhiệt liệt, chẳng hạn như Java, có thể nói thẳng: “Đúng, chúng tôi có thể đã một sai lầm trong việc phát triển phiên bản X, nhưng phiên bản Y sẽ tốt hơn. " Do đó, trong khi chờ đợi những cải tiến hơn nữa, chúng ta phải nói rằng cấu trúc của ngôn ngữ Java sẽ không thay đổi đáng kể trong tương lai gần.

Câu hỏi rõ ràng là: " Bạn đã cải thiện ngôn ngữ Java như thế nào?"Hóa ra điều này được thực hiện không phải bằng cách cải thiện bản thân ngôn ngữ lập trình, mà bằng cách thay đổi hoàn toàn các thư viện của các chương trình được viết bằng ngôn ngữ Java. Sun Microsystems đã thay đổi mọi thứ: bắt đầu bằng tên của các hàm thư viện riêng lẻ (làm cho chúng có ý nghĩa hơn) và các phương pháp làm việc của các mô-đun đồ họa (thay đổi cách chúng ta xử lý các sự kiện và viết lại một phần các chương trình làm việc), và kết thúc bằng việc tạo ra các tính năng ngôn ngữ mới, chẳng hạn như công cụ in, không có sẵn trong Java 1.0, dẫn đến nhiều nền tảng lập trình hữu ích hơn tất cả các phiên bản trước của ngôn ngữ Java.

Microsoft đã phát hành sản phẩm của riêng mình có tên là J ++, có liên quan đến ngôn ngữ Java. J ++ được Máy ảo Java (Java Virtual Machine) thông dịch khi thực thi bytecode, nhưng các ngôn ngữ có giao diện khác nhau với mã bên ngoài. Các ngôn ngữ J ++ và Java có cú pháp gần như giống nhau. Tuy nhiên, Microsoft đã tạo ra các cấu trúc ngôn ngữ bổ sung. Tất cả chúng đều có giá trị khá đáng ngờ, ngoại trừ Windows API. Ngoài thực tế là các ngôn ngữ này có cùng cú pháp, các thư viện cốt lõi của chúng (chuỗi, tiện ích, công cụ lập trình mạng, công cụ đa luồng, thư viện toán học, v.v.) về cơ bản là giống nhau.

Tuy nhiên, thư viện đồ họa, giao diện người dùng và quyền truy cập vào đối tượng từ xa những ngôn ngữ này hoàn toàn khác nhau. Microsoft hiện không còn hỗ trợ J ++, do đã phát triển một ngôn ngữ mới, C #, ngôn ngữ này có nhiều điểm chung với Java, nhưng sử dụng một máy ảo khác. Cuốn sách này không mô tả J ++ hoặc C #.

Ưu điểm của ngôn ngữ Java

1) Một trong những ưu điểm chính của ngôn ngữ Java là độc lập với nền tảng mà các chương trình được chạy: Có thể chạy cùng một đoạn mã trên Windows, Solaris, Linux, Machintosh, v.v.
Điều này thực sự cần thiết khi các chương trình được tải xuống qua Internet để thực thi sau này với các hệ điều hành khác nhau.

2) Một lợi thế khác là cú pháp của ngôn ngữ Java tương tự như cú pháp của ngôn ngữ C ++, và không khó đối với những lập trình viên biết ngôn ngữ C và C ++ để học nó... Đúng, đối với các lập trình viên biết ngôn ngữ Visual Basic, cú pháp này có thể không bình thường.

Nếu bạn chưa bao giờ lập trình bằng C ++, một số thuật ngữ được sử dụng trong phần này có thể không rõ ràng đối với bạn. Trong trường hợp này, bạn có thể bỏ qua nó. Khi bạn đi đến cuối Chương 6, các thuật ngữ này sẽ trở nên quen thuộc với bạn.

3) Ngoài ra, Java - hoàn toàn là ngôn ngữ hướng đối tượng, thậm chí còn hơn cả C ++... Tất cả các thực thể trong Java đều là các đối tượng, ngoại trừ một số kiểu nguyên thủy, chẳng hạn như số. (Vì dễ dàng phát triển các dự án phức tạp với lập trình hướng đối tượng, nó thay thế cho lập trình có cấu trúc cũ hơn. Nếu bạn chưa quen với lập trình hướng đối tượng, chương 3-6 sẽ cung cấp cho bạn mọi thứ bạn cần biết về nó.)

Tuy nhiên, nó là chưa đủ để phát triển một phương ngữ khác, được cải tiến một chút, của ngôn ngữ C ++. Về cơ bản, điều quan trọng là phát triển các chương trình không có lỗi trong Java dễ dàng hơn trong C ++. Tại sao? Các nhà phát triển Java đã suy nghĩ rất lâu tại sao các chương trình được viết bằng C ++ lại dễ bị lỗi như vậy. Họ đã cung cấp cho ngôn ngữ Java các phương tiện để loại bỏ khả năng tạo ra các chương trình che giấu các lỗi phổ biến nhất. Để làm điều này, ngôn ngữ Java đã thực hiện như sau.

4) Khả năng cấp phát rõ ràng và giải phóng bộ nhớ đã bị loại trừ.
Bộ nhớ Java được tự động lấy lại bằng cách thu gom rác. Lập trình viên được đảm bảo chống lại các lỗi liên quan đến việc sử dụng sai bộ nhớ.

5) Đã giới thiệu mảng true và số học con trỏ không được phép.
Về nguyên tắc, các lập trình viên không thể xóa dữ liệu khỏi bộ nhớ do sử dụng con trỏ không đúng cách.

6) Khả năng nhầm lẫn toán tử gán với toán tử so sánh bình đẳng đã được loại bỏ.
Bây giờ bạn thậm chí không thể biên dịch biểu thức if (ntries = 3). ... ... (Các lập trình viên Visual Basic có thể không nhận thấy bất kỳ vấn đề nào ở đây, vì lỗi này là nguồn gốc của hầu hết các hiểu lầm trong C và C ++).

7) Nhiều thừa kế bị loại trừ. Nó đã được thay thế bằng một khái niệm mới - một giao diện được vay mượn từ ngôn ngữ Objective C.
Giao diện cung cấp cho lập trình viên hầu hết mọi thứ mà lập trình viên có thể nhận được từ đa kế thừa, đồng thời tránh sự phức tạp của việc quản lý cấu trúc phân cấp lớp.

Đặc điểm của ngôn ngữ Java

Giản dị
Đã thông dịch
Được phân phối
Đáng tin cậy
An toàn
Máy độc lập
Hướng đối tượng
Hiệu suất cao
Đa luồng
Năng động
Kiến trúc máy tính độc lập

Chúng tôi đã đề cập đến một số điểm này trong phần trước. Trong phần này, chúng tôi sẽ: cung cấp các trích dẫn từ sổ tay ngôn ngữ Java tiết lộ các tính năng của ngôn ngữ này; Hãy để chúng tôi chia sẻ với độc giả những suy nghĩ của chúng tôi về các đặc tính nhất định của ngôn ngữ, dựa trên kinh nghiệm làm việc với phiên bản mới nhất của chúng tôi.

Giản dị

Chúng tôi muốn tạo ra một hệ thống dễ lập trình, không yêu cầu đào tạo thêm và có tính đến các tiêu chuẩn lập trình và thực hành đã được thiết lập. Do đó, mặc dù chúng tôi coi ngôn ngữ C ++ không phù hợp cho những mục đích này, nhưng ngôn ngữ Java đã được thiết kế để giống với nó nhất có thể để giúp hệ thống dễ tiếp cận hơn. Ngôn ngữ Java thiếu nhiều tính năng C ++ hiếm khi được sử dụng, tối nghĩa và khó hiểu, theo quan điểm của chúng tôi, gây hại nhiều hơn lợi.

Cú pháp Java về cơ bản là một phiên bản được làm sạch của cú pháp C ++. Ngôn ngữ này không có tệp tiêu đề, số học con trỏ (và chính con trỏ), cấu trúc, liên hợp, nạp chồng toán tử, lớp cơ sở ảo, v.v. (Sự khác biệt giữa Java và C ++ được mô tả trong các ghi chú C ++ rải rác trong sách.) Tuy nhiên, các nhà phát triển đã không tìm cách sửa chữa tất cả các thiếu sót của ngôn ngữ C ++.

Ví dụ, cú pháp của câu lệnh switch trong ngôn ngữ Java vẫn không thay đổi. Biết ngôn ngữ C ++, bạn sẽ dễ dàng chuyển sang cú pháp của ngôn ngữ Java.
Nếu bạn thường sử dụng môi trường lập trình trực quan (chẳng hạn như Visual Basic), thì ngôn ngữ Java sẽ có vẻ phức tạp đối với bạn.
Cú pháp của nó thường trông khá lạ (mặc dù không khó để hiểu ý nghĩa của biểu thức). Quan trọng hơn, ngôn ngữ Java yêu cầu lập trình nhiều hơn. Vẻ đẹp của Visual Basic là môi trường lập trình trực quan của nó cho phép bạn tạo cơ sở hạ tầng ứng dụng gần như tự động. Để đạt được kết quả tương tự với Java yêu cầu lập trình thủ công, nhưng dẫn đến các chương trình ngắn hơn nhiều.

Tuy nhiên, có một loại môi trường lập trình thứ ba cho phép bạn tạo các chương trình bằng công nghệ "kéo và thả".

Một khía cạnh khác của sự đơn giản là sự ngắn gọn. Một trong những mục tiêu của ngôn ngữ Java là cho phép phát triển các chương trình có thể được thực thi hoàn toàn độc lập trên các máy nhỏ. Trình thông dịch chính và các phương tiện hỗ trợ trong lớp có kích thước khoảng 40KB; thư viện tiêu chuẩn và các công cụ phân luồng (đặc biệt là kênh microkernel độc lập) mất 17: KB khác.
Đây là một thành công lớn. Tuy nhiên, lưu ý rằng các thư viện hỗ trợ GUI lớn hơn nhiều.

Hướng đối tượng

Nói một cách dễ hiểu, lập trình hướng đối tượng là một kỹ thuật lập trình tập trung vào dữ liệu (tức là các đối tượng) và các phương tiện truy cập chúng. Tương tự với nghề mộc, người thợ thủ công hướng đối tượng chủ yếu tập trung vào chiếc ghế mà anh ta làm, và chỉ thứ hai anh ta quan tâm đến các công cụ cần thiết để làm như vậy; đồng thời, người thợ mộc không hướng đối tượng chỉ nghĩ đến các công cụ của mình. Các thuộc tính hướng đối tượng của Java và C ++ về cơ bản là giống nhau.

Hướng đối tượng đã được chứng minh giá trị của nó trong hơn 30 năm qua, và nếu không có nó thì không thể hình dung được một ngôn ngữ lập trình hiện đại. Thật vậy, các tính năng hướng đối tượng của ngôn ngữ Java có thể so sánh với ngôn ngữ C ++. Sự khác biệt chính giữa chúng nằm ở cơ chế đa kế thừa, mà ngôn ngữ Java đã tìm ra giải pháp tốt nhất, cũng như trong mô hình siêu kính của ngôn ngữ Java.

Phản chiếu (Chương 5) và Tuần tự hóa đối tượng (Chương 12) cho phép bạn triển khai các đối tượng và công cụ liên tục để xây dựng giao diện người dùng đồ họa từ các thành phần sẵn có.

Nếu bạn chưa bao giờ lập trình bằng ngôn ngữ hướng đối tượng, hãy đọc kỹ Chương 4-6. Các chương này trình bày những kiến ​​thức cơ bản về lập trình hướng đối tượng và cho bạn thấy những lợi ích của việc phát triển các dự án phức tạp so với các ngôn ngữ hướng thủ tục, truyền thống như C hoặc Basic.

Được phân phối

Java có một thư viện lớn các chương trình để truyền dữ liệu dựa trên các giao thức TCP / IP (Transmission Control Protocol / Internet Protocol) như HTTP (Hypertext Giao thức chuyển giao- Giao thức truyền siêu văn bản) hoặc FTP (Giao thức truyền tệp). Các ứng dụng được viết bằng ngôn ngữ Java có thể mở và truy cập các đối tượng qua mạng bằng cách sử dụng vàURL (Vị trí tài nguyên đồng nhất) dễ dàng như một mạng cục bộ.

Ngôn ngữ Java cung cấp trải nghiệm web mạnh mẽ và dễ sử dụng. Bất kỳ ai đã từng cố gắng viết các chương trình làm việc trên Internet bằng các ngôn ngữ khác sẽ ngạc nhiên thú vị về việc các tác vụ khó nhất, chẳng hạn như mở kết nối mạng (kết nối ổ cắm), được giải quyết trong Java một cách dễ dàng như thế nào. Một cơ chế thanh lịch của cái gọi là servlet làm cho hoạt động của máy chủ cực kỳ hiệu quả.

Servlet được hỗ trợ bởi nhiều máy chủ Web phổ biến. (Mạng sẽ được đề cập trong Tập II.) Giao tiếp giữa các đối tượng phân tán trong Java được cung cấp bởi cơ chế gọi phương thức từ xa (chủ đề này cũng được đề cập trong Tập 2).

Đáng tin cậy

Ngôn ngữ Java được thiết kế để tạo ra các chương trình phải hoạt động đáng tin cậy trong mọi tình huống. Ngôn ngữ Java tập trung vào phát hiện lỗi sớm, kiểm tra động (trong quá trình thực thi chương trình) và các ngoại lệ dễ xảy ra lỗi ... Sự khác biệt đáng kể duy nhất giữa Java và C ++ là mô hình con trỏ Java, loại trừ khả năng ghi đè một phần của bộ nhớ và dữ liệu bị hỏng.

Thuộc tính này cũng rất hữu ích. Trình biên dịch Java phát hiện lỗi mà các ngôn ngữ khác chỉ tìm thấy trong thời gian chạy. Ngoài ra, các lập trình viên đã dành nhiều giờ tìm kiếm một lỗi gây ra hỏng bộ nhớ do một con trỏ không hợp lệ sẽ rất vui mừng vì về nguyên tắc, những vấn đề như vậy không thể phát sinh trong ngôn ngữ Java.

Nếu trước đây bạn đã lập trình bằng ngôn ngữ Visual Basic hoặc COBOL không sử dụng con trỏ một cách rõ ràng, bạn có thể không hiểu tại sao điều này lại quan trọng như vậy. Lập trình viên C kém may mắn hơn. Chúng cần con trỏ để truy cập chuỗi, mảng, đối tượng và thậm chí cả tệp. Khi lập trình bằng ngôn ngữ Visual Basic, không yêu cầu điều này và người lập trình không phải lo lắng về việc cấp phát bộ nhớ cho các thực thể này. Mặt khác, nhiều cấu trúc dữ liệu trong ngôn ngữ không phải là con trỏ rất khó thực hiện. Đối với các cấu trúc phổ biến như chuỗi và mảng, con trỏ không cần thiết. Tất cả sức mạnh của con trỏ chỉ được thể hiện khi chúng không thể được phân phối, chẳng hạn như khi tạo danh sách liên kết... Lập trình viên Java vĩnh viễn loại bỏ các con trỏ không hợp lệ, phân bổ sai vị trí và rò rỉ bộ nhớ.

An toàn

Ngôn ngữ Java được thiết kế để sử dụng trong môi trường mạng hoặc phân tán. Vì lý do này sự chú ý lớnđã được trả cho sự an toàn. Ngôn ngữ Java cho phép bạn tạo hệ thống được bảo vệ khỏi vi-rút và giả mạo.

Trong ấn bản đầu tiên, chúng tôi đã viết: “Đừng bao giờ nói không bao giờ” và chúng tôi đã đúng. Một nhóm các chuyên gia bảo mật tại Đại học Princeton đã phát hiện ra các lỗi bảo mật đầu tiên trong Java 1.0 ngay sau khi phiên bản đầu tiên của JDK được bán ra thị trường. Hơn nữa, cả họ và các chuyên gia khác vẫn tiếp tục và sau đó ngày càng phát hiện ra nhiều lỗi hơn trong cơ chế bảo mật của tất cả các phiên bản tiếp theo của ngôn ngữ Java.

Về mặt tích cực của tình huống này, nhóm phát triển ngôn ngữ Java đã tuyên bố không khoan nhượng đối với bất kỳ lỗi bảo mật nào và ngay lập tức bắt đầu khắc phục mọi vấn đề được tìm thấy trong cơ chế bảo mật của applet. Đặc biệt, bằng cách công bố các thông số kỹ thuật nội bộ của trình thông dịch Java, Sun đã giúp việc tìm ra các lỗi bảo mật ẩn dễ dàng hơn nhiều và đã cử các chuyên gia độc lập để tìm chúng.

Điều này làm tăng khả năng mọi lỗi trong hệ thống bảo mật sẽ sớm được phát hiện. Trong mọi trường hợp, việc đánh lừa hệ thống bảo mật của ngôn ngữ Java là cực kỳ khó. Các lỗi được tìm thấy cho đến nay hầu như rất nhỏ và (tương đối) ít về số lượng.

Trang web bảo mật của Sun tại URL sau: http://java.sun.com/sfaq/.

Dưới đây là một số tình huống mà hệ thống bảo mật Java ngăn chặn.

1) Tràn ngăn xếp của một chương trình thực thi được gây ra bởi một "con sâu" khét tiếng lan truyền trên Internet.

2) Thiệt hại cho các vùng bộ nhớ bên ngoài không gian được cấp phát cho tiến trình.

3) Đọc và ghi các tệp cục bộ bằng bộ nạp lớp bảo mật như trình duyệt web không cho phép truy cập tệp đó.

Tất cả các biện pháp bảo mật này đều phù hợp và thường hoạt động hoàn hảo, nhưng sự quyết đoán không bao giờ gây tổn hại. Mặc dù các lỗi được tìm thấy cho đến nay vẫn còn xa vời và các chi tiết về tìm kiếm của chúng thường được giữ bí mật, nhưng phải thừa nhận rằng có lẽ vẫn chưa thể chứng minh được sự an toàn của ngôn ngữ Java.

Theo thời gian, các biện pháp bảo vệ mới đã được thêm vào ngôn ngữ. Bắt đầu từ phiên bản 1.1, khái niệm về các lớp được ký số đã xuất hiện trong ngôn ngữ Java. Khi bạn sử dụng một lớp được ký điện tử, bạn có thể chắc chắn về tác giả. Nếu bạn tin tưởng nó, bạn có thể cấp cho lớp này tất cả các đặc quyền có sẵn trên máy của bạn.

Cơ chế phân phối mã thay thế của Microsoft dựa trên công nghệ ActiveX và chỉ sử dụng chữ ký số để bảo mật. Rõ ràng, điều này là chưa đủ - bất kỳ người dùng phần mềm Microsoft nào cũng có thể chứng thực rằng các chương trình từ các nhà sản xuất nổi tiếng thường bị lỗi, do đó gây ra nguy cơ hỏng dữ liệu. Bảo mật của Java đáng tin cậy hơn nhiều so với công nghệ ActiveX vì nó kiểm soát ứng dụng ngay từ khi khởi động và ngăn nó gây ra thiệt hại.

Kiến trúc độc lập

Trình biên dịch tạo ra một tệp đối tượng, định dạng của tệp này không phụ thuộc vào kiến ​​trúc của máy tính - chương trình được biên dịch có thể chạy trên bất kỳ bộ xử lý nào dưới sự kiểm soát của hệ thống thực thi chương trình Java. Để làm điều này, trình biên dịch Java tạo ra các lệnh mã byte không phụ thuộc vào kiến ​​trúc cụ thể của máy tính. Bytecode được thiết kế theo cách mà nó có thể dễ dàng được thông dịch trên bất kỳ máy nào hoặc được dịch sang mã phụ thuộc vào máy một cách nhanh chóng.

Đây không phải là một ý kiến ​​mới. Hơn 20 năm trước và trong hệ thống triển khai Ngôn ngữ Pascalđược phát triển bởi Niclaus Wirth và UCSD Pascal đã sử dụng cùng một công nghệ. Việc sử dụng mã bytecodes mang lại một lợi ích lớn trong quá trình thực thi chương trình (mặc dù việc biên dịch đồng bộ bù đắp cho nó trong nhiều trường hợp). Các nhà phát triển của ngôn ngữ Java đã hoàn thành xuất sắc việc phát triển một tập hợp các lệnh bytecode hoạt động tốt trên hầu hết các máy tính hiện đại, dễ dàng dịch thành các lệnh máy thực.

Máy độc lập

Không giống như các ngôn ngữ C và C ++, đặc tả Java không có các khía cạnh cụ thể về triển khai. Và kích thước của các loại dữ liệu cơ bản và các phép tính toán họcở trên chúng được xác định chính xác.

Ví dụ, int trong Java luôn có nghĩa là một số nguyên 32 bit. Trong C và C ++, kiểu int có thể có nghĩa là số nguyên 16 bit hoặc 32 bit, cũng như số nguyên có kích thước tùy ý, do nhà phát triển của một trình biên dịch cụ thể chọn. Hạn chế duy nhất là kích thước thuộc loại int không được nhỏ hơn kích thước của int ngắn và kích thước của int dài. Kích thước cố định kiểu số cho phép bạn tránh nhiều rắc rối liên quan đến việc thực thi các chương trình trên các máy tính khác nhau. Dữ liệu nhị phân được lưu trữ và truyền theo định dạng cố định, điều này cũng tránh hiểu nhầm liên quan đến thứ tự byte khác nhau trên các nền tảng khác nhau (xung đột "big endian / little endian"). Các dòng được lưu trong định dạng tiêu chuẩn Bảng mã Unicode.

Các thư viện, là một phần của hệ thống, xác định một giao diện độc lập với máy. Ví dụ, ngôn ngữ này cung cấp một Cửa sổ lớp trừu tượng và các triển khai của nó cho các hệ điều hành Unix, Windows và Macintosh.

Bất kỳ ai đã từng cố gắng viết một chương trình hoạt động tốt như nhau trên Windows, Macintosh và mười phiên bản Hệ thống Unix, biết rằng đây là một nhiệm vụ rất khó khăn. Phiên bản Java đã thực hiện một nỗ lực anh hùng để giải quyết vấn đề này bằng cách cung cấp một bộ công cụ đơn giản có thể điều chỉnh các phần tử giao diện người dùng phổ biến với nhiều nền tảng phần mềm khác nhau. Thật không may, thư viện, mất rất nhiều công sức, không cho phép chúng tôi đạt được kết quả có thể chấp nhận được trên các nền tảng khác nhau. (Hơn nữa, trên các nền tảng khác nhau trong chương trình đồ họa các lỗi khác nhau được hiển thị.)

Tuy nhiên, đây chỉ là khởi đầu. Trong nhiều ứng dụng, tính độc lập của máy quan trọng hơn nhiều so với sự tinh vi của giao diện người dùng đồ họa. Đây là những ứng dụng đã được hưởng lợi từ Java 1.0. Tuy nhiên, bộ công cụ giao diện người dùng đồ họa hiện đã được thiết kế lại hoàn toàn và không còn phụ thuộc vào giao diện người dùng trên máy tính chủ. Một phiên bản mới có ý nghĩa hơn và theo quan điểm của chúng tôi, hấp dẫn người dùng hơn những cái trước.

Đã thông dịch

Trình thông dịch Java có thể được gửi đến bất kỳ máy nào và thực thi bytecode trực tiếp trên đó. Vì chỉnh sửa liên kết là một quá trình dễ dàng hơn, nên việc phát triển phần mềm có thể trở nên nhanh hơn và hiệu quả hơn nhiều.

Đây có thể là một lợi thế khi phát triển các ứng dụng, nhưng trích dẫn là một sự phóng đại rõ ràng. Trong mọi trường hợp, trình biên dịch Java trong Bộ phát triển phần mềm Java (JSDK) khá chậm. (Một số trình biên dịch thuộc loại thứ ba, chẳng hạn như trình biên dịch của IBM, nhanh hơn nhiều.) Tốc độ biên dịch chỉ là một yếu tố đặc trưng cho hiệu quả của môi trường lập trình. Khi bạn so sánh tốc độ của Java so với Visual Basic, bạn có thể thất vọng.

Hiệu suất cao

Mặc dù các mã bytecodes được diễn giải thường không đủ hiệu suất, nhưng có những trường hợp yêu cầu hiệu suất thậm chí cao hơn. Bytecodes có thể được dịch nhanh chóng (trong thời gian chạy) thành mã máy cho một bộ xử lý cụ thể mà ứng dụng đang chạy.

Nếu một trình thông dịch được sử dụng để thực thi các mã byte, thì không nên sử dụng cụm từ "hiệu suất cao". Tuy nhiên, trên nhiều nền tảng có thể có một kiểu biên dịch khác, được cung cấp bởi các trình biên dịch đúng lúc-JIT. Họ dịch mã bytecode thành mã phụ thuộc vào máy, lưu trữ kết quả trong bộ nhớ, sau đó gọi nó khi cần thiết. Vì việc diễn giải chỉ được thực hiện một lần, nên cách tiếp cận này làm tăng tốc độ công việc lên gấp nhiều lần.

Mặc dù thực tế là trình biên dịch đồng bộ vẫn chậm hơn trình biên dịch phụ thuộc vào máy, nhưng trong mọi trường hợp, chúng nhanh hơn nhiều so với trình thông dịch, cung cấp tốc độ tăng gấp 10 hoặc thậm chí 20 lần cho một số chương trình. Công nghệ này không ngừng được cải tiến và cuối cùng nó có thể đạt đến tốc độ mà các trình biên dịch truyền thống không bao giờ có thể vượt qua. Ví dụ, một trình biên dịch đồng bộ có thể xác định đoạn mã nào đang được thực thi thường xuyên hơn và tối ưu hóa nó cho tốc độ thực thi.

MULTI-THREAD

Cung cấp khả năng tương tác và thực thi chương trình tốt hơn.

Nếu bạn đã từng thử tính toán đa luồng bằng bất kỳ ngôn ngữ lập trình nào khác, bạn sẽ ngạc nhiên thú vị về cách dễ dàng thực hiện điều này trong Java. Các luồng Java có thể tận dụng lợi thế của hệ thống đa xử lý nếu hệ điều hành cho phép. Thật không may, việc triển khai các luồng trên hầu hết các nền tảng rất khác nhau và các nhà phát triển ngôn ngữ Java không cố gắng đạt được sự đồng nhất. Chỉ có mã để gọi các luồng là giống nhau cho tất cả các máy; ngôn ngữ Java chuyển việc triển khai đa luồng sang hệ điều hành cơ bản hoặc thư viện luồng. (Các luồng được mô tả trong Tập II.) Bất kể, đó là sự dễ tổ chức máy tính đa luồng làm cho Java trở nên hấp dẫn đối với việc phát triển phần mềm máy chủ.

Năng động

Theo nhiều cách, Java năng động hơn C hoặc C ++. Nó đã được thiết kế để dễ dàng thích ứng với môi trường luôn thay đổi. Các phương thức và đối tượng mới có thể được thêm tự do vào thư viện mà không gây hại gì. Ngôn ngữ Java giúp bạn dễ dàng nhận được thông tin về tiến trình của một chương trình.

Điều này rất quan trọng khi bạn cần thêm mã vào một chương trình đang chạy. Một ví dụ điển hình về điều này là mã được tải xuống từ Internet để trình duyệt thực thi. Trong Java 1.0, không dễ dàng để có được thông tin về tiến trình của một chương trình đang được thực thi, nhưng phiên bản hiện tại của ngôn ngữ Java cho thấy cả cấu trúc và hành vi của các đối tượng của chương trình đang được thực thi cho người lập trình.
Điều này rất có giá trị đối với các hệ thống cần phân tích các đối tượng trong quá trình thực thi chương trình. Các hệ thống như vậy bao gồm trình tạo GUI, trình gỡ lỗi thông minh, trình cắm thêm và cơ sở dữ liệu đối tượng.

Java và Internet

Ý tưởng rất đơn giản - người dùng tải xuống các mã byte Java từ Internet và thực thi chúng trên máy của họ. Các chương trình Java chạy trên trình duyệt Web được gọi là applet. Để sử dụng applet, bạn cần một trình duyệt Web hỗ trợ Java có thể diễn giải các mã byte. Nguồn ngôn ngữ Java được cấp phép bởi Sun, khẳng định rằng cả bản thân ngôn ngữ và cấu trúc của các thư viện cốt lõi của nó đều không thay đổi. Thật không may, đây không phải là trường hợp trong thực tế. Các phiên bản khác nhau của trình duyệt Netscape và Internet Explorer hỗ trợ các phiên bản khác nhau của ngôn ngữ Java, một số phiên bản đã lỗi thời đáng kể. Tình huống đáng tiếc này ngày càng tạo ra nhiều trở ngại trong việc phát triển các applet tận dụng phiên bản mới nhất của ngôn ngữ Java. Để giải quyết vấn đề này, Sun đã phát triển một Trình cắm Java cho phép bạn tạo nhiều nhất môi trường hiện đạiđể chạy các chương trình Java dựa trên trình duyệt Netscape và Internet Explorer.

Tải một applet giống như nhúng một hình ảnh vào một trang Web. Applet trở thành một phần của trang và văn bản bao quanh không gian mà nó chiếm. Tuy nhiên, sự khác biệt là hình ảnh bây giờ đã sống động. Nó phản hồi các lệnh của người dùng, thay đổi giao diện của nó và truyền dữ liệu giữa máy tính mà applet được xem và máy tính đang chạy applet.

Tải một applet giống như chèn một bức ảnh vào một trang Web. Applet trở thành một phần của trang và văn bản bao quanh không gian mà nó chiếm. Điều đáng nói là hình ảnh rất "sống". Nó phản hồi thông tin đầu vào của người dùng, thay đổi giao diện và truyền dữ liệu giữa máy tính chạy applet và máy tính chạy applet.

Trong bộ lễ phục. 1.1 cho thấy một ví dụ điển hình trang web động thực hiện các phép tính phức tạp và sử dụng một applet để hiển thị các phân tử. Để hiểu rõ hơn về cấu trúc của phân tử, bạn có thể xoay nó hoặc phóng to hình ảnh bằng cách sử dụng chuột. Các thao tác như vậy không thể thực hiện được trên các trang Web tĩnh, nhưng các applet thì có thể thực hiện được. (Bạn có thể tìm thấy applet này tại http: //jmol.sourceforge.net.)

Cơm. 1.1. Ứng dụng jmol

Applet có thể được sử dụng để thêm các nút và trường văn bản mới vào một trang Web. Tuy nhiên, các applet này tải chậm qua đường dây điện thoại.

Điều tương tự cũng có thể được thực hiện với các biểu mẫu HTML động, Ngôn ngữ đánh dấu siêu văn bản (HTML) hoặc ngôn ngữ kịch bản như Ngôn ngữ JavaScript... Tất nhiên, các applet đầu tiên dành cho hoạt hình: quả địa cầu quay, nhân vật hoạt hình nhảy múa, văn bản huyền ảo, v.v. Tuy nhiên, hầu hết những thứ ở trên đều có thể tạo GIF động và HTML động, kết hợp với tập lệnh, làm được nhiều điều hơn các applet.

Do sự không tương thích của trình duyệt và tải không nhất quán qua các kết nối mạng chậm, các applet nhắm mục tiêu các trang Web không phải là một thành tựu to lớn. Trong các mạng cục bộ (mạng nội bộ) tình hình hoàn toàn khác. Chúng thường không gặp vấn đề về băng thông, vì vậy thời gian tải của các applet là không quan trọng. Trên mạng cục bộ, bạn có thể chọn trình duyệt mong muốn hoặc sử dụng chương trình Java Plug-In. Nhân viên không thể chuyển một chương trình được phân phối qua mạng tới nhầm chỗ hoặc cài đặt sai, và quản trị viên hệ thống không cần phải bỏ qua tất cả các máy khách và cập nhật chương trình trên chúng. Một số lượng lớn các chương trình được thiết kế để hạch toán hàng tồn kho, lên lịch đi nghỉ, hoàn trả tiền đi lại và những thứ tương tự đã được nhiều công ty phát triển dưới dạng các applet dựa trên trình duyệt.

Trong khi chúng tôi viết sách, con lắc lại dao động từ chương trình khách hàng hướng tới lập trình phía máy chủ. Cụ thể, các máy chủ ứng dụng có thể sử dụng khả năng giám sát của Máy ảo Java để tự động cân bằng tải, gộp các kết nối cơ sở dữ liệu, đồng bộ hóa các đối tượng, tắt và tải lại một cách an toàn và các quy trình khác cần thiết cho các ứng dụng máy chủ có thể mở rộng mà hầu như không thể thực hiện chính xác. Do đó, các lập trình viên tạo ra các ứng dụng đã có thể mua các cơ chế phức tạp này thay vì tự phát triển chúng. Điều này làm tăng năng suất của các lập trình viên - họ tập trung vào logic của chương trình của họ, mà không bị phân tâm bởi các chi tiết liên quan đến hoạt động của máy chủ.


2021, leally.ru - Hướng dẫn của bạn trong thế giới máy tính và Internet