Chương 1 TỔNG QUAN OVERVIEW Giảng viên: Tạ Việt Phương E-mail:phuongtv@uit.vn Nội dung 1. Giới thiệu Java 2. Các đặc trưng của Java 3. JDK (Java Development Kit) và packet của Java code API 4.
Các ứng dụng viết bằng Java 5. Cú pháp, kiểu dữ liệu, lập trình java, các toán tử, toán hạng trong java 6. Câu lệnh, các cấu trúc lệnh trong java 7. Nhập xuất dữ liệu (Java I/O) 2 GIỚI THIỆU JAVA 3 Giới thiệu Java ● Java là ngôn ngữ cấp cao (high-level), dựa trên lớp (class-based), là ngôn ngữ lập trình hướng đối tượng (object-oriented), được thiết kế để có càng ít phụ thuộc triển khai (implementation dependencies) càng tốt.
● Là ngôn ngữ lập trình có mục đích chung cho phép các nhà phát triển ứng dụng viết một lần, chạy ở mọi nơi (WORA - write once, run anywhere) 4 Giới thiệu Java ● Lịch sử phát triển ○ 1991: James Gosling (cùng Mike Sheridan và Patrick Naughton) tại Sun Microsystems phát triển OAK nhằm mục đích viết phần mềm điều khiển (phần mềm nhúng) cho các sản phẩm gia dụng. Tên ban đầu là OAK. Gosling đã thiết kế Java với cú pháp kiểu C/C++ ○ 1996: Sun đã phát hành bản triển khai công khai đầu tiên tên Java 1. ○ 2009-2010: Tập đoàn Oracle mua lại Sun Microsystems 6 Giới thiệu Java ● Xây dựng trên nền tảng C và C++ ● Sử dụng các cú pháp của C và các đặc trưng đối tượng của C++ ● Ngôn ngữ độc lập với thiết bị ● Không phụ thuộc vào trình biên dịch của CPU ● Java là ngôn ngữ lập trình hướng đối tượng 7 Giới thiệu Java ● Là ngôn ngữ lập trình vừa biên dịch, vừa thông dịch.
Đầu tiên mã nguồn được được biên dịch bằng công cụ JAVAC để chuyển thành dạng bytecode. Sau đó được thực thi trên từng loại máy cụ thể nhờ chương trình thông dịch ● Chạy trên bất kỳ phần cứng, không phụ thuộc vào hệ điều hành ● Trở thành ngôn ngữ lập trình Internet ● Xây dựng các chương trình điều khiển thiết bị cho điện thoại di động, PDA 8 Phiên bản ● Gồm 4 phiên bản: ○ Java Card cho smart-cards. ○ Java Platform, Micro Edition (Java ME) – nhắm mục tiêu các môi trường có tài nguyên hạn chế. ○ Java Platform, Standard Edition (Java SE) – nhắm mục tiêu môi trường máy trạm (workstation) ○ Java Platform, Enterprise Edition (Java EE) – nhắm mục tiêu đến các môi trường Internet hoặc doanh nghiệp.
○ Chủ yếu sử dụng Java SE trong chương trình học. 9 CÁC ĐẶC TRƯNG 10 Các đặc trưng của Java 1. Hướng đối tượng (Object-Oriented) 3. Độc lập phần cứng và hệ điều hành (Architecture-Neutral) 7.
Tính di động (Portable) 8. Hiệu suất cao (High-Performance) 10. Đơn giản So even though we found that C++ was unsuitable, we designed Java as closely to C++ as possible in order to make the system more comprehensible. Java omits many rarely used, poorly understood, confusing features of C++ that, in our experience, bring more grief than benefit.
Another aspect of being simple is being small. One of the goals of Java is to enable the construction of software that can run stand- alone on small machines. The size of the basic interpreter and class support is about 40K; the basic standard libraries and thread support (essentially a self-contained microkernel) add another 175K 12 1. Đơn giản ● Loại bỏ các đặc trưng phức tạp của C và C++ như : ○ Con trỏ ○ Định nghĩa chồng toán tử (operator overloading) ○ Không sử dụng lệnh goto ○ Không định nghĩa file header.h ○ Không dùng struct ○ Không dùng union 13 2.
Hướng đối tượng ● Thiết kế code xoay quanh mô hình hướng đối tượng ● Dữ liệu và các phương thức của một đối tượng được gói trong một lớp của java ■ Đảm bảo tính bảo mật ■ Thừa kế ■ Đa hình…vv ■ Không cho phép đa thừa kế (multi-inheritance) mà sử dụng các giao diện (interface). Phân tán ● Java có một thư viện rộng lớn các routines để đáp ứng với các giao thức TCP/IP như HTTP và FTP. Các ứng dụng Java có thể mở và truy cập các đối tượng trên Net thông qua các URL dễ dàng giống như khi truy cập một hệ thống tập tin cục bộ. ● Ngày nay, người ta coi điều này là hiển nhiên - nhưng vào năm 1995, việc kết nối với máy chủ web từ chương trình C++ hoặc Visual Basic là một công việc khá khó khăn.
Mạnh mẽ ● Phải khai báo kiểu dữ liệu tường minh trước ● Không sử dụng con trỏ và các phép toán trên con trỏ ● Không phải bận tâm về việc cấp phát và giải phóng vùng nhớ ● Cơ chế bẫy lỗi của java giúp đơn giản quá trình xử lý lỗi và phục hồi sau lỗi Java is intended for writing programs that must be reliable in a variety of ways. Java puts a lot of emphasis on early checking for possible problems, later dynamic (runtime) checking, and eliminating situations that are error-prone. The single biggest difference between Java and C/C++ is that Java has a pointer model that eliminates the possibility of overwriting memory and corrupting data. Bảo mật ● Java cung cấp nhiều mức để kiểm soán tính an toàn khi thực thi chương trình ■ Mức 1: Dữ liệu và phương thức được gói trong lớp ■ Mức 2: Trình biên dịch kiểm soát để đảm bảo mã an toàn và tuân theo các nguyên tắc của Java ■ Mức 3: Được đảm bảo bởi trình thông dịch, chúng kiểm tra xem bytecode có đảm bảo các quy tắc an toàn trước khi thực thi ■ Mức 4: Kiểm tra việc nạp các lớp vào bộ nhớ để giám sát việc vi phạm giới hạn truy xuất trước khi nạp vào hệ thống 17 6.
Độc lập với kiến trúc ● Độc lập với phần cứng và HĐH ● Chương trình viết ở một máy nhưng có thể chạy bất kỳ ở đâu. Chúng được thể hiện 2 mức: ■ Mã nguồn ■ Mức nhị phân ● Ở mức mã nguồn ■ Kiểu dữ liệu trong Java nhất quán cho tất cả các hệ điều hành và phần cứng khác nhau ■ Java có riêng một thư viện các lớp cơ sở 18 6. Độc lập với kiến trúc ● Tính độc lập ở mức nhị phân: ■ Một chương trình đã biên dịch có thể chạy trên nhiều nền (phần cứng, hệ điều hành) khác mà không cần dịch lại mã nguồn ■ Cần có phần mềm máy ảo java hoạt động như trình thông dịch tại máy thực thi 19 7. Tính di động ● Bản thân môi trường Java có thể dễ dàng chuyển sang các nền tảng khác, kiến trúc và hệ điều hành mới.
● Chương trình ứng dụng viết bằng ngôn ngữ Java chỉ cần chạy được trên máy ảo Java là có thể chạy được trên bất kỳ máy tính, hệ điều hành nào có máy ảo Java. “Viết một lần, chạy mọi nơi” (Write Once, Run Anywhere). Thông dịch ● Biên dịch (compiled) và thông dịch (interpreted) ■ Thông dịch là khi chạy chương trình, ngôn ngữ mới được dịch sang ngôn ngữ máy và thực thi ■ Biên dịch là trước khi chạy, chương trình sẽ dịch toàn bộ thành mã máy rồi mới tiến hành thực thi. ■ Trình biên dịch (compiler) và trình thông dịch (interpreter) là các loại trình dịch ngôn ngữ chuyển đổi các đoạn mã lập trình sang ngôn ngữ máy.
Thông dịch ● Ngôn ngữ thông dịch sẽ dễ hiện thực hơn do bỏ qua việc kiểm tra lỗi và tối ưu code thường được thực hiện trong quá trình compiled. Đồng thời hỗ trợ hoạt động đa nền tảng, mã nguồn có thể thực thi mọi nơi mọi lúc mà không cần biên dịch. ● Nhược điểm của thông dịch là: ■ Độ tin cập thấp hơn do không qua bước check syntax tại quá trình complier ■ Tốc độ thực thi chậm hơn đáng kể so với các ngôn ngữ trình biên dịch ■ Dễ bị lọt lộ dịch ngược code 22 8. Thông dịch ● Cách biên dịch truyền thống 23 8.
Thông dịch ● Cách biên dịch truyền thống ■ Các chương trình viết bằng C, C++,… trình biên dịch sẽ chuyển tập lệnh thành mã máy (machine code), hay lệnh của CPU. Những lệnh này phục thuộc vào CPU trên trên máy thực thi. ■ Với mỗi nền phần cứng khác nhau thì sẽ có một trình biên dịch khác nhau. ■ Dịch lại khi muốn chạy trên nền phần cứng khác khác 24 8.
Thông dịch ● Chương trình dịch Java 25 8. Thông dịch ● Chương trình dịch Java ● Môi trường phát triển của java gồm 2 phần: ■ Trình biên dịch (Javac) ■ Trình thông dịch ● Trình biên dịch (Javac) chuyển mã nguồn thành dạng bytecode ● Trình thông dịch (máy ảo java) ○ Máy ảo Java chuyển bytecode thành mã CPU 26 8. Thông dịch ● Chương trình dịch Java 27 8. Thông dịch ● Máy ảo Java (JVM- Java virtual Machine) ■ Là 1 phần mềm tập hợp các lệnh logic để xác định các hoạt động của máy tính (hệ điều hành thu nhỏ) ■ Trình biên dịch chuyển mã nguồn thành các tập lệnh của máy ảo ■ Trình thông dịch trên mỗi máy chuyển tập lệnh thành chương trình thự thi bằng cách ● Nạp file .class ● Quản lý bộ nhớ ● Dọn rác 28 8.
Thông dịch ● Mã nguồn được biên dịch thành Java bytecode; sau đó được thông dịch trên JVM thành các mã lệnh thực thi bởi trình thông dịch Just- In-Time (JIT) ● Trình thông dịch “Just In Time-JIT” ■ JIT: dùng để chuyển mã bytecode thành mã máy cụ thể cho từng loại CPU ■ Các trình duyệt web thông dụng : IE, Netscape đều có JIT để tăng tốc độ xử lý 29 8. Thông dịch ● Ví dụ: chương trình Hello World o Dùng Notepad soạn thảo đoạn lệnh bên dưới và lưu lại với tên HelloWorld.java Khai báo thư viện java.io import java.*; Định nghĩa lớp tên “HelloWorld” class HelloWorld { Bắt đầu đoạn lệnh public static void main(String args[]) { Phương thức main System.print(“Hello Class”); } } Xuất ra Console thông báo Kết thúc đoạn lệnh 30 8. Thông dịch ● Chương trình chạy Java 31 9. Hiệu suất cao ● Java nhanh hơn các ngôn ngữ lập trình thông dịch truyền thống khác vì mã Java Bytecode là " gần" với mã gốc.
Nó vẫn còn chậm hơn một chút so với ngôn ngữ được biên dịch ( C++). Java là một ngôn ngữ thông dịch, đó là lý do tại sao nó chậm hơn các ngôn ngữ được biên dịch. Đa luồng ● Chương trình Java đa luồng (Multithreading) để thực thi cách công việc song song ● Chương trình Java sử dụng kỹ thuật đa luồng để thực thi các công việc đồng thời, đa luồng cho phép nhiều tiến trình có thể chạy song song cùng một thời điểm và tương tác với nhau. Động ● Java là mã nguồn mở.
Kiểm soát truy cập lúc chạy giúp liên kết mã động ● Java được thiết kế như một ngôn ngữ động để đáp ứng cho những môi trường mở. Các chương trình Java bổ sung các thông tin cho các đối tượng tại thời gian thực thi. Điều này cho phép khả năng liên kết động các mã.