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
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
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:
- bai_giang_cong_nghe_java_chuong_3_lap_trinh_huong_doi_tuong.pdf