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

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỂN THÔNG
CƠ SỞ TẠI TP. HỒ CHÍ MINH

Bài giảng: L
L


P
PT
T

T
T
Ư
Ư


N
N
G
G
Tài liệu dùng cho hệ Đại học ngành Công Nghệ Thông Tin
Đã được Hội đồng khoa học khoa
Thông qua ngày 18/09/2010 Biên soạn :Ths. Bùi Công Giao LƯU HÀNH NỘI BỘ
Tp. Hồ Chí Minh – Năm 2010
Lời nói đầu

1.4.1 Tổ chức trừu tượng theo sự phân cấp lớp 4
1.4.2 Trừu tượng hóa – cơ sở của phát triển phần mềm 5
1.5 Xu hướng phát triển của lập trình hướng đối tượng 6
1.5.1 Lập trình hướng thành phần (Component-oriented programming-
COP) 6

1.5.2 Lập trình hướng tác nhân 7
1.5.3 Lập trình hướng khía cạnh 7
Chương 2. Cơ bản ngôn ngữ lập trình Java 9
2.1 Đặc trưng của ngôn ngữ Java 9
2.2 Kiến trúc chương trình và cơ chế thực thi của Java 14
2.3 Các kiểu dữ liệu cơ bản và biến 18
2.3.1 Kiểu dữ liệu cơ bản 18
2.3.2 Biến 19
2.3.2.1 Khai báo biến 19
2.3.2.2 Phạm vi hoạt động của biến 20
2.3.2.3 Khởi tạo biến 20
2.3.2.4 Ép kiểu 20
2.4 Các toán tử và biểu thức 21
2.4.1 Các toán tử 21
2.4.2 Biểu thức 25
2.5 Các cấu trúc lệnh 26
2.5.1 Lệnh if-else 26
2.5.2 Lệnh switch-case 27
2.5.3 Vòng lặp while 28
2.5.4 Vòng lặp do-while 29
2.5.5 Vòng lặp for 29
2.6 Phong cách lập trình 31
2.7 Case Study 33
Chương 3. Đối tượng và lớp 38

6.4 Các loại tập đối tượng thường gặp 100
6.4.1 LinkedList 100
6.4.2 HashMap 102
6.4.3 TreeMap 104
6.4.4 HashSet 106
6.4.5 TreeSet 107
6.5 Tạo kiểu tập hợp 108
6.6 Phương thức trả về kiểu tập hợp 110
Chương 7. Xử lý ngoại lệ 113
7.1 Giới thiệu ngoại lệ 113
7.2 Cơ chế xử lý ngoại lệ 115
7.2.1 Khối try 115
7.2.2 Khối catch 115
7.2.3 Khối finally 119
7.3 Bắt các ngoại lệ 121
7.4 Phân cấp lớp ngoại lệ 126
7.5 Các điểm cần lưu ý thêm về ngoại lệ 129
7.5.1 Bắt ngoại lệ tổng quát 129
7.5.2 Trình biên dịch Java yêu cầu phải có xử lý ngoại lệ 129
7.5.3 Tận dụng xử lý ngoại lệ để làm rõ lỗi phát sinh 131
7.5.4 try/catch lồng nhau 131
7.5.5 Kiểu ngoại lệ do người dùng định nghĩa 132
7.5.6 Ném nhiều kiểu ngoại lệ 134
7.6 Case Study 134
Chương 8. Xử lý vào/ra 137
8.1 Luồng vào/ra 137
8.1.1 Giới thiệu luồng vào/ra 137
8.1.2 Luồng byte 138
8.1.3 Luồng ký tự 140
8.1.4 Luồng bộ đệm 141

9.3.1 Trình bày Flow Layout 186
9.3.2 Trình bày Grid Layout 187
9.3.3 Trình bày Border Layout 189
9.3.4 Trình bày GridBag Layout 190
9.3.5 Trình bày Null Layout 192
9.4 Applet 193
9.4.1 Cấu trúc của một Applet 194
9.4.2 Sử dụng Applet 195
9.4.3 Truyền tham số cho Applet 199
9.5 SWING 200
9.5.1 Mở rộng các đối tượng component 201
9.5.2 Mở rộng các đối tượng container 202
9.6 Case Study 210
Chương 10. Luồng xử lý 219
10.1 Giới thiệu luồng 219
10.2 Tạo và quản lý luồng 220
10.2.1 Tạo luồng 220
10.2.2 Phương thức của lớp luồng 223
10.2.3 Quyền ưu tiên của luồng 225
10.2.4 Luồng ngầm 226
10.2.5 Đa luồng với Applet 227
10.3 Nhóm luồng 229
10.3.1 Giới thiệu nhóm luồng 229
10.3.2 Sự đồng bộ luồng 233
10.3.3 Mã đồng bộ 233
10.3.4 Sử dụng khối đồng bộ 235
10.3.5 Kỹ thuật đợi – thông báo 237
10.3.6 Sự bế tắt 240
10.4 Thu rác 242
Tham khảo 247

Hình 7.2 Nếu không có ngoại lệ được ném ra trong khối try, tất cả các khối catch được
bỏ qua. 117

Hình 7.3 Nếu một ngoại lệ phát sinh, khồi catch đầu tiên chặn bắt, nếu có, được thực
thi, và phần còn lại được bỏ qua. 118
Hình 7.4 Máy ảo Java theo dõi việc thứ tự các phương thức được gọi bằng cách tạo
chồng gọi (call stack). 123

Hình 7.5 Khi một phương thức chấm dứt, nó bị lấy ra khỏi chồng. 123
Hình 7.6 Khối lệnh try/catch trong trong phương thức methodY nhận biết ngoại lệ
trong mức hiện hành của chồng gọi. 123

Hình 7.7 Ngoại lệ thoát khỏi p.methodY() và chuyển xuống s.methodX() xử lý 124
Hình 7.8 NullPointerException thông qua chồng gọi được chuyển tới phương thức
main. 125

Hình 7.9 Nếu ứng dụng bỏ qua xử lý ngoại lệ, máy ảo Java chấm dứt ứng dụng và báo
cáo ngoại lệ tới cửa cửa sổ dòng lệnh cho người sử dụng để quan sát. 126

Hình 7.10 Lớp java.lang.Exception có nhiều lớp con 127
Hình 7.11 Cây thừa kế của kiểu ngoại lệ java.sql.DataTruncation 127
Hình 7.12 Kết quả demo của NumberOfDigits.java 135
Hình 8.1 Đọc dữ liệu vào chương trình. 137
Hình 8.2 Viết dữ liệu từ chương trình. 138
Hình 8.3 Luồng byte vào ra đơn giản 139
Hình 8.4 Các thành phần đặc tả qui cách. 148
Hình 9.1 Kết quả demo Frame 167
Hình 9.2 Kết quả demo Panel 168
Hình 9.3 Kết quả demo Dialog 169
Hình 9.4 Kết quả demo Label 170


Thuật ngữ viết tắt

API Application Programming Interface
CSDL Cơ sở dữ liệu
CTDL Cấu trúc dữ liệu
GUI Graphic User Interface
JDBC Java DataBase Connectivity
JFC Java Foundation Class
JVM Java Virtual Machine
LIFO Last in, First out
ODBC Open Database Connectivity
RDBMS Relational Database Management Systems
SRS Student Registration System

Chương 1: Tổng quan về lập trình hướng đối tượng
Biên soạn : Bùi Công Giao 1
Chương 1. Tổng quan về lập trình hướng đối tượng

Nội dung chương này nhằm giới thiệu một cách tổng quan về cách tiếp cận hướng đối
tượng. Nội dung trình bày bao gồm:
 Giới thiệu về cách tiếp cận của lập trình truyền thống.
 Giới thiệu cách tiếp cận của lập trình hướng đối tượng.
 Sự trừu tượng hóa là cơ sở của phát triển phần mềm hướng đối tượng.
 Nêu các đặc trưng của lập trình hướng đối tượng.
 Xu hướng hiện nay của lập trình hướng đối tượng.
1.1 Phương pháp tiếp cận của lập trình truyền thống

định trong chương trình chính.
Các ngôn ngữ lập trình cấu trúc phổ biến là Pascal, C và C++. Riêng C++ ngoài việc
có đặc trưng của lập trình cấu trúc do kế thừa từ C, còn có đặc trưng của lập trình
hướng đối tượng. Cho nên C++ còn được gọi là ngôn ngữ lập trình nửa cấu trúc, nửa
hướng đối tượng.
Đặc trưng
Đặc trưng c
ơ bản nhất của lập trình cấu trúc thể hiện ở mối quan hệ:
Chương trình = CTDL + Giải thuật
Trong đó:
 CTDL là cách tổ chức dữ liệu, cách mô tả bài toán dưới dạng ngôn ngữ lập
trình
 Giải thuật là một quy trình để thực hiện một công việc xác định
Trong chương trình, giải thuật có quan hệ phụ thuộc vào CTDL:
 Một CTDL chỉ phù hợp với một s
ố hạn chế các giải thuật.
 Nếu thay đổi CTDL thì phải thay đổi giải thuật cho phù hợp.
 Một giải thuật thường phải đi kèm với một CTDL nhất định.
Tính chất
 Mỗi chương trình con có thể được gọi thực hiện nhiều lần trong một chương
trình chính.
 Các chương trình con có thể được gọi đến để thực hiện theo một thứ
tự bất kỳ,
tuỳ thuộc vào giải thuật trong chương trình chính mà không phụ thuộc vào thứ tự
khai báo của các chương trình con.
 Các ngôn ngữ lập trình cấu trúc cung cấp một số cấu trúc lệnh điều khiển
chương trình.
Ưu điểm
 Chương trình sáng sủa, dễ hiểu, dễ theo dõi.
 Tư duy giải thuật rõ ràng.

được.
 Cho phép sử dụng lại mã nguồn, hạn chế việc phải viết lại mã từ đầu cho các
chương trình.
Ngôn ngữ lập trình hướng đối tượng phổ biến hiện nay là Java và C++. Tuy nhiên,
C++ mặc dù cũng có những đặc trưng cơ bản của lập trình hướng đối tượng nhưng vẫn
không phải là ngôn ngữ lập trình thuần hướng đối tượng. Java thật sự là mộ
t ngôn ngữ
lập trình thuần hướng đối tượng.
1.3 Các đặc trưng của lập trình hướng đối tượng
1.3.1 Tính đóng gói dữ liệu
Dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối tượng. Việc truy nhập đến
dữ liệu phải thông qua các phương thức của đối tượng lớp.
Trong một đối tượng, dữ liệu hay thao tác hay cả hai có thể là riêng (private) hoặc
chung (public) của đối tượng đó. Thao tác hay dữ liệu riêng là thuộc về đối tượng đó
chỉ được truy cập bởi các thành phần c
ủa đối tượng, điều này nghĩa là thao tác hay dữ
liệu riêng không thể truy cập bởi các phần khác của chương trình tồn tại ngoài đối
tượng. Khi thao tác hay dữ liệu là chung, các phần khác của chương trình có thể truy
cập nó mặc dù nó được định nghĩa trong một đối tượng. Các thành phần chung của
một đối tượng dùng để cung cấp một giao diện có điều khiển cho các thành thành riêng
của đối tượng.

chế đóng gói (encapsulation) là phương thức tốt để thực hiện cơ chế che dấu thông
tin so với các ngôn ngữ lập trình cấu trúc.
Chương 1: Tổng quan về lập trình hướng đối tượng
Biên soạn : Bùi Công Giao 4
1.3.2 Tính kế thừa
Cho phép sử dụng lại mã nguồn. Các lớp đối tượng có thể kế thừa (inheritance) từ các
lớp đối tượng khác. Khi đó, trong các lớp kế thừa, có thể sử dụng các phương thức
hoạt động của các lớp bị kế thừa, mà không cần phải định nghĩa lại.

1.4.1 Tổ chức trừu tượng theo sự phân cấp lớp
Thậm chí mặc dù nảo con người giỏi ở sự trừu tượng các khái niệm như bản đồ đường
đi và cảnh quan, vẫn còn số lượng rất lớn các công việc trừu tượng hoá riêng lẻ mà
chúng ta thường gặp trong cuộc sống. Để đối phó sự phức tạp này con người phải sắp
xếp thông tin một cách có hệ thống theo các tiêu chuẩn nào đó; Xử lý này gọi là sự
phân lớp (classification).
Ví dụ nh
ư khoa học đã phân cấp theo lớp tất cả đối tượng tự nhiên thuộc về động vật,
hoặc cây, hoặc khoáng sản. Để được phân là động vật, nó phải thoả điều kiện sau:
Chương 1: Tổng quan về lập trình hướng đối tượng
Biên soạn : Bùi Công Giao 5
 Vật thể sống.
 Tự di chuyển.
 Phản ứng khi bị kích thích.
Qui luật cho một đối tượng là cây thì hơi khác:
 Vật thể sống (như động vật).
 Không có hệ thần kinh.
 Có màn cellulose.
Sau khi phân lớp đơn giản như trên ta có thể thêm vài qui luật để có các loại động vật
cụ thể hơn cho đến khi có một sự phân cấp theo sự trừu t
ượng từ cao (đỉnh) xuống thấp
(đáy). Sơ đồ phân cấp trừu tượng của các đối tượng tự nhiên được thể hiện như hình
1.1.

Hình 1.1 Sơ đồ phân cấp trừu tượng của các đối tượng tự nhiên.
1.4.2 Trừu tượng hóa – cơ sở của phát triển phần mềm
Khi ghi nhận các yêu cầu cho một dự án phần mềm, chúng ta thường bắt đầu bằng
cách thu thập thông tin chi tiết về tình hình thực tế mà trên đó hệ thống sẽ hoạt động.
Những chi tiết này thường là một sự tổng hợp của
 Thông tin từ những người sử dụng hệ thống được chúng ta phỏng vấn.

một thứ gì đó; ví dụ như bản thiết kế ngôi nhà, sơ đồ mạch điện, một khuôn bánh. Một
mô hình đối tượng của hệ thống phần mềm là một mẫu như vậy. Mô hình hoá và trừu
tượng hoá luôn đi với nhau vì một mô hình là sự mô tả đồ hoạ hay vật lý của trừu
tượng; Trước khi mô hình vật gì đ
ó một cách có hiệu quả, ta phải xác định các chi tiết
cần thiết của chủ thể cần được mô hình.
1.5 Xu hướng phát triển của lập trình hướng đối tượng
1.5.1 Lập trình hướng thành phần (Component-oriented programming-COP)
Xuất phát từ lập trình hướng đối tượng, tư duy lập trình hướng thành phần theo ý
tưởng:
 Giải quyết bài toán bằng cách xây dựng một tập các thành phần (component) có
tính độc lập tương đối với nhau. Mỗi thành phần đảm nhiệm một phần công việc
nhất định.
 Sau đó, người ta ghép các thành phần với nhau để thu được một phần mềm thoả
mãn một tập các yêu cầu xác
định.
Với lập trình hướng thành phần, người ta có thể tiến hành lập trình theo phương pháp
sau:
 Xây dựng một thư viện các thành phần, mỗi thành phần thực hiện một công
việc xác định.
 Khi cần phát triển một phần mềm cụ thể, người ta chỉ cần chọn những thành
phần có sẵn trong thư viện để ghép lại với nhau. Người lập trình chỉ phải phát triể
n
thêm các thành phần mình cần mà chưa có trong thư viện.
Chương 1: Tổng quan về lập trình hướng đối tượng
Biên soạn : Bùi Công Giao 7
Phương pháp này có những ưu điểm rất lớn:
 Lập trình viên có thể chia sẻ với nhau những thành phần mình đã xây dựng cho
nhiều người khác dùng chung.
 Khi cần, lập trình viên có thể lắp ghép các thành phần có sẵn khác nhau để tạo

AspectJ là một công cụ AOP cho ngôn ngữ lập trình Java. Trình biên dịch AspectJ sẽ
đan xen chương trình Java chính với các aspect thành các tập tin bytecode chạy trên
máy ảo Java.
TỔNG KẾT CHƯƠNG 1
Nội dung chương 1 đã trình bày các vấn đề tổng quan liên quan đến phươ
ng pháp tiếp
cận hướng đối tượng trong lập trình:
Chương 1: Tổng quan về lập trình hướng đối tượng
Biên soạn : Bùi Công Giao 8
 Các phương pháp tiếp cận truyền thống: lập trình tuyến tính và lập trình cấu
trúc.
 Phương pháp tiếp cận hướng đối tượng với các đặc trưng cơ bản: đóng gói dữ
liệu, tính đa hình và sử dụng lại mã nguồn.
 Lập trình hướng đối tượng trên nền tảng là trừu tượng hoá là cơ sở lập trình
hiện đại.
 Hiện nay, lập trình h
ướng thành phần, lập trình hướng agent và lập trình hướng
aspect tiến hoá từ lập trình hướng đối tượng đang là xu hướng phát triển mạnh mẽ.
 BÀI TẬP
1. Vẽ một sơ đồ phân cấp lớp cho các lớp sau đây: táo, chuối, thịt bò, nước giải khát,
phó mát, thứ có thể ăn uống, sản phẩm bơ sửa, đồ ăn, trái cây, đậu xanh, thịt, sửa, thịt
heo, rau muống, rau.
2. Những đặc điểm nào của tivi mà chúng cần thiết để được trừu tượng từ góc nhìn
của
 Một khách hàng?
 Một kỹ s
ư thiết kế?
 Người bán?
 Nhà sản xuất?
3. Chọn một bài toán mà bạn muốn mô hình hoá từ cách tiếp cận hướng đối tượng.

 Mạnh mẽ
 Bảo mật
 Phân tán
 Đa luồng
 Linh động
Đơn giản
Những người thiết kế mong muốn phát triển một ngôn ngữ dễ học và quen thuộc với
đa s
ố người lập trình. Do vậy Java loại bỏ các đặc trưng phức tạp của C và C++ như:
 Loại bỏ thao tác con trỏ, thao tác định nghĩa chồng toán tử (operator
overloading)…
 Không cho phép đa kế thừa (multi-inheritance) mà sử dụng các giao diện
(interface)
 Không sử dụng lệnh goto cũng như file header (.h).
 Loại bỏ cấu trúc struct và union.
Chương 2: Cơ bản ngôn ngữ lập trình Java
Biên soạn : Bùi Công Giao 10
Hướng đối tượng
Java là ngôn ngữ lập trình hoàn toàn hướng đối tượng:
 Mọi thực thể trong hệ thống đều được coi là một đối tượng, tức là một thể hiện
cụ thể của một lớp xác định.
 Tất cả các chương trình đều phải nằm trong một lớp nhất định.
 Không thể dùng Java để viết một chức năng mà không thuộ
c vào bất kỳ một lớp
nào. Tức là Java không cho phép định nghĩa dữ liệu và hàm tự do trong chương
trình.

Hình 2.1 Cách biên dịch truyền thống
Độc lập phần cứng và hệ điều hành
Đối với các ngôn ngữ lập trình truyền thống như C/C++, phương pháp biên dịch được

máy ảo Java (JVM) dùng trình thông dịch Java để chuyển mã bytecode thành dạng
chạy được trên các môi trường tương ứng. Do vậy, khi thay đổi môi trường (phần cứng
hoặc hệ điều hành), không phải biên dịch lại mã bytecode. Hình 2.2 minh hoạ quá
trình biên dịch mã nguồn Java.
Máy ảo Java là một chương trình đặc bi
ệt để thông dịch và thực hiện mã nguồn Java.
Khi chương trình Java chạy nó sẽ nằm dưới sự quản lý của máy ảo này, và máy ảo thì
chịu sự quản lý của hệ điều hành của một loại máy tính cụ thể. Máo ảo sẽ thông dịch
mã bytecode thành ngôn ngữ máy mà máy tính có thể hiểu được. Như vậy sẽ có nhiều
máy ảo Java cho từng môi trường cụ thể. Hình 2.3 minh hoạ quá trình thực thi của mã
nguồn Java.
// Chương trình Java
public class Hello {
public static void main( String[ ] args) {
System.out.println(“Hello!”);
}
}

Mã nguồn Java độc
lập môi trường hoạt
động.
Trình biên dịch
Java cho Solaris
Trình biên dịch
Java cho Windows
Trình biên dịch
Java cho Linux
Mã bytecode độc lập
môi trường hoạt động.
… tạo ra

h

điều hành
)
Mã bytecode độc lập môi
trường hoạt động chạy dưới
sự quản lý của máy ảo


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