Bài giảng Công nghệ Java - Chương 3: Lập trình hướng đối tượng - Trần Quang Diệu

Nội dung

• Lịch sử phát triển của kỹ thuật lập trình

• Hạn chế của kỹ thuật lập trình truyền thống

• Khái niệm lập trình hướng đối tượng

– Đóng gói / Che dấu thông tin

pdf 24 trang yennguyen 5960
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Công nghệ Java - Chương 3: Lập trình hướng đối tượng - Trần Quang Diệu", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Công nghệ Java - Chương 3: Lập trình hướng đối tượng - Trần Quang Diệu

Bài giảng Công nghệ Java - Chương 3: Lập trình hướng đối tượng - Trần Quang Diệu
CÔNG NGHỆ JAVA
CH3. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Quang Dieu Tran PhD
Nội dung
• Lịch sử phát triển của kỹ thuật lập trình
• Hạn chế của kỹ thuật lập trình truyền thống
• Khái niệm lập trình hướng đối tượng
– Đóng gói / Che dấu thông tin
24/7/2018 
Phần mềm ngày càng lớn
• Một số hệ Unix chứa khoảng 4M dòng lệnh
• MS Windows chứa hàng chục triệu dòng lệnh
• Người dùng ngày càng đòi hỏi nhiều chức 
năng, đặc biệt là chức năng thông minh
• Phần mềm luôn cần được sửa đổi
34/7/2018 
Vì vậy
• Cần kiểm soát chi phí
– Chi phí phát triển
– Chi phí bảo trì
• Giải pháp chính là sử dụng lại
– Giảm chi phí và thời gian phát triển
– Nâng cao chất lượng
44/7/2018 
Để sử dụng lại (mã nguồn)
• Cần dễ hiểu
• Được coi là chính xác
• Có giao diện rõ ràng
• Không yêu cầu thay đổi khi sử dụng trong 
chương trình mới
54/7/2018 
Các phương pháp lập trình
• Lập trình không có cấu trúc
• Lập trình có cấu trúc (lập trình thủ tục)
• Lập trình chức năng
• Lập trình logic
• Lập trình hướng đối tượng
64/7/2018 
Lập trình không có cấu trúc (non-structured programming)
• Là phương pháp xuất hiện đầu tiên:
– Các ngôn ngữ như: Asembly, Basic
– Sử dụng các biến tổng thể
– Lạm dụng lệnh GOTO
• Các nhược điểm:
– Khó hiểu, khó bảo trì, hầu như không thể sử dụng lại
– Chất lượng kém
– Chi phí cao
– Không thể phát triển các ứng dụng lớn
74/7/2018 
Ví dụ
10 k =1
20 gosub 100
30 if y > 120 goto 60
40 k = k+1
50 goto 20
60 print k, y
70 stop
100 y = 3*k*k + 7*k-3
110 return
84/7/2018 
Lập trình thủ tục (structured/procedural programming)
• Sử dụng các lệnh có cấu trúc: for, do while, if 
then else...
• Các ngôn ngữ: Pascal, C, ...
• Chương trình là tập các hàm/thủ tục
• Ưu điểm
– chương trình được cục bộ hóa, do đó dễ hiểu, dễ 
bảo trì hơn
– dễ dàng tạo ra các thư viện phần mềm
94/7/2018 
Ví dụ
struct Date {
int year, mon, day;
};
...
print_date(Date d) {
printf(”%d / %d / %d\n”, d.day, 
d.mon, d.year);
}
104/7/2018 
Lập trình có cấu trúc/lập trình thủ tục
• Nhược điểm
– Dữ liệu và mã xử lý là tách rời
– Người lập trình phải biết cấu trúc dữ liệu (vấn đề này một thời 
gian dài được coi là hiển nhiên)
– Khi thay đổi cấu trúc dữ liệu thì mã xử lý (thuật toán) phải thay 
đổi theo
– Khó đảm bảo tính đúng đắn của dữ liệu
– Không tự động khởi tạo hay giải phóng dữ liệu động
114/7/2018 
Tại sao phải thay đổi cấu trúc dữ liệu?
• Cấu trúc dữ liệu là mô hình của bài toán cần 
giải quyết
– Do thiếu kiến thức về bài toán, về miền ứng 
dụng..., không phải lúc nào cũng tạo được CTDL 
hoàn thiện ngay từ đầu. 
– Tạo ra một CTDL hợp lý luôn là vấn đề đau đầu 
của người lập trình.
• Bản thân của bài toán cũng không bất biến
– Cần phải thay đổi CTDL để phù hợp với các yêu 
cầu thay đổi.
124/7/2018 
Các vấn đề
• Thay đổi cấu trúc
– Dẫn đến việc sửa lại mã chương trình (thuật toán) 
tương ứng và làm chi phí phát triển tăng cao.
– Không tái sử dụng được các mã xử lý ứng với 
CTDL cũ
• Đảm bảo tính đúng đắn của dữ liệu
– Một trong những nguyên nhân chính gây ra lỗi 
phần mềm là gán các dữ liệu không hợp lệ
– Cần phải kiểm tra tính đúng đắn của dữ liệu mỗi 
khi thay đổi giá trị.
134/7/2018 
Ví dụ: MyDate
MyDate.java:
class MyDate {
public int year, month, day;
}
MyCalendar.java:
MyDate d = new MyDate();
d.day = 32; // invalid day
d.day = 31; d.month = 2; // how to check
d.day = d.day + 1; // 
144/7/2018 
Ví dụ: MyDate (2)
Thay đổi cấu trúc dữ liệu:
MyDate.java:
class MyDate {
public short year;
public short mon_n_day;
}
154/7/2018 
Giải pháp
• Che dấu dữ liệu (che dấu cấu trúc)
• Truy cập dữ liệu thông qua giao diện xác định
class MyDate {
private int year, mon, day;
public int getDay() {...}
public boolean setDay(int) {...}
...
}
164/7/2018 
Sử dụng giao diện
MyCalendar.java:
MyDate d = new MyDate();
...
d.day = 32; // compile error
d.setDay(31);
d.setMonth(2); // should return False
174/7/2018 
Đóng gói/che dấu thông tin
• Đóng gói dữ liệu và các thao tác tác động lên 
dữ liệu thành một thể thống nhất (lớp đối 
tượng) thuận tiện cho sử dụng lại
• Che dấu thông tin
– Thao tác với dữ liệu thông qua các giao diện xác
định
– Che dấu người lập trình khách (client 
programmer) cái có thể thay đổi (tách cái bất biến 
ra khỏi cái khả biến)
184/7/2018 
Lớp và đối tượng
• Lớp đối tượng (class) là khuôn mẫu để sinh ra 
đối tượng
• Đối tượng là thể hiện (instance) của một lớp. 
Đối tượng có
– định danh
– thuộc tính (dữ liệu)
– hành vi (phương thức)
194/7/2018 
Hệ thống hướng đối tượng
• Bao gồm một tập các đối tượng
– mỗi đối tượng chịu trách nhiệm một công việc
• Các đối tượng tương tác thông qua trao đổi
thông điệp (message)
• Các đối tượng có thể tồn tại phân tán/có thể
hoạt động song song
204/7/2018 
Mô hình hóa đối tượng
MyDate
-year
-month
-day
+ getDay()
+ setDay(int)
+ getMonth()
+ setMonth(int)
+ getYear()
+ setYear(int)
- validDate(int, int, int)
214/7/2018 
Lập trình hướng đối tượng làm tăng
• năng suất lập trình (năng suất phát triển)
• chất lượng phần mềm
• tính hiểu được của phần mềm
• vòng đời của phần mềm 
224/7/2018 
OOP và OOL
• Có thể thể hiện phần nào tư tưởng đóng 
gói/che dấu thông tin trên ngôn ngữ thủ tục
– không triệt để, khó kiểm soát
• Ngôn ngữ hướng đối tượng cung cấp khả 
năng kiểm soát truy cập; ngoài ra
– kế thừa
– đa hình 
234/7/2018 
Summary
• Hướng đối tượng:
– Hiệu suất
– Kế thừa
4/7/2018  24

File đính kèm:

  • pdfbai_giang_cong_nghe_java_chuong_3_lap_trinh_huong_doi_tuong.pdf