Chương 1 Giới thiệu phương pháp lập trình hướng đối tượng

 Một số hệ Unix chứa khoảng 4 triệu 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

pdf35 trang | Chia sẻ: lylyngoc | Lượt xem: 1636 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Chương 1 Giới thiệu phương pháp lập trình hướng đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1 CHƢƠNG 1 GIỚI THIỆU PHƢƠNG PHÁP LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG Nguyễn Hữu Thể Object-oriented programming 2 NỘI DUNG Phương pháp lập trình truyền thống 1 Phương pháp lập trình hướng đối tượng 2 Ưu điểm của LT HĐT so với lập trình truyền thống 3 5 Phương pháp phân tích bài toán theo tiếp cận HĐT 4 Object-oriented programming 3 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ệ Object-oriented programming 4 Độ phức tạp, độ lớn PM ngày càng cao  Một số hệ Unix chứa khoảng 4 triệu 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 Object-oriented programming 5 Độ phức tạp, độ lớn PM ngày càng cao  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 (tái sử dụng)  Giảm chi phí và thời gian phát triển  Nâng cao chất lượng Object-oriented programming 6 Để sử dụng lại mã nguồn  Cần dễ hiểu  Chính xác  Giao diện rõ ràng  Tính module hóa  Không yêu cầu thay đổi khi sử dụng trong chương trình mới Object-oriented programming 7 Kỹ thuật lập trình truyền thống & HĐT Phương pháp lập trình truyền thống Phương pháp lập trình hướng đối tượng Ưu điểm của lập trình OOP so với lập trình truyền thống Phương pháp phân tích bài toán theo tiếp cận hướng đối tượng Object-oriented programming 8 1. Phƣơng pháp lập trình truyền thống  Lập trình không có cấu trúc (unstructured 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 toàn cục  Lạm dụng lệnh GOTO  Không sử dụng hàm, viết tất cả trong một hàm main() Object-oriented programming 9 Lập trình không có cấu trúc  Cho phép viết những đoạn mã rối rắm (spaghetti code).  Lập trình viên sử dụng các lệnh goto” và “gosub” để nhảy đến mọi nơi trong chương trình. 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 Đoạn trình trên khó theo dõi, khó hiểu, dễ gây lỗi, khó sửa đổi. lệnh nhảy đến vị trí bất kỳ trong chương trình Object-oriented programming 10 Lập trình không có cấu trúc  Nhƣợc điểm:  Gặp khó khăn khi xây dựng các chương trình lớn.  Hầu như không thể sử dụng lại  Những dòng lệnh được lặp lại thì buộc phải copy thành nhiều chỗ  Chương trình sẽ không khoa học, khó sửa chữa và bảo trì. Object-oriented programming 11 Lập trình thủ tục (procedure programming)  Lấy các thủ tục (hàm) làm nền tảng xây dựng chương trình.  Các ngôn ngữ: Pascal, C, ...  Chương trình  Được phân nhỏ thành các thủ tục,  Mỗi thủ tục sẽ có chức năng riêng biệt.  Các thủ tục có thể gọi qua lại lẫn nhau. Chƣơng trình = Cấu trúc dữ liệu + Giải thuật Object-oriented programming Lập trình thủ tục (tt) Kiểu lập trình rối rắm trên dẫn tới phong cách lập trình mới: lập trình cấu trúc, với các ngôn ngữ Algol, Pascal, C... int LuyThua(int x, int y){ int t=1; for(int i=1; i<=y; i++) t = t*x; return t; } int main(){ int a, b, t; a = 5, b = 10; int t = LuyThuy(a,b); printf(“Kq: %d”,t); return 0; }  Mã chương trình tập trung thể hiện thuật toán: làm như thế nào. Object-oriented programming 13 Lập trình thủ tục (tt)  Ƣu điểm:  Chương trình được tổ chức khoa học, dễ quản lý, bảo trì  Giải quyết được nhiều bài toán lớn  Nhóm các thủ tục theo các chức năng: Lập trình module  Nhƣợc điểm:  Cách tiếp cận đôi khi chưa phù hợp với các hoạt động trong thế giới thực  Diễn đạt thiếu tự nhiên  Khó mô tả những quan hệ phức tạp của thế giới tự nhiên.  Bảo mật kém Object-oriented programming 14 Lập trình thủ tục (tt)  Nhƣợc điểm:  Bảo mật kém do không thể giới hạn truy xuất đến một dữ liệu struct Date { int day; int month; int year; }; void setDate(Date& date, int newDay, int newMonth, int newYear) { date.day = newDay; ... } ... Chuyện gì xảy ra nếu các đối số newDay, newMonth, newYear tạo thành ngày tháng năm không hợp lệ? Object-oriented programming 15 2. Lập trình hƣớng đối tƣợng Lập trình hướng đối tượng (Object-oriented programming)  Dữ liệu, chức năng thao tác trên dữ liệu được gom lại thành 1 đối tượng  Chương trình không dựa trên chức năng mà dựa trên đối tượng. Object-oriented programming 16 2. Lập trình hƣớng đối tƣợng (tt)  Dữ liệu được gắn chặt với các hàm riêng • Chỉ có các hàm đó tác động lên, • Các hàm bên ngoài không thể truy cập.  Cho phép phân tích bài toán thành: • Các thực thể (đối tượng) • Xây dựng các dữ liệu cùng các hàm xung quanh các đối tượng. Object-oriented programming 17 2. Lập trình hƣớng đối tƣợng (tt)  Lập trình hướng đối tượng cho phép khắc phục các hạn chế của các phương pháp trước class Date{ public: void setDate(int newDay, int newMonth, int newYear); int getDay() { return day; } ... private: int day; int month; int year; }; void Date::setDate(int newDay, int newMonth, int newYear){ //check validity of newDay, newMonth, newYear ... //set new values ... } Object-oriented programming 18  Dựa trên ý tưởng  Xem thế giới là tuyển tập các đối tượng • VD: bạn, những người bạn cùng lớp với bạn, con chó, ĐTDĐ của bạn.  Có sự tương tác giữa các đối tượng bên trong ứng dụng. • VD: bạn có một con chó, bạn gọi điện thoại bằng ĐTDĐ của bạn, bạn nói chuyện với bạn cùng lớp của bạn. Dữ liệu + chức năng/xử lý => đối tƣợng (thuộc tính) (phương thức)  Một đối tượng đóng bao cả dữ liệu và các phương thức. 2. Lập trình hƣớng đối tƣợng (tt) Object-oriented programming 19 2. Lập trình hƣớng đối tƣợng (tt)  Một số ngôn ngữ lập trình hƣớng đối tƣợng  Simula (1967)  Smalltalk (1980)  C++ (1980s)  C#  Java  PHP  Perl  … Object-oriented programming 20 2. Lập trình hƣớng đối tƣợng (tt)  Một số ngôn ngữ lập trình hƣớng đối tƣợng  Xuất phát từ tư tưởng OOP của ngôn ngữ SIMULA67,  Trung tâm nghiên cứu Palo Alto (hãng XEROR) nghiên cứu ngôn ngữ OOP đầu tiên với tên Smalltalk.  Sau đó các ngôn ngữ OOP lần lượt ra đời như Eiffel, C++, Delphi, Java, PHP, C#…  XEROR đã đề ra tư tưởng giao diện biểu tượng trên màn hình (icon base screen interface)  Apple Macintosh, Microsoft Windows phát triển giao diện đồ họa.  Trong Microsoft Windows, tư tưởng OOP được thể hiện: • Chúng ta click vào đối tượng • Mỗi đối tượng có thể là control menu, control menu box, menu bar, scroll bar, button, minimize box,... Object-oriented programming 21 Một số khái niệm  Lớp:  Các đối tượng có các đặc tính tƣơng tự nhau được gom chung lại thành lớp đối tượng. • VD: Người là một lớp đối tượng. Một lớp đối tượng được đặc trưng bằng các thuộc tính, và các hoạt động (hành vi, thao tác).  Thuộc tính (attribute) là một thành phần của đối tượng, có giá trị nhất định cho mỗi đối tượng tại mỗi thời điểm trong hệ thống. • Vd: Tên, Tuổi, Cân nặng là các thuộc tính của Người  Thao tác (operation) thể hiện hành vi của một đối tượng tác động qua lại với các đối tượng khác hoặc với chính nó. Object-oriented programming 22 Sơ đồ lớp và sơ đồ thể hiện Sinh vieân Hoï teân Naêm sinh Maõ soá Ñieåm TB Ñi hoïc Ñi thi Phaân loaïi (Sinh vieân) Nguyeãn Vaên A 1990 02.020.001 9.5 Teân lôùp Thuoäc tính Thao taùc Sô ñoà lôùp Sô ñoà theå hieän Object-oriented programming 23 Các đặc điểm quan trọng của OO  Các lớp đối tượng - Classes  Đóng gói – Encapsulation  Kế thừa - Inheritance  Đa hình - Polymorphism Object-oriented programming 24 Trừu tượng hóa Cách nhìn khái quát hóa về một tập các đối tượng có chung các đặc điểm được quan tâm (bỏ qua các chi tiết không cần thiết). Object-oriented programming 25 Đóng gói – Che dấu thông tin  Đóng gói: Nhóm những gì có liên quan với nhau vào làm một  Các hàm/ thủ tục đóng gói các câu lệnh  Các đối tượng đóng gói dữ liệu của chúng và các thủ tục có liên quan  Che giấu thông tin: đóng gói để che một số thông tin và chi tiết cài đặt nội bộ để bên ngoài không nhìn thấy  Che giấu những gì mà người dùng không cần  Che giấu những gì mà mình cần giữ bí mật Object-oriented programming 26 Kế thừa  Cho phép một lớp A có được các thuộc tính và thao tác của lớp B, (giống như thuộc tính và thao tác đó đã được định nghĩa tại lớp A).  Cho phép cài đặt nhiều quan hệ giữa các đối tượng Object-oriented programming 27 Đa hình  Cho phép một tên thao tác hoặc thuộc tính có thể được định nghĩa tại nhiều lớp  Có thể có nhiều cài đặt khác nhau tại mỗi lớp trong các lớp đó Object-oriented programming 28 Một số thuật ngữ hướng đối tượng  OOM (Object Oriented Methodology): Phương pháp luận hướng đối tượng.  OOA (Object Oriented Analysis): Phân tích hướng đối tượng.  OOD: Object Oriented Design (Thiết kế hướng đối tượng).  OOP: Object Oriented Programming (lập trình hướng đối tượng).  Inheritance: Kế thừa  Polymorphism: Đa hình  Encapsulation: Tính đóng gói Object-oriented programming 29 3. Ƣu điểm của OOP  Phân tích, thiết kế và phát triển một vấn đề trong khuôn khổ những khái niệm và thuật ngữ thuộc lĩnh vực ứng dụng.  Vì thế, có một sự tương hợp cao nhất giữa việc phát triển ứng dụng và vấn đề thực tế.  Dễ mô tả các quan hệ phân cấp trong thế giới tự nhiên. Object-oriented programming 30 3. Ƣu điểm của OOP  Hỗ trợ việc chia sẻ bên trong một ứng dụng.  Tái sử dụng => giảm chi phí.  Giảm thiểu các lỗi => dễ bảo trì ứng dụng => do khả năng tái sử dụng.  Tăng tốc tiến trình thiết kế và phát triển ứng dụng. Object-oriented programming 31 Ví dụ về tái sử dụng code  Object-oriented programming 32 4. PP phân tích bài toán theo tiếp cận HĐT  Mô hình hóa và thiết kế theo hướng đối tượng  Suy nghĩ mới về vấn đề cần giải quyết dùng các mô hình  Được tổ chức xung quanh các khái niệm trong thế giới thực.  Trong một hệ thống thông tin hướng đối tượng, mọi thứ được xem như các đối tượng.  Mỗi đối tượng là sự kết hợp:  Cấu trúc dữ liệu (các thuộc tính)  và hoạt động (các thủ tục xử lý dữ liệu). Object-oriented programming 33 4. PP phân tích bài toán theo tiếp cận HĐT  Kỹ thuật mô hình hoá OMT (Object Modeling Technique) của J.Rumbaugh bao gồm các bước: Object-oriented programming 34 Lịch sử ngôn ngữ lập trình 35