Bài giảng Lập trình hướng đối tượng - Chương 0: Giới thiệu về lập trình hướng đối tượng
Một dãy các lệnh đơn giản được viết trong chương trình chính (main program).
Các lệnh này cùng thao tác trên một dữ liệu (data) toàn cục.
Nhược điểm:
Chỉ thích hợp cho các chương trình nhỏ (?)
Dẫn đến lập trình thủ tục
A Comparative Presentation of Object-Oriented Programming with C++ and Java * Tài nguyên học tập (tt) Lập trình hướng đối tượng với C++ Nguyễn Thanh Thủy (doc) Chỉ dùng khi không đọc được sách tiếng Anh Vì nội dung cũ (không được cập nhật) * Tài nguyên học tập (tt) C++ Lập trình hướng đối tượng Phạm Văn Ất (Nhà sách) Chỉ dùng khi không đọc được sách tiếng Anh Vì nội dung cũ (không được cập nhật) * Tài nguyên học tập (tt) Lập trình hướng đối tượng sử dụng C++ Trần Văn Lăng (Nhà sách) Chỉ dùng khi không đọc được sách tiếng Anh Vì nội dung cũ (không được cập nhật) * Tài nguyên học tập (tt) C++ Annotations (pdf) Lập trình hướng đối tượng với Java – Đoàn Văn Ban (pdf) C++ Căn bản – Nguyễn Minh Thắng (dịch từ: Core Java 2 Volume I – Foundametals, Seventh Edition (html) * Tài nguyên học tập (tt) Elements of Object-Oriented Program Design (html) How to Design Class Hierarchies (html) Introduction to Object-Oriented Programming Using C++ (html) JDKTM 5.0 Documentation * Môi trường lập trình * Môi trường lập trình (tt) * Môi trường lập trình (tt) * Môi trường lập trình (tt) * Môi trường lập trình (tt) * Môi trường lập trình (tt) * Môi trường lập trình (tt) * Môi trường lập trình (tt) * Môi trường lập trình (tt) * Môi trường lập trình (tt) * Tại sao phải lập trình hướng đối tượng? Sự tiến hóa của các phương pháp lập trình Lập trình không cấu trúc (Unstructured programming) Lập trình thủ tục (Procedural programming) Lập trình đơn thể (Modular programming) Lập trình hướng đối tượng (Object oriented programming) … * Lập trình không cấu trúc Main Program Data Một dãy các lệnh đơn giản được viết trong chương trình chính (main program). Các lệnh này cùng thao tác trên một dữ liệu (data) toàn cục. Nhược điểm: Chỉ thích hợp cho các chương trình nhỏ (?) Dẫn đến lập trình thủ tục Program * Lập trình thủ tục Program Main Program Data Procedure1 Procedure2 Procedure3 Chương trình có cấu trúc hơn Kiểm tra lỗi dễ hơn Chương trình chính có nhiệm vụ truyền dữ liệu cho các thủ tục Nhóm các thủ tục theo các chức năng: Lập trình đơn thể * Lập trình đơn thể Main Program(Also a module) Data Module1 + Data Data1 Procedure1 Module2 + Data Data2 Procedure2 Procedure3 Chương trình chính gọi phối hợp các thủ tục trong các module khác nhau và truyền dữ liệu như là các tham số * Lập trình đơn thể (tt) Main Program(Also a module) Data Module1 + Data Data1 Procedure1 Module2 + Data Data2 Procedure2 Procedure3 Mỗi module có dữ liệu riêng và độc lập với các module khác * Lập trình hướng đối tượng Object1 Data1+Procedures1 Object3 Data3 + Procedures3 Object2 Data2 + Procedures2 Object4 Data4 + Procedures4 Dữ liệu và chức năng thao tác trên dữ liệu được gom lại thành một đố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 * Lập trình hướng đối tượng (tt) Dựa trên ý tưởng Xem thế giới ta đang sống là tuyển tập các đối tượng, ví dụ như : bạn, những người bạn cùng lớp với bạn, con chó của bạn, ĐTDĐ của bạn và Có sự tương tác giữa các đối tượng này bên trong ứng dụng để thực hiện các yêu cầu, ví dụ như: 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 Xem dữ liệu (các thuộc tính) và các chức năng/xử lý (các phương thức) trên dữ liệu đó như một đối tượng riêng. Một đối tượng đóng bao cả dữ liệu và các phương thức * Lập trình hướng đối tượng (tt) A simple Sales Order Example Order Product Ship via * Lập trình hướng đối tượng (tt) Mr. A wishes to send some money to Mr. H’s account Mr. A lives in U.S.A Mr. H lives in Dhaka, Bangladesh * Hai phần của một đối tượng Đối tượng = Dữ liệu + Các phương thức Hoặc: Đối tượng = Trạng thái + Hành vi = + + = * Hai phần của một đối tượng (tt) * Thuộc tính và Phương thức Các thuộc tính Thành phần dữ liệu của một đối tượng Xác định các đặc trưng mô tả của một đối tượng Ví dụ: con chó của bạn có màu nâu, ĐTDĐ của bạn thuộc hãng Nokia Các phương thức Thành phần xử lý của một đối tượng Xác định các hành vi của một đối tượng Ví dụ: con chó đi, ĐTDĐ nhắn tin SMS * Lớp Một khung mẫu (template, blueprint, prototype) để tạo đối tượng Ví dụ: lớp “Chó” xác định các thuộc tính và các phương thức của một con chó, nhưng lớp “Chó” không phải là một đối tượng Một đối tượng được tạo từ một lớp Là một minh họa của một lớp Ví dụ: bạn là một minh họa của lớp “SinhViên”, con chó của bạn là một minh họa của lớp “Chó” * Lớp (tt) * Lớp và đối tượng Các đối tượng của cùng một lớp Có cùng một tập các thuộc tính và các phương thức Ví dụ: mỗi sinh viên có thuộc tính “MãSốSV”, mỗi con chó có thuộc tính “Màu sắc” Có thể có các giá trị thuộc tính khác nhau Ví dụ: các sinh viên khác nhau có thể có giá trị mã số sinh sinh viên khác nhau, các con chó khác nhau có thể có màu sắc khác nhau * Lớp và đối tượng (tt) * Lớp và đối tượng (tt) * Lớp và đối tượng (tt) girl class object * Lớp và đối tượng (tt) girl class object * Các đặc trưng cơ bản của LTHĐT Trừu tượng (Abstraction) Đóng gói (Encapsulation) Thừa kế (Inheritance) Đa hình (Polymophism) Đơn thể (Modularity) Phân cấp (Hierarchy) … * Sự trừu tượng Trích những tính chất cần thiết của đối tượng và bỏ qua những tính chất không cần thiết Xác định một cách nhìn một đối tượng Ví dụ: xe hơi Người bán hàng quan tâm giá, thời gian bảo hành, màu sắc, … Người bảo hành quan tâm đến: kích thước đầu bơm xăng, kiểu bugi, .. * Sự trừu tượng (tt) * Ví dụ thêm về sự trừu tượng Student Professor Course Offering (9:00 AM, Monday-Wednesday-Friday) Course (e.g. Algebra) * Ví dụ thêm về sự trừu tượng * Sự đóng gói Một đối tượng đóng gói cả các thuộc tính và các phương thức của nó Các gắn liền: Một thuộc tính/phương thức gắn liền với một đối tượng Khi đề cập đến một thuộc tính/phương thức, phải chỉ rõ thuộc tính/phương thức của đối tượng nào Tại sao đóng bao ? Khi có một đối tượng, cũng là có được các thành phần dữ liệu và hành vi của nó Rất tốt cho dùng lại * Sự đóng gói (tt) * CHANGE JOB METHOD NAME: MARK DOB: 14/02/64 JOB: LECTURER OBJECT Sự đóng gói (tt) * Sự đóng gói (tt) * Sự che giấu thông tin Một đối tượng có thể che giấu các chi tiết bên trong của nó Ta không thể biết cách làm việc bên trong của ĐTDĐ của mình ngoài các chức năng trên bàn phím Có thể hiện một vài chi tiết nào đó ra thế giới bên ngoài Hiển thị số điện thoại của mình khi gọi tới máy khác Xác định một giao tiếp (interface) để tương tác với thế giới bên ngoài ĐTDĐ tương tác với bạn thông qua bàn phím và màn hình * Tại sao che giấu thông tin? Một đối tượng có thể có bên trong nó phức tạp nhưng có giao tiếp đơn giản Làm cho giao tiếp với thế giới bên ngoài dễ hơn Không cần biết bên trong của đối tượng Chỉ có giao tiếp mới là quan trọng Nghĩa là làm thế nào để tương tác với nó Thuận tiện cho việc dùng lại code Manufacture A Manufacture B Manufacture C * Sự thừa kế Sự thừa kế các thuộc tính, phương thức từ các lớp Cơ sở (base)/Cha (super) của các lớp Dẫn xuất (Derived)/ Con (sub) Sự thừa kế xác định các mối quan hệ “is –a” hoặc “is – a- kind-of” giữa các lớp * Sự thừa kế (tt) Sự thừa kế hình thành nên phân cấp các lớp Sự thừa kế mang đến: Chia sẻ các thuộc tính và phương thứa (tránh viết lại code) Mô hình hóa sự tổng quát hóa và chuyên biệt hóa trong thế giới thực Viết các thành phần phần mềm chung, tổng quát (lớp cha/ lớp cơ sở), sau đó mở rộng/ dẫn xuất ra các lớp con/ dẫn xuất cần thiết * Sự đa hình Cùng một phương thức được sử dụng ở lớp cha/cơ sở có thể được định nghĩa lại trong các lớp con/dẫn xuất để đáp ứng với các đối tượng thuộc các lớp khác * Sự đa hình (tt) Khả năng che giấu nhiều cài đặt khác nhau đằng sau một giao tiếp * Ví dụ: Sự đa hình Cổ phiếu Trái phiếu Qũi chung Get Current Value getCurrentValue() getCurrentValue() getCurrentValue() * Đơn thể Phân chia nhỏ một vấn đề phức tạp thành nhiều phần nhỏ, đơn giản hơn quản lý được Đơn thể giúp con người hiểu được các hệ thống phức tạp * Ví dụ: Đơn thể Course Registration System ? Billing System Course Catalog System Student Management System * Sự phân cấp Tài sản Bất động sản Tài khoản tiết kiệm Tài khoản Tài khoản thanh toán Cổ phiếu Chứng khoán Trái phiếu Các phần tử trên cùng một mức phải có cùng mức độ trừu tượng. * Tóm lại LTHĐT mô hình thế giới như là các đối tượng Các lớp là các khung mẫu Các đối tượng là các minh họa của các lớp Chứa các thuộc tính (dữ liệu) và các phương thức (hàm) Các thuộc tính và các phương thức được đính kèm theo các lớp hoặc các đối tượng LTHĐT tập trung vào việc dùng lại mã lệnh * Các ngôn ngữ lập trình HĐT Là ngôn ngữ có hỗ trợ hướng đối tượng Smalltalk: 1972 – 1980, Alan Kay C++: 1986, Bjarne Stroustrup Java:1992 (Smalltalk + C++), James Gosling C#: Được phát triển tại công ty Microsoft, 2000 Ngôn ngữ lập trình hướng sự kiện, hướng đối tượng, trực quan (C++ và Java) Các ngôn ngữ lập trình khác: Effile, Objective-C, Ada, … * C++ and Java Java là một ngôn ngữ lập trình hướng đối tượng đầy đủ, tất cả các mã lệnh đều viết dưới dạng các class C++ thì ngược lại: là một ngôn ngữ lai (hybrid), kết hợp cả lập trình hướng chức năng và hướng đối tượng Vậy: C++ mạnh hơn Java nhưng lại khó viết (diễn đạt) hơn Java. Google "Comparing C++ and Java”! (Bài tập về nhà) * Ngôn ngữ lập trình sử dụng trong môn học này Ngôn ngữ lập trình C++ là chủ đạo Phương pháp luận là thứ nhất Ngôn ngữ lập trình là thứ hai Bjarne Stroustrup * Vì sao chọn C++ ? C++ is a very successful object – oriented language It is required language for more and more students It takes great effort and practice for these students to learn how to program in C++ and how to make object – oriented programs The proposed teaching method is applicable to teaching other languages like Java and C# Methodology first and language second: a Way to Teach Object – Oriented Programming Haibin Zhu, PhD Department of Computer Science and Mathematics Nipissing University, North Bay, Canada email: haibinz@nipissingu.ca URL: nipissingu.ca/faculty/haibinz * 5 lời khuyên để đạt kết quả tốt * Làm việc chăm chỉ * Làm bài tập và thực hành nhiều * Tự mình thực hiện các bài tập và thực hành * Kiên nhẫn với máy tính * Nếu cần thiết, nghỉ một tí ... * Hỏi và Đáp *
File đính kèm:
- Bài giảng Lập trình hướng đối tượng - Chương 0 Giới thiệu về lập trình hướng đối tượng.ppt