Giới thiệu về lập trình với Java

Nội dung:

  • Chu trình phát triển chương trình với Java,
  • Môi trường lập trình Java,
  • Các loại chương trình ứng dụng độc lập và chương trình nhúng Applet .

Giới thiệu chung

Chu trình phát triển và thực hiện của chương trình viết bằng những ngôn ngữ truyền thống như C/C++ có thể được mô tả như sau:

Chu trình phát triển và thực hiện của chương trình C/C++

Chu trình phát triển và thực hiện của chương trình C/C++

  • Tuy nhiên để tối ưu hóa được chương trình dịch thì nó phải được thực hiện dựa trên một kiến trúc (tập các lệnh) xác định, nghĩa là phụ thuộc vào cấu hình của máy đích. Để tạo ra được sự độc lập tương đối thì chương trình của bạn phải dịch lại để phù hợp với kiến trúc máy mới mỗi khi bạn thay đổi môi trường thực hiện chương trình.
  • Mạng Internet cung cấp nhiều dịch vụ tiện lợi cho nhiều ứng dụng khác nhau, nhất là các ứng dụng trên mạng của công nghệ Web. Để đưa được các yếu tố lập trình lên mạng và kết hợp với Web thì không nên sử dụng các chương trình viết bằng C/C++, bởi vì:
    1. Vấn đề an toàn, an ninh dữ liệu trên mạng không đảm bảo,
    2. Các chương trình C/C++ được dịch sang một mã máy có cấu hình cố định vì vậy khi được nạp từ trên mạng xuống một máy có cấu hình khác sẽ không thực hiện được.
    3. Điều mà chúng ta muốn nhất hiện nay là cần có một ngôn ngữ thông dịch thật mạnh để khắc phục những nhược điểm trên, đặc biệt để phát triển được dễ dàng các ứng dụng với Web trên mạng.

Java vượt qua được các nhược điểm trên bằng cách dịch các chương trình nguồn sang ngôn ngữ máy ảo không phụ thuộc vào chip (hệ lệnh cụ thể) nào cả và sau đó khi cần thực hiện sẽ thông dịch sang hệ máy cụ thể. Kết quả của chương trình dịch là chuỗi các bytes cơ sở bao gồm các mã lệnh thực hiện (Opcode) và các tham số của máy lý thuyết (máy ảo), là máy Java ảo (JVM - Java Virtual Machine). Chương trình Java được thực hiện như sau:

Quá trình dịch và thông dịch chương trình Java

Quá trình dịch và thông dịch chương trình Java

Java giải quyết vấn đề tốc độ bằng cách dịch chương trình nguồn sang các mã byte (byte codes). Khi JVM thực hiện, nó sẽ tìm các đối tượng cần tham chiếu của các lớp trong chương trình chính (chương trình ứng dụng).

Quá trình phát triển chương trình Java

Tóm lại, C/C++ và Java là những ngôn ngữ nhằm những mục đích khác nhau. Đối với C/C++ cái chính là tốc độ, mạnh mẽ và uyển chuyển trong lập trình. Khi thực hiện chương trình C/C++ thì mọi việc của hệ thống phải bắt đầu và kết thúc ở một chương trình con đặc biệt, hàm main(). Chúng ta có thể sử dụng thư viện động, những thứ yêu cầu được liên kết lại khi cần, nhưng về tổng thể là phải định nghĩa và xác định ngay từ trước khi dịch.

Đối với Java mục đích chính là: đơn giản, thân thiện, hướng đối tượng và cách tân nhằm tạo ta những phần mềm độc lập với môi trường. Khi chạy một chương trình ứng dụng Java thì cần chỉ ra những lớp đối tượng mà bạn muốn chúng thực thi những công việc cần thực hiện và JVM sẽ nạp các lớp đó xuống khi có nhu cầu.

Môi trường Java

Java có thể dịch và thực hiện trong mọi môi trường điều hành, miễn là ở đó có chương trình thông dịch (máy Java ảo - JVM). Cơ chế xử lý các Web Site, Tại sao lại sử dụng Java cho công nghệ Web, Tổ chức thực hiện các dự án ứng dụng với Java.

Xử lý các Web Site

Một đặc trưng của Java được đặc biệt chú ý là khả năng nạp xuống (downloaded) Web theo yêu cầu và thực hiện chương trình ứng dụng trên các máy khách. VớiJava, Web được bổ sung thêm sự liên kết giữa các mẩu dữ liệu liên quan để biến đổi những dữ liệu thô thành những thông tin.

Java và Web

Độc lập với môi trường (Platform Independent)

Trước tiên các chương trình chạy trên Web đòi hỏi phải không phụ thuộc vào môi trường. Web phải mở đối với mọi người thông qua các giao thức(protocol) chuẩn để thực hiện trên mọi môi trường. Ngôn ngữ thông dịch rất phù hợp với mục đích của Web: Trình duyệt thông dịch các lệnh của HTML sang các tư liệu có khuôn dạng đẹp sinh động, đáp ứng theo mọi yêu cầu. Khi thực hiện chương trình, JVM nằm giữa phần cứng và chương trình ứng dụng, làm nhiệm vụ thông dịch các kết quả ở dạng mã byte vào môi trường của máy khách để thực hiện, do vậy đảm bảo được tính độc lập.

Đảm bảo an ninh (secure) thông tin

Bộ dịch Java đảm bảo không nạp các chương trình virus vào chương trình ứng dụng. Khi chương trình Java được nạp xuống theo yêu cầu của Web, nó kiểm soát tất cả các mã byte của chương trình được nạp xuống và đảm bảo rằng chúng phải tuân theo các qui định, các ràng buộc của ngôn ngữ. Mặt khác, lời gọi các phương thức trong mã byte không phải là các địa chỉ như trong các ngôn ngữ truyền thống mà là các tên gọi (thông qua định danh đối tượng). Trong Java, các đối tượng và các phương thức mô tả các hành vi của các đối tượng đều được xác định bằng định danh do vậy dễ dàng kiểm soát chúng và đảm bảo an ninh cao.

Đảm bảo an toàn (safe)

Nhiều khi sẽ rất là nguy hiểm nếu xảy ra các sự cố tràn bộ nhớ, vượt quá các chỉ số giới hạn. Java luôn kiểm soát được các tình huống đó. Hơn nữa, Java không sử dụng con trỏ (pointer) nên không cho phép nhảy tự do để thao tác tùy ý ở các vị trí bất kỳ trong bộ nhớ.

Thực hiện đa luồng (multithreads)

Web là môi trường mà ở đó có nhiều sự kiện có thể xảy ra đồng thời. Ngôn ngữ sử dụng để lập trình Web phải hỗ trợ để dễ dàng cho nhiều sự kiện có thể thực hiện cùng một lúc. Java đáp ứng được tiêu chuẩn đa luồng vì: Thứ nhất nó cung cấp các lớp có thể thực hiện như là các luồng được điều khiển riêng biệt. Thứ hai là Java tự thực hiện được sự kết hợp giữa các phần dị bộ trong các luồng với nhau.

Đảm bảo động (dynamic)

Các lớp không nhất thiết phải dịch và liên kết để tạo ra một tệp lớn có thể thực hiện ngay. Thay vì đó, lúc thực hiện Java có thể xác định những lớp nào cần thì nạp xuống, còn những lớp khác có thể để trên mạng và sau đó nạp chúng vào môi trường Java khi cần thiết. Bằng phương pháp như trên, các ứng dụng Java có thể gồm nhiều lớp được tổ chức phân tán trên mạng.

Đảm bảo tương đối nhỏ và gọn nhẹ

ý tưởng cơ sở của Java là ứng dụng có thể đặt ở trung tâm phục vụ (máy chủ) và sau đó được nạp về các máy trạm khi có yêu cầu để thực hiện công việc. Do vậy, các ứng dụng phải được tổ chức sao cho đủ nhỏ để việc trao đổi hiệu quả (nạp về nhanh) và dễ sử dụng với mọi người. Chương trình Java có thể tổ chức nhỏ được vì chúng có thể tổ chức theo nguyên lý “đòn bẩy”, nghĩa là các lớp có thể tổ chức thành các gói (package) và chúng sẽ được nạp về khi có nhu cầu.

Chuẩn hoá

Trong khi C/C++ là những ngôn ngữ chuẩn được xây dựng tốt, nhưng những bộ chương trình dịch khác nhau lại có thể cho những kết quả khác nhau. Java là ngôn ngữ chuẩn và luôn cho cùng một dạng cài đặt.

Bộ JDK (Java Developer Kit)

Hiện nay có nhiều môi trường hỗ trợ để phát triển phần mềm với Java như:

Visual J++, Symatec’s Cafe, Borland JBuilder, JDK, v.v. Bộ JDK do Sun cung cấp theo Web Site: http:// java.sun.com . Bộ JDK cung cấp các công cụ và các chương trình sau:

  1. javac Chương trình dịch chuyển mã nguồn sang mã byte.
  2. java Bộ thông dịch: Thực thi các ứng dụng độc lập, các tệp tin .class trực tiếp.
  3. appletviewer Bộ thông dịch: Thực thi các ứng dụng nhúng ( java applet ) từ tệp tin HTML mà không cần sử dụng trình duyệt như

Nestcape , hay Internet Explorer, v.v.

  1. javadoc Bộ tạo tài liệu dạng HTML từ mã nguồn cùng các chú thích bên trong.
  2. jdb Bộ gỡ lỗi ( java debuger ) cho phép thực hiện từng dòng lệnh, đặt điểm dừng, xem giá trị của các biến, v.v.
  3. javah Bộ tạo lập header của C và cho phép chương trình C gọi các phương thức (hàm) của Java và ngược lại.
  4. javap Trình dịch ngược Assembler. Hiển thị các phương thức, dữ liệu truy nhập được bên trong của tệp tin .class đã được dịch và hiển thị nghĩa của byte code.

Các dạng chương trình ứng dụng của Java

Có ba loại chương trình có thể phát triển với Java:

  • Các chương trình ứng dụng độc lập,
  • Các chương trình ứng dụng nhúng (applet) ,
  • Các chương trình kết hợp cả 2 loại trên.

Trình soạn thảo chương trình Java

Để viết chương trình Java chúng ta có thể sử dụng những hệ soạn thảo phổ dụng như NotePad, WordPad, TextPad, JCreatorv.v. Hệ soạn thảo đơn giản và thích hợp nhất có lẽ là TextPad. Bạn có thể nạp version mới nhất của TextPad từ địa chỉ của Web Site trên Internet: http://www.textpad.com .

Chương trình ứng dụng độc lập

  • Chương trình ứng dụng độc lập là một chương trình nguồn mà sau khi dịch có thể thực hiện trực tiếp. Chương trình độc lập bắt đầu và kết thúc thực hiện ở main() giống như trong chương trình C/C++.
Khi xây dựng một ứng dụng độc lập cần lưu ý:
  1. Tạo lập một lớp được định nghĩa bởi người sử dụng có phương thức main() gọi là lớp chính và đảm bảo nó được định nghĩa đúng theo mẫu qui định;
  2. Kiểm tra xem liệu tệp chương trình có tên trùng với tên của lớp chính và đuôi “.java” hay không;
  3. Dịch tệp chương trình để tạo ra các tệp mã byte code với các đuôi “.class” tương ứng;
  4. Sử dụng chương trình thông dịch của Java để chạy chương trình đã dịch
Chương trình ứng dụng độc lập

Bài toán: Xây dựng lớp Hello.java.

// Hello.java public class Hello { public static void main(String args[]) { System.out.println(“Chao ban”); } }

Tệp chương trình Hello.java có tên trùng với tên của lớp Hello, trong đó có hàm main(). Hàm này luôn có dạng:

public static void main(String args[]) { // Nội dung thực hiện của chương trình }
  • Dịch và thực hiện chương trình Hello.java
  • javac Hello.java
  • Kết quả của lệnh dịch trên là hai tệp Hello .class, chứa mã byte code của lớp tương ứng.
  • java Hello
  • Kết quả thực hiện của chương trình:
  • Chao ban
  • Khi thực hiện với Java thì chỉ cần viết tên lớp chứa hàm main() và không cần đưa thêm đuôi .class, Khi soạn thảo chương trình nên tạo ra một thư mục riêng, ví dụ c:\users\thuctap để ghi chương trình nguồn (Hello). Tất cả những tệp lớp (.class) đều được tạo ra ở thư mục chứa chương trình nguồn
  • Phải chỉ rõ thư mục chứa các chương trình dịch, thông dịch javac.exe, java.exe. Thường các chương trình này được cài đặt và được lưu ở thư mục, ví dụ c:\jdk1.4\bin\java. Mọi lớp trong Java đều mặc định xem là lớp con của lớp Object được xây dựng sẵn trong gói java.lang và gói này cũng được xem là mặc định sử dụng mà không cần nhập (import) vào như các gói khác khi sử dụng các lớp chứa trong đó.

Chương trình ứng dụng nhúng Applet

Phần ứng dụng nhúng Applet chỉ tham khảo

Applet là loại chương trình Java đặc biệt mà khi thực hiện phải được nhúng vào chương trình ứng dụng khác như các trình duyệt Web Browser , hoặc appletviewer của JDK.

Java Applet

Bài toán: Nhiệm vụ tương tự như bài toán ở ví dụ 1 nhưng thực hiện theo applet

// Hello.java import java.applet.Applet; // Nhập thư viện chứa lớp Applet import java.awt.Graphics; // Nhập thư viện chứa lớp Graphics // Mọi chương trình applet đều có phần mở rộng (extends), kế thừa từ lớp Applet public class Hello extends Applet{ public void init(){ // (1) } // Nạp chồng hàm paint() để hiển thị (vẽ) các thông báo của applet public void paint(Graphics g){ // (2) g.drawString("Chao ban", 25, 25); } }

Lớp Applet (tên đầy đủ java.applet.Applet) trong thư viện các lớp Java chuẩn (ở gói java.applet) cung cấp khuôn dạng và các chức năng chính để phát triển các applet.Trong lớp AppletApp có hai hàm thành phần: init(), paint() được kế thừa từ lớp Applet nhưng được nạp chồng để thực hiện việc đảo ngược xâu và hiển thị thông tin của applet được tạo ra trên màn hình.Chú ý thấy ở đây hàm main() là không cần thiết đối với applet.

Dịch và chạy chương trình Hello

  • Dịch chương trình Hello
  • javac Hello.java
  • Kết quả chúng ta cũng có tệp lớp Hello.class
  • Chương trình applet phải được đưa vào trang tư liệu theo dạng HTML (HyperText Markup Language) để sau đó nạp được xuống thông qua Web Browser hoặc appletviewer của JDK. Tệp HTML chứa các thông tin tương ứng về tên tệp lớp ứng dụng applet và những thông tin khác cần nạp applet xuống để thực hiện. Tên của tệp lớp applet, kích cỡ của applet tính theo pixel.
    <applet code = “Hello.class” width = 200 height = 300 > </applet>

    Tệp này được soạn bằng hệ soạn thảo bất kỳ và được ghi với tên gọi Hello.html.appletviewer Hello.html

Kết quả thực hiện của chương trình applet:

Thực hiện chương trình applet với chương trình thông dịch appletvewer

Chu trình hoạt động của applet

Chương trình ứng dụng applet được thực hiện như sau:

  • Khi một applet được nạp và chạy bởi Web Browser thì nó sẽ gửi thông điệp init() cùng với các dữ liệu, kích thước của Window để chương trình applet khởi động. Khi bắt đầu thực hiện, Web Browser thông báo cho applet bắt đầu bằng cách gọi phương thức start().
  • Khi rời khỏi trang Web có chứa applet thì chương trình applet này nhận được thông điệp stop() để dừng chương trình.
  • Hoạt động của chương trình applet được mô tả như trong hình H2.5, trong đó:
    • init(): Phương thức này được gọi khi applet được nạp lần đầu và được xem như là toán tử tạo lập cho applet,
    • start(): Được gọi khi applet bắt đầu thực hiện, xuất hiện khi:
      • applet được nạp xuống,
      • applet được duyệt lại.
    • stop(): Được gọi khi applet dừng thực hiện, nhưng chưa bị xoá khỏi bộ nhớ,
    • destroy(): Được gọi ngay trước khi applet kết thúc, khi trình duyệt Web Browser tự đóng lại và applet bị xóa khỏi bộ nhớ. Trình duyệt Web Browser tìm chương trình applet

    Chu trình hoạt động của applet

Chương trình ứng dụng ở dạng Applet lẫn dạng độc lập

Java cho phép xây dựng chương trình chạy được cả ở Web Browser lẫn như một ứng dụng độc lập. Một chương trình như thế phải: Định nghĩa lớp ứng dụng mở rộng, kế thừa từ lớp Applet,Trong lớp ứng dụng phải có hàm main().

Chương trình chạy được cả với Web Browser và chạy độc lập

import java.awt.Graphics; // XinChao.java import java.awt.Frame; import java.applet.Applet; public class XinChao extends Applet{ public void init(){ resize(200,160); // Đặt lại kích thước } public void paint(Graphics g){ g.drawString(“Xin chao cac ban!”, 60, 25); } // Hàm main() đảm bảo chương trình sẽ chạy được độc lập public static void main(String args[]){ XinChao h = new XinChao();//Tạo ra một đối tượng của XinChao h.init(); Frame f = new Frame(“Chao Mung va Applet”); f.resize(200, 160); f.add(“Center”, h); f.show(); } }

Tất nhiên để chương trình XinChao chạy được với Web Browser thì phải đưa vào tệp HTML (tệp XinChao.html ) tương tự như ví dụ 2.

Tóm lại chương trình viết bằng Java có thể:

  • Là các ứng dụng độc lập
  • Là các chương trình ứng dụng nhúng applet
  • Hoặc kết hợp cả hai loại trên.
Nội dung ứng dụng độc lập Java Applet
Khai báo Là lớp con của bất kỳ lớp nào trong các gói thư viện các lớp Phải là lớp con củaApplet
Giao diện đồ họa Tùy chọn Do trình duyệt Web quyết định
Yêu cầu bộ nhớ Bộ nhớ tối thiểu Bộ nhớ dành cho cả trình duyệt và applet đó
Cách nạp chương trình Nạp bằng dòng lệnh Thông qua trang Web
Dữ liệu vào Thông qua các tham số trên dòng lệnh Các tham số đặt trong tệp HTML gồm địa chỉ, kích thước của trình duyệt
Cách thức thực hiện Mọi hoạt động được bắt đầu và kết thúc ở main() như trong C/C++ Gọi các hàm: init(),start(), stop(), destroy(),paint()
Kiểu ứng dụng Ứng dụng trên các máy chủ Server, công cụ phát triển phần mềm, ứng dụng trên các máy khách Các ứng dụng trên Web

Bài tập

  1. Cài đặt JDK lên máy vơí đường dẫn cần thiết để biên dịch và thông dịch các chương trình Java trong chương này .
  2. Cài đặt JCreator hoặc TextPad để biên dịch và thực thi trong môi trường này
  3. Tìm hiểu về cách thiết lập môi trường tương ứng với các hệ soạn thảo mã lệnh Java.
  4. Cải biên các ví dụ trên thành những ví dụ sinh động hơn. hợp với bản thân hơn.