Giáo án - Bài giảng: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG JAVA - Pdf 13

AptechVietnam 1/114
Chương 1: Giới thiệu về Java

Mục tiêu bài học
Kết thúc bài học này, học viên có thể:
 Tìm hiểu các thực thể trong thế giới thực như là các đối tượng
 Định nghĩa một đối tượng phần mềm
 Tìm hiểu và giải thích cấu trúc của một lớp
 So sánh các lớp và các đối tượng
 Tìm hiểu tầm quan trọng của Java
 Tìm hiểu bộ JDK và các công cụ của nó
 Tìm hiểu về máy ảo Java - Java Virtual Machine (JVM)

1.1 Giới thiệu về lớp và đối tượng
Các đối tượng (object) và các lớp (class) là nền tảng để xây dựng Java. Lớp là
một khuôn mẫu, bao gồm một tập các đối tượng có tính chất tượng tự nhau. Lớp
mô tả tất cả các thuộc tính của một tập các đối tượng cụ thể.
1.1.1 Các thực thể trong thế giới thực như là các đối tượng
Đối tượng là khái niệm dùng để mô tả các thực thể trong thế giới thực. Ví dụ các
đối tượng có thể nhainf thấy quanh ta như: Chó - Dogs, Ô tô - Cars, bông hoa -
Flowers, ngôi nhà – Houses, … Bất kỳ một thực thể hữu hình hoặc có thể sờ mó
được nào đó, đều có thể xem như như một đối tượng trong thế giới thực.
Mỗi đối tượng có các thuộc tính hoặc tính chất nhằm mô tả nó là cái gì. Ví dụ,
các thuộc tính của đối tượng Dog là:

 Giống
 Màu lông
 Tuổi

Tham khảo hình 1.1, đây là ví dụ về đối tượng „Cashier‟ (Thủ quỹ) Hình 1.1: Đối tượng „Cashier‟ và đối tượng „Customer‟

Các thuộc tính của đối tượng „Cashier‟ là:

 Tên
 Chức vụ
 Tuổi
Một đối tượng thực thi một số hành động. Các hành động của đối tượng
‟Cashier‟ là:

Chương 1 Giới thiệu về Java
3/114
 Thu tiền từ khách hàng
 In hoá đơn
Sự thuận lợi khi sử dụng đối tượng là:

 Nó giúp chúng ta hiểu hơn về thế giới thực
 Nó ánh xạ các thuộc tính và các hành động của các đối tượng trong thế
giới thực thành trạng thái và hành vi của các đối tượng phần mềm.
1.1.2 Class (Lớp)
Như đề cập ở trên, Dog là một ví dụ về một đối tượng trong thế giới thực. Tuy
nhiên, trong thế giới thực có nhiều loại động vật khác như mèo, cừu, cọp, …Vì
vậy, Dog chỉ là một thể hiện của lớp động vật.

Các thuộc tính và hành động chung của một số đối tượng được nhóm lại thành
một đơn vị. Đơn vị này có thể được dùng để tạo ra một đại diện của loại tương
ứng, gọi là lớp. Mỗi một lớp mô tả một tập các đối tượng riêng lẻ.

„Motion‟ (Di chuyển), „Breathing‟ (Thở) và „Eating‟ (Ăn) là các hành vi của lớp
Animal.
1.1.3 So sánh giữa lớp (class) và đối tượng (object)
Có sự khác biệt giữa một lớp và một đối tượng. Một lớp mô tả một thực thể,
trong khi một đối tượng là một thực thể thật sự.

Đối tượng là vật thật, trong khi lớp là một mô hình khái niệm định nghĩa tất cả
các trạng thái và hành vi cần thiết của một đối tượng.

Một lớp là một nguyên mẫu (prototype) của một đối tượng. Nó định rõ các hành
động và các tính chất cần thiết cho một loại đối tượng cụ thể. Bảng 1.2 là ví dụ
về lớp và đối tượng.

Class
(Lớp)
Object
(Đối tượng)
Animal
Cat
Dog
Car
Honda City
Benz

Bảng 1.2: Ví dụ về lớp và đối tượng

Lớp không thay đổi, trong khi dữ liệu chứa trong một đối tượng có thể thay đổi.
Các thuộc tính của lớp được thiết lập trong suốt thời gian chay chương trình,
không thể thêm bớt thuộc tính trong lúc chương trình đang chạy. Khi một đối
tượng được tạo từ một lớp, nó sẽ là một thành phần của lớp đó cho đến khi bị

độc lập nền tảng, nghĩa là mã chương trình có thể thực hiện trên nhiều CPU
khác nhau dưới các môi trường khác nhau. Trong nỗ lực tạo ra một ngôn ngữ
độc lập nền tảng và khả chuyển, James Gosling và nhóm cộng sự đi tiên phong
Learn Java by Example
6/114 AptechVietnam
trong vấn đề này. Kết quả là sự ra đời của ngôn ngữ Java. Đầu tiên nó được gọi
là “Oak”, sau đó được đổi tên thành Java. Ngày nay, Java đã có những bước
phát triển hết sức thành công và được chấp nhận bởi hàng triệu lập trình viên
trên toàn thế giới.

Java là một ngôn ngữ lập trình phổ dụng, được dùng để viết các chương trình có
thể chạy được trên Internet. Nét đặc trưng chính của Java là ngôn ngữ hướng
đối tượng và độc lập nền tảng. Độc lập nền tảng có nghĩa là chương trình có thể
chạy trên nhiều nền tảng khác nhau như: Microsoft Windows, Apple Macintosh,
Linux, …Java không những được dùng cho các ứng dụng độc lập, các chương
trình trên mạng, mà còn được dùng trong các thiết bị tiêu dùng như: điện thoại,
các thiết bị cầm tay, …
1.2.2 Các đặc trưng của ngôn ngữ Java
 Hướng đối tượng (Object-oriented)
Java là một ngôn ngữ hướng đối tượng. Trong Java không có các hằng, biến
hoặc hàm độc lập. Nghĩa là tất cả đều là một phần của đối tượng. Các hằng,
biến và hàm được truy nhập thông qua các lớp và các đối tượng.

Các ngôn ngữ hướng đối tượng lai ghép khác như C++, có đặc điểm của ngôn
ngữ cấu trúc cộng thêm sự mở rộng đối tượng. Ví dụ, C++ là một ngôn ngữ
hướng đối tượng, nhưng lập trình theo hướng cấu trúc, phương thức main() nằm
ngoài bất kỳ lớp và đối tượng nào. Java thì không cho phép cách khai báo này.
Trong Java, phương thức main() chỉ được khai báo bên trong một lớp.

 Độc lập nền tảng (Platform independent)

Java là ngôn ngữ định kiểu mạnh mẽ. Nó được thiết kế để viết các phần mềm có
độ tin cậy cao và mạnh. Tuy nhiên, nó yêu cầu phải khai báo các phương thức
một cách rõ ràng. Java kiểm tra lỗi cú pháp tại thời điểm biên dịch, và tại thời
điểm thông dịch. Vì vậy, nó chắc chắn loại bỏ một số lỗi trong lập trình.

Java không có con trỏ và phép tính con trỏ. Nó kiểm tra tất cả truy nhập đến
mảng và chuỗi tại thời điểm chạy chương trình. Ngoài ra nó còn kiểm tra sự
chuyển kiểu của đối tượng từ kiểu này đến kiểu khác tại thời điểm chạy chương
trình.

Trong các môi trường lập trình truyền thống, lập trình viên phải tự cấp phát bộ
nhớ. Kết thúc chương trình, lập trình viên phải giải phóng vùng bộ nhớ này. Các
sự cố sẽ nảy sinh khi lập trình viên quên giải phóng bộ nhớ. Trong Java, lập trình
viên không cần quan tâm đến việc giải phóng bộ nhớ. Nó được thực hiện tự
động bởi bộ thu gom rác (garbage collection).

 An toàn (Secure)
Virus máy tính là nguyên nhân gây ra sự lo lắng trong việc sử dụng máy tính.
Trước khi có Java, các lập trình viên phải quét virus các tập tin trước khi tải về
và thực hiện chúng. Thông thường việc này cũng không loại trừ hoàn toàn virus.
Ngoài ra, chương trình khi thực thi có khả năng tìm kiếm và đọc các thông tin
nhạy cảm trên máy của người sử dụng mà người sử dụng không hề hay biết.

Java cung cấp một môi trường quản lý việc thực thi chương trình. Nó cho rằng
không có một đoạn mã nào là an toàn cả. Vì thế, Java không chỉ là ngôn ngữ lập
Learn Java by Example
8/114 AptechVietnam
trình thuần tuý mà còn cung cấp nhiều mức để kiểm soát tính an toàn khi thực thi
chương trình.


biên dịch chúng thành bytecode chứa trong tập tin .class. Mỗi tập tin .java
thường được biên dịch thành một tập tin .class.
Đầu tiên trình biên dịch kiểm tra đường dẫn trên thư mục hiện hành và các thư
mục khác được xác định trong biến môi trường CLASSPATH. Điều này cần thiết
giúp xác định các lớp khác được tham chiếu trong tập tin nguồn. Ví dụ, nếu tập
tin được biên dịch phụ thuộc vào các tập tin không được biên dịch khác, trình
biên dịch sẽ cố tìm và biên dịch chúng. Trình biên dịch có thể điều khiển sự phụ
thuộc vòng tròn cũng như các phương thức được sử dụng trước khi được khai
báo. Nó cũng xác định tập tin nguồn có thay đổi so với lần biên dịch cuối cùng
hay không. Vì vậy, trình biên dịch khá thông minh.
Chương 1 Giới thiệu về Java
9/114
 Kiến trúc trung lập (Architecture-neutral)
Công nghệ Java được thiết kế để hỗ trợ các ứng dụng sẽ được triển khai trong
các môi trường không đồng nhất trên mạng. Trong các môi trường như vậy, các
ứng dụng phải có khả năng thực thi tốt trên nhiều kiến trúc phần cứng.
Các chương trình Java được biên dịch thành một định dạng bytecode không phụ
thuộc kiến trúc có thể thực thi trên nhiều nền tảng phần cứng và phần mềm. Vì
vậy, vấn đề phân phối nhị phân và phiên bản được giải quyết bởi bản chất thông
dịch của công nghệ Java.
Các chương trình Java chạy trên bất kỳ hệ thống nào có hỗ trợ máy ảo Java.
Điều này không những hữu ích trên mạng mà còn có ích trên các hệ thống phân
tán.
 Khả chuyển (Portable)
Khả chuyển là hệ quả của kiến trúc trung lập. Công nghệ Java có được khả năng
khả chuyển là nhờ vào định nghĩa chặt chẽ của ngôn ngữ. Nó chỉ rõ kích thước
của các kiểu dữ liệu cơ bản để loại trừ sự phụ thuộc cài đặt và hành vi của các
toán tử số học. Hệ thống Java bản thân là khả chuyển. Trình biên dịch Java
được viết bằng Java, trong khi hệ thống thực thi Java được viết bằng ANSI C với
ranh giới khả chuyển rõ ràng.

Câu lệnh này sẽ tạo ra một tập tin có tên „FirstProgram.class‟. Tập tin class này
sẽ chạy trên máy ảo Java (JVM). Một vài tuỳ chọn của câu lệnh javac được mô
tả trong bảng 1.3

Tùy chọn
(Option)
Mô tả
-classpath
Xác định rõ vị trí chứa các lớp được tham chiếu
trong mã nguồn (được lưu trong biến môi trường
CLASSPATH)
-d
Xác định thư mục đích chứa các tập tin .class
-g
In tất cả các thông tin gỡ lỗi thay cho số dòng và
tên tập tin mặc định.
-verbose
Hiển thị các thông tin đầu ra mỗi lần lớp được nạp
và tập tin nguồn được biên dịch.
-version
Hiển thị thông tin về phiên bản
-sourcepath
Cho biết vị trí lớp
-help
Hiển thị các tuỳ chọn chuẩn

Bảng 1.3: Các tuỳ chọn của trình biên dịch Javac

Xem xét ví dụ sau sử dụng tuỳ chọn –d:
javac –d c:\FirstProgram.java

-jar
Sử dụng tên tập tin JAR thay cho tập tin class
-help
Hiển thị thông tin trợ giúp về lệnh Java và thoát
-X
Hiển thị thông tin và các tùy chọn phi chuẩn và
thoát

Bảng 1.4: Các tuỳ chọn của trình thông dịch Java

1.4 Máy ảo Java (Java Virtual Machine - JVM)

Máy ảo Java là trái tim của ngôn ngữ lập trình Java. Môi trường Java bao gồm
năm phần tử sau:
 Ngôn ngữ
 Ðịnh nghĩa Bytecode
 Các thư viện lớp Java/Sun
 Máy ảo Java (JVM)
 Cấu trúc của tập tin .class
Learn Java by Example
12/114 AptechVietnam
Đặc tính khả chuyển của tập tin .class cho phép các chương trình Java viết một
lần chạy mọi nơi (“Write once, run anywhere”). Đặc tính này có được nhờ sự cài
đặt máy ảo Java (JVM).
1.4.1 Máy ảo Java là gì?

Lập trình viên cần thiết phải biết máy ảo Java là gì và cách làm việc của nó. Điều
này sẽ giúp ta tận dụng được điểm mạnh của JVM và tránh những điểm yếu.

Máy ảo là một khái niệm phần mềm dựa trên ý tưởng của máy tính tưởng tượng.

Quá trình thu gom rác là giải phóng bộ nhớ đang sử dụng của một đối tượng
ngay khi nó kết thúc, nghĩa là đối tượng đó không được truy nhập sau một thời
Chương 1 Giới thiệu về Java
13/114
gian dài. Quá trình này xảy ra tự động và an toàn đối với các đối tượng không
còn cần tham chiếu đến nữa.
Khi máy ảo Java thực thi mã, một thanh ghi cục bộ gọi là „program counter‟ được
dùng. Thanh ghi này trỏ đến các lệnh đang được thực thi hiện tại. Nếu cần thiết,
các lệnh này sửa nội dung thanh ghi này để thay đổi luồng thực thi. Mặt khác,
luồng được thực hiện tuần tự nên nó trỏ từ lệnh này đến lệnh khác.

Một khái niệm phổ biến khác được dùng trong Java là trình biên dịch JIT – Just-
In-Time. Các trình duyệt web như Netscape Navigator, Internet Explorer bao
gồm trình biên dịch JIT nhằm tăng tốc độ thực thi mã Java. Mục đích chính của
JIT là chuyển đổi mã bytecode sang mã máy ứng với từng bộ vi xử lý cụ thể.
Các lệnh này được lưu trữ và dùng bất cứ lúc nào, được gọi như là một phương
thức xác định. Hình 1.3 hiển thị mối quan hệ giữa trình biên dịch Java và JIT.
Hình 1.3: Mối quan hệ giữa trình biên dịch Java và JIT

Mã chương trình được biên dịch và chạy thông qua một máy ảo thay cho vi xử lý
của máy tính. Bằng cách sử dụng cách tiếp cận này, mã nguồn Java có thể chạy
trên bất kỳ nền tảng nào, nó được biên dịch và chạy thông qua máy ảo Java.

Máy ảo Java không biết gì về ngôn ngữ lập trình Java, nó chỉ nhận ra một định
dạng nhị phân xác định của một file gọi là file class. Các chương trình Java được
biên dịch thành mã bytecode có thể tuyền trên mạng và thực thi bởi máy ảo
Java. Mỗi file class chứa định nghĩa của một lớp hoặc một giao tiếp. File


AptechVietnam 15/114
t

Chương 2: Biến và toán tử

Mục tiêu bài học
Kết thúc bài học này, học viên có thể:
 Cú pháp khai báo biến
 Định nghĩa các kiểu dữ liệu cơ bản
 Tìm hiểu và giải thích cấu trúc của một lớp
 Mô tả các kiểu định dạng
 Mô tả các ký tự đặc biệt (escape sequences)
 Xác định các toán tử khác nhau 2.1 Biến

Biến là đơn vị lưu trữ cơ bản trong chương trình Java. Biến là các thành phần
xác định dữ liệu và được dùng để tham chiếu đến các giá trị xác định được tạo
ra trong chương trình. Đặt tên các biến có ý nghĩa giúp ta dễ dàng đọc hiểu mã
nguồn hơn.

2.1.1 Khai báo biến

Tất cả các biến phải được khai báo trước khi sử dụng. Dạng khai báo biến cơ
bản là:

datatype variablename;
Trong đó,

Line2: int octVal = 012;//giá trị 10 trong hệ
// bát phân (hệ 8)
Line3: int hexVal = 0xa;//giá trị 10 trong hệ
// thập lục phân (hệ 16)

Đoạn mã 2 hiển thị cú pháp đúng để chứa các giá trị trong hệ bát phân và hệ
thập lục phân. Line2 biểu diễn một định dạng trong hệ bát phân với tiếp đầu ngữ
0. Hệ thống số bác phân có 8 ký tự số từ 0 đến 7 để mô tả các số.
Line3 biểu diễn định dạng trong hệ thập lục phân với tiếp đầu ngữ 0x. Hệ thống
số thập lục phân có 16 ký tự số để mô tả các số, từ 0 đến 9 và từ ký tự A đến F.
Từ A đến F tương ứng từ 10 đến 15. Ví dụ, giá trị 26 trong hệ 16 là:
int hexVal = 0x1a;

Hệ thống thập phân được mô tả trong Line1, là cách dùng thông dụng trong lập
trình.

Chương 2 Biến và toán tử
17/114
2.1.2 Khai báo hằng (literals)

Hằng là một giá trị không đổi và được mô tả trực tiếp trong đoạn mã mà không
cần đến tính toán. Ví dụ,

Đoạn mã 3:
Line1: int val = 50;
Line2: float num = 35.7F;
Line3: char x = „x‟;

Một hằng được sử dụng ở bất kỳ nơi nào cho phép kiểu giá trị của nó. Tuy
nhiên, có nhiều kiểu hằng khác nhau. Một vài trong số chúng là:

 Hằng Boolean (boolean literals)

Các hằng boolean đơn giản và chỉ có hai giá trị logic là true và false. Các giá trị
này không thể chuyển đổi đến bất kỳ hệ thống số nào. Trong Java, true không
bằng 1 và false không bằng 0. Nó chỉ có thể gán đến các biến được khi báo là
boolean hoặc dùng trong các biểu thức với các toán tử boolean.

 Hằng ký tự (character literals)

Các hằng ký tự được đặt trong cặp dấu ngoặc đơn. Tất cả các ký tự ASCII hợp
lệ có thể đặt trực tiếp trong cặp dấu ngoặc đơn, như „g‟, „$‟ và „z‟.

 Hằng Null (null literals)

Khi một đối tượng được tạo, lượng bộ nhớ xác định được cấp phát cho đối
tượng. Địa chỉ bắt đầu của bộ nhớ được lưu trong đối tượng, đó là, một biến
tham chiếu. Tuy nhiên đôi khi, biến tham chiếu không tham chiếu đến đối tượng.
Trong hợp này, biến tham chiếu được gán một hằng null như ví dụ bên dưới:
obj = null ;

 Hằng chuỗi (String literals)

Hằng chuỗi chứa chuỗi các ký tự trong cập dấu ngoặc kép. Các ký tự có thể là
ký tự thường, có thể đọc được trên màn hình, hoặc ký tự điều khiển, không nhìn
thấy được trên màn hình. Các dấu vạch chéo ngược, dấu nháy kép và các ký tự
điều khiển khác có thể được biểu diễn bằng dấu chéo ngược (\) đi kèm với mã
điều khiển, các ký tự này còn gọi là escape sequences. Ví dụ sau là một xâu
thường, không có ký tự điều khiển:
“Welcome to Java”


Nhóm này có kiểu dữ liệu char, biểu diễn các ký hiệu trong tập hợp các ký tự
như ký tự chữ cái và ký tự số.

 Kiểu Boolean

Kiểu dữ liệu boolean thuộc nhóm này và biểu diễn cho hai giá trị true (Đúng)
hoặc false (Sai).

Learn Java by Example
20/114 AptechVietnam
Kiểu dữ liệu số nguyên gồm 4 loại:
 Kiểu byte

Dùng để lưu trữ lượng dữ liệu nhỏ. Đây là kiểu dữ liệu có độ dài 8 bit, phạm vi
lưu trữ từ -128 đến 127. Nó thường được dùng khi làm việc với luồng dữ liệu từ
mạng hoặc từ file. Kiểu dữ liệu này thường dùng khi làm việc với dữ liệu nhị
phân chuẩn và có thể không tương thích với các kiểu dữ liệu khác của Java. Từ
khoá byte được dùng trong khai báo một biến kiểu này. Ví dụ:
byte val;

 Kiểu short

Đây là kiểu dữ liệu ít dùng nhất. Có độ dài 16 bit và phạm vi lưu trữ từ -
32.768 đến 32.767. Kiểu dữ liệu này thường dùng cho các ứng dụng trên các
máy tính 16 bit. Kiểu dữ liệu này cũng được dùng để lưu trữ dữ liệu số nhỏ. Từ
khoá short dùng để khai báo biến kiểu này.

 Kiểu int

Đây là kiểu dữ liệu thường dùng nhất. Nó có độ dài 32 bit, với phạm vi lưu trữ từ

 print() và println()
 format()

Các phương thức này hoạt động tương tự nhau. Phương thức format()dùng lớp
Java.util.Formatter để thực hiện nhiều định dạng phức tạp hơn.

 Các phương thức print() và println()

Các phương thức này chuyển dữ liệu dùng phương thức toString thích hợp và
trả lại một giá trị chuỗi. Hãy xem xét đoạn mã 4.

Đoạn mã 4:
int num1 = 5;
int num2 = 10;
int sum = num1 + num2;
System.out.print(“The sum of”);
System.out.print(num1);
System.out.print(“ and ”);
System.out.print(num2);
System.out.print(“ is “);
System.out.print(sum);
System.out.println(“.”);
Learn Java by Example
22/114 AptechVietnam
int num3 = 2;
sum = num1 + num2 + num3;
System.out.println(“The sum of ” + num1 + “, ” + num2 + “
and ” + num3 + “ is ” + sum + “.”);
Chèn một dấu + hoặc - với đối số này
Chương 2 Biến và toán tử
23/114
“0”
Dẫn đầu đối số này với các số 0
“,”
Dùng dấu ngăn cách nhóm
“(“
Số âm được bao quanh bằng dấu
ngoặc đơn

Bảng 2.1: Kiểu của các flag

width - Xác định số tối thiểu các ký tự sẽ được in
precision – xác định số ký tự số sẽ được in sau dấu thập phân. Dùng với
các số dấu chấm động.
conversion character - Kiểu của đối số được định dạng. Ví dụ, b là
boolean, c là char, d là số nguyên, ….

Các giá trị đặt trong cặp dấu “[]” là tùy chọn. Chỉ các thành phần yêu cầu xác
định định dạng là dấu % và ký tự chuyển đổi.

Đoạn mã 5 minh họa cách sử dụng phương thức format()

int val = 5;
double sq = 2.236068;
System.out.format("The square root of %d is %f.%n",val,sq); Kết quả của đoạn mã trên như sau:

Đoạn mã 6:
// In „Hello‟ sử dụng chuỗi thập lục phân
System.out.println("\u0048\u0065\u006C\u006C\u006F" +
"!\n");

//In „Blake‟ sử dụng chuỗi bát phân cho ký tự „a‟
System.out.println("Bl\141ke\"2007\"");

Chú ý: Các ký tự điều khiển thập lục phân bắt đầu với \u, theo sau là 4 ký số hệ
thập lục phân. Các ký tự điều khiển bát phân gồm 3 ký số sau dấu \. Ví dụ:
\xyy
Trong đó, x có thể bất kỳ ký số nào từ 0 đến 3, y từ 0 đến 7.

Kết quả đoạn mã 6 là:
Hello!
Blake”2007”

Hai kiểu ký tự điều khiển có thể có nghĩa khác nhau bởi vì ký tự đặc biệt \u được
xử lý trước các ký tự đặc biệt khác.

Chương 2 Biến và toán tử
25/114
2.4 Các toán tử

Các toán tử kết hợp với các biến đơn hoặc các biểu thức thành các biểu thức
mới phức tạp hơn mà nó trả lại các giá trị.

2.4.1 Loại toán tử

Java cung cấp các loại toán tử khác nhau như sau:


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status