Bài giảng Lập trình hướng đối tượng - Nguyễn Việt Hà

pdf 26 trang hapham 2460
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Nguyễn Việt Hà", để 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:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_nguyen_viet_ha.pdf

Nội dung text: Bài giảng Lập trình hướng đối tượng - Nguyễn Việt Hà

  1. Lậptrìnhhướng đối tượng Khái niệm
  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 NguyễnViệtHà OOP: Khái niệm 2
  3. Tài liệu tham khảo „ Thinking in Java, chapter 1, 2 „ Java how to program, chapter 8 NguyễnViệtHà OOP: Khái niệm 3
  4. Mục tiêu của kỹ sư phần mềm „ Tạo ra sản phẩm tốt một cách có hiệu quả „ Nắm bắt được công nghệ „ Kiếm được nhiều tiền hơn nữa! NguyễnViệtHà OOP: Khái niệm 4
  5. 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 NguyễnViệtHà OOP: Khái niệm 5
  6. 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 NguyễnViệtHà OOP: Khái niệm 6
  7. Để 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 NguyễnViệtHà OOP: Khái niệm 7
  8. 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 NguyễnViệtHà OOP: Khái niệm 8
  9. 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ư Assembly, 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 NguyễnViệtHà OOP: Khái niệm 9
  10. 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 NguyễnViệtHà OOP: Khái niệm 10
  11. Lập trình có cấu trúc/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 NguyễnViệtHà OOP: Khái niệm 11
  12. Ví dụ struct Date { int year, mon, day; }; print_date(Date d) { printf(”%d / %d / %d\n”, d.day, d.mon, d.year); } NguyễnViệtHà OOP: Khái niệm 12
  13. 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 NguyễnViệtHà OOP: Khái niệm 13
  14. 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 cấu trúc dữ liệu hoàn thiện ngay từ đầu. Tạo ra một cấu trúc dữ liệu hợp lý luôn là vấn đề đau đầu của người lập trình. „ Bản thân bài toán cũng không bất biến Cần phải thay đổi cấu trúc dữ liệu để phù hợp với các yêu cầu thay đổi. NguyễnViệtHà OOP: Khái niệm 14
  15. 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 cấu trúc dữ liệu 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ị NguyễnViệtHà OOP: Khái niệm 15
  16. 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; // NguyễnViệtHà OOP: Khái niệm 16
  17. 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; } NguyễnViệtHà OOP: Khái niệm 17
  18. Giải pháp „ Che dấudữ liệu (che dấu cấu trúc) „ Truy cậpdữ liệu thông qua giao diệnxác định class MyDate { private int year, mon, day; public int getDay() { } public boolean setDay(int) { } } NguyễnViệtHà OOP: Khái niệm 18
  19. 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 NguyễnViệtHà OOP: Khái niệm 19
  20. Đó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ộtthể thống nhất(lớp đối tượng) thuậntiệncho sử dụng lại „ Che dấu thông tin thao tác vớidữ 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ó khả năng thay đổi(tách cái bất biến ra khỏi cái khả biến) NguyễnViệtHà OOP: Khái niệm 20
  21. Lớpvàđốitượng „ Lớp đốitượ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ộctính(dữ liệu) hành vi (phương thức) NguyễnViệtHà OOP: Khái niệm 21
  22. Hệ thống hướng đốitượng „ Bao gồmmộttậpcácđốitượng mỗi đối tượng chịu trách nhiệm một công việc „ Các đốitượng tương tác thông qua trao đổi thông điệp (message) „ Các đốitượng có thể tồntại phân tán/có thể hoạt động song song NguyễnViệtHà OOP: Khái niệm 22
  23. Mô hình hóa đốitượng MyDate -year -month -day + getDay() + setDay(int) + getMonth() + setMonth(int) + getYear() + setYear(int) - validDate(int, int, int) NguyễnViệtHà OOP: Khái niệm 23
  24. Lịch sử ngôn ngữ lập trình FORTRAN I FLOW-MATIC ALGOL 58 COMTRAN 1957 FORTRAN II COBOL LISP 1960 ALGOL 60 FORTRAN IV CPL SIMULA I BASIC 1965 BCPL SIMULA 67 PL/1 ALGOL 68 B 1970 PROLOG PASCAL C 1975 MODULA 2 SMALLTALK 80 1980 ADA OBERON MODULA 3 BETA C++ 1985 EIFFEL 1990 JAVA 1995 C# 2000 NguyễnViệtHà OOP: Khái niệm 24
  25. 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ủaphần mềm NguyễnViệtHà OOP: Khái niệm 25
  26. OOP và OOL „ Có thể thể hiệnphầ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 NguyễnViệtHà OOP: Khái niệm 26