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 trang |
Chia sẻ: phuongt97 | Lượt xem: 648 | Lượt tải: 0
Bạn đang xem trước 20 trang 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, để 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 tin28/12/2021Phầ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 đổi38/12/2021Vì 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ượng48/12/2021Để 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ới58/12/2021Cá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ượng68/12/2021Lậ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ớn78/12/2021Ví 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 return88/12/2021Lậ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ềm98/12/2021Ví dụstruct Date { int year, mon, day;};...print_date(Date d) { printf(”%d / %d / %d\n”, d.day, d.mon, d.year);}108/12/2021Lậ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 động118/12/2021Tạ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.128/12/2021Cá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ị.138/12/2021Ví 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; // 148/12/2021Ví dụ: MyDate (2)Thay đổi cấu trúc dữ liệu:MyDate.java:class MyDate { public short year; public short mon_n_day;}158/12/2021Giả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) {...} ...}168/12/2021Sử dụng giao diệnMyCalendar.java:MyDate d = new MyDate();...d.day = 32; // compile errord.setDay(31);d.setMonth(2); // should return False178/12/2021Đó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)188/12/2021Lớ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)198/12/2021Hệ 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 song208/12/2021Mô hình hóa đối tượngMyDateyearmonthday+ getDay()+ setDay(int)+ getMonth()+ setMonth(int)+ getYear()+ setYear(int) validDate(int, int, int)218/12/2021Lậ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 228/12/2021OOP 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 238/12/2021SummaryHướng đối tượng:Hiệu suấtKế thừa8/12/202124
Các file đính kèm theo tài liệu này:
- bai_giang_cong_nghe_java_chuong_3_lap_trinh_huong_doi_tuong.ppt