Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 34 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
34
Dung lượng
2,75 MB
Nội dung
Chương Những kiến thức Java Java: Hướng dẫn cho người học - Lập trình hướng đối tượng Các khái niệm kỹ Lịch sử triết lý Java Sự đóng góp Java Internet Tầm quan trọng mã bytecode Các thuật ngữ thông dụng Java Các nguyên tắc lập trình hướng đối tượng Tạo, biên dịch chạy chương trình Java đơn giản Sử dụng biến Sử dụng câu lệnh điều khiển if for Tạo khối mã Cách viết câu lệnh, lùi đầu dòng kết thúc câu lệnh Các từ khoá Java Các quy tắc đặt tên định danh Java S ự phát triển Internet World Wide Web tổ chức lại giới công nghệ thông tin Trước có Web, không gian điều khiển (cyber landscape) chiếm lĩnh máy tính cá nhân độc lập Ngày nay, gần toàn máy tính cá nhân kết nối với Internet Bản thân Internet thay đổi, khác với ban đầu đơn cung cấp phương pháp thuận tiện để chia sẻ file thông tin Ngày nay, hệ thống tính toán phân tán rộng khắp Những thay đổi dẫn đến phương pháp lập trình Java Java ngôn ngữ ưu việt Internet Java “cách mạng hóa” việc lập trình, thay đổi cách nghĩ hình thức chức chương trình Ngày nay, nói lập trình viên chuyên nghiệp, người ta thường đề cập tới kỹ quan trọng, lập trình Java Trong sách này, bạn tìm hiểu kỹ cần thiết để làm chủ ngôn ngữ Java Mục đích chương giới thiệu cho bạn Java, bao gồm lịch sử, triết lý thiết kế số tính quan trọng ngôn ngữ Chắc bạn biết, khó khăn lớn tìm hiểu ngôn ngữ lập trình thành phần tồn cách riêng biệt Thay vào đó, thành phần ngôn ngữ làm việc chung với Mối tương quan đặc biệt rõ ràng Java Thực tế, khó để bàn luận khía cạnh Java mà không đề cập khía cạnh khác Để khắc phục vấn đề này, Chương cung cấp nhìn khái quát vài tính Java, bao gồm định dạng chung chương trình Java, số cấu trúc điều khiển toán tử Chương không sâu vào chi tiết, tập trung vào khái niệm chung liên quan đến chương trình Java Chương 1: Những kiến thức Java Nguồn gốc Java Việc sáng tạo ngôn ngữ máy tính thúc đẩy hai nhân tố: cải thiện kỹ thuật lập trình thay đổi môi trường tính toán Java ngoại lệ Được xây dựng dựa di sản giàu có kế thừa từ C C++, Java thêm cải tiến tính tương ứng với trạng thái kỹ thuật lập trình Đáp ứng phát triển môi trường trực tuyến, Java cung cấp tính giúp đơn giản hóa công việc lập trình cho kiến trúc phân tán cao Java phát triển James Gosling, Patrick Naughton, Chris Warth, Ed Frank Mike Sheridan Sun Microsystems vào năm 1991 Ban đầu, ngôn ngữ có tên gọi “Oak”, đổi tên thành “Java” vào năm 1995 Một điều ngạc nhiên động lực thúc đẩy ban đầu cho Java Internet, mà nhu cầu cần có ngôn ngữ lập trình độc lập tảng (platform-independent language), dùng để tạo phần mềm nhúng vào loại thiết bị điện tử dân dụng khác lò nướng, lò vi sóng điều khiển từ xa Bạn thấy nhiều loại CPU khác dùng điều khiển Vấn đề thời điểm hầu hết ngôn ngữ máy tính thiết kế để biên dịch thành chương trình chạy đối tượng xác định Ta lấy C++ làm ví dụ Mặc dù biên dịch chương trình C++ cho loại CPU nào, để làm đòi hỏi phải có trình biên dịch C++ hoàn chỉnh dành cho CPU Tuy nhiên, vấn đề trình biên dịch đắt tiền tốn nhiều thời gian phát triển Trong cố gắng tìm giải pháp tốt hơn, Gosling cộng nỗ lực xây dựng ngôn ngữ đa tảng, khả chuyển, tạo mã chạy nhiều loại CPU môi trường khác Cuối nỗ lực dẫn đến hình thành ngôn ngữ Java Vào khoảng thời gian mà chi tiết Java thực hiện, xuất nhân tố thứ hai quan trọng đóng vai trò chủ yếu vào tương lai Java, World Wide Web Web không hình thành vào thời gian mà Java triển khai, trước Java hữu ích ngôn ngữ người biết đến dùng để lập trình cho thiết bị điện dân dụng Tuy nhiên, với lên Web, Java thúc đẩy để trở thành ngôn ngữ máy tính hàng đầu, Web đòi hỏi chương trình khả chuyển Ngay từ vào nghề, hầu hết lập trình viên hiểu việc tạo chương trình khả chuyển thường bị lảng tránh có nhu cầu Cùng với việc ưu tiên tạo chương trình hiệu quả, tính khả chuyển (độc lập tảng) gần lỗi thời giống chủ đề liên quan tới nguyên lý lập trình bị lãng quên vấn đề cấp thiết Tuy nhiên, với xuất Internet Web, vấn đề cũ tính khả chuyển quay trở lại mạnh mẽ Xét cho cùng, Internet bao gồm hệ thống đa dạng, phân tán với nhiều loại máy tính, hệ điều hành CPU Những vấn đề “nhức nhối” không ưu tiên quay trở lại với mức độ cấp thiết cao Đến năm 1993, thành viên đội thiết kế Java nhận thấy rõ ràng vấn đề tính khả chuyển phải giải tạo đoạn mã cho điểu khiển nhúng tồn phải tạo đoạn mã Java: Hướng dẫn cho người học - Lập trình hướng đối tượng cho Internet Sự phát nguyên nhân dẫn tới Java thay đổi trọng tâm từ thiết bị điện tử dân dụng sang lập trình Internet Vì vậy, mong muốn có ngôn ngữ lập trình độc lập với kiến trúc cung cấp tia sáng ban đầu, rốt Internet nhân tố tạo nên thành công lớn Java Mối liên hệ Java với C C++ Java có mối liên hệ trực tiếp với C C++ Java kế thừa cú pháp từ C mô hình đối tượng Java theo C++ Mối liên hệ Java với C C++ quan trọng số lý Lý nhiều lập trình viên quen thuộc với cú pháp C/C++ Điều tạo điều kiện thuận lợi cho lập trình viên C/C++ học Java, ngược lại Lý thứ hai nhà thiết kế Java không cần phải lãng phí thời gian để tạo thứ có sẵn tốt Thay vào đó, họ cải tiến thêm cho phương thức lập trình thành công Kỷ nguyên ngôn ngữ lập trình đại bắt đầu với C, sau chuyển sang C++ Java Bằng cách kế thừa xây dựng dựa di sản giàu có, Java cung cấp môi trường lập trình quán lôgíc, mạnh mẽ, kế thừa đặc điểm tốt ngôn ngữ trước thêm vào tính cần thiết cho môi trường trực tuyến Có lẽ quan trọng C, C++, Java định nghĩa khung khái niệm (conceptual framework) chung cho lập trình viên chuyên nghiệp Các lập trình viên đối mặt với bất đồng lớn thay đổi từ ngôn ngữ lập trình sang ngôn ngữ lập trình khác Một triết lý thiết kế chủ yếu C C++ lập trình viên kiểm soát chương trình Java kế thừa triết lý Ngoại trừ ràng buộc bắt buộc môi trường Internet, Java cho phép lập trình viên toàn quyền kiểm soát Do đó, lập trình viên giỏi hay tồi chương trình phản ánh điều Java ngôn ngữ có nhiều hỗ trợ cho người tập mà ngôn ngữ cho lập trình viên chuyên nghiệp Java có đặc tính khác với C C++: Ngôn ngữ thiết kế, kiểm thử, cải tiến lập trình viên thực thụ Java xây dựng để đáp ứng nhu cầu kinh nghiệm người phát minh ngôn ngữ Có lẽ phương pháp tốt để tạo ngôn ngữ lập trình chuyên nghiệp trường hợp Java Sự giống Java C++, đặc biệt khả hỗ trợ lập trình hướng đối tượng, khiến ta nghĩ Java cách đơn giản “phiên Internet C++” Tuy nhiên, nghĩ không xác Java có điểm khác biệt quan trọng triết lý thực tế Mặc dù chịu ảnh hưởng C++, Java phiên cải tiến ngôn ngữ Ví dụ, Java không tương thích không tương thích ngược với C++ Tất nhiên, tương đồng với C++ có ý nghĩa quan trọng lập trình viên C++, bạn cảm thấy dễ dàng với Java Một điểm khác Java không thiết kế để thay C++ mà để giải nhóm vấn đề cụ thể C++ nhằm mục đích giải nhóm vấn đề khác Chúng tồn nhiều năm tới Chương 1: Những kiến thức Java Mối liên hệ Java C# Một vài năm sau thời điểm đời Java, Microsoft phát triển ngôn ngữ C# Điều quan trọng C# liên quan chặt chẽ với Java Thực tế, nhiều tính C# tương tự Java Cả Java C# có cú pháp chung giống - cú pháp kiểu C++, hỗ trợ lập trình phân tán sử dụng mô hình đối tượng giống Tất nhiên, chúng có điểm khác nhau, nhìn chung Java C# giống Điều có nghĩa bạn biết C# việc tìm hiểu Java dễ dàng Ngược lại, tương lai bạn định học C#, kiến thức Java có ích Với giống Java C#, đặt câu hỏi cách tự nhiên rằng, “C# thay Java?” Câu trả lời Không Java C# tối ưu hóa cho hai loại môi trường tính toán khác Cũng C++ Java tồn thời gian dài nữa, C# Java Sự đóng góp Java Internet Internet giúp đưa Java trở thành ngôn ngữ lập trình hàng đầu ngược lại Java tác động sâu sắc tới Internet Bên cạnh việc đơn giản hóa công việc lập trình Web nói chung, Java sáng tạo loại chương trình chạy mạng gọi applet - chương trình thay đổi quan niệm nội dung giới trực tuyến Java giải số vấn đề gai góc Internet: tính khả chuyển bảo mật Hãy tìm hiểu chi tiết vấn đề Java Applet Applet loại chương trình Java đặc biệt thiết kế để truyền Internet tự động thực thi trình duyệt tương thích với Java Hơn nữa, applet tải xuống theo yêu cầu mà không cần tương tác thêm người dùng Nếu người dùng nhấn chuột vào liên kết chứa applet, applet tự động tải xuống chạy trình duyệt Các applet chương trình nhỏ Chúng thường dùng để hiển thị liệu server cung cấp, xử lý thông tin người dùng nhập vào, cung cấp chức đơn giản tính toán khoản vay trường hợp việc tính toán thực thi máy cục bộ, thay server Về bản, applet cho phép số chức chuyển từ server (máy chủ) sang client (máy khách) Việc tạo applet thay đổi lập trình Internet mở rộng hệ thống đối tượng có khả di chuyển tự không gian ảo Nói chung, có hai loại đối tượng truyền server client: thông tin thụ động chương trình chủ động Ví dụ, đọc e-mail, bạn xem liệu thụ động Thậm chí bạn tải xuống chương trình, đoạn mã chương trình liệu thụ động bạn chạy Trái lại, applet chương trình chủ động, tự thực thi Chương trình applet tác tử hoạt động máy tính client, nhiên khởi tạo server Java: Hướng dẫn cho người học - Lập trình hướng đối tượng Một chương trình mạng linh động bao nhiêu, chúng để lộ vấn đề nghiêm trọng khía cạnh bảo mật khả chuyển Rõ ràng, chương trình tải xuống thực thi tự động máy tính client phải ngăn ngừa khả gây hại Chương trình phải có khả chạy nhiều môi trường nhiều hệ điều hành khác Như bạn thấy, Java giải vấn đề cách hiệu Hãy tìm hiểu chi tiết chút khía cạnh Bảo mật Như bạn nhận thấy, tải xuống chương trình “bình thường”, bạn nhận rủi ro đoạn mã tải xuống chứa virus, Trojan, mã độc Cốt lõi vấn đề mã độc giành quyền truy cập trái phép tới tài nguyên hệ thống Ví dụ, chương trình virus thu thập thông tin cá nhân, số thẻ tín dụng, số dư tài khoản ngân hàng, mật khẩu, cách tìm kiếm nội dung hệ thống file cục máy tính Để Java cho phép applet tải xuống thực thi an toàn máy tính client, việc ngăn ngừa applet khởi động công cần thiết Java thực điều cách hạn chế applet môi trường thực thi Java (Java execution environment) không cho phép truy cập vào thành phần khác máy tính Bạn thấy việc thực Khả tải xuống applet không gây hại không vi phạm bảo mật nhiều người coi khía cạnh sáng tạo Java Tính khả chuyển Tính khả chuyển khía cạnh quan trọng Internet có nhiều loại máy tính hệ điều hành khác kết nối với Internet Nếu bạn viết chương trình Java để chạy hầu hết máy tính kết nối Internet, chương trình cần số cách thức để thực thi hệ điều hành khác Ví dụ, trường hợp applet, applet phải có khả tải xuống thực thi nhiều loại CPU, hệ điều hành, trình duyệt kết nối Internet Sẽ không thực tế cần nhiều phiên applet cho máy tính khác nhau, mã giống phải hoạt động tất máy tính Vì vậy, cần có số biện pháp để tạo mã thực thi, khả chuyển Như bạn tìm hiểu đây, chế giúp bảo đảm bảo mật giúp tạo khả khả chuyển Sự kỳ diệu Java: Bytecode Chìa khóa giúp Java giải vấn đề bảo mật tính khả chuyển mã trình biên dịch Java tạo mã thực thi Thay vậy, mã bytecode Bytecode tập lệnh tối ưu hóa mức độ cao, thiết kế để chạy hệ thống thực thi Java, gọi máy ảo Java (JVM - Java Virtual Machine) Về bản, ban đầu JVM thiết kế trình thông dịch mã bytecode Điều gây ngạc nhiên cho bạn nhiều ngôn ngữ Chương 1: Những kiến thức Java đại thiết kế để biên dịch thành mã thực thi vấn đề hiệu Tuy nhiên, chương trình Java thực thi JVM giúp giải vấn đề quan trọng liên quan đến chương trình chạy Web Sau số lý Việc dịch chương trình Java thành mã bytecode giúp cho việc chạy chương trình nhiều loại môi trường khác dễ dàng hơn, bạn cần cài đặt JVM cho tảng Sau JVM tồn hệ điều hành, chương trình Java chạy Nhớ rằng, với tảng, chi tiết JVM khác nhau, chúng hiểu mã bytecode Nếu chương trình Java biên dịch thành mã máy (loại mã máy tính hiểu thực thi được), với loại CPU có kết nối Internet cần phiên khác chương trình Và tất nhiên, không giải pháp khả thi Do đó, việc JVM đảm nhiệm thực thi mã bytecode phương pháp dễ dàng để tạo chương trình khả chuyển thực Việc thực thi JVM giúp cho chương trình Java an toàn hơn, JVM có khả kiểm soát chương trình Java ngăn chặn chương trình tạo tác động bên hệ thống Sự an toàn cải thiện hạn chế thiết lập ngôn ngữ Java Một chương trình thông dịch thường chạy chậm chương trình biên dịch thành mã thực thi Tuy nhiên, với Java, chênh lệch hai loại không lớn Bởi mã bytecode tối ưu hóa mức độ cao, nên việc sử dụng mã bytecode cho phép JVM thực thi chương trình nhanh nhiều so với bạn mong đợi Mặc dù ngôn ngữ thông dịch, cản trở Java biên dịch mã bytecode thành mã máy để nâng cao hiệu suất Vì lý này, công nghệ HotSpot giới thiệu không lâu sau phát hành Java HotSpot cung cấp trình biên dịch JIT (just-in-time compiler) cho mã bytecode Với trình biên dịch JIT tích hợp JVM, phần chọn mã bytecode biên dịch thành mã thực thi thời gian thực, tùy thuộc yêu cầu tối ưu hiệu suất Điều quan trọng bạn nên hiểu việc biên dịch toàn chương trình thành mã thực thi vào lần không hợp lý, Java tiến hành thao tác kiểm tra khác mà thực vào thời gian chạy Thay vào đó, trình biên dịch JIT biên dịch mã cần, suốt trình thực thi Hơn nữa, tất dãy bytecode biên dịch - biên dịch mã trường hợp hiệu cải thiện Các mã lại thông dịch Tuy nhiên, phương pháp just-in-time (đúng đoạn mã với số lượng - nơi - vào thời điểm cần thiết) tăng hiệu đáng kể Thậm chí mã bytecode biên dịch động, tính khả chuyển tính an toàn có hiệu lực JVM kiểm soát môi trường thực thi Java: Hướng dẫn cho người học - Lập trình hướng đối tượng Hỏi chuyên gia Câu hỏi: Tôi nghe loại chương trình Java đặc biệt có tên servlet Vậy servlet gì? Trả lời: Servlet mà chương trình nhỏ chạy server Cũng applet giúp mở rộng chức trình duyệt web (client), servlet giúp mở rộng chức web server Applet servlet tạo thành client/server Không lâu sau phát hành Java, với đời servlet, Java trở thành ngôn ngữ lập trình hữu ích phía server Như vậy, Java bao trùm hai phía kết nối client/server Mặc dù, việc viết chương trình servlet vượt phạm vi sách này, bạn tìm hiểu lập trình Java nâng cao, bạn muốn nghiên cứu sâu servlet (Thông tin servlet tìm thấy sách khác tác Java: The Complete Reference, Oracle Press/McGraw-Hill xuất bản) Các thuật ngữ thông dụng Java Phần tổng quan Java đầy đủ thiếu thuật ngữ thông dụng Java Mặc dù hai nhân tố thúc đẩy hình thành ngôn ngữ Java tính khả chuyển bảo mật, nhân tố lại đóng vai trò quan trọng việc định hình cho ngôn ngữ Java Đội thiết kế Java tổng kết nhân tố quan trọng Java cần phải đáp ứng danh sách thuật ngữ thông dụng sau Đơn giản Java có tính tinh gọn, chặt chẽ, đơn giản để học sử dụng Bảo mật Java cung cấp chế bảo mật để tạo ứng dụng Internet an toàn Khả chuyển Các chương trình Java thực thi môi trường cài đặt máy ảo Java (hay hệ thống thực thi Java) Hướng đối tượng Java thể triết lý lập trình hướng đối tượng, đại Mạnh mẽ Java khuyến khích việc lập trình không lỗi cách định kiểu chặt chẽ thực chế run-time checking (cơ chế kiểm tra lỗi thời điểm chạy chương trình) Đa luồng Java hỗ trợ đầy đủ cho việc lập trình đa luồng Độc lập với kiến trúc Java không hạn chế cho loại máy kiến trúc hệ điều hành cụ thể Thông dịch Java hỗ trợ mã chạy nhiều tảng thông qua việc sử dụng mã bytecode Java Chương 1: Những kiến thức Java Hiệu cao Mã bytecode Java tối ưu hóa cao tốc độ thực thi Phân tán Java thiết kế với ý tưởng dành cho môi trường phân tán Internet Động Các chương trình Java chứa đựng số lượng lớn thông tin giúp xác định kiểu liệu thời gian chạy (run-time type information), dùng để kiểm tra định quyền truy cập tới đối tượng vào thời gian chạy Hỏi chuyên gia Câu hỏi: Để giải vấn đề tính khả chuyển bảo mật, cần phải tạo ngôn ngữ máy tính Java; mà sửa lại ngôn ngữ C++ cho phù hợp? Nói cách khác, bạn tạo trình biên dịch C++ có khả xuất mã bytecode? Trả lời: Trong bạn tạo trình biên dịch C++ có khả sinh mã bytecode thay mã thực thi, C++ có tính cản trở bạn dùng để tạo chương trình Internet, đáng kể việc C++ hỗ trợ trỏ Con trỏ (pointer) địa đối tượng lưu trữ nhớ Sử dụng trỏ, chương trình C++ truy cập tài nguyên bên chương trình đó, nguyên vi phạm bảo mật Java không hỗ trợ trỏ, loại trừ vấn đề Lập trình hướng đối tượng Tâm điểm Java lập trình hướng đối tượng (OOP - object-oriented programming) Phương pháp luận hướng đối tượng tách rời Java tất chương trình Java, chừng mực đó, hướng đối tượng Bởi tầm quan trọng OOP Java, việc hiểu rõ nguyên tắc OOP trước bạn viết dù chương trình Java đơn giản quan trọng OOP phương pháp hữu hiệu để tiếp cận công việc lập trình Phương pháp luận lập trình thay đổi đáng kể từ máy tính đời, chủ yếu để phù hợp với mức độ phức tạp ngày tăng chương trình Ví dụ, vào thời kỳ đầu máy tính phát minh, lập trình thực cách bật tắt lệnh máy nhị phân sử dụng bảng điều khiển phía trước (front panel) máy tính Phương pháp sử dụng chương trình dài vài trăm lệnh Khi quy mô chương trình lớn hơn, hợp ngữ (assembly language) phát minh để giúp lập trình viên xử lý chương trình lớn 10 Java: Hướng dẫn cho người học - Lập trình hướng đối tượng hơn, phức tạp cách sử dụng ký hiệu đại diện cho lệnh máy tính Khi quy mô chương trình tiếp tục phát triển, ngôn ngữ cấp cao đời cung cấp cho lập trình viên thêm công cụ để xử lý vấn đề phức tạp Ngôn ngữ phổ biến FORTRAN Mặc dù FORTRAN có bước khởi đầu ấn tượng, ngôn ngữ hỗ trợ chương trình rõ ràng, dễ hiểu Những năm 1960 khai sinh phương pháp lập trình cấu trúc (structured programming) Đây phương pháp hỗ trợ ngôn ngữ C Pascal Việc sử dụng ngôn ngữ có cấu trúc giúp cho công việc viết chương trình có độ phức tạp vừa phải dễ dàng Những nét đặc trưng ngôn ngữ có cấu trúc bao gồm việc hỗ trợ chương trình đứng độc lập, biến cục bộ, cấu trúc điều khiển phong phú, thiếu tin cậy chương trình dùng lệnh GOTO Mặc dù ngôn ngữ lập trình có cấu trúc công cụ hữu hiệu, chúng tồn hạn chế dự án trở nên lớn Hãy lưu ý đến điều này: Mỗi giai đoạn phát triển lập trình, kỹ thuật công cụ tạo nhằm giúp lập trình viên giải vấn đề độ phức tạp chương trình ngày tăng lên Mỗi nấc thang phát triển, cách tiếp cận kế thừa nhân tố tốt phương pháp trước phát triển thêm nhân tố Trước OOP đời, nhiều dự án tiến gần (hoặc vượt quá) ranh giới mà cách tiếp cận có cấu trúc xử lý Các phương pháp hướng đối tượng tạo nhằm giúp lập trình viên phá bỏ rào cản Lập trình hướng đối tượng mang ý tưởng tốt lập trình cấu trúc kết hợp thêm số khái niệm Kết tạo cách tổ chức chương trình Nhìn chung, chương trình tổ chức theo hai cách: theo mã nguồn chương trình (những diễn ra) theo liệu chương trình (những chịu tác động) Chỉ sử dụng kỹ thuật lập trình có cấu trúc, chương trình thông thường tổ chức theo mã nguồn Có thể coi cách tiếp cận “mã thao tác lên liệu” (code acting on data) Các chương trình lập trình hướng đối tượng hoạt động theo cách khác Chúng tổ chức theo liệu, với nguyên tắc chủ yếu “dữ liệu kiểm soát việc truy cập tới mã” (data controlling access to code) Trong ngôn ngữ lập trình hướng đối tượng, bạn định nghĩa liệu đoạn chương trình phép thao tác lên liệu Vì vậy, kiểu liệu định xác loại thao tác áp dụng liệu Nhằm hỗ trợ cho nguyên lý lập trình hướng đối tượng, tất ngôn ngữ OOP, kể Java, thường bao gồm ba đặc điểm: tính đóng gói (encapsulation), tính đa hình (polymorphism), kế thừa (inheritance) Chúng ta tìm hiểu thêm đặc điểm Tính đóng gói Tính đóng gói (encapsulation) chế lập trình ràng buộc mã liệu mà xử lý lại với nhau, giữ chúng an toàn tránh can thiệp bên sử dụng không Trong ngôn ngữ lập trình hướng đối tượng, mã liệu ràng buộc với theo cách mà hộp đen kín tạo Bên hộp tất liệu mã cần thiết Khi mã liệu liên kết với theo kiểu này, đối tượng tạo Nói cách khác, đối tượng cấu hỗ trợ tính đóng gói 20 Java: Hướng dẫn cho người học - Lập trình hướng đối tượng var1 chứa giá trị 1024 var2 chứa giá trị var1 / 2: 512 Chương trình giới thiệu vài khái niệm Đầu tiên, câu lệnh int var1; // câu lệnh khai báo biến khai báo biến có tên var1, thuộc kiểu integer Trong Java, tất biến phải khai báo trước chúng sử dụng Hơn nữa, kiểu giá trị mà biến lưu trữ (hay kiểu biến) phải định Trong trường hợp này, var1 lưu trữ giá trị số nguyên (integer) Đây giá trị số phần lẻ thập phân Trong Java, để khai báo biến kiểu integer, đặt từ khóa int vào trước tên biến Do đó, câu lệnh khai báo biến có tên var1, kiểu int Dòng khai báo biến thứ hai có tên var2: int var2; // câu lệnh khai báo biến Chú ý dòng lệnh sử dụng định dạng với dòng lệnh đầu tiên, ngoại trừ tên biến khác Tóm lại, để khai báo biến bạn dùng câu lệnh sau: kiểu tên-biến; Ở đây, kiểu định kiểu biến khai báo, tên-biến tên biến Ngoài kiểu int, Java hỗ trợ số kiểu liệu khác Dòng mã sau gán giá trị 1024 cho var1: var1 = 1024; // câu lệnh gán giá trị 1024 cho var1 Trong Java, toán tử gán dấu Toán tử gán chép giá trị phía bên phải vào biến phía bên trái Dòng mã in chuỗi "var1 chứa giá trị " theo sau giá trị var1: System.out.println("var1 chứa giá trị" + var1); Trong câu lệnh này, dấu cộng làm cho giá trị biến var1 hiển thị sau chuỗi phía trước Cách làm tổng quát Sử dụng toán tử +, bạn xâu chuỗi nhiều phần tử câu lệnh println( ) Dòng mã gán giá trị cho biến var2 giá trị phép chia var1 cho 2: var2 = var1 / 2; Dòng mã chia giá trị var1 cho 2, sau lưu kết vào var2 Vì vậy, sau dòng mã thực thi, var2 lưu giá trị 512 Giá trị var1 không bị thay đổi Giống hầu hết ngôn ngữ lập trình khác, Java hỗ trợ đầy đủ loại toán tử số học, bao gồm toán tử sau: + * / Phép cộng Phép trừ Phép nhân Phép chia Chương 1: Những kiến thức Java 21 Sau hai dòng chương trình: System.out.print("var2 chứa giá trị var1 / 2: "); System.out.println(var2); Đoạn mã có hai điểm Đầu tiên phương thức có sẵn print( ) sử dụng để hiển thị chuỗi "var2 chứa giá trị var1 / 2: " Sau chuỗi không tạo dòng Điều nghĩa liệu đầu tạo ra, bắt đầu dòng Phương thức print( ) giống println( ), ngoại trừ việc không tạo dòng sau lời gọi Trong lời gọi println( ) thứ hai, lưu ý var2 sử dụng Cả print( ) println( ) dùng để in giá trị kiểu liệu có sẵn Java Một lưu ý khai báo biến trước chuyển sang phần là: Có thể khai báo hai nhiều biến câu lệnh khai báo Chỉ việc phân tách tên biến dấu phẩy Ví dụ, khai báo biến var1 var2 sau: int var1, var2; // hai biến khai báo // dòng lệnh Kiểu liệu khác Trong chương trình trước, biến kiểu int sử dụng Tuy nhiên, biến kiểu int lưu trữ số nguyên Vì vậy, dùng để lưu số có phần thập phân Ví dụ, biến kiểu int lưu giá trị 18, lưu giá trị 18.3 (1) (tương ứng với số 18,3 theo cách viết Việt Nam) May thay, int vài kiểu liệu định nghĩa Java Để cho phép số có phần thập phân, Java định nghĩa hai kiểu dấu chấm động: kiểu float double, tương ứng đại diện cho giá trị có độ xác đơn kép Trong hai kiểu liệu trên, double thường sử dụng nhiều Để khai báo biến kiểu double, sử dụng câu lệnh tương tự đây: double x; Trong x tên biến, có kiểu double Bởi x thuộc kiểu dấu chấm động, nên lưu giá trị 122.23, 0.034, -19.0 Để hiểu rõ khác biệt int double, tìm hiểu chương trình sau: /* */ Chương trình minh họa khác biệt kiểu int kiểu double Tên file chương trình Example3.java class Example3 { public static void main(String args []) { int var; // dòng lệnh khai báo biến kiểu int double x; // dòng lệnh khai báo biến kiểu dấu chấm động Trong sách này, quy ước viết số theo quy cách tiếng Anh số liên quan trực tiếp đến mã chương trình viết số theo quy cách tiếng Việt trường hợp lại 22 Java: Hướng dẫn cho người học - Lập trình hướng đối tượng var = 10; // gán giá trị 10 cho biến var x = 10.0; // gán giá trị 10.0 cho biến x System.out.println("Giá trị ban đầu var là: " + var); System.out.println("Giá trị ban đầu x là: " + x); System.out.println(); // in dòng trống // bây giờ, chia hai biến cho var = var / 4; x = x / 4; } } System.out.println("Giá là: System.out.println("Giá là: trị " + trị " + Xuất dòng trống biến var sau phép chia var); biến x sau phép chia x); Kết chương trình sau: Giá trị ban đầu var là: 10 Giá trị ban đầu x là: 10.0 Giá trị biến var sau phép chia là: Giá trị biến x sau phép chia là: 2.5 Phần thập phân bị Phần thập phân bảo tồn Như bạn thấy, var chia cho 4, phép chia số nguyên thực hiện, kết thu - phần thập phân bị Tuy nhiên, x chia cho 4, phần thập phân bảo toàn kết xác hiển thị Có điểm khác đáng ý chương trình Để hiển thị dòng trống, bạn cần đơn giản gọi lệnh println( ) đối số Hỏi chuyên gia Câu hỏi: Tại Java có kiểu liệu khác cho giá trị số nguyên số có dấu chấm động? Tại tất giá trị số kiểu? Trả lời: Java cung cấp kiểu liệu khác để bạn viết chương trình hiệu Ví dụ, phép tính toán học với số nguyên nhanh số có dấu chấm động Vì vậy, không cần giá trị thập phân, bạn không cần chịu thêm phụ phí thời gian liên quan đến kiểu float double Thứ hai, dung lượng nhớ cần để lưu trữ kiểu liệu khác khác Bằng cách cung cấp kiểu liệu khác nhau, Java cho phép bạn tận dụng tài nguyên hệ thống tốt Cuối cùng, số thuật toán đòi hỏi (hoặc thích hợp) sử dụng kiểu liệu cụ thể Tóm lại, Java cung cấp số kiểu liệu có sẵn nhằm đem lại cho bạn linh hoạt cao Chương 1: Bài thực hành 1-1 Những kiến thức Java 23 Chuyển đổi Gallon sang Lít Mặc dù chương trình ví dụ minh họa vài đặc trưng quan trọng ngôn ngữ Java, chúng không hữu ích nhiều Thậm chí bạn nhiều Java thời điểm này, bạn dùng kiến thức học để tạo chương trình thực tế Trong tập này, tạo chương trình chuyển đổi từ đơn vị gallon (một đơn vị đo thể tích Mỹ) sang đơn vị lít Chương trình hoạt động cách khai báo hai biến double Biến thứ lưu số lượng gallon biến thứ hai lưu số lượng lít sau chuyển đổi Một gallon tương ứng với 3,7854 lít Vì vậy, để đổi gallon sang lít, giá trị gallon nhân với 3,7854 Chương trình hiển thị số gallon số lít tương ứng GalToLit.java Tạo file có tên GalToLit.java Nhập chương trình sau vào file: /* Bài thực hành 1-1 Đây chương trình chuyển đổi gallon sang lít */ Tên file chương trình GalToLit.java class GalToLit { public static void main(String args[]) { double gallons; // biến lưu số lượng gallon double liters; // biến lưu kết chuyển đổi sang lít gallons = 10; // bắt đầu với giá trị 10 gallon liters = gallons * 3.7854; // chuyển đổi sang lít } } System.out.println(gallons + " gallon " + liters + " lít."); Biên dịch chương trình sử dụng dòng lệnh sau đây: javac -encoding UTF-8 GalToLit.java Chạy chương trình sử dụng dòng lệnh sau: java GaltoLit Bạn nhìn thấy kết sau: 10.0 gallon 37.854 lít Chương trình thực chuyển đổi 10 gallon sang lít Tuy nhiên, cách thay đổi giá trị gán cho biến gallons, bạn có chương trình chuyển đổi số lượng gallon khác sang giá trị lít tương ứng 24 Java: Hướng dẫn cho người học - Lập trình hướng đối tượng Hai câu lệnh điều khiển Bên phương thức, trình thực thi chuyển từ câu lệnh sang câu lệnh kế tiếp, theo thứ tự từ xuống Tuy nhiên, thay đổi luồng nhờ sử dụng câu lệnh điều khiển chương trình khác Java hỗ trợ Mặc dù, xem xét kỹ lệnh điều khiển sau, hai lệnh giới thiệu sơ lược sử dụng chúng để viết chương trình ví dụ Câu lệnh If Bạn thực thi có chọn lọc phần chương trình nhờ sử dụng câu lệnh điều kiện Java: câu lệnh if Lệnh if Java hoạt động tương tự lệnh IF ngôn ngữ khác Dạng đơn giản câu lệnh if sau: if (điều-kiện) câu-lệnh; Ở đây, điều-kiện biểu thức lôgíc (Boolean) Nếu điều-kiện câu lệnh thực thi Nếu điều-kiện sai, câu lệnh bị bỏ qua Sau ví dụ: if (10 < 11) System.out.println("10 nhỏ 11"); Trong trường hợp này, 10 nhỏ 11, nên biểu thức điều kiện lệnh println( ) thực thi Tuy nhiên, xem xét câu lệnh sau: if (10 < 9) System.out.println("dòng không hiển thị"); Trong trường hợp này, 10 không nhỏ Vì vậy, lời gọi lệnh println( ) không xảy Java định nghĩa đầy đủ toán tử quan hệ, dùng biểu thức điều kiện Bảng liệt kê toán tử quan hệ này: Toán tử Ý nghĩa < Nhỏ Lớn >= Lớn == Bằng != Không Chú ý phép kiểm tra hai dấu Sau chương trình minh họa lệnh if: Chương 1: /* */ Những kiến thức Java 25 Minh họa câu lệnh if Tên file chương trình IfDemo.java class IfDemo { public static void main(String args[]) { int a, b, c; a = 2; b = 3; if (a < b) System.out.println("a nhỏ b"); // câu lệnh không hiển thị chữ if(a == b) System.out.println("bạn không nhìn thấy dòng này"); System.out.println(); c = a - b; // c chứa giá trị -1 System.out.println("c chứa giá trị -1"); if(c >= 0) System.out.println("c số âm"); if (c < 0) System.out.println("c số âm"); System.out.println(); c = b - a; // c chứa giá trị } } System.out.println("c chứa giá trị 1"); if(c >= 0) System.out.println("c số âm"); if (c < 0) System.out.println("c số âm"); Kết chương trình: a nhỏ b c chứa giá trị -1 c số âm c chứa giá trị c số âm 26 Java: Hướng dẫn cho người học - Lập trình hướng đối tượng Lưu ý rằng, chương trình này, dòng lệnh int a, b, c; khai báo ba biến, a, b, c cách sử dụng danh sách phân tách dấu phẩy Như đề cập trên, cần khai báo hai nhiều biến thuộc kiểu, bạn khai báo chúng câu lệnh Chỉ cần phân tách tên biến dấu phẩy Vòng lặp for Bạn thực thi lặp lại đoạn mã cách tạo vòng lặp (loop) Java cung cấp số loại cấu trúc vòng lặp hữu hiệu Chúng ta tìm hiểu cấu trúc số này, vòng lặp for Dạng đơn giản vòng lặp for thể đây: for (giá-trị-khởi-tạo; điều-kiện; bước-lặp) câu-lệnh; Trong đó, phần giá-trị-khởi-tạo thiết lập cho biến điều khiển vòng lặp giá trị ban đầu Điều-kiện biểu thức lôgíc, thực kiểm tra biến điều khiển vòng lặp Nếu kết kiểm tra có giá trị true (đúng), vòng lặp for tiếp tục lặp lại Nếu kết kiểm tra false (sai), vòng lặp kết thúc Biểu thức bước-lặp định việc thay đổi giá trị biến điều khiển sau lần vòng lặp thực lại Sau chương trình ngắn minh họa vòng lặp for: /* */ Minh họa vòng lặp for Tên file chương trình ForDemo.java class ForDemo { public static void main(String args(]) { int count; Vòng lặp lặp năm lần for(count = 0; count < 5; count = count + 1) System.out.println("Đây lần lặp: " + count); } } System.out.println("Kết thúc!") ; Kết chương trình sau: Đây Đây Đây Đây Đây Kết lần lần lần lần lần thúc! lặp: lặp: lặp: lặp: lặp: Chương 1: Những kiến thức Java 27 Trong ví dụ này, count biến điều khiển vòng lặp thiết lập giá trị phần khởi tạo vòng lặp for Bắt đầu lần lặp (bao gồm lần lặp đầu tiên), việc kiểm tra điều kiện count < thực Nếu kết có giá trị true, lệnh println( ) thực thi, biểu thức bước lặp thực thi Quá trình tiếp tục đến kết kiểm tra điều kiện đạt giá trị false, thời điểm việc thực thi chuyển tới cuối vòng lặp Trong chương trình Java viết chuyên nghiệp, bạn không thấy phần bước lặp viết chương trình trên: count = count + 1; Lý Java cung cấp toán tử tăng đặc biệt giúp bạn thực phép tính hiệu hơn, toán tử tăng ++ (hai dấu cộng sát nhau) Toán tử tăng tăng toán hạng thêm đơn vị Bằng cách sử dụng toán tử này, câu lệnh viết lại sau: count++; Vì vậy, thông thường, vòng lặp for chương trình viết sau: for (count = 0; count < 5; count++) Bạn muốn chạy thử vòng lặp Bạn thấy rằng, vòng lặp chạy xác vòng lặp trước Java cung cấp toán tử giảm, toán tử - - Toán tử giảm toán hạng đơn vị Viết khối mã Một thành phần quan trọng khác Java khối mã (code block) Khối mã nhóm gồm hai hay nhiều câu lệnh Khối mã tạo cách bao quanh câu lệnh cặp dấu ngoặc móc mở đóng Sau khối mã tạo ra, trở thành đơn vị lôgíc, dùng vị trí hợp lệ với câu lệnh đơn Ví dụ, khối mã đối tượng câu lệnh if câu lệnh for Java Hãy xem câu lệnh if sau: if (w < h) { Bắt đầu khối v = w * h; w = 0; } Kết thúc khối Trong câu lệnh if này, w nhỏ h, hai câu lệnh bên khối mã thực thi Vì vậy, hai câu lệnh khối mã tạo thành đơn vị lôgíc, chúng thực thi tách rời Điểm then chốt cần liên kết lôgíc hai hay nhiều câu lệnh, bạn cần tạo khối mã Các khối mã giúp cho nhiều giải thuật cài đặt rõ ràng hiệu Sau ví dụ chương trình sử dụng khối mã để ngăn chặn phép chia cho 0: 28 Java: Hướng dẫn cho người học - Lập trình hướng đối tượng /* */ Minh họa khối mã Tên file chương trình BlockDemo.java class BlockDemo { public static void main{String args[]) { double i, j, d; i = 5; j = 10; // đối tượng thực thi câu lệnh if khối mã if(i != 0) { Đối tượng thực thi System.out.println("i khác 0"); câu lệnh if d = j / i; toàn khối mã System.out.print("j / i " + d); } } } Kết tạo chương trình: i khác j / i 2.0 Trong trường hợp này, đối tượng câu lệnh if khối mã, câu lệnh đơn Nếu biểu thức điều kiện điều khiển câu lệnh if đạt giá trị (như ví dụ ), ba câu lệnh bên khối mã thực thi Hãy thử thiết lập i theo dõi kết Bạn thấy toàn khối mã bị bỏ qua Hỏi chuyên gia Câu hỏi: Việc sử dụng khối mã gây cho chương trình chạy với hiệu suất thấp hay không? Nói cách khác, thực tế, Java có thực thi dấu { } không? Trả lời: Không Các khối mã không gây thêm phụ phí Thực tế, chúng giúp đơn giản hóa đoạn mã số thuật toán định, sử dụng chúng thường tăng tốc độ hiệu Ngoài ra, dấu ngoặc { } tồn mã nguồn chương trình Java không thực thi dấu ngoặc { hay } Như bạn thấy phần sau sách này, khối mã có thêm thuộc tính sử dụng theo số cách Tuy nhiên, lý tồn khối mã để tạo đơn vị lôgíc mã tách rời Chương 1: Những kiến thức Java 29 Dấu chấm phẩy vị trí Trong Java, dấu chấm phẩy dấu phân cách (separator) dùng để kết thúc câu lệnh Có nghĩa câu lệnh riêng biệt phải kết thúc với dấu chấm phẩy Nó điểm kết thúc thực thể lôgíc Như bạn biết, khối mã nhóm câu lệnh có quan hệ lôgíc, nằm cặp dấu ngoặc móc mở đóng Khối mã không kết thúc dấu chấm phẩy Vì khối mã nhóm gồm câu lệnh, với dấu chấm phẩy sau câu lệnh, điều có ý nghĩa khối mã không kết thúc dấu chấm phẩy; thay vào đó, kết thúc khối biểu thị dấu ngoặc móc đóng Java không nhận diện điểm kết thúc dòng kết thúc câu lệnh Vì lý này, bạn đặt câu lệnh vị trí dòng Ví dụ, Java x = y; y = y + 1; System.out.println(x + " " + y); Cũng giống với x = y; y = y + 1; System.out.println(x + " " + y); Hơn nữa, phần tử riêng biệt câu lệnh đặt dòng tách rời Ví dụ, câu lệnh sau hoàn toàn chấp nhận được: System.out.println("Đây dòng in hình dài" + x + y + z + "thêm liệu đầu ra"); Việc ngắt dòng mã dài theo kiểu thường dùng để làm cho chương trình dễ đọc Nó giúp ngăn ngừa việc dòng mã thấy hình dài Thói quen viết lùi đầu dòng Trong ví dụ trước, bạn để ý thấy số câu lệnh định viết lùi đầu dòng Java ngôn ngữ dạng tự do, nghĩa bạn đặt nhiều câu lệnh có liên quan đến dòng Tuy nhiên, qua nhiều năm, phong cách viết lùi đầu dòng trở nên thông dụng công nhận, giúp chương trình dễ đọc Cuốn sách tuân theo phong cách khuyến khích bạn nên làm Sử dụng phong cách này, sau dấu ngoặc mở, bạn viết lùi đầu dòng vào mức lùi mức sau dấu ngoặc đóng Một số lệnh khuyến khích viết lùi đầu dòng; lệnh trình bày sau 30 Java: Hướng dẫn cho người học - Lập trình hướng đối tượng Bài thực hành 1-2 Cải tiến chương trình chuyển đổi Gallon sang Lít Bạn sử dụng vòng lặp for, câu lệnh if, khối mã để tạo phiên cải tiến chương trình chuyển đổi gallon sang lít phát triển tập trước Phiên in bảng chuyển đổi, gallon kết thúc với 100 gallon Sau 10 gallon, dòng trống tạo Việc thực nhờ sử dụng biến có tên counter để đếm số dòng in Hãy đặc biệt ý đến cách sử dụng biến GalToLitTable.java Tạo file có tên GalToLitTable.java Nhập chương trình sau vào file: /* Bài thực hành 1-2 Chương trình hiển thị bảng chuyển đổi gallon sang lít Tên file chương trình "GalToLitTable.java" */ class GalToLitTable { public static void main(String args[]) { double gallons, liters; Biến đếm dòng thiết lập int counter; giá trị ban đầu } } } counter = 0; for(gallons = 1; gallons