Công nghệ Java - Chương 3: Lập trình hướng đối tượng

ppt 24 trang vanle 1780
Bạn đang xem 20 trang mẫu của tài liệu "Công nghệ Java - Chương 3: Lập trình hướng đối tượng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptcong_nghe_java_chuong_3_lap_trinh_huong_doi_tuong.ppt

Nội dung text: Công nghệ Java - Chương 3: Lập trình hướng đối tượng

  1. CÔNG NGHỆ JAVA CH3. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Quang Dieu Tran PhD
  2. 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 7/5/2021 2
  3. 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 7/5/2021 3
  4. 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 7/5/2021 4
  5. Để 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 7/5/2021 5
  6. 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 7/5/2021 6
  7. 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 7/5/2021 7
  8. 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 7/5/2021 8
  9. 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 7/5/2021 9
  10. Ví dụ struct Date { int year, mon, day; }; print_date(Date d) { printf(”%d / %d / %d\n”, d.day, d.mon, d.year); } 7/5/2021 10
  11. 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 7/5/2021 11
  12. 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. 7/5/2021 12
  13. 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ị. 7/5/2021 13
  14. 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; // 7/5/2021 14
  15. 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; } 7/5/2021 15
  16. 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) { } } 7/5/2021 16
  17. 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 7/5/2021 17
  18. Đó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) 7/5/2021 18
  19. 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) 7/5/2021 19
  20. 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 7/5/2021 20
  21. 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) 7/5/2021 21
  22. 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 7/5/2021 22
  23. 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 7/5/2021 23
  24. Summary • Hướng đối tượng: – Hiệu suất – Kế thừa 7/5/2021 24