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
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
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
24 trang |
Chia sẻ: thucuc2301 | Lượt xem: 741 | Lượt tải: 0
Bạn đang xem trước 20 trang 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, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CÔNG NGHỆ JAVACH3. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGQuang Dieu Tran PhDNội dungLịch sử phát triển của kỹ thuật lập trìnhHạn chế của kỹ thuật lập trình truyền thốngKhái niệm lập trình hướng đối tượngĐóng gói / Che dấu thông tin211/27/2020Phần mềm ngày càng lớnMột số hệ Unix chứa khoảng 4M dòng lệnhMS Windows chứa hàng chục triệu dòng lệnhNgườ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 minhPhần mềm luôn cần được sửa đổi311/27/2020Vì vậyCần kiểm soát chi phíChi phí phát triểnChi phí bảo trìGiải pháp chính là sử dụng lạiGiảm chi phí và thời gian phát triểnNâng cao chất lượng411/27/2020Để sử dụng lại (mã nguồn)Cần dễ hiểuĐược coi là chính xácCó giao diện rõ ràngKhông yêu cầu thay đổi khi sử dụng trong chương trình mới511/27/2020Các phương pháp lập trìnhLập trình không có cấu trúcLập trình có cấu trúc (lập trình thủ tục)Lập trình chức năngLập trình logicLập trình hướng đối tượng611/27/2020Lậ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, BasicSử dụng các biến tổng thểLạm dụng lệnh GOTOCác nhược điểm:Khó hiểu, khó bảo trì, hầu như không thể sử dụng lạiChất lượng kémChi phí caoKhông thể phát triển các ứng dụng lớn711/27/2020Ví dụ10 k =120 gosub 10030 if y > 120 goto 6040 k = k+150 goto 2060 print k, y70 stop100 y = 3*k*k + 7*k-3110 return811/27/2020Lậ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ểmchương trình được cục bộ hóa, do đó dễ hiểu, dễ bảo trì hơndễ dàng tạo ra các thư viện phần mềm911/27/2020Ví dụstruct Date { int year, mon, day;};...print_date(Date d) { printf(”%d / %d / %d\n”, d.day, d.mon, d.year);}1011/27/2020Lập trình có cấu trúc/lập trình thủ tụcNhược điểmDữ liệu và mã xử lý là tách rờiNgườ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 theoKhó đảm bảo tính đúng đắn của dữ liệuKhông tự động khởi tạo hay giải phóng dữ liệu động1111/27/2020Tạ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ếtDo 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ếnCần phải thay đổi CTDL để phù hợp với các yêu cầu thay đổi.1211/27/2020Các vấn đềThay đổi cấu trúcDẫ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ệuMộ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ị.1311/27/2020Ví dụ: MyDateMyDate.java:class MyDate { public int year, month, day;}MyCalendar.java:MyDate d = new MyDate();d.day = 32; // invalid dayd.day = 31; d.month = 2; // how to check d.day = d.day + 1; // 1411/27/2020Ví dụ: MyDate (2)Thay đổi cấu trúc dữ liệu:MyDate.java:class MyDate { public short year; public short mon_n_day;}1511/27/2020Giải phápChe 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 địnhclass MyDate { private int year, mon, day; public int getDay() {...} public boolean setDay(int) {...} ...}1611/27/2020Sử dụng giao diệnMyCalendar.java:MyDate d = new MyDate();...d.day = 32; // compile errord.setDay(31);d.setMonth(2); // should return False1711/27/2020Đó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ạiChe dấu thông tinThao tác với dữ liệu thông qua các giao diện xác địnhChe 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)1811/27/2020Lớp và đối tượngLớ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 danhthuộc tính (dữ liệu)hành vi (phương thức)1911/27/2020Hệ thống hướng đối tượngBao gồm một tập các đối tượngmỗi đối tượng chịu trách nhiệm một công việcCá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 song2011/27/2020Mô hình hóa đối tượngMyDateyearmonthday+ getDay()+ setDay(int)+ getMonth()+ setMonth(int)+ getYear()+ setYear(int) validDate(int, int, int)2111/27/2020Lập trình hướng đối tượng làm tăngnăng suất lập trình (năng suất phát triển)chất lượng phần mềmtính hiểu được của phần mềmvòng đời của phần mềm 2211/27/2020OOP và OOLCó 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ụckhông triệt để, khó kiểm soátNgôn ngữ hướng đối tượng cung cấp khả năng kiểm soát truy cập; ngoài rakế thừađa hình 2311/27/2020SummaryHướng đối tượng:Hiệu suấtKế thừa11/27/202024
Các file đính kèm theo tài liệu này:
- session03_lap_trinh_huong_doi_tuong_0832_2001624.ppt