Lập Trình Hướng Đối Tượng (Object-oriented Programming) 1
lượt xem 9
download
một cách tư duy mới, tiếp cận hướng đối tượng để giải quyết vấn đề bằng máy tính. một phương pháp thiết kế và phát triển phần mềm dựa trên kiến trúc lớp và đối tượng.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lập Trình Hướng Đối Tượng (Object-oriented Programming) 1
- Lập Trình Hướng Đối Tượng (Object-oriented Programming) LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ƯỚ ƯỢ Mục tiêu C++ Giới thiệu những khái niệm cơ bản trong lập trình hướng đối tượng Nội dung Trừu tượng hóa, đối tượng, lớp Bộ môn Công nghệ phần mềm Thuộc tính và phương thức Khoa Công Nghệ Thông Tin Thông điệp và truyền thông điệp Đại Học Bách khoa – Đại học Đà Nẵng CHƯƠNG 1 Tính bao gói, tính kế thừa, tính đa hình 18/02/2009 Lập trình không có cấu trúc Khái Niệm (non-structured programming) (non- Lập trình hướng đối tượng (OOP- Object- Là phương pháp xuất hiện đầu tiên Oriented Programming) các ngôn ngữ như Assembly, Basic một cách tư duy mới, tiếp cận hướng đối tượng để giải quyết vấn đề bằng máy tính. sử dụng các biến tổng thể một phương pháp thiết kế và phát triển phần mềm lạm dụng lệnh GOTO dựa trên kiến trúc lớp và đối tượng. Các nhược điểm Quá trình tiến hóa của OOP khó hiểu, khó bảo trì, hầu như không thể sử dụng lại Lập trình tuyến tính 1. chất lượng kém Lập trình có cấu trúc 2. chi phí cao Sự trừu tượng hóa dữ liệu 3. không thể phát triển các ứng dụng lớn Lập trình hướng đối tượng 4. 18/02/2009 18/02/2009 1
- Lập trình không có cấu trúc Lập trình có cấu trúc/lập trình thủ tục (non-structured programming) (non- (structured/procedural programming) sử dụng các lệnh có cấu trúc: for, do while, if 10 k=1 20 gosub 100 then else... Lệnh nhảy đến vị trí bất 30 if y > 120 goto 60 kỳ trong chương trình các ngôn ngữ: Pascal, C, ... 40 k=k+1 50 goto 20 chương trình là tập các hàm/thủ tục 60 print k, y 70 stop Mã chương trình tập trung thể hiện thuật toán: 100 y = 3*k*k + 7*k - 3 110 return làm như thế nào. Ưu điểm Đoạn trình trên khó theo dõi, khó hiểu, dễ gây lỗi, khó sửa đổi. chương trình được cục bộ hóa, do đó dễ hiểu, dễ bảo trì hơn dễ dàng tạo ra các thư viện phần mềm 18/02/2009 18/02/2009 Lập trình có cấu trúc/lập trình thủ tục trì trú Ví dụ Nhược điểm int func(int j) { dữ liệu và mã xử lý là tách rời return (3*j*j + 7*j-3); dữ liệu thụ động, xử lý chủ động } khó đảm bảo tính đúng đắn của dữ liệu int main() không tự động khởi tạo hay giải phóng dữ liệu động { không đảm bảo được tính nhất quán và các ràng buộc của dữ liệu int k = 1 khó cấm mã ứng dụng sửa dữ liệu của thư viện while (func(k) < 120) khó bảo trì code k++; phần xử lý có thể nằm rải rác printf("%d\t%d\n", k, func(k)); người lập trình phải biết cấu trúc dữ liệu (vấn đề này return(0); 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 theo 18/02/2009 18/02/2009 2
- Ví dụ Tại sao phải thay đổi cấu trúc dữ liệu? trú struct Date { Cấu trúc dữ liệu là mô hình của bài toán cần giải int day; quyết int month; Do thiếu kiến thức về bài toán, về miền ứng dụng..., int year; không phải lúc nào cũng tạo được cấu trúc dữ liệu }; hoàn thiện ngay từ đầu. void setDate(Date& date, int newDay, int newMonth, Tạo ra một cấu trúc dữ liệu hợp lý luôn là vấn đề đau int newYear) đầu của người lập trình. { Chuyện gì xảy ra nếu các đối số date.day = newDay; Bản thân bài toán cũng không bất biến newDay, newMonth, newYear … tạo thành ngày tháng năm không hợp lệ? Cần phải thay đổi cấu trúc dữ liệu để phù hợp với các } yêu cầu thay đổi. … 18/02/2009 18/02/2009 Các vấn đề Ví dụ: MyDate struct Date { Thay đổi cấu trúc int year, month, day; dẫ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 cấu Date d; trúc dữ liệu cũ. d.day = 32; // invalid day Đảm bảo tính đúng đắn của dữ liệu d.day = 31; d.month = 2; // how to check một trong những nguyên nhân chính gây ra lỗi phần d.day = d.day + 1; // 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ị 18/02/2009 18/02/2009 3
- Ví dụ: MyDate (2) Giải pháp Che dấu dữ liệu (che dấu cấu trúc) Thay đổi cấu trúc dữ liệu: Truy cập dữ liệu thông qua giao diện xác định struct Date { class MyDate { short year; private int year, mon, day; short mon_n_day; public int getDay() {...} }; public boolean setDay(int) {...} ... }; 18/02/2009 18/02/2009 Tại Sao Sử dụng giao diện Tiếp Cận Hướng Đối Tượng? Loại bỏ những thiếu sót của tiếp cận theo thủ tục MyDate d;; Trong OOP ... Dữ liệu được xem như một phần tử chính yếu và được bảo vệ d.day = 30; // compile error Hàm gắn kết với dữ liệu, thao tác trên dữ liệu d.setDay(31); Phân tách bài toán thành nhiều thực thể (đối tượng) d.setMonth(2); // should return False xây dựng dữ liệu + hàm cho các đối tượng này. Tăng cường khả năng sử dụng lại 18/02/2009 18/02/2009 4
- Đặc Điểm Quan Trọng Thuận Lợi Nhấn mạnh trên dữ liệu hơn là thủ tục So với các tiếp cận cổ điển thì OOP có Các chương trình được chia thành các đối những thuận lợi sau: tượng OOP cung cấp một cấu trúc module rõ ràng Dữ liệu được che giấu và không thể được Giao diện được định nghĩa tốt truy xuất từ các hàm bên ngoài Những chi tiết cài đặt được ẩn OOP giúp lập trình viên duy trì mã và sửa đổi mã tồn Các đối tượng có thể giao tiếp với nhau tại dễ dàng (các đối tượng được tạo ra với những thông qua các hàm khác nhau nhỏ so với những đối tượng tồn tại). Dữ liệu hay các hàm mới có thể được OOP cung cấp một framework tốt với các thư viện mã mà các thành phần có thể được chọn và sửa đổi bởi thêm vào khi cần lập trình viên. Theo tiếp cận từ dưới lên 18/02/2009 18/02/2009 Lịch sử OOP Lịch sử OOP Một số hệ thống “hướng đối tượng” thời kỳ đầu không Các ngôn ngữ lập trình hướng đối tượng không có các lớp mới chỉ có các “đối tượng” và các “thông điệp” (v.d. Hypertalk) Hiện giờ, đã có sự thống nhất rằng hướng đối tượng là: Simula (1967) là ngôn ngữ đầu tiên, có lớp, thừa kế, liên kết động (hay còn gọi là hàm ảo) lớp - class thừa kế - inheritance và liên kết động - dynamic binding Nhưng các ngôn ngữ hướng đối tượng chậm Một số đặc tính của lập trình hướng đối tượng có thể hơn các ngôn ngữ thời kỳ đầu được thực hiện bằng C hoặc các ngôn ngữ lập trình thủ nên chúng chỉ được dùng rộng rãi khi máy tính bắt tục khác. đầu chạy nhanh (khoảng thời gian chiếc máy Pentium Điểm khác biệt sự hỗ trợ và ép buộc ba khái niệm trên đầu tiên ra đời) được cài hẳn vào trong ngôn ngữ. Lưu ý rằng biên dịch các chương trình hướng đối Mức độ hướng đối tượng của các ngôn ngữ không giống nhau tượng cũng chậm Eiffel (tuyệt đối), Java (rất cao), C++ (nửa nọ nửa kia) 18/02/2009 18/02/2009 5
- Lịch sử ngôn ngữ lập trình Trừu Tượng Hóa FORTRAN I FLOW-MATIC (Abstraction) 1957 ALGOL 58 COMTRAN FORTRAN II COBOL LISP 1960 ALGOL 60 Trừu tượng hóa FORTRAN IV CPL BASIC 1965 SIMULA I Phân biệt cần thiết với chi tiết BCPL PL/1 SIMULA 67 ALGOL 68 Giao diện – Cài đặt B 1970 PROLOG PASCAL C Cái gì – Thế nào 1975 Phân tích – Thiết kế Các kỹ thuật trừu tượng MODULA 2 1980 SMALLTALK 80 ADA Đóng gói (encapsulation) OBERON MODULA 3 BETA 1985 C++ Ẩn thông tin (information hiding) EIFFEL 1990 Thừa kế (inheritance) JAVA 1995 Đa hình (polymorphism) C# 2000 18/02/2009 18/02/2009 Đối Tượng (Object) Đối Tượng Thế Giới Thực (Real Object) Đối tượng là chìa khóa để hiểu Một đối tượng thế giới thực là một thực được kỹ thuật thể cụ thể mà thông thường bạn có thể sờ, hướng đối tượng nhìn thấy hay cảm nhận được. Trong hệ thống hướng đối tượng, Tất cả có mọi thứ đều là đối trạng thái tượng (state) và hành động Viết một chương trình hướng đối tượng nghĩa là đang xây dựng (behaviour) một mô hình của một vài bộ phận trong thế giới thực 18/02/2009 18/02/2009 6
- Đối Tượng Phần Mềm Đối Tượng (Software Object) Các đối tượng phần mềm có thể được dùng để biểu diễn các đối tượng thế giới thực. Cũng có trạng thái và Đối tượng phần mềm Đối tượng phần mềm Xe Đạp hành động Đối tượng (object) là một Thuộc tính được xác định Trạng thái: thuộc tính thực thể phần mềm bao bởi giá trị cụ thể gọi là (attribute; property) bọc các thuộc tính và thuộc tính thể hiện. các phương thức liên Một đối tượng cụ thể Hành động: phương thức quan. được gọi là một thể hiện. (method) 18/02/2009 18/02/2009 Lớp (Class) Lớp (Class) Trong thế giới thực có nhiều đối tượng cùng loại. 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 Chương trình hướng đối tượng có nhiều đối Ví dụ: lớp XeDap là một thiết kế chung cho nhiều đối tượng xe tượng cùng loại chia sẻ những đặc điểm chung. đạp được tạo ra Ví dụ 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. 18/02/2009 18/02/2009 7
- Ví Dụ Lớp Xe Đạp Đối tượng (Object) Khai báo cho lớp Đối tượng có XeDap định danh Đối tượng của lớp thuộc tính (dữ liệu) XeDap hành vi (phương thức) Mỗi đối tượng bất kể đang ở trạng thái nào đều có định danh và được đối xử như một thực thể riêng biệt. mỗi đối tượng có một handle (trong C++ là địa chỉ) hai đối tượng có thể có giá trị giống nhau nhưng handle khác nhau 18/02/2009 18/02/2009 Thuộc Tính Lớp Thuộc Tính Lớp & Phương Thức Lớp & Phương Thức Lớp Thuộc tính lớp (class attribute) là một hạng mục dữ liệu liên kết với một lớp cụ thể mà không liên kết với các thể hiện của lớp. Nó được định nghĩa bên trong định nghĩa lớp và được chia sẻ bởi tất cả các thể hiện của lớp. Phương thức lớp (class method) là một phương thức được triệu gọi mà không tham khảo tới bất kỳ một đối tượng nào. Tất cả các phương thức lớp ảnh hưởng đến toàn bộ lớp chứ không ảnh hưởng đến một lớp riêng rẽ nào. 18/02/2009 18/02/2009 8
- Thuộc Tính Thông Điệp & Phương Thức & Truyền Thông Điệp Thông điệp (message) là một lời yêu cầu Thuộc tính (attribute) là dữ liệu trình bày một hoạt động. Gồm có: các đặc điểm về một đối tượng. Đối tượng nhận thông điệp Phương thức (method) có liên quan tới Tên của phương thức thực hiện những thứ mà đối tượng có thể làm. Một Các tham số mà phương thức cần phương thức đáp ứng một chức năng tác Truyền thông điệp: một đối tượng triệu động lên dữ liệu của đối tượng (thuộc gọi một hay nhiều phương thức của đối tính). tượng khác để yêu cầu thông tin. 18/02/2009 18/02/2009 Ẩn Thông Tin Tính Bao Gói (Information Hiding) (Encapsulation) Đóng gói Thuộc tính được lưu trữ Đóng gói (encapsulation) là tiến trình che hay phương thức được cài đặt như thế giấu việc thực thi chi tiết của một đối nào được che giấu đi từ các đối tượng. tượng khác Việc che giấu những chi tiết thiết kế và cài đặt từ những đối tượng khác được gọi là ẩn thông tin 18/02/2009 18/02/2009 9
- Tính Thừa Kế Tính Thừa Kế (Inheritance) (Inheritance) Hệ thống hướng đối tượng cho phép các cho phép các phần lớp được định nghĩa kế thừa từ các lớp mềm sử dụng quan hệ khác “là” Ví dụ, lớp xe đạp leo núi và xe đạp đua là giúp ta thiết kế các những lớp con (subclass) của lớp xe đạp. dịch vụ tổng quát rồi Thừa kế nghĩa là các phương thức và các chuyên môn hóa thuộc tính được định nghĩa trong một lớp chúng có thể được thừa kế hoặc được sử dụng lại bởi lớp khác. 18/02/2009 18/02/2009 Tính Đa Hình Tính Đa Hình (Polymorphism) (Polymorphism) Đa hình: “nhiều hình thức”, hành động Đa hình hàm - Functional polymorphism cùng tên có thể được thực hiện khác nhau cơ chế cho phép một tên thao tác hoặc thuộc tính có thể được đối với các đối tượng/các lớp khác nhau. định nghĩa tại nhiều lớp và có thể có nhiều cài đặt khác nhau tại mỗi lớp trong các lớp đó Ngữ cảnh khác kết quả khác v.d. lớp Date cài 2 phương thức setDate(),một nhận tham số là một đối tượng Date, phương thức kia nhận 3 tham số day, month, year. Điểm Đường Thẳng Hình Tròn Hình Vuông Đa hình đối tượng - Object polymorphism các đối tượng thuộc các lớp khác nhau có khả năng hiểu cùng một thông điệp theo các cách khác nhau Vẽ vd. khi nhận được cùng một thông điệp draw(), các đối tượng Rectangle và Triangle hiểu và thực hiện các thao tác khác nhau 18/02/2009 18/02/2009 10
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Chương 1: Giải thuật lập trình hướng đối tượng OOP
29 p | 263 | 93
-
Chương 1: Giới thiệu về lập trình hướng đối tượng
3 p | 225 | 78
-
Lập trình hướng đối tượng với C++ - Chương 1
29 p | 99 | 13
-
Hướng dẫn lập trình hướng đối tượng trong hệ điều hành Java phần 1
6 p | 73 | 12
-
Bài giảng Lập trình hướng đối tượng (Object Oriented Programming) - Chương 1: Tổng quan về cách tiếp cận hướng đối tượng
20 p | 111 | 5
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming): Phần 1 - GV. Ngô Công Thắng
62 p | 11 | 5
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-8: Con trỏ
41 p | 12 | 4
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-6: Mảng và xâu ký tự
30 p | 8 | 4
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-1: Cấu trúc chung của chương trình C++
22 p | 13 | 4
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-9: Hàm trong C++
34 p | 10 | 4
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-2: Các kiểu dữ liệu cơ bản trong C++
12 p | 6 | 3
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-3: Khai báo - Biểu thức - Khối lệnh
30 p | 9 | 3
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-4: Vào/ra dữ liệu với C++
19 p | 11 | 3
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-5: Các lệnh điều khiển chương trình
30 p | 7 | 3
-
Bài giảng Lập trình C# 1 - Chương 5: Object - Oriented programming
16 p | 78 | 3
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 1-7: Kiểu cấu trúc và kiểu liệt kê
15 p | 5 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Phạm Thị Bích Vân
28 p | 62 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn