10 © Vũ Duy Linh Các đặc tính Java 1 Thân thiện, đơn giản và nhỏ gọn Familiar, simple, small Được biên dịch Compiled và được thông dịch Interpreted An toàn, bảo mật Secure: Kiểm
Trang 1Giảng viên: Vũ Duy Linh Email: vdlinh@ctu.edu.vn
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG JAVA
Object-Oriented Programming in Java
Version 1.1
Trang 2Chương 1 Tổng quan về ngôn ngữ lập trình Java
Giảng viên: Vũ Duy Linh Email: vdlinh@ctu.edu.vn
Trang 33
© Vũ Duy Linh Java – Giới thiệu
Là ngôn ngữ lập trình mới, được phát triển bởi Sun Microsystems vào năm 1991
Phiên bản đầu tiên gọi là Oak do James Gosling phát triển
Năm 1995 tên chính thức được gọi là Java
Một số Nhà phát triển Java: James Gosling, Arthur Van, Karl Jacob và một số nhân vật nổi bật khác
Trang 44
© Vũ Duy Linh Tổng quan về Java SE 7
Java SE Development Kit (JDK) 7 và Java SE Runtime Environment (JRE) 7:
Trang 55
© Vũ Duy Linh Môi trường JRE
Máy tính ảo Java (Java Virtual
Machine): Sẽ tạo ra một môi trường để thực thi các lệnh bằng cách nạp các file.class, quản lý
bộ nhớ và dọn rác,…
Mã nguồn
Trang 66
© Vũ Duy Linh Sơ đồ thực thi chương trình
Với Java, mọi hệ điều hành là một!
Tập tin mã nguồn java Mã trung gian - Byte code Mã máy - Machine code
Mã nhị phân -Binary code
Trang 77
© Vũ Duy Linh Cấu trúc thư mục chương trình
Byte code files
Source code files
Trang 88
© Vũ Duy Linh Sự khác biệt giữa 2 loại kiến trúc mã
Kiến trúc phụ thuộc (Architecture dependent): SưCSử dụng
kiến trúc mã không trung gian Các ngôn ngữ như: C/C++, Pascal
Trang 99
© Vũ Duy Linh Sự khác biệt giữa 2 loại kiến trúc mã
Kiến trúc độc lập (Architecture independent): Sử dụng kiến trúc mã
trung gian mà ngôn ngữ Java đã tạo nên một cuộc cách mạng mới: Write once, run anywhere
/* Giống nhau với mọi platform */
/* Khác nhau trên mỗi flatform */
Trang 1010
© Vũ Duy Linh Các đặc tính Java (1)
Thân thiện, đơn giản và nhỏ gọn (Familiar, simple, small)
Được biên dịch (Compiled) và được thông dịch (Interpreted)
An toàn, bảo mật (Secure): Kiểm tra an toàn trước từng bước (ngôn ngữ biên dịch thực thi: tính đóng gói java class class loader machine code) Từ bên ngoài không thể xâm nhập vào chương trình được
Kiến trúc mã trung gian (Architecture neutral ): Sinh mã bytecode - Độc lập với hệ điều hành và có thể chạy ở mọi hệ điều hành
(platform)
Khả chuyển (Portable): JVM dựa trên nền tảng chính POSIX (Portable Operating System Interface [for Unix]) – Giao diện hệ điều hành linh động: cung cấp mã nguồn di động cho các thiết bị đầu cuối, ngoại vi
Trang 1111
© Vũ Duy Linh Các đặc tính Java (2)
Hướng đối tượng (Object-oriented)
Hiệu suất cao (High performance): Có cơ chế hỗ trợ trình thông dịch chạy ở tốc độ tối đa, cơ chế dọn rác (garbage) tự động,…
Mạnh mẽ (Robust): Định kiểu mạnh, tường minh
Phân tán (Distribution): Hỗ trợ TCP, UDP, Socket và Network communication: Applets, servlets, aglets – hệ thống mobile agents, remote method invocation (RMI), Common Object Request Broker Architecture (CORBA)
Đa tuyến đoạn (Multithreads)
Tính động (Dynamic): Ở thời điểm run-time, các file.class được liên kết khi cần
Trang 1212
© Vũ Duy Linh Một số khác biệt với C++
Không có Typedefs, Defines, hoặc Preprocessor
Không có biến toàn cục: "Global variables are bad"
Không hỗ trợ lệnh Goto
Không có con trỏ số học (pointer arithmetic): Trong
Java, hầu hết sự phức tạp và rắc rối cố hữu liên quan đến con trỏ đều được bỏ đi nhằm tạo ra một ngôn ngữ trong sáng, giản đơn
Không hỗ trợ các cấu trúc không an toàn: Java không
có kiểu struct
Không có đa thừa kế (Multiple inheritance)
Không có nạp chồng toán tử (Operator overloading)
Không có ép kiểu tự động (Automatic coercions)
Trang 1414
© Vũ Duy Linh Các loại chương trình của Java
Có thể phát triển 2 loại chương trình Java:
Các chương trình chạy độc lập (Stand-alone applications): Có chứa phương thức “main” và có thể chạy từ dòng lệnh thông qua trình thông dịch Java
Các chương trình Web (Web applications/ applets): Không chứa phương thức “main” và là chương trình được nhúng vào trang web và được chạy khi trang web được duyệt
Trang 1515
© Vũ Duy Linh Java Development Kit
javac: Trình biên dịch java
java: Trình thông dịch java: Chạy ứng dụng độc lập
jdb : Gỡ rối (Java Debugger)
appletviewer : Chạy ứng dụng applets
javap - to print the Java bytecodes
javaprof - Java profiler
javadoc - documentation generator
javah - creates C header files
Trang 1616
© Vũ Duy Linh Ứng dụng Standalone
Java source: Hello_StandAloneApp.java
public class Hello_StandAloneApp {
public static void main(String args[]) {
System.out.println("Hello! Stand alone application.");
Trang 1717
© Vũ Duy Linh Ứng dụng applet
Java source: Hello_AppletApp.java
import java.applet.Applet;
import java.awt.*;
public class Hello_AppletApp extends Applet {
public void paint(Graphics g) {
g.drawString ("Hello! Applet application.", 25, 25);
}
}
Tạo trang web: Hello_AppletApp.html
<HTML>
<TITLE> JAVA APPLET APPLICATION</TITLE>
<APPLET CODE="Hello_AppletApp.class” width=250 height=100>
</APPLET>
</HTML>
Trang 1818
© Vũ Duy Linh Duyệt trang web
Duyệt trang web bằng trình duyệt FireFox, IE,…
Address: [path] Hello_AppletApp.html
Trang 1919
© Vũ Duy Linh Cài đặt môi trường phát triển ứng dụng Java
Gồm 2 bước:
cụ phát triển Java, bao gồm cả môi trường JRE (Java Runtime Environment) vào hệ thống máy tính để chạy Java applications và Applets
a Đơn giản: NotePad, WordPad, EditPlus,…
JDeveloper IDE, JCreator IDE
Trang 2020
© Vũ Duy Linh Số liệu thống kê
Lịch sử 2004-2013:
Trang 2121
© Vũ Duy Linh Số liệu thống kê (3)
Hiện tại năm 2014:
Trang 2222
© Vũ Duy Linh Số liệu thống kê (2)
Ngôn ngữ kịch bản (Client-side scripting):
Trang 23Chương 2 Kiểu dữ liệu và cấu trúc lệnh điều khiển
Giảng viên: Vũ Duy Linh Email: vdlinh@ctu.edu.vn
Trang 245 public class ProgramName{
6 // Khai báo các biến
7
8 // Định nghĩa các phương thức
9
10 //Định nghĩa phương thức main
11 public static main(String args[]){
12 // Phần thân phương thức main
Ở phần cơ bản này, chúng ta sử dụng phương pháp lập trình dựa
trên đối tượng Object-Based Programming (OBP) để minh hoạ:
Trang 2525
© Vũ Duy Linh Chương trình Java cơ bản
1 /* Author: Vũ Duy Linh
2 Topic: A very simple stand-alone application in java
3 File name: HelloWorld java
4 */
5 import java.lang.*;
6 public class HelloWorld {
7 public static void main( String args[ ] ) {
8 System.out.println( “Hello world! " );
9 }
10 }
import: Từ khóa khai báo sử dụng gói (package) cần có trong chương trình
class: Từ khóa khai báo lớp
public, static: Access modifiers – các bổ từ truy cập
void: Kiểu giá trị trả về của phương thức
args[ ]: Các đối số nhập từ dòng lệnh
Trang 2626
© Vũ Duy Linh Biên dịch và thực thi
Biên dịch
Out file: HelloWorld.class
Thực thi
Kết quả: Hello world!
Trang 2727
© Vũ Duy Linh Một số lưu ý thêm (1)
Gói java.lang.* được import một cách mặc định nên lệnh
System.out.println(); chính là java.lang System.out.println();
Tên đầy đủ - Fully qualified name
Trang 2828
© Vũ Duy Linh Một số lưu ý thêm (2)
Cách sử dụng đối số từ dòng lệnh:
Gõ lệnh: java FullName_App Vu Duy Thuc
Các đối số: args[0] = Vu , args[1] = Duy , args[2] = Thuc
Từ khoá public: Phạm vi truy cập mọi nơi
Phương thức static: là phương thức chỉ được phép truy cập tới các biến static của lớp (do đã được fix sẵn bộ nhớ) và có thể gọi mà không cần khởi tạo đối tượng của lớp chứa nó
Từ khoá void: Phương thức không trả về (return;) giá trị nào cả
Trang 2929
© Vũ Duy Linh Tính căn bậc 2
// CanBac2.java
import java.lang.Math;
public class CanBac2 {
public static void main(String args []) {
Trang 30float 32 bit -3.40292347E+38 đến +3.40292347E+38
double 64 bit -1.79769313486231570E+308 đến
+1.79769313486231570E+308
Kiểu nguyên thuỷ (Primitive data type): là
kiểu mà các phép toán được dịch trực tiếp
sang các lệnh của máy (operational data)
Trang 3131
© Vũ Duy Linh Biến
biến gồm một số ô nhớ được định danh (duy nhất) bởi một định danh, đó chính là tên biến Đây là cách thức thường xuyên được dùng trong lập trình, dùng để chứa một giá trị nào đó có thể thay đổi trong quá trình thực thi chương trình
Quy tắc đặt tên biến
Bắt đầu bằng chữ cái, dấu gạch dưới (_) hoặc dấu dollard ($), không
có khoảng trắng giữa tên, không trùng với các từ khoá,… Lưu ý:
Java phân biệt chữ hoa chữ thường
Ví dụ:
• Tên biến đúng: myList1, double_X1, luongCoBan,…
• Tên biến sai: my List1, 2nghiem, luong-Co-Ban,…
Cách khai báo và khởi tạo:
Cách 1: kiểu_nguyên_thuỷ tên_Biến;
tên_Biến = giá_trị;
Cách 2: kiểu_nguyên_thuỷ tên_Biến = giá_trị;
Trang 3232
© Vũ Duy Linh Kiểu dữ liệu nguyên thủy (2)
Mỗi biến được khai báo chỉ tồn tại trong phạm vi (scope) của nó – tương tự như ngôn ngữ C đã học
Các ví dụ:
Khai báo (tên) biến a kiểu (nguyên thuỷ) int, gán giá trị của biến a bằng 40
int a; a = 40;
a: tên biến, kiểu là int, và giá trị của a là 40
double diemThi =9.5; //biến số thực diemThi bằng 9.5
int octVal = 032; int hexVal = 0x1a; char characterC = 'C';
unicodeC='\u1EE9'; (Java sử dụng UTF-16)
String hoTen = "Ch \u00e0 o b \u00e9 : V \u0169 \u0020 Duy \u0020 Th \u1EE9 c!"
0
a
40
a
Trang 3333
© Vũ Duy Linh Cấp phát trên bộ nhớ
Cho đoạn lệnh Java:
int a = 10; int b;
b = a; a += 10;
Trang 3434
© Vũ Duy Linh Hằng
Hằng (Constant): cũng tương tự như biến ngoại trừ nó giữ một
giá trị cố định (hay được gọi là các biến chỉ đọc)
Chúng được khai báo bởi từ khóa final
final int SI_SO = 100;
final double PI = 3.1428;
Kiểu chữ in hoa thường được dùng để đặt tên cho các hằng
Trang 35double bk = 5.5; // ban kinh double dt; // dien tich
dt = PI * bk * bk
System.out.println("Ban kinh= "+ bk + ", dien tich= " + dt);
} }
Trang 36Với: boolean_expression: Là biểu thức lô-git đúng/sai,
statement: Biểu thức tính/câu lệnh
Trang 3838
© Vũ Duy Linh switch (2)
Kết quả: Gia tri bien c KHONG la 'a' hoac 'b' ma la 'V'
Ví dụ:
Trang 4040
© Vũ Duy Linh
while (boolean_expression) { statement(s)
}
Sẽ lặp cho đến khi điều kiện trở thành false
Lệnh lặp While
Trang 42 Return_type: Kiểu dữ liệu của kết quả trả về
• void: Không trả về giá trị nào cả (return; )
• Chỉ có thể trả về tối đa giá trị của một kiểu dữ liệu
Ví dụ: phương thức tính diện tích hình tròn có 1 tham số hình thức
protected double tinhDienTich( double r){
return (Math.PI*Math.pow(r,2);
}
Phương thức
Trang 4343
© Vũ Duy Linh Ví dụ
Giải phương trình bậc 2 theo OBP, gồm 2 lớp: PTB2 và LopChinh
Trang 4444
© Vũ Duy Linh Ví dụ (2)
Trang 45Chương 3 Khái niệm về thiết kế hướng đối tượng
Giảng viên: Vũ Duy Linh Email: vdlinh@ctu.edu.vn
Trang 4646
© Vũ Duy Linh Các mẫu hình lập trình
Mẫu hình lập trình tuần tự (Imperative paradigm)
Mẫu hình lập trình mô tả (Declarative paradigm)
Lập trình hàm (Functional programming)
Lập trình logic (Logic programming )
Mẫu hình lập trình hướng đối tượng (Object-oriented paradigm)
Mẫu hình lập trình hướng định dạng/khía cạnh (Aspect-oriented
paradigm)
Trang 4747
© Vũ Duy Linh Mô hình lập trình tuần tự
Phục vụ cho thời kỳ đầu máy tính và ngôn ngữ asembler
Cách làm tuần tự từng bước by-step) để cụ thể hóa bài toán được làm như thế nào (how to get sth)
(step- Các biến được đại diện trong bộ nhớ
Sử dụng lệnh gán để thay đổi trị biến
Các ngôn ngữ tiêu biểu: Algol, Pascal, C, Ada
procedure Fibo(n: integer);
var a, b, kq: integer;
begin
a := 0; b:=1;kq:=0;
while (kq < n) do begin
kq := q + b; write(kq:4);
a = b; b = kq;
end;
end;
Trang 48 Ước lượng các hàm toán học
Không làm thay đổi dữ liệu
Chương trình chính là một tập các hàm
Các ngôn ngữ tiêu biểu: Lisp, Refal, Perl, Planer,…
Lập trình logic:
Xác định kết suy diễn của bài toán là thành công hay thất bại
Dựa vào một tập các phép logic được định nghĩa: các sự kiện/tiên đề, các luật logic
Các nguyên lý hợp nhất (Unification), nguyên lý giải (Resolution)
Ngôn ngữ tiêu biểu: Prolog
Mô hình lập trình mô tả
Trang 49Bài toán n! được định nghĩa là:
“bằng 1 nếu n <=1 ngược lại bằng n*(n-1)!
Bài toán n! được định nghĩa theo cú pháp Prolog
F is N * Fm
Trang 5050
© Vũ Duy Linh Mô hình lập trình hướng đối tượng
Dựa trên nền tảng đối tượng (Object)
Chương trình bao gồm nhiều tập quần thể đối tượng khác nhau, mỗi quần thể đối tượng thuộc vào một loài/ loại/ lớp (Class) riêng biệt
Sự thực thi chương trình là
sự trao đổi thông điệp (messages) giữa các đối tượng với nhau
thuần OOP: Mọi thứ là đối tượng ngay cả các kiểu nguyên thủy (primitives)
Ngôn ngữ thuần OOP:
Smalltalk, Eiffel
1 lớp Xe
4 chiếc xe
4 đối tượng thuộc lớp Xe
Trang 5151
© Vũ Duy Linh Kết hợp các mô hình
Trang 5252
© Vũ Duy Linh Quá trình phát triển chương trình HĐT
1 Đặc tả bài toán 2 Phân rã bài toán 3 Phân tích các thực thể tồn
tại trong bài toán (Trừu tượng hoá)
4 Viết mã lệnh Java 5 Kiểm thử
Trang 5353
© Vũ Duy Linh Sự ánh xạ thế giới thực vào OOP
- Được hực hiện thông qua
sự trừu tượng hóa
- Sự trừu tượng hóa: là
quá trình xác định các thuộc tính và các hành động liên quan đến mỗi thực thể trong môi trường ứng dụng đang được phát triển (có nhiều đối tượng thuộc các loại khác nhau)
Trang 5454
© Vũ Duy Linh Sự trừu tượng hóa - Abstraction
Trừu tượng dữ liệu ( Data abstraction): là các đặc tính (properties) của kiểu dữ liệu
và sự cài đặt cụ thể nó Định nghĩa kiểu dữ liệu (thực thể) ở mức trừu tượng interface
Sự trừu tượng hoá điều khiển ( Control abstraction): Là sự trừu tượng các thao tác/
phép toán ở mức thấp Các ngôn ngữ lập trình đã làm sẵn việc này, giúp giảm bớt công sức của lập trình viên
Rất đơn giản nếu sử dụng NNLT bậc cao, “mệt” nếu sử dụng ngôn ngữ máy (Machine language)
Tính toán, xử lý ntn để
có kết quả a = 15?
Trang 5555
© Vũ Duy Linh Sự trừu tượng hóa - Abstraction
Class (kiểu dữ liệu thực thể): Là sự kết hợp của data abstraction + Control abstraction
Trang 5656
© Vũ Duy Linh Các đặc tính Java hướng đối tượng
Java
OOP Paradigm
Encapsulation
Multiple Inheritance
Delegation Concurrency
Polymorphism Single Inheritance Abstraction
Persistence
Genericity
Trang 5757
© Vũ Duy Linh Sự đóng gói - Encapsulation
Sự đóng gói: Là việc cài đặt mã lệnh cho các phương thức nội tại và cách
thức truy xuất các thuộc tính của lớp thành một đơn vị duy nhất Cung cấp một cơ chế bảo vệ dữ liệu (đối tượng): che dấu và bảo vệ dữ liệu khỏi người dùng (can thiệp hoặc thao tác sai mục đích)
Outside code: Phần nhìn thấy cho người dùng Inside code: Phần che
khuất khỏi người dùng
Trang 5858
© Vũ Duy Linh Sự trừu tượng - Abstraction
OOP sử dụng cả data và control abstraction
Abstraction Class: tập các thuộc tính và thao tác (phương thức)
Lớp GiangVien: có 3 thuộc tính và 2 phương thức
3 Attributes
2 Operations
V
V
Trang 5959
© Vũ Duy Linh Thừa kế- Inheritance
Thừa kế (Inheritance): Là một cơ chế cho
phép lập trình viên định nghĩa một lớp con
mới (Child/ sub/ derived class) bằng cách
mở rộng từ (các) lớp cha (Parent/ super/
base class) đã tồn tại Đây là đặc tính nổ
bật nhất của OOP và là một cuộc cách
mạng của lĩnh vực công nghệ phần mềm
Lớp con thừa hưởng các đặc điểm
(properties = attribute + operations) từ lớp
cha trong phạm vi truy xuất được phép
Quá trình phân tích tìm các lớp con dẫn
xuất từ lớp cha được gọi là chuyên biệt hoá