Bài giảng MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
lượt xem 60
download
Giáo trình này sẽ giới thiệu các đặc trưng của phương pháp lập trình hướng đối tượng như tính đóng gói, tính kế thừa và tính đa hình.ngôn ngữ lập trình hướng đối tượng dễ học
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
- MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đối tượng : SV ₫ại học chính quy ngành CNTT Tài liệu tham khảo : Tập slide bài giảng & thực hành của môn học này. The C++ Programming Language (special 3rd edition), Bjarne Stroustrup, 2000. 3 CD MSDN trong Microsoft Visual Studio. Online-Help của môi trường JBuilder Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Slide 1
- MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Nội dung chính gồm 10 chương : 1. Ôn lại các tính chất của lập trình cấu trúc. 2. Các khái niệm chính của lập trình OOP. 3. Cơ chế dịch mã OOP sang mã máy. 4. Tổng quát về mức ₫ộ hỗ trợ OOP của VC++ & Java. 5. Đặc tả class & các tính chất cơ bản của ₫ối tượng trong VC++. 6. Đặc tả class & các tính chất cơ bản của ₫ối tượng trong Java. 7. Chi tiết về gọi hàm, gởi thông ₫iệp & ₫a xạ của VC++. 8. Chi tiết về gọi hàm, gởi thông ₫iệp & ₫a xạ của Java. 9. Chi tiết về thường trú, serialization, COM, Generalization & Template của VC++. 10. Chi tiết về thường trú, serialization, Generalization của Java. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM Slide 2
- MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Chương 1 ÔN LẠI CÁC TÍNH CHẤT CỦA LẬP TRÌNH CẤU TRÚC Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 3
- Phương pháp phân tích từ-trên-xuống Mỗi sự vật trong môi trường xung quanh ta ₫ều ₫ược cấu thành từ nhiều phần tử nhỏ hơn, mỗi phần tử nhỏ lại ₫ược cấu thành từ nhiều phần tử nhỏ hơn nữa. Thí dụ, con người gồm ₫ầu, mình, tứ chi. Tứ chi gồm 2 tay và 2 chân... Mỗi công việc cần giải quyết bằng máy tính cũng ₫ược cấu thành từ nhiều công việc nhỏ hơn, mỗi công việc nhỏ hơn lại ₫ược cấu thành từ nhiều công việc nhỏ hơn nữa... Phương pháp phân tích từ-trên-xuống (top-down analysis) là phương pháp thường sử dụng ₫ể phân tích công việc, nội dung của phương pháp này là cố gắng xác ₫ịnh xem công việc cần giải quyết ₫ược cấu thành từ những công việc nhỏ nào, mỗi công việc nhỏ ₫ược cấu thành từ các công việc nhỏ hơn nào, cứ như vậy cho ₫ến khi những công việc xác ₫ịnh ₫ược là những công việc thật ₫ơn giản, có thể thực hiện dễ dàng. Thí dụ việc học lấy bằng kỹ sư CNTT khoa CNTT ĐHBK TP.HCM có thể bao gồm 9 công việc nhỏ hơn là học từng học kỳ từ 1 tới 9, học học kỳ i là học n môn học của học kỳ ₫ó, học 1 môn học là học m chương của môn ₫ó,... Hình vẽ của slide kế cho thấy trực quan của phương pháp phân tích top-down. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 4
- Phương pháp phân tích từ-trên-xuống (tt) Công việc cần chia thành nhiều công việc nhỏ hơn, ₫ơn giản ₫ể giải quyết (A) giải quyết hơn. Công việc Công việc Công việc ... A1 A2 An Công việc Công việc Công việc Công việc Công việc Công việc A11 A12 A1n An1 An2 Ann Các công việc ₫ủ nhỏ ₫ể ₫ược miêu tả bằng ... ... ... ... 1 lệnh hay 1 lời gọi hàm/thủ tục ₫ã có. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 5
- Tầm vực truy xuất biến Tầm vực của một biến là tập các lệnh ₫ược phép truy xuất biến ₫ó. C và C++ cho phép 3 cấp ₫ộ tầm vực sau : o cục bộ trong function : bất kỳ lệnh nào trong function ₫ều có thể truy xuất ₫ược biến cục bộ trong function ₫ó. void Command1_Click() { char strGreeting[256]; // Khai báo cục bộ ... } o cục bộ trong module : bất kỳ lệnh nào trong module ₫ều có thể truy xuất ₫ược biến cục bộ trong module ₫ó. static char strAddr[256]; // biến cục bộ trong module char strName[256]; // biến toàn cục o toàn cục : bất kỳ lệnh nào trong chương trình cũng có thể truy xuất ₫ược biến toàn cục. Trong một ngữ cảnh (cùng 1 function, cùng 1 module, hay cấp toàn cục), không thể dùng hai biến cùng tên (C phân biệt chữ HOA và chữ thường). Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 6
- Cấu trúc 1 chương trình hướng cấu trúc Chương trình = cấu trúc dữ liệu + giải thuật module global data (package) local data of module entry 'start' local data of function Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 7
- Cấu trúc 1 chương trình hướng cấu trúc Thành phần “giải thuật” bao gồm code ₫ược viết trong các module. Trong từng module, code ₫ược gom nhóm thành những hàm chức năng, mỗi hàm ₫ược nhận dạng và truy xuất thông qua tên hàm. Thành phần “dữ liệu” bao gồm các biến dữ liệu ₫ược ₫ịnh nghĩa trong các module. Trong từng module, về mặt tầm vực truy xuất, các biến có thể ₫ược ₫ịnh nghĩa 1 trong 2 cấp tầm vực : Public : bất kỳ lệnh nào của chương trình ₫ều có thể truy xuất ₫ược. Private : chỉ có các lệnh trong module hiện hành mới có thể truy xuất. Ngoài ra trong từng hàm chức năng, người ta có thể ₫ịnh nghĩa các biến cục bộ, các biến này chỉ ₫ược truy xuất cục bộ bởi các lệnh trong hàm tương ứng. Ngoại lệ, trong 1 số ngôn ngữ như C, người ta cho phép ₫ịnh nghĩa biến trong lệnh thực thi (block — compose), biến này chỉ ₫ược truy xuất cục bộ bởi các lệnh trong thân của lệnh block tương ứng. ₫iểm yếu nhất trong ngôn ngữ hướng cấu trúc là cho phép ₫ịnh nghĩa biến toàn cục, nếu biến này bị lỗi, ta rất khó xác ₫ịnh nguyên nhân gây lỗi. Việc mang 1 hàm hay 1 module của ứng dụng này sang ứng dụng khác cũng sẽ khó khăn vì thường gây ra hiệu ứng “dây chuyền”. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 8
- Cấu trúc 1 chương trình hướng cấu trúc Xét Turbo Pascal, 1 ứng dụng gồm 1 module chương trình và nhiều module dịch vụ ₫ược gọi là Unit. Để sử dụng các thành phần trong 1 module nào ₫ó, ta phải dùng lệnh Use. Xét C, 1 ứng dụng gồm nhiều module ngang hàng, mỗi module là 1 file gồm nhiều hàm chức năng. Điểm nhập ứng dụng là hàm main(). Module C cũng có thể là file thư viện liên kết tĩnh (*.lib) hay ₫ộng (*.dll). Để sử dụng các thành phần trong 1 module nào ₫ó, ta phải dùng lệnh #include. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 9
- Mối quan hệ client/server giữa các module //₫ặc tả interface của module B : server //₫ặc tả interface của module A : client extern int B_intA; #include B.h typedef struct {...} B_Type1; extern int A_intA; #define B_MAXLEN 1024 typedef struct {...} A_Type1; int B_func1(char c, char* d); #define A_PI 3.14159 int A_func1(int a, double b); #include B.h #include A.h //hiện thực của module B //hiện thực của module A int B_intA; int A_intA; static int B_intB; static int A_intB; int B_func1(int a, double b) { int A_func1(int a, double b) { ... B_Type1 var; B_func2(a); ... ... B_intA = B_MAXLEN; } A_func2(a); static void B_func2(int a) { B_func1(a,b); } } static void A_func2(int a) { } Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 10
- Hai module sử dụng tài nguyên của nhau //₫ặc tả interface của module B //₫ặc tả interface của module A #define _BH #define _AH #ifndef _AH #ifndef _BH #include A.h #include B.h #endif #endif extern int B_intA; extern int A_intA; typedef struct {...} B_Type1; typedef struct {...} A_Type1; #define B_PI 3.14159 #define A_PI 3.14159 int B_func1(char c, char* d); int A_func1(int a, double b); #include B.h #include A.h //hiện thực của module B //hiện thực của module A int B_intA; int A_intA; static int A_intB; static int A_intB; int B_func1(int a, double b) { int A_func1(int a, double b) { ... ... B_func2(a); A_func2(a); ... ... } } static void B_func2(int a) { static void A_func2(int a) { } } Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 1: Ôn lại các tính chất của lập trình cấu trúc Trường ĐH Bách Khoa Tp.HCM Slide 11
- MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Chương 2 CÁC KHÁI NIỆM CHÍNH CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 12
- Nội dung 2.1 Cấu trúc của 1 ứng dụng hướng ₫ối tượng 2.2 Đối tượng, thuộc tính, tác vụ. 2.3 Abstract type và class. 2.4 Tính bao ₫óng. 2.5 Tính thừa kế & cơ chế 'override'. 2.6 Tính bao gộp. 2.7 Thông ₫iệp, tính ₫a xạ và kiểm tra kiểu. 2.8 Tính tổng quát hóa. 2.9 Tính thường trú. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 13
- Cấu trúc chương trình OOP Chương trình = tập các ₫ối tượng tương tác nhau Đối tượng (object) local data of object entry local data of operation Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 14
- Cấu trúc chương trình OOP Cấu trúc chương trình hướng ₫ối tượng rất thuần nhất, chỉ chứa 1 loại thành phần : ₫ối tượng. Các ₫ối tượng có tính ₫ộc lập rất cao ⇒ quản lý, kiểm soát chương trình rất dễ (cho dù chương trình có thể rất lớn) ⇒ dễ nâng cấp, bảo trì. Không thể tạo ra dữ liệu toàn cục của chương trình ⇒ ₫iểm yếu nhất của chương trình cấu trúc không tồn tại nữa. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 15
- Đối tượng (Object) Đối tượng là nguyên tử cấu thành ứng dụng. Đối tượng bao gồm 2 loại thành phần : thuộc tính (dữ liệu) : mỗi thuộc tính mang 1 giá trị nhất ₫ịnh tại từng thời ₫iểm. tác vụ (operation) : thực hiện 1 công việc nào ₫ó. Implementation (class) Interface (abstract type) Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 16
- Kiểu trừu tượng (Abstract type) Abstract type (type) ₫ịnh nghĩa interface sử dụng ₫ối tượng. Ta dùng tên nhận dạng ₫ể ₫ặt tên cho kiểu và ₫ể nhận dạng nó. Interface là tập hợp các 'entry' mà bên ngoài có thể giao tiếp với ₫ối tượng. Ta dùng signature ₫ể ₫ịnh nghĩa mỗi 'entry'. Signature gồm : tên tác vụ (operation, function) danh sách tham số hình thức, mỗi tham số ₫ược ₫ặc tả bởi 3 thuộc tính : tên, type và chiều di chuyển (IN, OUT, INOUT). ₫ặc tả chức năng của tác vụ (thường ở dạng chú thích). Ta dùng tên của abstract type (chứ không phải class) ₫ể ₫ặc tả kiểu cho biến, thuộc tính, tham số hình thức. User không cần quan tâm ₫ến class (hiện thực cụ thể) của ₫ối tượng. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 17
- Kiểu trừu tượng trong Java Java hỗ trợ kiểu trừu tượng thông qua lệnh interface, lệnh này ₫ịnh nghĩa abstract type của nhiều ₫ối tượng của ứng dụng (có thể thuộc nhiều class khác nhau. public interface Sleeper { public void wakeUp(); public long ONE_SECOND = 1000; // in milliseconds public long ONE_MINUTE = 60000; // in milliseconds } public class DigitalClock extends Applet implements Sleeper {…} public class AnalogClock extends Applet implements Sleeper {…} … Sleeper object; Object = new DigitalClock(); //biến object giữ tham khảo ₫ến 1 ₫ối tượng DigitalClock Object = new AnalogClock(); //biến object giữ tham khảo ₫ến 1 ₫ối tượng AnalogClock Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 18
- Class (Implementation) Ta dùng tên nhận dạng ₫ể ₫ặt tên cho class và ₫ể nhận dạng nó. Class ₫ịnh nghĩa chi tiết hiện thực ₫ối tượng : ₫ịnh nghĩa các thuộc tính dữ liệu, mỗi thuộc tính ₫ược ₫ặc tả bởi các thông tin về nó như tên nhận dạng, kiểu dữ liệu, tầm vực truy xuất,... Kiểu của thuộc tính có thể là type cổ ₫iển (số nguyên, thực, ký tự, chuỗi ký tự,...) hay 'abstract type', trong trường hợp sau thuộc tính sẽ là tham khảo ₫ến ₫ối tượng khác. Trạng thái của ₫ối tượng là tập giá trị tại thời ₫iểm tương ứng của tất cả thuộc tính của ₫ối tượng. Trong thời gian tồn tại và hoạt ₫ộng, trạng tái của ₫ối tượng sẽ thay ₫ổi. 'coding' các tác vụ (miêu tả giải thuật chi tiết về hoạt ₫ộng của tác vụ) và các 'internal function'. Định nghĩa các tác vụ tạo (create) và xóa (delete) ₫ối tượng. Định nghĩa các tác vụ 'constructor' và 'destructor'. User không cần quan tâm ₫ến class của ₫ối tượng. Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 19
- Ví dụ về ₫ịnh nghĩa class trongVC++ class CMiniChatClientDlg : public CDialog { public: CMiniChatClientDlg(CWnd* pParent = NULL); // standard constructor protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg void OnConnect(); HICON m_hIcon; private : SOCKET sock; u_short portno; // Which tcp port are we going to use? }; Môn : Lập trình hướng ₫ối tượng Khoa Công nghệ Thông tin Chương 2 : Các khái niệm chính của lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Slide 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng môn lập trình Windows 3 (C#) - Trương Bá Thái
140 p | 606 | 221
-
Bài giảng môn Lập trình hướng đối tượng - Chương 1: Tổng quan về cách tiếp cận hướng đối tượng
20 p | 147 | 9
-
Bài giảng môn Lập trình hướng đối tượng - Chương 4: Kế thừa và đa hình trên Java
42 p | 83 | 7
-
Bài giảng môn Lập trình hướng đối tượng - Chương 5: Tập hợp trên Java
40 p | 85 | 7
-
Bài giảng môn Lập trình hướng đối tượng: Chương 1 - TS. Nguyễn Văn Hiệp
48 p | 64 | 6
-
Bài giảng môn Lập trình hướng đối tượng - Chương 7: Nhập xuất trên Java
49 p | 79 | 6
-
Bài giảng Lập trình hướng đối tượng với Java - Chương 1: Nhập môn Lập trình hướng đối tượng
25 p | 75 | 5
-
Bài giảng môn Lập trình hướng đối tượng - Chương 6: Lập trình Generics
24 p | 59 | 4
-
Bài giảng môn Lập trình hướng đối tượng: Bài 8 - Đa hình
37 p | 18 | 4
-
Bài giảng môn Lập trình hướng đối tượng: Bài 9 - Lập trình tổng quát
68 p | 15 | 4
-
Bài giảng môn Lập trình hướng đối tượng: Chương 2 - TS. Nguyễn Văn Hiệp
26 p | 58 | 4
-
Bài giảng môn Lập trình hướng đối tượng - Chương 2: Những khái niệm cơ bản của Lập trình HĐT
39 p | 75 | 4
-
Bài giảng môn Lập trình hướng đối tượng - Chương 3: Giới thiệu Java
35 p | 87 | 4
-
Bài giảng môn Lập trình hướng đối tượng: Chương 3 - TS. Nguyễn Văn Hiệp
26 p | 40 | 3
-
Bài giảng môn Lập trình hướng đối tượng: Chương 6 - TS. Nguyễn Văn Hiệp
21 p | 47 | 3
-
Bài giảng môn Lập trình hướng đối tượng: Chương 9 - TS. Nguyễn Văn Hiệp
28 p | 38 | 3
-
Bài giảng môn Lập trình hướng đối tượng: Chương 5 - TS. Nguyễn Văn Hiệp
20 p | 40 | 3
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