Tải bản đầy đủ (.pdf) (107 trang)

Giáo án - Bài giảng: MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG KHI LẬP TRÌNH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.85 MB, 107 trang )

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
w I Khoa Công nghệ Thông tin
B K k Trường ĐH Bach Khoa Tp.HCM
Môn : Lập trinh hướng đối tượng
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.
w I Khoa Công nghệ Thông tin
B K k Trường ĐH Bach Khoa Tp.HCM
Môn : Lập trinh hướng đối tượng
Slide 2


MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
■ ■
Chưong 1
ỒN LẠI CÁC TÍNH CHẤT
CỦA LÂP TRÌNH CẤU TRÚC
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh huớng đối tuợng
Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
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.
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh huớng đối tuợng

Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
Slide 4
Phương pháp phân tích từ-trên-xuống (tt)
chia thành nhiều công
việc nhỏ hơn, đơn giản để
giải quyết hơn.
Công việc cần
giải quyết (A)
I
I Công viêc Công việc Công viêc
I A,
A2
■ ■ ■
A„
Công việc
Ẩ.
‘11
Công việc
A.
12
Công việc
A,
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ó.
I
Công việc
A,
n1

Công việc
A.
i
Công việc
A.
nn
BK
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh huớng đối tuợng
Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
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).
Khoa Công nghệ Thông tin
Trưởng ĐH Bách Khoa Tp.HCM

Môn : Lập trinh hướng đối tưọng
Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
Slide 6
Cấu trúc 1 chương trình huứng cấu trúc
Chương trình = cấu trúc dữ liệu + giải thuật
local data
of function
module
(package)
entry 'start'
local data
module
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh huớng đối tuợng
Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
Slide 7
Cẩu trúc 1 chương trình huứ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”.
__________________
BK
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh huớng đối tuợng
Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
Slide 8
Cẩu trúc 1 chương trình huứ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 (Mib) 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.
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh huớng đối tuợng
Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
Slide 9
Mối quan hệ clienưserver giũa các module
//đặc tả interface của module A : Client
#include B.h

extern int A_intA;
typedef struct { } A_Type1;
¿define A_PI 3.14159
int A_func1 (int a, double b);
#include A.h
//hiện thục của module A
int AJntA;
static int AJntB;
int A_func1 (int a, double b) {
B_Type1 var;
BJntA = B_MAXLEN;
A_func2(a);
B_func1(a,b);
}
static void A_func2(int a) {
}
//đặc tả interface của module B : server
extern int BJntA;
typedef struct { } B_Type1 ;
#define B_MAXLEN 1024
int B_func1 (char c, char* d);
#include B.h
//hiện thực của module B
int BJntA;
static int BJntB;
int B_func1(int a, double b) {
B_func2(a);
}
static void B_func2(int a) {
}

Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh huớng đối tuợng
Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
Slide 10
Hai module sử dụng tài nguyên của nhau
//đặc tả interface của module A
#define _AH
#ifndef _BH
#include B.h
#endif
extern int A_intA;
typedef struct { } A_Type1;
¿define A_PI 3.14159
int A_func1 (int a, double b);
#include A.h
//hiện thục của module A
int A_intA;
static int AJntB;
int A_func1 (int a, double b) {
A_func2(a);
}
static void A_func2(int a) {
}
//đặc tả interface của module B
#define _BH
#ịfndef _AH
#include A.h
#endif
extern int B_intA;

typedef struct { } B_Type1 ;
#define B_PI 3.14159
int B_func1 (char c, char* d);
#include B.h
//hiện thực của module B
int BJntA;
static int AJntB;
int B_func1(int a, double b) {
B_func2(a);
}
static void B_func2(int a) {
}
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh huớng đối tuợng
Chuông 1: ôn lại các tính chất của lập trinh cấu trúc
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
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trình huửng đối tuợng
Chương 2 : Các khái niệm chính của lập trình hưóng đối tưọng
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ú.
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trình huửng đối tuợng
Chương 2 : Các khái niệm chính của lập trình hưóng đối tưọng
Slide 13
Cấu trúc chuong trình OOP
ocal data
of operation
Đối
(object)
Chương
= tập các đối tượng tương tác nhau
local data
of object
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trình huửng đối tuợng
Chương 2 : Các khái niệm chính của lập trình hưóng đối tưọng
Slide 14
Cấu trúc chuong 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.
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trình huửng đối tuợng
Chương 2 : Các khái niệm chính của lập trình hưóng đối tưọng
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 đó.
^ Môn : Lập trinh hướng đối tuợng
o LT L ^ h0aC<ĩn? Thõng tin Chương 2 : Các khái niêm chính của lâp trinh hưóng đối tưong
B K ^ Trường ĐH Bách Khoa Tp.HCM a siide 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 'entry1. Signature gồm :
■ tên tác vụ (opération, 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 trinh hướng đối tuợng
o LT L ^ h0aC<ln? ^ 9hệ Thông tin Chương 2 : Các khái niêm chính của lâp trinh hưóng đối tưong
B K ^ Trường ĐH Bách Khoa Tp.HCM a 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 wakellpO;
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 DigitalClockO; //biến object giữtham khảo đến 1 đối tượng
DigitalClock
Object = new AnalogClockO; //biến object giữ tham khảo đến 1 đối tượng
AnalogClock
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trình huửng đối tuợng
Chương 2 : Các khái niệm chính của lập trình hưóng đối tưọng
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 type1, 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 function1.
© Đị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 trinh hướng đối tuợng
o LT L ^ h0aC<ĩn? Thõng tin Chương 2 : Các khái niêm chính của lap trinh hưóng đối tưong
B K ^ Trường ĐH Bách Khoa Tp.HCM a K a 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 IParam);
virtual BOOL OnlnitDialogO;
afx_msg void OnPaint();
afx_msg void OnConnect();
HICON m_hlcon;
private :

SOCKET sock;
u_short portno; // Which tcp port are we going to use?
- k - —

7 —
^ Môn : Lập trinh hướng đối tuợng
o LT L ^ h0aC<ĩn? " 9hệ Thõng tin Chương 2 : Các khái niêm chính của lap trinh hưóng đối tưong
BK ^ Trường ĐH Bách Khoa Tp.HCM a K a Slide 20
Tính bao dóng (encapsulation)
□ Bao đóng : che dấu mọi chi tiết hiện thực của đối tượng, không
cho bên ngoài thấy và truy xuất => tạo độ độc lập cao giữa các
đối tượng (hay tính kết dính - cohesion giữa các đối tượng rất
thấp).
■ che dấu các thuộc tính dữ liệu : nếu cần cho phép bên ngoài
truy xuất 1 thuộc tính, ta tạo 2 tác vụ get/set tương ứng để
giám sát và kiểm soát việc truy xuất (thuộc tính này vẫn được
che giấu).
■ che dấu chi tiết hiện thực các tác vụ.
■ che dấu các internal function và sự hiện thực của chúng.
□ Java, VC++ cung cấp các từ khóa private, protected, public để
xác định tầm vực truy xuất từng thành phần của class.
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trình huửng đối tuợng
Chương 2 : Các khái niệm chính của lập trình hưóng đối tưọng
Slide 21
Tính thừa kê (inheritance)
□ Tính thừa kế cho phép giảm nhẹ công sức định nghĩa type/class : ta
có thể định nghĩa các type/class không phải từ đầu mà bằng cách kế
thừa type/class có sẵn, ta chỉ định nghĩa thêm các chi tiết mới mà thôi

(thường khá ít).
■ Đa thừa kế hay đơn thừa kế.
■ Thừa kế tạo ra mối quan hệ supertype/subtype và
superclass/subclass.
■ Có thể override các method của class cha, kết quả override chỉ tác
dụng trên đối tượng của class con.
■ Đối tượng của class con có thể đóng vai trò của đối tượng class
cha nhưng ngược lại thưòng không được.
□ VC++ cho phép hạn chế tầm vực truy xuất các thành phần của class
cha:
class c : protected A, private B { }
^ Môn : Lập trinh hướng đối tuợng
o LT L ^ h0aC<ĩn? Thõng tin Chương 2 : Các khái niêm chính của lap trinh hưóng đối tưong
B K ^ Trường ĐH Bách Khoa Tp.HCM a K a Slide 22
Ví dụ vé thừa kê và override - VC++

class Geometry { //abstract base class
public:
Geometry();
virtual void Draw( Window *pWnd ) = 0; //abstract operation
protected:
int xPos, yPos;
COLORREF color;
};
class Group : public Geometry {
public:
Group();
~Group();
virtual void Draw( Window *pWnd ); //override
private:

Geometry **ppGeo; //pointer container
int geoCount;
^ Môn : Lập trinh hướng đối tuợng
o LT L ^ h0aC<ĩn? " 9hệ Thõng tin Chương 2 : Các khái niêm chính của lâp trinh hưóng đối tưong
B K ^ Trường ĐH Bách Khoa Tp.HCM a siide 23
Tính bao gộp (aggregation)
■ 1 đối tượng có thể chứa nhiều đối tượng khác =^> tạo nên mối
quan hệ bao gộp 1 cách đệ quy giữa các đối tượng.
■ Có 2 góc nhìn về tính báo gộp : ngữ nghĩa & hiện thực.
Góc nhìn ngữ nghĩa Góc nhìn hiện thực
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trình huửng đối tuợng
Chương 2 : Các khái niệm chính của lập trình hưóng đối tưọng
Slide 24
Ví dụ vé bao gộp - VC++
class Geometry { //abstract base class
public:
Geometry();
~Geometry();
virtual void Draw( Window *pWnd ) = 0; //abstract operation
protected:
int xPos, yPos;
double xScale, yScale;
COLORREF color;
class Group : public Geometry {
public:
Group();
~Group();
virtual void Draw( Window *pWnd ); //override

private:
Geometry **ppGeo; //=Geometry* ppGeo[n];
int geoCount;
Khoa Công nghệ Thông tin
Trường ĐH Bách Khoa Tp.HCM
Môn : Lập trinh hướng đối tượng
Chương 2 : Các khái niệm chính của lập trinh hưóng đối tưọng
Slide 25

×