Chương 1. Tổng quan về OOP Cao Tuấn Dũng dungct@soict.vn 2 Nội dung 1. Công nghệ hướng đối tượng 2. Đối tượng và lớp 3.
Các nguyên lý cơ bản c a OO 4. Phân tích thiết kế HĐT 5. Ngôn ngữ lập trình Java/C++ 6. Ví dụ và bài tập 3 Nội dung 1.
Công nghệ hướng đối tượng 2. Đối tượng và lớp 3. Phân tích thiết kế HĐT 5. Ngôn ngữ lập trình Java 6.
Ví dụ và bài tập 4 1.1 Công nghệ đối tượng • Công nghệ đối tượng là một tập các quy tắc (trừu tượng hóa, đóng gói, đa hình), các hướng dẫn để xây dựng phần mềm, cùng với ngôn ngữ, cơ sở dữ liệu và các công cụ khác hỗ trợ các quy tắc này. (Object Technology - A Manager’s Guide, Taylor, 1997) 5 Công nghệ đối tượng • Tạo ra các mô hình phản ánh một lĩnh vực nào đó sử dụng thuật ngữ của lĩnh vực đó. • Các mô hình được tạo ra cần dễ tạo, dễ thay đổi, mở rộng, thẩm định và kiểm chứng • Các hệ thống được xây dựng linh hoạt trong thay đổi, có các kiến trúc xác định và có cơ hội để tạo ra và thực thi các thành phần có khả năng tái sử dụng. • Quy trình phát triển + Ngôn ngữ mô hình hóa + Kỹ thuật công cụ phát triển.2 Công nghệ đối tượng được sử dụng ở đâu? • Các hệ thống Client/Server và phát triển Web Công nghệ đối tượng cho phép các công ty đóng gói thông tin doanh nghiệp trong các đối tượng và giúp phân phối quá trình xử lý qua mạng Internet hoặc một mạng máy tính.
7 Công nghệ đối tượng được sử dụng ở đâu? • Hệ nhúng (embedded system) • Hệ thống thời gian thực (real-time) ▫ Công nghệ đối tượng cho phép các hệ thống thời gian thực có thể phát triển với chất lượng cao hơn và linh hoạt hơn Hệ thống vệ tinh Các hệ thống quốc phòng 4 và hàng không vũ trụ … 9 Lịch sử phát triển • Các mốc chính c a công nghệ đối tượng Simula C ++ The UML 1967 Late 1980s 1996 1972 1991 2004 Smalltalk Java UML 2 10 1.3 Lịch sử phát triển của các NNLT • Chính là sự phát triển của quá trình trừu tượng hóa 11 Assembly code • a. Hợp ngữ (Assembly language): ▫ Là một ngôn ngữ lập trình tuần tự, gần với tập các lệnh mã máy c a CPU. ▫ Khó nhớ, khó viết, nhất là với những bài toán ph c tạp. ▫ Khó sửa lỗi, bảo trì.
12 Lịch sử phát triển của các NNLT • b. NNLT cấu trúc/th tục: Xây dựng chương trình dựa trên các hàm/thủ tục/chương trình con Dữ liệu và xử lý (hàm) tách rời nhau Các hàm không bắt buộc phải tuân theo một cách thức chung truy cập vào dữ liệu 13 Lịch sử phát triển của các NNLT • c. NNLT hướng đối tượng: ▫ Thể hiện các thành phần c a bài toán là các “đối tượng” (object). ▫ Hướng đối tượng là một kỹ thuật để mô hình hóa hệ thống thành nhiều đối tượng.
14 Lịch sử phát triển của các NNLT • Chính là sự phát triển của quá trình trừu tượng hóa ▫ Assembly : Trừu tượng hóa kiểu dữ liệu/chỉ thị cơ bản ▫ Ngôn ngữ cấu trúc: Trừu tượng hóa điều khiển (control abstraction) + trừu tượng hóa ch c năng (functional abstraction) ▫ Ngôn ngữ HĐT: Trừu tượng hóa dữ liệu (Data abstraction) 15 Bài tập Đọc hiểu • Đọc và tóm tắt một số điểm khác nhau giữa lập trình cấu trúc (hướng th tục) và OOP • http://www.de/gna/html/cc/Tutorial/node 3.htm 16 Nội dung 1. Công nghệ hướng đối tượng 2. Đối tượng và lớp 3. Phân tích thiết kế HĐT 5.
Ngôn ngữ lập trình Java/C++ 6. Ví dụ và bài tập 17 Tư tưởng của Alan Kay 1. Tất cả đều là đối tượng. Chương trình phần mềm có thể coi là một tập hợp các đối tượng tương tác với nhau 3.
Mỗi đối tượng trong chương trình có các dữ liệu độc lập c a mình và chiếm bộ nhớ riêng c a mình. Mỗi đối tượng đều có dạng đặc trưng c a lớp các đối tượng đó. Tất cả các đối tượng thuộc về cùng một lớp đều có các hành vi giống nhau 18 2.1 Đối tượng (object) • Đối tượng là chìa khóa để hiểu được kỹ thuật hướng đối tượng • Trong hệ thống hướng đối tượng, mọi th đều là đối tượng Viết một chương trình hướng đối tượng nghĩa là đang xây dựng một mô hình của một vài bộ phận trong thế giới thực 19 2.1 Đối tượng là gì? • Đối tượng trong thế giới thực ▫ Ví dụ một chiếc ô tô • Liên quan đến chiếc ô tô: ▫ Các thông tin về chiếc xe như: màu sắc, tốc độ, số km đã đi được,. ▫ Các hoạt động c a chiếc xe như: tăng tốc khi nhấn ga, giảm tốc khi đạp phanh,.
20 Đối tượng là gì? Tom Car House Reality Tree Object-oriented modeling Model drives House Car lives in Tree Tom 21 Đối Tượng Thế Giới Thực (Real Object) • Một đối tượng thế giới thực là một thực thể cụ thể mà thông thường chúng ta có thể sờ, nhìn thấy hay cảm nhận được. • Tất cả có trạng thái (state) và hành động (behaviour) 22 Đối tượng là gì? • Là một thực thể được đóng gói thành trạng thái (state) và hành vi (behavior). ▫ Trạng thái được biểu diễn bởi các thuộc tính (attributes) và các mối quan hệ (relationships). ▫ Hành vi được biểu diễn bởi các thao tác (operations), phương th c (methods).
Trạng thái Dave Age: 32 Height: 6’ 2” Brett Age: 35 Height: 5’ 10” Gary Age: 61 Height: 5’ 8” Hành vi Get the mail. Định danh Okay, which one of De great you wise guys is I am the great Poppini at-a the real Poppini? Poppini. I am the great Poppini! No, I’m the great I’m the great Poppini. Poppini! 29 Đối tượng Đối tượng phần mềm Đối tượng phần mềm Xe Đạp Đối tượng (object) là một Thuộc tính được xác định thực thể phần mềm bao bởi giá trị cụ thể gọi là bọc các thuộc tính và các thuộc tính thể hi n.
phương thức liên quan. Một đối tượng cụ thể được gọi là một thể hi n. 30 Đối tượng phần mềm và bài toán thực tiễn Bài toán quản lý tài khoản ngân hàng – thẻ ATM – thanh toán điện tử Account name: Duc Binh Thuộc Tôi muốn xem số tính Balance: 2.000 VND dư tài khoản Hành động Deposit Debit Yêu cầu dịch vụ Balance inquiry Balance inquiry Không gian phần mềm Account object User object name: Duc Binh Thuộc tính Balance: 2.000 VND Gửi thông điệp Hành động Deposit() Withdraw() checkBalance() checkBalance() 31 2.2 Lớp • Một lớp là một thiết kế (blueprint) hay mẫu (prototype) cho các đối tượng cùng kiểu ▫ Ví dụ: lớp XeDap là một thiết kế chung cho nhiều đối tượng xe đạp được tạo ra • Lớp định nghĩa các thuộc tính và các phương th c chung cho tất cả các đối tượng c a cùng một loại nào đó • Một đối tượng là một thể hiện cụ thể c a một lớp. ▫ Ví dụ: mỗi đối tượng xe đạp là một thể hiện c a lớp XeDap • Mỗi thể hiện có thể có những thuộc tính thể hiện khác nhau ▫ Ví dụ: một xe đạp có thể đang ở bánh răng th 5 trong khi một xe khác có thể là đang ở bánh răng th 3.
32 Ví dụ Lớp Xe đạp Khai báo cho lớp XeDap Đối tượng của lớp XeDap 33 Lớp và Đối tượng Account object of Mr Duc Binh Account Class (model of objects) name: Duc Binh Attribute Definition of member variable Balance: 2.000 VND operation Deposit() Withdraw() Attribute String name; long balance; checkBalance() INSTANTIATE Method definition Account object of Mrs Thu Lan void deposit(int money); name: Thu Lan Attribute Balance: 1.000 VND operation void withdraw() operation Deposit() Withdraw() int checkBalance() checkBalance() 34 Lớp và đối tượng Thiết kế mẫu Thể hiện 35 Câu hỏi nhanh • Xét hệ thống bán hàng trực tuyến Amazon. Đưa ra một số ví dụ về lớp và đối tượng trong hệ thống? • Cùng câu hỏi cho hệ thống thông tin quản lý đào tạo SIS ĐHBK? 36 2.3 Tương tác giữa các đối tượng • Sự giao tiếp giữa các đối tượng trong thế giới thực: • Các đối tượng và sự tương tác giữa chúng trong lập trình ▫ Các đối tượng giao tiếp với nhau bằng cách gửi thông điệp (message) 37 Trao đổi thông điệp • Một chương trình (xây dựng theo tiếp cận HĐT) là tập các đối tượng trao đổi thông điệp với nhau return SS# 38 Gọi hàm vs. Gửi thông điệp • Gọi hàm (Call function) ▫ Chỉ ra chính xác đoạn mã nào sẽ được thực hiện. ▫ Chỉ có duy nhất một sự thực thi c a một hàm với một tên nào đó.
▫ Không có hai hàm trùng tên • Gửi thông điệp ▫ Yêu cầu một dịch vụ từ một đối tượng và đối tượng sẽ quyết định cần phải làm gì ▫ Các đối tượng khác nhau sẽ có các cách thực thi các thông điệp theo cách khác nhau. 39 Thông điệp vs. Phương thức • Thông điệp ▫ Được gửi từ đối tượng này đến đối tượng kia, không bao gồm đoạn mã thực sự sẽ được thực thi • Phương th c ▫ Th tục/hàm trong ngôn ngữ lập trình cấu trúc ▫ Là sự thực thi dịch vụ được yêu cầu bởi thông điệp ▫ Là đoạn mã sẽ được thực thi để đáp ng thông điệp được gửi đến cho đối tượng 40 2.4 Hướng cấu trúc vs. Hướng ĐT? • Hướng cấu trúc: ▫ data structures + algorithms = Program ▫ (cấu trúc dữ liệu + giải thuật = Chương trình) • Hướng đối tượng: ▫ objects + messages = Program ▫ (đối tượng + thông điệp = Chương trình) 41 Hướng cấu trúc – Hướng đối tượng • Lập trình cấu trúc (procedural Programming): ▫ Đơn vị là các th tục, hàm ▫ Dữ liệu có ranh giới nhất định với th tục • Lập trình Hướng đối tượng ▫ Đơn vị là đối tượng ▫ Dữ liệu gắn với hàm (phương th c) trong đối tượng ▫ Mỗi cấu trúc dữ liệu có các phương th c họat động trên nó 43 2.5 Giao diện của đối tượng • Thử thách c a LTHDT là có thể ánh xạ một phần tử (thực thể) trong không gian bài toán về một đối tượng trong không gian lời giải.
• Một đối tượng có thể được sử dụng khi nó có thể đáp ng được một số "yêu cầu" nào đó từ bên ngoài. Giao diện c a đối tượng định nghĩa các dịch vụ mà đối tượng cung cấp C++ Java Light Light lt = new Light(); lt; lt.on(); 44 Giao diện của đối tượng • Quyết định bằng cách áp dụng nguyên lý Đóng gói.