1. Trang chủ >
  2. Công nghệ thông tin >
  3. Đồ họa >

Java và những hứa hẹn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (898.2 KB, 120 trang )


copy v..v sẽ đợc máy tính trợ giúp, tức là Sun muốn tất cả các máy tính đều chạy

Java. Bởi vì các chip đợc chạy trên mã byte code, nên nó không cần biên dịch

just- in -time. Các thiết bị sẽ không cần màn hiển thị, bộ nhớ lớn và nối kết mạng

Internet.

Sun Microelectronics gọi kiến trúc chip đầu tiên là Java One. Hiện nay Sun

đã có hai họ chip là microJava và ultraJava. MicroJava đợc sử dụng với mục đích

cung cấp cho các thị trờng trong lĩnh vực điều khiển. UltraJava có mục đích cung

cấp cho các workstation. Cơ sở của kĩ thuật này là một ngăn xếp super-scalar dựa

vào tập chỉ dẫn rút gọn của máy tính (RISC) gọi là picoJava. Đợc gọi là superscalar bởi vì nó thi hành kênh bốn trạng thái cho phép các phần khác nhau của

bộ xử lí làm bốn nhiệm vụ khác nhau cùng một lúc. Gọi là RISC bởi vì nó thực

thi hầu hết các chỉ dẫn trong một chu kì đồng hồ. Tính toán trong một kênh của

super-scalar giống nh các dòng assembly. Dữ liệu đợc xử lí dòng nọ tiếp dòng

kia. Trên hình 1.1 chỉ ra các kênh, khi đợc điền, sẽ cho phép picoJava tìm thấy,

giải mã, thi hành, và lu giữ sau đó trả lại kết quả. Trong quá trình tìm, picoJava

sử dụng bốn byte cache đa vào ngăn xếp. Ngăn xếp là tập hợp 64 thanh ghi 32

bits trên một chip. Sau khi lu trên chip, RAM đợc sử dụng để thực hiện cùng với

ngăn xếp.



Hình 1.1 Kênh picoJava bốn trạng thái



1.2 Java: u điểm và nhợc điểm



Ưu điểm





Java là một ngôn ngữ định kiểu mạnh. Tất cả các tên của lớp đều đợc xác

định kiểu và sử dụng để kiểm tra mọi sự tham chiếu tới lớp khi đ ợc thông

qua nh một đối số của phơng thức. Hầu hết các ngôn ngữ bậc cao hiện nay

đều có đặc điểm này, mặc dù kiểu C cũ thì lại tránh điều đó.







Java thì nhỏ: Java dựa trên kiểu biên dịch mã byte (byte code). Chứa cả

microkernel của chính nó, biên dịch mã byte cộng thêm lớp phụ là 215KB.

Điều này là một hoạt động có hiệu quả. Có nghĩa là biên dịch mã byte có thể

nằm gọn trong ROM và đa ra các microcontroller để chạy chơng trình java.

8







Java là dễ dàng dịch chuyển: Java là một ngôn ngữ đa nền (multi-platform).

Khẩu hiệu của Java là viết một lần chạy mọi nơi (Write Once, Run

Anywhere). Bởi vì ở đây chỉ xác định có một máy ảo, Java đa ra một giao

diện lập trình không chuẩn tắc tới các applet và các ứng dụng trên mọi phần

cứng. Nền Java là lí tởng cho Internet, ở đó chơng trình có thể đợc chạy trên

mọi máy tính trong mạng. Khi ta biên dịch mã nguồn của Java, ta phải thực

thi trên các mã byte (byte code). Mã byte đợc tạo thành bởi trình biên dịch

của Java và cấu trúc nên các chỉ dẫn tới Java virtual machine. Java là một

ngôn ngữ dễ dịch chuyển cho phép chạy trên mọi phần cứng mà máy ảo

Java có thể chạy. Mã byte lu trong file .class, đợc nạp tới máy ảo Java và

chứa cả biên dịch mã byte. Trên hình 1.2 là mối quan hệ giữa chơng trình

Java và phần cứng.



Hình 1.2





Java là hớng đối tợng: Java là ngôn ngữ lập trình hớng đối tợng. Trong mô

hình hớng đối tợng, một biến kiểu đối tợng chứa các dữ liệu cũng nh các

thuật toán cần thiết để thao tác với dữ liệu. Ngợc lại một ngôn ngữ lập trình

không hớng đối tợng là ngôn ngữ lập trình coi các biến nh một đối số tham

chiếu tới thủ tục. Không giống nh Pascal, C, Fortran, C++, Java không có

hàm (function). Trong Java tất cả các phơng thức (method) đều nằm trong

các lớp (classes). C++ là một ngôn ngữ có mở rộng về hớng đối tợng. Điều

này có nghĩa là ngời lập trình không hớng đối tợng có thể viết đợc trong C+

+, nhng một điều nh vậy không đợc cho phép trong Java.







Java không có con trỏ: Java thì crash-proof hơn C, C++ và Pascal - một đặc

điểm tốt hơn. Lí do là Java không cung cấp một kĩ thuật nào cho phép thao

tác với con trỏ một cách trực tiếp. Do đó không có cách cho ngời lập trình

thao tác với địa chỉ bộ nhớ. Theo nhiều cách khác nhau một con trỏ không

đúng có thể gây lỗi cho bộ nhớ hay chơng trình. Chúng ta không đủ không

gian nhớ để liệt kê tất cả chúng. Chúng ta có thể cảm ơn rằng java không có

con trỏ.







Java không có Multiple Inheritance: đa kế thừa đã đợc biết tới trong C++,

nhng đợc loại bỏ trong Java. Đa kế thừa là tính chất có hai hay nhiều lớp cơ

sở trực tiếp bên dới một lớp. Vấn đề đặt ra đối với đa kế thừa là sự chồng

chéo các tên phơng thức cũng nh các biến, chúng phải trùng tên nhau dựa

9



theo một quy tắc của ngôn ngữ và dờng nh thờng xuyên bị quên bởi các ngời

lập trình. ở đây chỉ có một kiểu kế thừa đợc cho phép là kiểu a-kind-of

(AKO). Trên hình 1.3 là một ví dụ kiểu kế thừa AKO.





Java có Garbage Collection: Java có phép lu trữ tự động bao gồm cả kĩ thuật

thu rác (rác đợc xem là các dữ liệu không còn giá trị sử dụng). Thu rác cho

phép máy ảo Java giành lại bộ nhớ đợc sử dụng bởi các biến bị loại bỏ. Để

thực hiện thu rác trong chơng trình ta sử dụng phơng thức gc() thuộc lớp

System và viết nh sau System.gc(). Nh vậy bạn không phải lo lắng về việc

giữ lại các dấu vết của bộ nhớ.

Animal

Mamal



Bird



Reptile



Human

Student



Professor

Hình 1.3







Java có các th viện lớp nền tảng: Java có các th viện nền tảng chứa

Abstract Window Toolkit (AWT). AWT cho phép giao diện ngời dùng

đồ hoạ kiểu hớng đối tợng đợc thay đổi trong các chơng trình. Th viện gồm

có tám gói chính và số lợng ngày càng tăng. Gói input/output

java.io cho phép thao tác với dữ liệu vào và ra. Gói mạng java.net ,

cho phép thao tác với các socket và URL. Gói tiện ích java.util cho phép

tthực hiện một số thao tác với hệ điều hành nh xem ngày tháng, thời gian,

số ngẫu nhiên,v..v



Nhợc điểm





Đôi khi thu rác là một việc làm ít hiệu quả: mặt hạn chế của việc thu rác nh

sau. Thu rác có thể dẫn tới chơng trình không quyết định đợc thời gian chạy.

Đối với hệ thống lớn, thu rác có thể sử dụng một lợng thời gian xác định nào

đó của bộ vi xử lý.







Java không phải là một ngôn ngữ hớng đối tợng thuần tuý. Chúng ta không

có khả năng tạo ra các instance của kiểu dữ liệu primative. Các kiểu dữ liệu

cơ bản trong Java là boolean, int, long, float, double, char

và byte. Ngợc lại trong Smalltalk thì tất cả các kiểu dữ liệu đều là các lớp.







API thiếu nhiều đặc trng: java thiếu các đặc trng có tính chất chìa khóa cho

một vấn đề. Ví dụ nó không cho phép chúng ta lập trình với các cổng nối

tiếp (cho dù hầu hết các máy tính đều có ít nhất một cổng) cũng nh không

cho phép đa ra máy in nếu đang ở trong một chơng trình Java. Java là một

ngôn ngữ mới, và bởi vì các đặc trng còn thiếu trong API, Java có thể không

dễ dàng sử dụng cho một số các ứng dụng nào đó.

10







Java không có phơng thức đảo cung cấp cho C++: có thể chúng ta muốn mở

rộng các đặc trng của Java API bằng cách lập trình trên một ngôn ngữ khác.

Thật không may là ngôn ngữ lựa chọn này chỉ có giới hạn là C. Không có

cách nào nối giữa Java và C++, một phần có thể do vấn đề về name-space

mangling. Trong C++, chức năng mã nguồn đợc định danh trong các hàm

khác tên nhau đối với trình nối kết. Điều này đợc gọi là name-space

mangling. Các hàm đợc đọc trệnh đi dựa vào kiểu đối số của nó. Bởi java

không có cách nhận biết hàm sẽ đợc đọc trệnh nh thế nào nên hàm sẽ không

đợc gọi tới.



1.3 Mô hình HTML và mô hình Java

Mô hình HTML cho phép tham chiếu tới một tài liệu dới dạng các file khác

kiểu nhau. Một Browser đọc các tham chiếu tới file HTML và chuyển chúng

tới chơng trình giải mã. Ví dụ, nếu một file là dới dạng nén thì browser tự động

giải nén nó.

Thiếu xót không tránh đợc trong mô hình này là browser có thể tăng lên

không có giới hạn. Ví dụ với Netscape browser, nó yêu cầu 16 MB RAM. Khi

một ứng dụng trở nên lớn hơn, chúng có xu hớng làm chậm các tác vụ bình thờng khác. Sau đây chúng ta so sánh mô hình HTML (HTML model) và mô hình

Java (Java model). Trong Java model, các mã đợc biên dịch trong các file có

đuôi .class và sau đó sẽ nạp xuống đa vào trong các applet thông qua mạng.



Mô hình HTML

Trên Internet, các máy tính đều chạy dịch vụ Hypertext Transfer Protocol

(HTTP). Các dịch vụ HTTP đa dữ liệu đáp ứng cho các Web browser. Một cách

tổng quát, dữ liệu ở các dạng khác nhau và HTML không cần giải mã các dữ

liệu. Kết quả là Internet HTTP server cung cấp miền lớn các dạng dữ liệu tới các

client nối với nó.

Trong HTML model, dữ liệu thô đợc ghi trong HTML document bằng một

tham chiếu siêu văn bản (hyper text reference). Để thực hiện giải mã dữ liệu với

một số lớn các dạng dữ liệu khác nhau, browser có sử dụng các ứng dụng trợ

giúp. Nhằm sắp xếp dữ liệu đúng với ứng dụng trợ giúp, browser có một giao

thức là Multipurpose Internet Mail Extension (MIME) cho phép dịch vụ HTTP

truyền dẫn cùng với dữ liệu. Dựa trên MIME, một bảng tìm kiếm xác định xem

dữ liệu đợc giải mã và hiển thị nh thế nào.

Một vấn đề khác. Dữ liệu thờng đợc hiển thị trong các khuôn dạng điện tử

rất đa dạng. Giả sử có một tài liệu Microsoft Word cung cấp trên Web, ta có thể

xem nó nh một Word document nhng Word 5 trên Mac không thể đọc đợc các

Word 6 hay 7. Vì vậy phải có một file RFT ( Rich text format ) để Word 5

có thể nhận biết hầu hết nội dung trong tài liệu. Tài liệu kiểu Word Document

thờng đợc chuyển sang dạng HTML nhằm cho phép mọi browser trên mạng có

thể "nhìn" nó. Thêm nữa HTML chỉ đáp ứng các đồ họa dới dạng ảnh GIF và

không duy trì trang tài liệu nguồn nguyên thuỷ dới dạng Word document. Ta

cũng có thể sử dụng PostScrip để nạp và in các tài liệu, tuy nhiên không cho

phép soạn thảo lại tài liệu và cũng không phải mọi file PostScrip đều có thể in đợc với các máy in. Bên cạnh đó, Adobe có tiến thêm một bớc trong Portable

11



Document Format (PDF) cho phép xem và in tất cả các tài liệu. Tuy vậy còn tồn

tại vấn đề là ngời dùng không thể soạn thảo lại các tài liệu này.



Mô hình Java

Mô hình Java khắc phục một số thiếu sót của mô hình HTML nhng nó không

dành lấy đợc sự chấp nhận rộng rãi. Trong Java, các mã byte tạo ra sau khi biên

dịch đợc lu trong các file .class. Các file này đợc nạp xuống các class loader của

máy client. Sau khi kiểm tra, máy ảo Java sẽ phiên dịch các mã byte.

Nguyên tắc hoạt động của trình biên dịch Java có dạng nh trên hình 1.4.

Java Source

(*.java)



JavaClasses

(*.class)



Java

Compiler



Hình 1.4

Cùng với Java, một thuật toán giải mã các dạng dữ liệu mới có thể đợc nạp

tuỳ theo câu lệnh. Tức là Web là một hớng đối tợng trong hoàn cảnh, dữ liệu đợc

nhập cùng với chơng trình để thực hiện một tác vụ. Mô hình Java là một cải tiến

lớn đáp ứng nhu cầu hiện tại, nó yêu cầu chúng ta có một giải pháp cho việc giải

mã trên phần cứng của ta.

Nguyên tắc của mô hình Java trên mạng nh trên hình 1.5

Runtime System/ Hardware

Java Source

Interpreter



Just-In-Time



Compiler

Compiler

Byte Codes



Byte Code Verifier

Network



ClassLoader

Hình 1.5



1.4 Môi trờng phát triển Java

Có nhiều sự chọn lựa có giá trị để phát triển Java, bao gồm các sản phẩm của

Sun (Java Workshop, Java Developers Kit (JDK)), Metrowerks' CodeWarrior , các sản

phẩm Symantec(Visual Café, Visual Café Pro, Café). Microsoft J++, Asymetrix

SuperCede và các chọn lựa khác. Để có thêm chi tiết ta hãy xem trên địa chỉ:

htt://www.javasoft.com/products/JDK/; ftp://ftp.metrowerks.com/; http://www.symetec

.com, http:/roaster.com/roaster/ và http://www.microsoft.com/java/.



J++ chạy trên Window 95/NT. Workshop có chỉ chạy trên Solaris và

Windows 95/NT. Các sản phẩm của Symantec và CodeWarrior chạy trên MacOS

và Window 95/NT.

Sau đây chúng ta hãy xem xét một ứng dụng đơn giản nhất của java trên môi

trờng JDK. Chúng ta tìm hiểu chi tiết cách tạo , biên dịch và chạy các chơng

12



trình Java. Sử dụng nền Java Development Kit (JDK). Ta có thể tìm thêm các

thông tin trên địa chỉ http://java.sun.com/prodocst/jdk/index.html.



Tạo một file nguồn

Sử dụng một trình soạn thảo, tạo một file có tên là Hello.java với các dòng

lệnh nh sau:

/**

* The Hello class implements an application that

* simply display Hello world to the standard output

*/

class Hello {

public static void main ( String[] args){

System.out.println( Hello World);

}

}



Biên dịch file nguồn

Biên dịch file nguồn bằng trình biên dịch của Java.

UNIX:

DOS shell (Windows 95/NT):



javac Hello.java

javac Hello.java



Nếu biên dịch thành công, trình biên dịch sẽ tạo ra file tên là Hello.class

trong cùng th mục với file nguồn Hello.java . File kiểu class này chứa các mã

byte . Nếu biên dịch không thành công, thì hãy chắc chắn ta nhập đúng kiểu và

tên của chơng trình chính xác nh chỉ ra ở trên hay không, và hãy chắc chắn chữ

thờng, chữ hoa có đúng nh trong tên file không.



Chạy ứng dụng

Chạy chơng trình bằng Java interpreter:

UNIX:



java Hello



DOS shell( Window 95/NT) java Hello



khi đó trên màn hình ta sẽ nhận đợc dòng chữ :



Hello World.



Phân tích một ứng dụng Java

Bây giờ hãy nhìn vào chơng trình nguồn, chúng ta có thể phân vân không

biết nó làm việc nh thế nào và nó giống các ứng dụng khác thế nào. Chơng trình

nguồn gồm hai khối lệnh chính, khối đầu tiên nằm ở phần đầu của chơng trình

sử dụng kí hiệu /** và */. Ngôn ngữ java cung cấp một trong ba kiểu kí tự đánh

dấu // để đa các lời giải thích vào chơng trình tơng tự nh trong C, C++. Trong

Java, mỗi phơng thức (đợc coi là một hàm chức năng giống nh một khối các mã

lệnh) và biến nằm gọn trong một lớp. Java không cung cấp các biến và các hàm

toàn cục. Do đó có thể xem khung của chơng trình java là một definition class.

Điểm truy nhập vào mỗi một ứng dụng Java là phơng thức main của nó. Khi

chạy ứng dụng cùng với java interpreter cần phải chính xác hoá tên lớp

muốn chạy. Interpreter sẽ gọi đến phơng thức main trong lớp đó. Phơng thức

main điều khiển luồng chảy của chong trình, cấp phát mỗi khi nguồn đợc gọi

tới, và chạy tất cả những phơng thức khác liên quan đến ứng dụng đó.

13



Lời giải thích trong Java

Trong Java có các kiểu trích dẫn lời giải thích nh sau:

/* text */ : trình biên dịch bỏ qua mọi thứ nằm trong cặp dấu này.

/** documentation */ : Dùng để chỉ ra một documentation comment, trình

biên dịch cũng bỏ qua nh đối với /* và */. Công cụ javadoc của JDK sử dụng lời

chú giải doc khi chuẩn bị tự động tạo ra documentation. Để có thêm thông tin về

javadoc hãy xem trên http://java.sun.com/products/jdk/1.1/docs/index.html#tools.

// text : trình biên dịch bỏ qua mọi thứ kể từ dấu // cho đến cuối dòng.



Định nghĩa một lớp

Dòng đầu đợc tô đậm trong phần chơng trình ở dới là khối định nghĩa lớp:

/**

* The Hello class implements an application that

* simply display Hello world to the standard output

*/

class Hello {

public static void main ( String[] args){

System.out.println( Hello World); // Display the String

}

}



Lớp là một khái niệm cơ bản, gồm một khối các câu lệnh của ngôn ngữ lập

trình hớng đối tợng giống nh kiểu java. Nó là một bản chi tiết mô tả trạng thái,

cách thức thực hiện đợc nối kết với instance của lớp đó. Khi ta khởi tạo một

lớp, ta tạo ra một đối tợng mà nó có cùng các trạng thái, cách thức thực hiện nh

các instance khác của cùng lớp đó. Trạng thái nối kết với lớp hay đối tợng đợc

lu trong các biến thành phần member variables. Cách thức thực hiện nối kết

với lớp hay đối tợng đợc thực thi trong các phơng thức.



Phơng thức main (Main Method)

Dòng đợc tô đậm là điểm bắt đầu và kết thúc của khai báo phơng thức main.

/**

* The Hello class implements an application that

* simply display Hello world to the standard output

*/

class Hello {

public static void main ( String[] args){

System.out.println( Hello World);

}

}



Mỗi ứng dụng Java đều có một phơng thức main đợc khai báo nh sau:

public static void main(String[] args)



Phơng thức main đợc khai báo cùng với ba từ khoá:

public: cho phép các đối tợng gọi tới phong thức main.

static : có nghĩa là phơng thức main là một phơng thức kiểu lớp.

void: chỉ ra rằng phơng thức main không trả lại giá trị.

14



Xem Thêm
Tải bản đầy đủ (.doc) (120 trang)

×