• Thứ Sáu, 19/10/2007 10:03 (GMT+7)

    Thắc mắc về ngôn ngữ lập trình C, HTML, XML, Java

    Câu hỏi :
    1. So sánh ưu nhược điểm giữa C++ và Java, ngôn ngữ nào nên dùng trong những chương trình nào? Tại sao chỉ tạo được file class trong Java mà không tạo được file exe?
     2. Trang web có thể tạo dễ dàng và đẹp mắt bằng các ngôn ngữ HTML, XML, Flash. Vậy lý do gì để dùng Java thiết kế web?
     3. Bộ JDK của Java rất nặng, việc chạy ứng dụng hay web thiết kế bằng Java có đòi hỏi người dùng cài JDK không. Trong đó JVM chiếm dung lượng bao nhiêu?
     4. Những file *.chm tạo bãng ngôn ngữ gì?


    Trả lời :

     1. Ngôn ngữ C++ và Java ra đời ở 2 thời kỳ khác nhau trong quá trình phát triển phần mềm máy tính, do đó chúng có nhiều tính chất khác nhau. Cần nhiều trang giấy mới có thể thống kê đầy đủ các tính chất, ưu/khuyết điểm của từng ngôn ngữ, ở đây chúng tôi chỉ tập trung một số tính chất, ưu/khuyết điểm chính của từng ngôn ngữ:

     - Trước hết bạn cần biết 2 phương pháp lập trình được dùng phổ biến từ trước tới nay: phương pháp có cấu trúc và phương pháp hướng đối tượng. Phương pháp lập trình cấu trúc sẽ phân ứng dụng ra thành nhiều module dịch vụ nhỏ, mỗi module thực hiện 1 dịch vụ cụ thể, rõ ràng nào đó của ứng dụng. Mỗi module thường chứa nhiều hàm chức năng và một số biến dữ liệu, các hàm và biến của 1 module có thể được giấu kín (private) hay cho phép bên ngoài truy xuất (public). Nhược điểm lớn nhất của ngôn ngữ lập trình cấu trúc (C, Pascal...) là nó cho phép định nghĩa biến toàn cục. Thí dụ các biến được định nghĩa trong file chương trình chính của Pascal là biến toàn cục, các biến public trong 1 module C là biến toàn cục. Như vậy, bất kỳ lệnh nào trong phần mềm (dù nó nằm ở module nào) cũng có thể truy xuất biến toàn cục của chương trình. Hãy xét 1 ứng dụng rất lớn, gồm rất nhiều module dịch vụ. Nếu bất kỳ lệnh nào cũng có thể truy xuất biến toàn cục thì khi nội dung của biến ấy bị sai sẽ rất khó xác định nguyên nhân (lệnh nào) gây lỗi, và như vậy việc bảo trì ứng dụng sẽ rất khó khăn. Trong trường hợp này, ta nói độ tín cậy, ổn định của phần mềm rất thấp. Do đó phương pháp lập trình hướng đối tượng ra đời nhằm khắc phục các nhược điểm của phương pháp cấu trúc. Trong phương pháp hướng đối tượng, 1 ứng dụng được phân ra thành 1 tập các đối tượng độc lập, khi cần chúng có thể tương tác lẫn nhau qua duy nhất 1 phương tiện: gửi thông điệp cho nhau. Phát biểu class trong ngôn ngữ hướng đối tượng cho phép định nghĩa chi tiết 1 đối tượng được dùng trong ứng dụng, dùng phát biểu class nhiều lần ta sẽ định nghĩa được n đối tượng cấu thành ứng dụng. Do các đối tượng có độ độc lập cao, không ai thấy và truy xuất được các chi tiết bên trong của nhau nên dù ứng dụng lớn chứa rất nhiều đối tượng, chúng ta vẫn dễ dàng quản lý chúng. Tóm lại phương pháp hướng đối tượng cho phép xây dựng ứng dụng dễ dàng hơn, cấu trúc ứng dụng trong sáng hơn, dễ quản lý hơn, dẫn tới dễ bảo trì, nâng cấp hơn và độ tin cậy đạt được thường cao hơn.

     - C++ ra đời khoảng 1984, nhằm nới rộng khả năng của ngôn ngữ C theo cơ chế tăng dần. Có thể nói C++ là ngôn ngữ 'n in 1' vì nó cho phép viết chương trình đồng thời bằng nhiều ngôn ngữ khác nhau: ngôn ngữ máy, ngôn ngữ assembly, ngôn ngữ C và ngôn ngữ C++. Thực chất C++ chính là C có tăng cường thêm một số lệnh để định nghĩa class và dùng chúng theo mô hình hướng đối tượng, tuy nhiên mức độ hỗ trợ mô hình hướng đối tượng của C++ còn thấp, không trong sáng, dễ gây nhâm lẫn cho người lập trình và dẫn tới phần mềm C++ thường không có độ tin cậy cao, dễ gây lỗi. Tóm lại C++ cho phép ta lập trình theo phương pháp cấu trúc lẫn hướng đối tượng hoặc kết hợp chúng trong cùng 1 phần mềm, tuy nhiên độ phức tạp của C++ là rất cao nên đòi hỏi người dùng phải bỏ ra rất nhiều thời gian và sức lực để nắm vững ngôn ngữ.

     - Java ra đời khoảng 1992, nó hỗ trợ thuần túy phương pháp lập trình hướng đối tượng và hỗ trợ khá đầy đủ mô hình hướng đối tượng, do đó nó trong sáng, dễ hiểu và đơn giản hơn nhiều so với C++. Ứng dụng viết bằng Java thường có tính ổn định, tin cậy cao, dễ bảo trì, nâng cấp về sau.

    Về nguyên tắc, bạn có thể dùng C++ hay Java (hay bất kỳ ngôn ngữ lập trình đa dụng nào) để viết ứng dụng giải quyết yêu cầu nào đó của bạn. Tuy nhiên tùy lĩnh vực giải quyết mà ngôn ngữ nào sẽ thích hợp hơn. Thí dụ để lập trình các module chức năng cấp thấp (device driver, hệ điều hành...) thì dùng ngôn ngữ C++ sẽ thích hợp hơn Java, file khả thi sẽ chạy hiệu quả hơn. Còn viết các ứng dụng phục vụ trực tiếp người dùng đầu cuối (Web, Email...) thì dùng Java sẽ đơn giản hơn, dễ bảo trì code của ứng dụng hơn.

     Như chúng ta nói ở trên, xây dựng ứng dụng theo phương pháp lập trình hướng đối tượng là định nghĩa n class đối tượng cấu thành ứng dụng đó, hơn nữa các đối tượng của ứng dụng rất độc lập nhau và có thể phục vụ cho nhiều ứng dụng khác nữa. Trên tinh thần này, khi bạn dịch 1 class mã nguồn Java, chương trình dịch sẽ tạo ra file *.class miêu tả class đó ở ngôn ngữ trung gian (byte-code). Khi ứng dụng chạy, hàm qui định trong class ứng dụng sẽ được kích hoạt, từng lệnh trong thân của hàm này sẽ chạy, nếu đó là lệnh gửi thông điệp đến đối tượng khác thì hệ thống (tức là máy ảo Java - JVM) sẽ tìm đối tượng tương ứng và kích hoạt hàm được gọi, cứ thế mà hoạt động. Tóm lại, hệ thống không liên kết tĩnh các class của ứng dụng thành 1 file khả thi như truyền thống.

     2. Trang web thường được viết bằng ngôn ngữ HTML (hay XML), tuy nhiên nếu xây dựng trang web bằng cách viết trực tiếp từng thẻ lệnh HTML cấu thành trang web thì rất tốn công sức, dễ gây lỗi. Do đó hiện nay người ta thường dùng 1 trong các môi trường trực quan để xây dựng trang web như FrontPage, DreamWeaver... Hơn nữa, nếu chỉ dùng các thẻ HTML thì chúng ta chỉ có thể xây dựng trang web tĩnh: chỉ chứa nội dung cố định và không thể thực hiện hành vi nào đó theo yêu cầu tương tác động với người dùng. Để trang web có thể tương tác động với người dùng, nhận yêu cầu người dùng rồi thực hiện 1 chức năng nào đó, ta cần lập trình cho trang web. Lập trình cho trang web là thao tác nhúng những phần tử chương trình vào trang web, đó có thể là các linh kiện độc lập như Applet Java, ActiveX Control hay COM, đó có thể là những hàm xử lý sự kiện được viết bằng ngôn ngữ kịch bản nào đó như Javascript hay VBscript. Tóm lại trong trang web có thể chứa một số đoạn code viết bằng Javascript, hay Java (trong trang JSP), hay thành phần phần mềm được viết bằng ngôn ngữ lập trình khác Java. Tuy nhiên nhiều người chọn ngôn ngữ Java, Javascript vì tính 'độc lập với platform' của nó, nghĩa là trang web có thể chạy trên nhiều hệ thống khác nhau.

     3. Một ứng dụng hay 1 thành phần viết bằng Java sẽ được dịch ra file *.class (dạng ngôn ngữ trung gian, độc lập với hệ thống). Các file *.class chỉ có thể chạy bởi máy ảo Java (Java Virtual Machine - ứng dụng giả lập máy Java) hay “môi trường thực thi Java” (Java Runtime Environment). Để chạy ứng dụng hay web viết bằng Java, người dùng không cần phải cài JDK.

     4. File *.chm là file chứa các tài liệu trợ giúp cho 1 ứng dụng nào đó theo công nghệ 'HTML Help' của Microsoft. Quá trình xây dựng file *.chm gồm nhiều bước: thiết kế cây thứ bậc các phần tử cấu thành tài liệu, xây dựng những trang web miêu tả cụ thể nội dung của từng mục trong cây thứ bậc, đóng gói cây thứ bậc miêu tả tài liệu cùng các trang web miêu tả nội dung chi tiết thành file *.chm. Bạn có thể dùng ứng dụng 'HTML Help Workshop' của Microsoft để quản lý và xây dựng file tài liệu *.chm.
     

    Chuyên mục: Lập trình