1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Dành cho những chủ đề chỉ có một câu hỏi

Chủ đề trong 'Câu lạc bộ kỹ sư' bởi small_porcupine, 10/05/2005.

  1. 1 người đang xem box này (Thành viên: 0, Khách: 1)
  1. DLT

    DLT Thành viên quen thuộc

    Tham gia ngày:
    12/12/2002
    Bài viết:
    125
    Đã được thích:
    0
    Tôi có 1 thắc mắc nhỏ nhờ các bạn giải thích giùm.
    Tại sao Mỹ là 1 nước hiện đại nhưng cột điện họ lại làm bằng gỗ và nhà ở cũng làm bằng gỗ hoặc phần lớn bằng gỗ và là gỗ thường. Trong khi đó ở VN cột điện làm bằng bê tông cốt thép, nhà xây bằng gạch, bê tông cốt thép. ưu nhược điểm của cách làm này của Mỹ.
  2. thuyenxaxu

    thuyenxaxu Thành viên rất tích cực

    Tham gia ngày:
    18/08/2004
    Bài viết:
    4.201
    Đã được thích:
    1
    Hình như cái này hông phải thắc mắc nhỏ đâu . Có bạn nào ra mở hẳn một chủ đề mới để mọi người có thể tham gia vô trả lời đi ... Từ từ đi họp xong, cuối ngày, Thuyền kiếm thử trên yahoo google xem có biết là tại sao hông nha . Right now, i don''t know .
  3. thuyenxaxu

    thuyenxaxu Thành viên rất tích cực

    Tham gia ngày:
    18/08/2004
    Bài viết:
    4.201
    Đã được thích:
    1
    Trời cái này chắc là một người và một post khônhg trả lời được hết rồi . Bạn có thể ra mở hẳn 1 chủ đề mới để dân kỹ sư điện có thể cùng vô và bàn bạc được hông ?
  4. lan0303

    lan0303 Thành viên mới

    Tham gia ngày:
    24/05/2003
    Bài viết:
    2.622
    Đã được thích:
    0
    Có Bác nào phát triển ứng dụng GIS trên nền ViSAD của SSEC (Space Science and Engineering Center)?
    url: http://www.ssec.wisc.edu/~billh/visad.html
    THÀNH THẬT CẢM ƠN!
  5. lan0303

    lan0303 Thành viên mới

    Tham gia ngày:
    24/05/2003
    Bài viết:
    2.622
    Đã được thích:
    0
    Như chương trình dưới đây:
    Unidata''s Integrated Data Viewer
    Current release: 1.2 (August 12, 2005)​

    The Integrated Data Viewer (IDV) from Unidata is a Java"-based software framework for analyzing and visualizing geoscience data. This IDV release includes a software library and a reference application made from that software. It uses the VisAD library (http://www.ssec.wisc.edu/~billh/visad.html ) and other Java-based utility packages.
    The IDV is developed at the Unidata Program Center (UPC), part of the University Corporation for Atmospheric Research, Boulder, Colorado, which is funded by the National Science Foundation. The software is freely available under the terms of the GNU Lesser General Public License.
    The IDV "reference application" is a geoscience display and analysis software system with many of the standard data displays that other Unidata software (e.g. GEMPAK and McIDAS) provide. It brings together the ability to display and work with satellite imagery, gridded data (for example, numerical weather prediction model output), surface observations, balloon soundings, NWS WSR-88D Level II and Level III RADAR data, and NOAA National Profiler Network data, all within a unified interface. It also provides 3-D views of the earth system and allows users to interactively slice, dice, and probe the data, creating cross-sections, profiles, animations and value read-outs of multi-dimensional data sets. The IDV can display any Earth-located data if it is provided in a known format (see Data Sources).
    [​IMG]
    Image 1: IDV view of Hurricane Charlie, August 13, 2004
    integrating satellite, radar, model and geopolitical data
    This IDV User''''s Guide describes using the features available in the IDV reference application. The Unidata IDV Training Workshop serves as a tutorial.
    The IDV software library can be easily be used and extended to create custom geoscience applications beyond the atmospheric science realm. This customization allows new applications to be tailored to specific datasets and provide customized user interfaces for different tasks. One example of a specialized IDV application is the GEON IDV (http://geon.unavco.org/unavco/IDV_for_GEON.html )
    Development of the IDV is ongoing at the Unidata Program Center. The development is driven by the needs of the community of users. Suggestions, comments, and collaboration are welcomed and encouraged. The goal is to provide new and innovative ways of displaying and analyzing Earth science data, as well as provide common displays that many users have come to expect.
    How can I get the IDV?
    See Downloading and Running the IDV for information on access to the compiled code, source code, and documentation.
    trích http://www.unidata.ucar.edu/software/idv/docs/userguide/index.html
    Được lan0303 sửa chữa / chuyển vào 05:49 ngày 11/11/2005
  6. lan0303

    lan0303 Thành viên mới

    Tham gia ngày:
    24/05/2003
    Bài viết:
    2.622
    Đã được thích:
    0
    Một ít kiến thức cơ bản về Java để đọc VisAD.
    nguồn VASC: http://www.vnn.vn/vnn1/java/index_jv.htm (đang mất sóng)
    I. Lịch sử của Java
    Chúng ta biến đến Sun Microsystems như một nhà sản xuất phần cứng với các trạm làm việc UNIX. Trên thực tế, hãng Sun cũng phát triển phần mềm, đặc biệt nổi tiếng là hệ điều hành Solaris và hệ thống tập tin mạng (Network File System - NFS). Năm 1990, Sun Microsystems bắt đầu thực hiện dự án có tên gọi Green nhằm phát triển phần mềm trong các thiết bị điện tử dân dụng. James Gosling, chuyên gia lập trình phần mềm mạng được giao trách nhiệm thực hiện dự án.
    Ban đầu, Gosling sử dụng C++ để viết phần mềm điều khiển, hiển thị số cho thiết bị như VCR (Video Cassette Recorder), PDA (Personal Digital Assistant). Nhưng ngay sau đó, Gosling phát hiện ra rằng C++ không phải là ngôn ngữ thích hợp cho công việc này. Ngôn ngữ C++ đủ mềm dẻo để điều khiển hệ thống, nhưng nó lại dễ gây ra những lỗi dẫn đến treo hệ thống. Một cách chi tiết hơn, C++ xâm nhập trực tiếp đến tài nguyên hệ thống, yêu cầu người lập trình phải tự mình quản lý các tài nguyên này.. Ðiều này tạo thành một rào cản không cho C++ trở thành một công cụ viết các phần mềm có độ tin cậy cao, tính tương thích lớn, đặc biệt trong việc điều khiển các thiết bị điện tử dân dụng.
    Gosling giải quyết vấn đề này bằng cách tạo ra một ngôn ngữ lập trình mới có tên là Oak. Ngôn ngữ này có cú pháp giống như C++, nhưng bỏ qua các tính năng "nguy hiểm" của C++ như truy cập trực tiếp tài nguyên hệ thống, các phép toán với con trỏ, nạp chồng tác tử.. Oak được thiết lập với mục đích tạo tính tương thích cao (chạy trên nhiều loại chip khác nhau), giúp các nhà sản xuất thiết bị có thể thay đổi kiểu phần cứng mà không phải viết lại phần mềm trước đó.
    Khi ngôn ngữ Oak trưởng thành, World Wide Web cũng đang bước vào thời kỳ phát triển mạnh mẽ, và đội ngũ phát triển phần mềm của Sun thấy rằng đây cũng là ngôn ngữ đặc biệt thích hợp cho Internet. Vào năm 1994, họ đã đưa ra WebRunner, một trình duyệt Web viết bằng Oak (sau này trình duyệt này được đổi tên thành HotJava và hiện nay vẫn đang được tiếp tục phát triển).
    Cuối cùng, vào năm 1995, Oak được đổi tên thành Java (do mục đích thương mại) và đưa ra trình diễn tại SunWorld 95. Từ đó đến nay, Java nhanh chóng phát triển: Thậm trí trước khi trình dịch Java đầu tiên được đưa ra vào tháng Một năm 1996, Java đã được coi là một chuẩn công nghiệp cho Internet.
    Trong 6 tháng đầu năm 1996, nhiều nhà sản xuất phần mềm cũng như phần cứng đứng đầu thế giới đã mua bản quyền công nghệ Java từ Sun, bao gồm Adobe, Asymetrix, Borland, IBM, Macromedia, Metrowerks, Microsoft, Novel, Oracle, Spyglass và Symantec... Các hãng này sẽ kết hợp Java vào các sản phẩm của họ như: các phần mềm, hệ điều hành, công cụ phát triển..
    II. Java là gì?
    Java là công nghệ cho phép tạo ra các phần mềm phân tán (distributed software). Ðây là những phần mềm đặt trên máy chủ (server), được nạp về qua kết nối mạng và thực hiện trên máy khách (client).
    Mặc dù được tạo ra từ những năm 70, Internet chỉ thực sự quyến rũ các doanh nghiệp vào những năm 90 nhờ có sự ra đời của World Wide Web. Web cho phép người sử dụng truy cập trực tiếp các thông tin trên Internet mà không cần phải học các lệnh phức tạp, cung cấp thông tin trực tuyến về nhiều lĩnh vực với hình ảnh, âm thanh,.. Sự ra đời của Java cho phép Web tiến xa hơn nữa, biến các trang Web tĩnh thành các ứng dụng sống động, có thể tương tác với người sử dụng. Những lý do căn bản để mọi người chú ý đến Java là:
    Cho phép viết các chương trình mạnh và tin cậy.
    Xây dựng ứng dụng chạy được trên hầu hết các phần cứng và hệ điều hành khác nhau (multi-platform).
    Phân phối các ứng dụng trên mạng với độ bảo mật và an toàn cao.
    Như vậy, có thể nói Java đã thay đổi chức năng của Internet, cũng giống như Web đã thay đổi cách tiếp cận vào Internet của chúng ta. Nói cách khác, Java đã chuyển mạng từ chỗ chỉ đơn thuần cung cấp thông tin và chia sẻ tài nguyên sang đóng vai trò hệ điều hành. Ðây chính là nền móng cho phép xây dựng các máy tính mạng (Network Computer - NC) của Oracle, IBM và Sun.
  7. lan0303

    lan0303 Thành viên mới

    Tham gia ngày:
    24/05/2003
    Bài viết:
    2.622
    Đã được thích:
    0
    III. Cấu trúc của Java
    Sức mạnh Java có được chính là nhờ cấu trúc của nó. Java được thiết kế nhằm mục đích trước hết là đơn giản hoá công việc của người lập trình. Kế đến, do nhu cầu chạy trên mạng, Java phải thật sự an toàn và ổn định, cũng như có khả năng làm việc được với nhiều kiểu phần cứng, phần mềm khác nhau. Cấu trúc ngôn ngữ Java thực sự đã đảm bảo được tất cả các tính năng trên.
    Cũng như các ngôn ngữ lập trình khác, Java cần một trình biên dịch để chuyển đổi mã lệnh cho người đọc (mã nguồn) sang ứng dụng thực thi được. Các trình biên dịch thông thường như Microsoft Visual C++ cho Windows 95 sẽ biên dịch chương trình sang mã lệnh thực hiện trên một loại phần cứng nhất định nào đó (trong trường hợp này là mã lệnh cho Intel x86). Trái lại, trình biên dịch Java lại chuyển chương trình nguồn Java thành các bytecode. Các bytecode này chỉ có thể chạy được trên máy ảo Java (Java Virtual Machine - JVM).
    Lưu ý: Hiện nay, máy ảo Java (JVM) mới được tạo dựng bằng phần mềm chứ không phải phần cứng. Sun Microsystems và một số công ty điện tử khác đang tiến hành nghiên cứu phát triển chip picoJava, nhằm mục đích tạo máy ảo Java bằng phần cứng. Các chip này cho phép đưa Java vào các thiết bị điện tử một cách dễ dàng hơn, đồng thời làm tăng tốc độ tối đa cho các JVM viết bằng phần mềm.
    Bộ Java Developers Kit (JDK) do Sun cung cấp bao gồm một số chương trình tiện ích cho phép bạn biên dịch, bắt lỗi và tạo tài liệu cho một ứng dụng Java. Hiện nay trên thị trường đang có rất nhiều môi trường pháp triển Java của hãng thứ ba rất tiện lợi (như Visual J++, Symantec Cafe,..), nhưng tất cả các chương trình này đều dựa trên nền JDK. Các trình tiện ích của JDK bao gồm:
    javac Bộ biên dịch Java: Làm nhiệm vụ chuyển mã nguồn Java sang bytecode.
    java Bộ thông dịch Java: Thực thi các ứng dụng Java trực tiếp từ tập tin lớp (class).
    appletviewer Một trình thông dịch Java thực thi các Java applet từ tập tin HTML.
    javadoc Tạo tài liệu dạng HTML từ mã nguồn cùng với các chú thích bên trong.
    jdb Java debuger: Cho phép bạn thực hiện từng dòng trong chương trình, đặt các điểm dừng (breakpoint), xem giá trị các biến.
    javah Tạo ra tập tin header của C cho phép C gọi hàm Java hoặc ngược lại.
    javap Trình dịch ngược java (disassembler): Hiển thị các hàm và dữ liệu truy cập được bên trong một tập tin lớp đã dịch. Nó cũng cho phép hiển thị nghĩa của bytecode.
    Quá trình biên dịch Java như sau: mã nguồn trong các tập tin *.java, qua trình biên dịch javac được chuyển thành các bytecode. Bytecode nằm trong tập tin *.class, được gọi là tập tin lớp (bởi mỗi tập tin chứa một lớp riêng biệt của Java). Các ứng dụng Java có thể bao gồm nhiều lớp khác nhau.
    Chú ý: Một lớp (class) của Java cũng giống hệt như một lớp trong C++. Lớp chính là các biến dữ liệu và thủ tục kết hợp với nhau thành một khối.
    Khi thực hiện chương trình Java, máy ảo Java sử dụng trình nạp lớp (class loader) để đọc các bytecode từ đĩa hoặc kết nối mạng. Các lớp được nạp sẽ phải đi qua trình kiểm tra lớp (class verifier) để chắc chắn rằng chúng sẽ không sinh ra các lỗi ảnh hưởng đến hệ thống khi thực thi. Quá trình kiểm tra này làm tăng thời gian nạp một lớp, tuy nhiên nó chỉ phải thực hiện có một lần mà thôi.
    Phần thực hiện (execution unit) trong máy ảo Java sẽ thực thi các lệnh quy định trong từng bytecode. Bộ phận thực thi đơn giản nhất là một trình thông dịch, chuyển đổi từng bytecode sang các thủ tục cần làm trên từng hệ thống. Cách này rất chậm vì trình thông dịch luôn phải tra nghĩa của bytecode mà nó thực thi. Ðể khắc phục nhược điểm này, người ta đưa ra trình biên dịch Just-in-time (JIT): Quá trình chuyển đổi từ bytecode sang mã lệnh riêng của từng hệ thống sẽ được làm luôn một lần ngay khi nạp chương trình, do đó tăng được tốc độ đáng kể.
    Chương trình viết bằng Java có thể là ứng dụng riêng biệt (stand-alone application), applet hoặc đồng thời cả hai. Applet là chương trình được nhúng trong trang Web, được đọc và thực hiện bởi trình duyệt hỗ trợ Java (Java-enabled Web browser). Khi trình duyệt đọc tới trang Web này, applet sẽ được thực thi. Trái lại, một ứng dụng Java riêng biệt được chạy bằng dòng lệnh (java Tên-lớp-cần-thực-thi tham-số), không cần thông qua trình duyệt Web.
  8. lan0303

    lan0303 Thành viên mới

    Tham gia ngày:
    24/05/2003
    Bài viết:
    2.622
    Đã được thích:
    0
    Bảng I.01: Khác biệt giữa Java Applet và ứng dụng Java
    [​IMG]
    Một trình duyệt Web hỗ trợ Java (Java-enabled browser) có máy ảo Java riêng. Hiện nay, các trình duyệt hỗ trợ Java như vậy khá nhiều: Netscape 2.0 trở lên, HotJava, Microsoft Internet Explorer 3.0 (bản beta 2 trở lên),... Các trang Web nhúng Java applet có chứa đường dẫn kiểu URL tới tập tin lớp chính của applet đó. Trình duyệt chỉ việc khởi động máy ảo Java và cung cấp cho trình nạp lớp đường dẫn này. Chú ý rằng mỗi lớp đều đưa ra tên của các lớp phụ nó cần, do đó trình nạp lớp phải nạp một số lớp phụ khác trước khi thực hiện chương trình.
    Một chương trình Java Applet đơn giản:
    // Lưu tập tin này với tên Hello.java
    // rồi biên dịch để được Hello.class
    import java.awt.Graphics;
    import java.applet.Applet;
    // Khai báo lớp mới
    public class Hello extends Applet {
    public void init(){
    resize(250,25);
    }
    public void paint(Graphics g) {
    g.drawString("Hello everybody!",50,25);
    }
    }
    và một tài liệu HTML có nhúng Applet trên (để cả tập tin Hello.html và Hello.class ở cùng một thư mục):
    <!------ Lưu dưới tên Hello.html ------>
    <HTML>
    <HEAD>
    <TITLE>Chào các bạn!</TITLE>
    </HEAD>
    <BODY>
    <h1>Ví dụ về Applet</h1><br>
    <hr>
    <Applet Code="Hello.class" Width=50 Height=50></Applet>
    </BODY>
    </HTML>
    IV. Các đặc tính chính của Java
    Trong phần này, chúng ta sẽ điểm qua bảy đặc tính quan trọng khiến Java trở thành một công cụ phát triển mạnh, tin cậy.
    1. An ninh
    An ninh là một vấn đề khó khăn hàng đầu mà người lập trình mạng gặp phải: Người sử dụng luôn e ngại hai điều: Thứ nhất, thông tin họ gửi đi trên mạng có thể bị đọc lén và thứ hai, hệ thống của họ có thể bị xâm nhập và phá hoại. Cấu trúc an ninh của Java nhằm vào giải quyết đồng thời hai vấn đề trên.
    Cấu trúc an ninh của Java dựa vào ba thành phần: Trình nạp lớp, trình kiểm tra lớp và trình quản lý an ninh (SecurityManager). Chúng ta đã biết rằng trình kiểm tra lớp làm nhiệm vụ đảm bảo chắc chắn chương trình Java được biên dịch đúng đắn, khi thực hiện sẽ không gây lỗi ảnh hưởng đến hệ thống cũng như không đụng chạm đến những dữ liệu "riêng tư" trên máy khách hàng.
    Bên cạnh đó, trình nạp lớp phân biệt rõ lớp nào đến từ mạng, lớp nào nằm ngay trên máy khách hàng. Ðiều này ngăn lớp tới từ mạng "giả dạng" một lớp trên máy khách hàng để thực hiện các tác vụ bị cấm đối với lớp này. Ngoài ra nó còn giúp tách biệt hoạt động của các lớp khác nhau tới từ các máy chủ khác nhau.
    Trình quản lý an ninh kiểm soát các hoạt động một máy ảo Java được quyền làm dưới các điều kiện khác nhau. Một ví dụ rất cơ bản là hoạt động đọc/ghi tập tin (file I/O) được quản lý chặt chẽ bởi trình quản lý an ninh: Các applet chỉ có quyền đọc/ghi các tập tin tại máy server chứa nó mà thôi! Tuy nhiên, trình quản lý an ninh cũng là một lớp trong Java, do đó chúng ta có thể viết một lớp an ninh riêng cho mình bằng cách tạo một lớp dẫn xuất từ lớp SecurityManager. An ninh
    2. Giao diện lập trình ứng dụng chuẩn - Core API
    Java cung cấp cho người lập trình một thư viện các hàm chuẩn, đó là Core API. Các hàm chuẩn này được đặt trong các gói (package) - là tập hợp của các lớp có mối quan hệ với nhau (ví dụ như gói java.awt chứa các lớp Abstract Windowing Toolkit, giúp người lập trình xây dựng ứng dụng với giao diện GUI trên các platform khác nhau).
    3. Tương thích với nhiều kiểu phần cứng
    Mã bytecode của Java có thể chạy trên hầu như mọi loại phần cứng và hệ điều hành hiện nay như: PC, Macintosh.. cũng như các máy khác có chạy máy ảo Java. Một điểm nữa là thư viện các thủ tục chuẩn Java có chứa đầy đủ các hàm có thể dùng chung cho các platform khác nhau.
    4. Ðặc tính động và phân tán
    Hệ điều hành Windows cho phép các chương trình sử dụng chung và nạp tự động các thư viện liên kết động DLL. Chia sẻ tập tin DLL làm giảm dung lượng bộ nhớ cũng như đĩa cần dùng và tăng tính cấu trúc của chương trình. Java cũng có đặc tính này: các lớp được nạp tự động khi cần và nhiều chương trình có thể dùng chung một lớp. Nó còn hỗ trợ đặc tính phân tán, tức là các phần của chương trình có thể nằm trên máy chủ lẫn trên máy khách hàng.
    5. Hướng đối tượng
    Lập trình hướng đối tượng (OOP) là phương thức viết các ứng dụng dễ bảo trì, dễ nâng cấp và đặc biệt là có thể tái sử dụng các mã lệnh. Java là một ngôn ngữ hướng đối tượng, do đó nó có đầy đủ các đặc tính trên. Ngoài ra, thư viện lớp Java cung cấp khá đầy đủ cho người lập trình để bắt đầu một dự án mới.
    6. Ða luồng (multi-threads)
    Các ứng dụng viết bằng Java có thể có nhiều tiến trình được xử lý cùng một lúc. Một ứng dụng đơn luồng chỉ có thể thực hiện một tác vụ tại một thời điểm: Giả sử ứng dụng đang bận lấy từ trên mạng xuống một tập tin mất vài phút, trong thời gian này ứng dụng không thể làm các việc khác như vẽ lại màn hình... Với ứng dụng viết bằng Java, bạn có thể tạo hai tiến trình song song làm việc: một tiến trình nạp tập tin, một tiến trình khác làm nhiệm vụ cập nhật màn hình.
    7. Quản lý bộ nhớ và quá trình thu dọn ''''rác''''
    Quản lý bộ nhớ là một vấn đề khá phức tạp đối với C và C++. Trong thời gian thực hiện chương trình, người lập trình chịu trách nhiệm khởi tạo các vùng nhớ, sau khi dùng xong lại giải phóng chúng. Chỉ cần một lỗi nhỏ trong đó cũng có thể làm cạn kiệt tài nguyên hay dẫn đến treo hệ thống. Java đã vứt bỏ gánh nặng này cho người lập trình: Các vùng nhớ được tạo ra trong chương trình sẽ tự động được giải phóng thông qua quá trình thu dọn "rác" (Garbage Collection). Các vùng nhớ tự động được giải phóng nếu như nó không được quy chiếu đến bởi bất cứ đối tượng đang hoạt động nào.
    Các quản lý bộ nhớ của Java củng cố thêm tính an ninh của các máy ảo. Trong C và C++, người lập trình có thể truy cập đến hệ thống thông qua con trỏ (pointer). Với Java, phép toán với con trỏ bị cấm, do đó con trỏ luôn chỉ đến dữ liệu cần thiết của ứng dụng trên máy ảo, ngăn ngừa ứng dụng truy xuất đến tài nguyên bên ngoài máy ảo.
    Cấu trúc và các đặc tính trên đây của Java cho thấy Java có những điểm mạnh và yếu riêng. Tuy nhiên, chúng ta có thể tin rằng, trong tương lai, Java sẽ dần dần hoàn thiện những nhược điểm, phát triển và tiếp tục làm thay đổi bộ mặt của Internet cũng như Intranet.
    Được lan0303 sửa chữa / chuyển vào 00:47 ngày 15/11/2005
  9. lan0303

    lan0303 Thành viên mới

    Tham gia ngày:
    24/05/2003
    Bài viết:
    2.622
    Đã được thích:
    0
    V. Java so sánh với các ngôn ngữ lập trình khác
    Ðôi khi người lập trình ứng dụng nhầm lẫn khi chọn ngôn ngữ phát triển ứng dụng của mình. Trong phần này, chúng ta sẽ so sánh Java với các công cụ phát triển khác để thấy được Java có thể và thích hợp để làm gì?
    1. Java so sánh với Perl
    Perl từ lâu đã là ngôn ngữ lý tưởng cho việc lập trình CGI (CGI - Common Gateway Interface). Với các ứng dụng phía server, ít có ngôn ngữ nào tiện lợi, đơn giản hơn Perl. Ðiểm mạnh của Perl chính là khả năng phân tích các xâu ký tự rất mạnh. Khi làm việc thuần tuý với văn bản, Perl có tốc độ cao hơn nhiều so với Java. Tuy nhiên, Perl lại không có các tính năng đồ hoạ như Java.
    Java là ngôn ngữ phân tán, nghĩa là chương trình viết bằng Java không nhất thiết phải chạy ở server như Perl. Như vậy, Java giúp giảm tải trọng công việc trên server, đồng thời làm việc phân phối các chương trình Java đơn giản hơn (với Perl, khi đem chương trình từ nơi này sang nơi khác cần phải thay đổi đôi chỗ).
    Ðiểm hạn chế lớn nhất của Java so với Perl là Java không được phép ghi thông tin lên server. Tuy nhiên, đây liên quan đến vấn đề an ninh, không phải là lỗi của Java. Vấn đề này sẽ được xem xét giải quyết trong một vài năm tới.
    2. Java so với các ngôn ngữ khác
    Các ngôn ngữ lập trình khác như C, C++ có mặt từ trước Java khá lâu, được xây dựng đầy đủ hơn, cung cấp cho người sử dụng nhiều dịch vụ cấp thấp mà Java không có. Chúng cho phép người sử dụng tạo ra các chương trình được tối ưu hoá để chạy trên phần cứng hoặc phần mềm nhất định. Chính vì vậy, Java sẽ khó lòng thay thế các ngôn ngữ này trong mọi lĩnh vực. Tuy nhiên, với các tính năng như an ninh, khả năng chạy trên nhiều môi trường, không ngôn ngữ nào trên đây so được với Java trong việc xây dựng những ứng dụng dành cho Internet.
    3. Java và ActiveX
    Ngày 07/11/1995, Microsoft bắt đầu nhảy vào thị trường Internet. Trong cuộc họp báo lớn cùng ngày, Chủ tịch Bill Gates cho rằng Microsoft đã "thiếu quan tâm vào sự phát triển của Internet". Ðáp ứng lại tuyên bố này, hãng Microsoft đã nhanh chóng thiết kế lại hệ thống thành phần đối tượng nhúng và liên kết (OLE) để chạy trên Internet và đổi tên thành ActiveX.
    Giống như Java Applet, khi trình duyệt hỗ trợ ActiveX nạp các trang Web có nhúng thành phần điều khiển ActiveX, các thành phần này sẽ được lấy về và thực thi trên máy tại chỗ. Microsoft cũng thiết kế Visual Basic Script có cú pháp giống Basic (nhưng đơn giản hơn rất nhiều) để cạnh tranh với JavaScript. VBScript đóng vai trò cầu nối giữa HTML và ActiveX. Khi người sử dụng nhấn chuột trong trang HTML, trình duyệt sẽ thực thi phần VBScript quy định xử lý sự kiện đó. Ðoạn VBScript này đến lượt mình gọi đến thành phần điều khiển ActiveX.
    Ưu điểm thứ nhất của ActiveX là tốc độ khá cao, do nó được viết tối ưu cho Microsoft Windows. Thứ hai, ActiveX thực chất là các OCX của Visual Basic 32-bit, do đó chúng ta dễ dàng tạo mới các thành phần này bằng công cụ mạnh như Visual Basic 5.0, Delphi 2.0 hay Visual C++... Chúng ta cũng có thể tái sử dụng hàng trăm thành phần điều khiển đã có sẵn trên thị trường vào trang Web của mình. Thứ ba, ActiveX có khả năng liên kết đến các ứng dụng khác của Microsoft như NetMeeting... Tuy nhiên, công nghệ mới này có một số nhược điểm quan trọng mà Microsoft đang cố gắng khắc phục:
    ActiveX chỉ chạy trên môi trường Windows: Trình duyệt xét duy nhất hiện nay hiểu được ActiveX là Internet Explorer 3.0. Ðiều này làm mất đi tính độc lập với hệ thống của Web (Microsoft đang triển khai ActiveX trên các hệ thống khác như Macintosh, Sun... nhưng việc này gặp khá nhiều khó khăn). Giám đốc điều hành Sun - Scott McNealy đã đặt tên cho công nghệ này một cách mỉa mai là CaptiveX (captive: bị bắt giữ).
    Tính an toàn của VBScript còn đang là vấn đề được tranh cãi. Một số kỹ thuật viên lập trình đã đưa ra cách dùng các hàm VBScript kiểu OLE Automation để thực thi lệnh của hệ điều hành trên máy client.
    Trái lại với ActiveX, Java tuy có tốc độ chậm nhưng an toàn và chạy được trên nhiều hệ thống khác nhau hơn. Hãng Sun đã có kế hoạch tăng tốc cho Java và cải tiến các thư viện cho ngôn ngữ này trong phiên bản tiếp của Java Development . Bên cạnh đó, đứng đằng sau Java là những nhà sản xuất phần cứng và phần mềm hùng mạnh. Càng ngày càng nhiều công cụ xây dựng ứng dụng Java trực quan đang được phát triển và đưa vào sử dụng như Latte của Borland, Visual Cafe của Symantec, Java Workshop của SunSoft,... ý tưởng của Oracle về máy tính mạng rẻ tiền, dễ dùng có sử dụng Java cũng hứa hẹn trong tương lai Java sẽ là một chuẩn được nhiều người sử dụng...
  10. lan0303

    lan0303 Thành viên mới

    Tham gia ngày:
    24/05/2003
    Bài viết:
    2.622
    Đã được thích:
    0
    VI. Java - ngôn ngữ lập trình hướng đối tượng
    Với đặc tính xây dựng được những ứng dụng dễ hiểu, dễ sửa và có thể dùng lại, lập trình hướng đối tượng (OOP) đã và đang phát triển mạnh, thu hút sự chú ý của nhiều người trong thập kỷ vừa qua. Java ra đời trong giai đoạn này, do đó nó được xây dựng dưới dạng một ngôn ngữ hướng đối tượng hoàn toàn. Ðể có thể hiểu và sử dụng Java một cách hữu hiệu, chúng ta cần phải nắm được các khái niệm cơ bản trong OOP.
    1. Phương pháp lập trình bình thường:
    Từ trước đến nay, chúng ta thường dùng các bản ghi để lưu trữ thông tin, đồng thời xây dựng các hàm bên ngoài để điều chỉnh, xử lý các bản ghi đó. Ðể có được bản ghi như vậy, đầu tiên phải tạo ra một "mẫu" cho nó:
    struct Flight { // một bản ghi định nghĩa bằng C
    int altitude;
    int heading;
    int speed;
    float latitude;
    float longitude;
    }
    Khi tạo ra một bản ghi từ mẫu trên, chúng ta phải khai báo biến trong chương trình:
    struct Flight myFlight;
    Ðể thay đổi độ cao (biến altitude) cho myFlight, chúng ta phải viết hàm điều chỉnh độ cao:
    void changeAltitude(Flight &aFlight, int height) {
    // thay đổi độ cao
    aFlight.altitude = height;
    // kiểm tra độ cao, nếu lớn hơn giá trị
    // cho phép thì sửa lại:
    if (aFlight.altitude>=100000)
    aFlight.altitude = 100000;
    }
    Khi muốn thay đổi độ cao, chúng ta gọi hàm:
    changeAltitude(myFlight, 10200);
    Các hàm tương tự cho việc chuyển hướng bay, hạ cánh.. cũng cần được phát triển đầy đủ tương tự như trên.
    Kế đến, bạn cần các bản ghi cho máy bay dân dụng. Một "mẫu" mới được tạo ra cho các bản ghi kiểu mới:
    struct CommercialFlight {
    // các biến riêng cho chuyến bay thương mại
    int flightNumber;
    int passengers;
    // các biến cũ giống như của Flight
    int altitude;
    int heading;
    int speed;
    float latitude;
    float longitude;
    }
    Cũng giống như trên, để tạo một bản ghi từ kiểu này, chúng ta khai báo biến:
    struct CommercialFlight myCommercialFilght;
    Tuy nhiên, chúng ta không được phép dùng lại hàm đã viết ở trên của Flight cho CommercialFlight. Nghĩa là trình biên dịch sẽ báo lỗi khi gặp phát biểu:
    changeAltitude(myCommercialFlight, 10200);
    Chúng ta có thể thấy rằng với mỗi kiểu bản ghi khác nhau cần khai báo kiểu dữ liệu cũng như các hàm điều khiển khác nhau. Ðiều này dẫn đến việc quản lý, bảo trì và nâng cấp một chương trình ứng dụng rất phức tạp: Thứ nhất, các cấu trúc dữ liệu khai báo trong lập trình kiểu cũ khó dùng được đến lần thứ hai: nếu có ai đó muốn lấy một đoạn mã trong chương trình của bạn để phát triển tiếp; họ phải đọc, nghiên cứu lại đoạn mã của bạn để đưa những đoạn mã mới vào chỗ thích hợp.
    Thứ hai, tất cả các phần khác nhau trong chương trình của bạn đều có thể truy cập đến dữ liệu bên trong một bản ghi, do đó không loại trừ khả năng một đoạn mã nào đó trong chương trình thay đổi dữ liệu nội tại của bản ghi và gây ra lỗi. Bình thường, chương trình gọi đến hàm changeAltitude() để thay đổi độ cao chuyến bay, tuy nhiên có thể tồn tại ở đâu đó câu lệnh:
    // tăng độ cao lên 200
    myFlight.altitude = myFlight.altitude + 200;
    // rất có thể lệnh này làm độ cao của
    // chuyến bay lên trên giá trị cho phép
    // là 100.000 meter
    2. Lập trình hướng đối tượng (Object - Oriented Programming):
    Với lập trình hướng đối tượng, các chương trình xử lý dữ liệu và bản thân dữ liệu được gắn liền với nhau thành một tổng thể (bao gói - encapsulated). Một tổng thể như vậy trong Java gọi là một lớp (class):
    class Flight {
    // các dữ liệu (biến thành phần)
    int altitude;
    int heading;
    int speed;
    float latitude;
    float longitude;

    // hàm thay đổi độ cao
    void changeAltitude(int height) {
    // thay đổi độ cao
    altitude = height;
    // kiểm tra độ cao, nếu lớn hơn giá trị
    // cho phép thì sửa lại:
    if (altitude>=100000)
    altitude = 100000;
    }

    // in thông tin chuyến bay
    void printFlight() {
    System.out.println("Máy bay: "+altitude+"/"+heading
    +"/"+speed);
    }
    }
    Hàm changeAltitude() là một ví dụ về hàm thành phần (member function, đôi khi còn gọi là method), nghĩa là hàm thuộc về cấu trúc dữ liệu đó. Bạn thấy rằng đoạn mã trong hàm đơn giản hơn chút đỉnh, bởi các biến trong đó không cần phải quy chiếu tới aFlight - một biến giả như ở trên. Chúng ta thấy rằng các hàm thành phần tự hiểu dữ liệu bên trong lớp đó.
    Cũng giống như kiểu bản ghi ở trên, đây chỉ là "mẫu" của một đối tượng (object). Ðể tạo được một bản sao (instance) của lớp, chúng ta dùng khai báo:
    Flight myFlight;
    Biến myFlight sau khai báo mang giá trị null (không chứa gì). Ðể tạo một đối tượng, chúng ta còn phải dùng toán tử new để định vị một vùng nhớ:
    myFlight = new Flight();
    Lúc này chúng ta có thể truy cập đến biến nội tại của đối tượng đó:
    myFlight.altitude = 1000;
    if (myFlight.speed>100) ...
    Chúng ta cũng có thể coi đối tượng là một thực thể với các hành vi riêng của mình. Một chuyến bay có hành vi nâng độ cao, thay đổi tốc độ.. Chúng ta ra lệnh cho chuyến bay tự nâng độ cao của mình lên 10200 meter:
    myFlight.changeAltitude(10200);
    Java là ngôn ngữ lập trình hướng đối tượng thực sự, với các đặc điểm thể hiện như:
    a. Che dấu dữ liệu (data hiding):
    Việc đóng gói dữ liệu và hàm với nhau như vậy còn cho phép che dấu dữ liệu, nghĩa là ngăn cản các phần khác nhau trong chương trình truy nhập đến các biến thành phần như altitude, speed.. Khi đó chương trình phải thay đổi thành:
    class Flight {
    // các dữ liệu (biến thành phần)
    private int altitude;
    int heading;
    int speed;
    float latitude;
    float longitude;
    // phần còn lại vẫn thế !
    ...
    }
    Biến altitude bây giờ được "che chắn", nghĩa là các phần khác ngoài khai báo lớp không được phép truy cập đến biến này. Ðể thay đổi biến, bạn buộc phải gọi đến hành vi thay đổi độ cao của lớp (changeAltitude()), trong đó có đầy đủ các kiểm tra cần thiết để tránh việc biến altitude nhận các giá trị ngoài khoảng.
    b. Thừa kế (Inheritance):
    Sử dụng các lớp thay vì kiểu bản ghi sẽ tránh được vấn đề trùng các mã. Chúng ta đã thấy trong phần trên, kiểu CommercialFlight chứa những biến altitude, speed.. đã có sẵn trong kiểu Flight, dẫn đến trùng lặp mã lệnh. Trong phần này, chúng ta sẽ xây dựng CommercialFlight (lớp con) trên cơ sở lớp Flight (lớp cha):
    class CommercialFlight extends Flight {
    // các biến riêng cho lớp này
    // không cần khai báo lại các biến có trong lớp cha
    int flightNumber;
    int passengers;

    // nạp chồng hàm:
    // in thông tin chuyến bay
    void printFlight() {
    System.out.println("Máy bay dân dụng: "+altitude+"/"+heading +"/"+speed);
    }
    }
    Lớp CommercialFlight là lớp con của lớp Flight, nó kế thừa tất cả những gì lớp Flight có. Do vậy chúng ta có thể viết:
    CommercialFlight flight = new CommercialFlight();
    flight.speed = 100; // thay đổi tốc độ
    flight.changeAltitude(10200); // thay đổi độ cao
    flight.passengers = 24; // số hành khách
    Cách làm như vậy giúp chương trình đơn giản đi rất nhiều. Hơn thế, khi một lớp con không muốn dùng hàm thành phần của lớp cha, nó có thể nạp chồng hàm của riêng mình. Trong ví dụ trên, chúng ta đã thấy lớp con đã nạp chồng hàm printFlight() của lớp cha để đưa ra thông tin riêng của mình.
    Flight f1 = new Flight();
    CommercialFlight f2 = new CommercialFlight();
    f1.speed = 200;
    f2.speed = 300;
    f1.printFlight(); // gọi hàm của lớp Flight
    f2.printFlight(); // gọi hàm của lớp CommercialFlight
    Ðôi khi, lớp cơ sở rất trừu tượng, không thể mô tả ngay được, người ta phải dùng đến các lớp ảo (abstract class). Lớp ảo được khai báo như bình thường, nhưng có thêm từ khoá abstract để báo cho trình biên dịch biết lớp này chưa được viết hoàn chỉnh, người sử dụng không được phép tạo đối tượng trực tiếp từ lớp kiểu này:
    abstract class Animal {
    String name;
    // methods
    abstract void Eat();
    abstract void Breath();
    abstract void Sleep();
    }
    Không được phép:
    Animal X = new Animal();
    Chú ý: Một lớp chỉ cần có một hàm thành phần khai báo kiểu abstract, nó sẽ tự động được coi là abstract.
    c. Tính đa hình (polymorphism):
    Tính đa hình đặc biệt quan trọng đối với lập trình hướng đối tượng. Nó cho phép trừu tượng hoá các đối tượng, làm chương trình trở nên đơn giản và dễ hiểu. Hãy tưởng tượng chúng ta có thể viết một hàm print() nhận và in ra tham số bất kỳ thay vì phải viết ba hàm riêng biệt printInt(), printStr(), printFloat() để in ra số nguyên, xâu ký tự và số thực. Java cho phép thực hiện tính đa hình theo ba cách:
    Thừa kế (inheritance) : Một hàm nếu chấp nhận kiểu lớp cha sẽ chấp nhận tất cả các lớp con của lớp cha đó.
    Nạp chồng (overloading) : Thực hiện các hàm cùng tên nhưng khác nhau về tham số trong cùng một lớp.
    Giao diện (interfacing) : Thực hiện được các hàm thành phần cùng tên, cùng tham số nhưng nằm trên các lớp khác nhau.
    d. Constructor và Finalizer:
    Hàm dựng và hàm huỷ là hai hàm thành phần được gọi đến khi đối tượng được tạo ra và huỷ đi. Nếu như bạn không định nghĩa hàm dựng, Java sẽ tự động tạo ra hàm dựng không có tham số.
    Hàm dựng được định nghĩa trùng với tên lớp, Java cho phép định nghĩa nhiều hơn một hàm dựng:
    class Cat extends Animal {
    String kind;
    // các hàm dựng của lớp đó
    public Cat (String Name) {
    name = Name;
    }
    public Cat (String Name, String Kind) {
    Cat(Name);
    kind = Kind;
    }
    }
    Ðể tạo ra một đối tượng từ lớp Cat, chúng ta dùng từ khoá new và một trong các hàm dựng ở trên:
    Cat meo = new Cat("Lyly", "Xiem");
    Hàm huỷ chỉ có một, được định nghĩa với cấu trúc sau:
    protected void finalizer() {
    // các thủ tục cần thiết để "thu dọn" đối tượng
    ...
    }
    Hàm finalizer() được tự động gọi đến bởi quá trình thu dọn rác (Garbage collection).
    Như vậy, Java là ngôn ngữ hướng đối tượng thực sự. Thư viện Core API của Java chứa hơn 250 lớp "tạo sẵn", chúng ta có thể dùng trực tiếp hoặc kế thừa các lớp này để phục vụ cho mục đích riêng, từ việc xử lý ảnh đến tạo ra các kết nối trên mạng.. Phần kế tiếp đây sẽ trình bày ngôn ngữ Java một cách kỹ càng hơn.

Chia sẻ trang này