1. Trang chủ
  2. » Cao đẳng - Đại học

Slide Lap Trinh Huong Doi Tuong

54 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

gọi hàm Serialize trên từng đối tượng con được chứa vật lý. ba.Serialize( ar );[r]

(1)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide

MƠN L

P TRÌNH H

ƯỚ

NG

ĐỐ

I T

ƯỢ

NG

Tài liệu tham khảo :

ƒ Tập slide giảng & thực hành môn học

ƒ The C++ Programming Language (special 3rd edition), Bjarne Stroustrup, 2000

ƒ CD MSDN Microsoft Visual Studio

ƒ Online-Help môi trường JBuilder

Đối tượng : SV đại học quy ngành CNTT

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide

Nội dung gồm 10 chương :

1 Ơn lại tính chất lập trình cấu trúc Các khái niệm lập trình OOP Cơ chếdịch mã OOP sang mã máy

4 Tổng quát vềmức độhỗtrợOOP VC++ & Java

5 Đặc tảclass & tính chất đối tượng VC++ Đặc tảclass & tính chất đối tượng Java

7 Chi tiết vềgọi hàm, gởi thông điệp & đa xạcủa VC++ Chi tiết vềgọi hàm, gởi thông điệp & đa xạcủa Java

9 Chi tiết thường trú, serialization, COM, Generalization & Template VC++

10 Chi tiết thường trú, serialization, Generalization Java

(2)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide

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

Chương 1: Ơn lại tính chất 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 trình hướng đối tượng

Slide Mỗi vật môi trường xung quanh ta cấu thành từnhiều phần tử

nhỏ hơn, phần tửnhỏ lại cấu thành từnhiều phần tử nhỏ Thí dụ, người gồm đầu, mình, tứchi Tứchi gồm tay chân

Mỗi cơng việc cần giải máy tính cấu thành từ nhiều công việc nhỏ hơn, công việc nhỏ lại cấu thành từ nhiều công việc nhỏ

hơn

Phương pháp phân tích từ-trên-xuống (top-down analysis) phương pháp thường sử dụng đểphân tích cơng việc, nội dung phương pháp cố gắng xác

định xem công việc cần giải cấu thành từnhững công việc nhỏ nào, công việc nhỏđược cấu thành từcác công việc nhỏ nào, cho

đến công việc xác định công việc thật đơn giản,

thực dễdàng

Thí dụviệc học lấy kỹ sư CNTT khoa CNTT ĐHBK TP.HCM có thểbao gồm cơng việc nhỏ học học kỳtừ1 tới 9, học học kỳi học n mơn học học kỳđó, học mơn học học m chương mơn đó,

Hình vẽcủa slide kếcho thấy trực quan phương pháp phân tích top-down

Ph

ươ

ng pháp phân tích t

-trên-xu

ng

(3)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide

Ph

ươ

ng pháp phân tích t

-trên-xu

ng (tt)

Chương 1: Ơn lại tính chất lập trình cấu trúc

Cơng việc cần giải (A)

Công việc A1

Công việc A2

Công việc An

Công vic A11

Công vic A12

Công vic A1n

Công vic An1

Công vic An2

Công vic Ann

chia thành nhiều công việc nhỏhơn, đơn giản để giải hơn.

Các công việc đủnhỏ đểđược miêu tảbằng lệnh hay lời gọi hàm/thủtục có

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide

T

m v

c truy xu

t bi

ế

n

ƒ Tầm vực biến tập lệnh phép truy xuất biến ƒ C C++ cho phép cấp độtầm vực sau :

o cục bộtrong function: bất kỳlệnh function có thểtruy xuất

được biến cục function void Command1_Click() {

char strGreeting[256]; // Khai báo cục

}

o cục bộtrong module: bất kỳlệnh module có thểtruy xuất

được biến cục 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 chương trình có thểtruy xuất

biến tồn cục

ƒ Trong ngữcảnh (cùng function, module, hay cấp tồn cục), khơng thểdùng hai biến tên (C phân biệt chữHOA chữ thường)

(4)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide

Chương trình = cấu trúc dữliệu + giải thuật

entry 'start'

global data module

(package)

local data of module

local data of function

C

u trúc ch

ươ

ng trình h

ướ

ng c

u trúc

Chương 1: Ơn lại tính chất 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 trình hướng đối tượng

Slide ‰ Thành phần “giải thuật” bao gồm code viết module Trong

module, code gom nhóm thành hàm chức năng, hàm nhận dạng truy xuất thông qua tên hàm

‰ Thành phần “dữ liệu” bao gồm biến liệu định nghĩa module Trong module, mặt tầm vực truy xuất, biến

định nghĩa cấp tầm vực :

ƒ Public: bất kỳlệnh chương trình có thểtruy xuất

ƒ Private: chỉcó lệnh module hành có thểtruy xuất

ƒ Ngồi hàm chức năng, người ta có thểđịnh nghĩa biến cục bộ, biến truy xuất cục lệnh hàm tương

ứng Ngoại lệ, sốngôn ngữ C, người ta cho phép định nghĩa biến lệnh thực thi (block — compose), biến chỉđược truy xuất cục bộbởi lệnh thân lệnh block tương ứng

Öđiểm yếu ngôn ngữ hướng cấu trúc cho phép định nghĩa biến toàn cục, biến bị lỗi, ta khó xác định nguyên nhân gây lỗi Việc mang hàm hay module ứng dụng sang ứng dụng khác sẽkhó khăn thường gây hiệu ứng “dây chuyền”

Chương 1: Ôn lại tính chất lập trình cấu trúc

(5)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide

‰ Xét Turbo Pascal, ứng dụng gồm module chương trình nhiều module dịch vụđược gọi Unit Đểsửdụng thành phần module đó, ta phải dùng lệnh Use

‰ Xét C, ứng dụng gồm nhiều module ngang hàng, module file gồm nhiều hàm chức Điểm nhập ứng dụng hàm main() Module C có thểlà file thư viện liên kết tĩnh (*.lib) hay động (*.dll) Đểsửdụng thành phần module đó, ta phải dùng lệnh #include

Chương 1: Ơn lại tính chất lập trình cấu trúc

C

u trúc ch

ươ

ng trình h

ướ

ng c

u trúc

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 10

M

i quan h

client/server gi

a module

//đặc tảinterface 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);

//đặc tảinterface module B : server extern int B_intA;

typedef struct { } B_Type1; #define B_MAXLEN 1024 int B_func1(char c, char* d);

#include A.h

//hiện thực module A int A_intA;

static int A_intB;

int A_func1(int a, double b) { B_Type1 var;

B_intA = B_MAXLEN; A_func2(a);

B_func1(a,b); }

static void A_func2(int a) { }

#include B.h

//hiện thực module B int B_intA;

static int B_intB;

int B_func1(int a, double b) {

B_func2(a);

}

static void B_func2(int a) { }

(6)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 11

Hai module s

d

ng tài nguyên c

a nhau

//đặc tảinterface 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);

//đặc tảinterface module B #define _BH

#ifndef _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 A.h

//hiện thực module A int A_intA;

static int A_intB;

int A_func1(int a, double b) {

A_func2(a);

}

static void A_func2(int a) { }

#include B.h

//hiện thực module B int B_intA;

static int A_intB;

int B_func1(int a, double b) {

B_func2(a);

}

static void B_func2(int a) { }

Chương 1: Ôn lại tính chất 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 trình hướng đối tượng

Slide 12 Chương 2

CÁC KHÁI NI

M CHÍNH

C

A L

P TRÌNH H

ƯỚ

NG

ĐỐ

I T

ƯỢ

NG

Chương : Các khái niệm lập trình hướng đối tượng

(7)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 13

N

i dung

2.1 Cấu trúc ứng dụng hướng đối tượng 2.2 Đối tượng, thuộc tính, tác vụ.

2.3 Abstract type class. 2.4 Tính bao đóng.

2.5 Tính thừa kế & 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 qt hóa.

2.9 Tính thường trú.

Chương : Các khái niệm 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 hướng đối tượng

Slide 14

Chương trình = tập đối tượng tương tác

entry Đối tượng

(object)

local data of object

local data of operation

C

u trúc ch

ươ

ng trình OOP

(8)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 15

‰ Cấu trúc chương trình hướng đối tượng nhất, chứa loại thành phần : đối tượng

‰ Các đối tượng có tính độc lập cao ⇒quản lý, kiểm sốt chương trình 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 dữliệu tồn cục chương trình ⇒điểm yếu chương trình cấu trúc khơng tồn

Chương : Các khái niệm lập trình hướng đối tượng

C

u trúc ch

ươ

ng trình OOP

Khoa Cơng nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 16

Đố

i t

ượ

ng (Object)

‰ Đối tượng nguyên tửcấu thành ứng dụng ‰ Đối tượng bao gồm loại thành phần :

ƒ thuộc tính (dữliệu) : thuộc tính mang giá trịnhất định thời điểm

ƒ tác vụ(operation) : thực công việc

Interface (abstract type)

Implementation (class)

(9)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 17

Ki

u tr

u t

ượ

ng (Abstract type)

Chương : Các khái niệm lập trình hướng đối tượng

ƒ 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 đểnhận dạng ƒ Interface tập hợp 'entry' mà bên giao tiếp với

đối tượng

ƒ Ta dùng signatuređểđịnh nghĩa 'entry' Signature gồm :

ƒ têntác vụ(operation, function)

ƒ danh sách tham số hình thức, tham số đặc tả thuộc tính : tên, type chiều di chuyển(IN, OUT, INOUT)

ƒ đặc tảchức năngcủa tác vụ (thường ởdạng thích)

ƒ Ta dùng tên abstract type (chứ 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ể) đối tượng

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 18

Ki

u tr

u t

ượ

ng Java

Java hỗtrợkiểu trừu tượng thông qua lệnh interface, lệnh định nghĩa abstract type nhiều đối tượng ứng dụng (có thểthuộc nhiều class khác

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 đối tượng DigitalClock

Object = new AnalogClock(); //biến object giữtham khảo đến đối tượng AnalogClock

(10)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 19

Class (Implementation)

Chương : Các khái niệm lập trình hướng đối tượng

~ Ta dùng tên nhận dạng để đặt tên cho class để nhận dạng Classđịnh nghĩa chi tiết thựcđối tượng :

ƒ định nghĩa thuộc tính liệu, thuộc tính đặc tả thơng tin tên nhận dạng, kiểu liệu, tầm vực truy xuất, Kiểu thuộc tính type cổđiển (số nguyên, thực, ký tự, chuỗi ký tự, ) hay 'abstract type', trường hợp sau thuộc tính tham khảo đến đối tượng khác Trạng thái đối tượng tập giá trị thời điểm tương ứng tất thuộc tính đối tượng Trong thời gian tồn hoạt động, trạng tái đối tượng thay đổi

ƒ 'coding' tác vụ (miêu tả giải thuật chi tiết hoạt động tác vụ) 'internal function'

~ Định nghĩa tác vụtạo (create) xóa (delete) đối tượng ~ Định nghĩa tác vụ'constructor' 'destructor'

~ User không cần quan tâmđến class củađối tượng

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 20

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? };

(11)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 21

Tính bao

đ

óng (encapsulation)

‰ Bao đóng : che dấu chi tiết thực đối tượng, không cho bên thấy truy xuất⇒tạo độđộc lập cao đối tượng (hay tính kết dính - cohesion đối tượng thấp)

ƒ che dấu thuộc tính dữliệu: cần cho phép bên ngồi truy xuất thuộc tính, ta tạo tác vụ get/set tương ứng để giám sát kiểm soát việc truy xuất (thuộc tính che giấu)

ƒ che dấu chi tiết thực tác vụ

ƒ che dấu internal functionvà sựhiện thực chúng ‰ Java, VC++ cung cấp từkhóa private, protected, public để

xác định tầm vực truy xuất thành phần class

Chương : Các khái niệm 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 hướng đối tượng

Slide 22

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 định nghĩa type/class từ đầu mà cách kế

thừa type/class có sẵn, ta định nghĩa thêm chi tiết mà (thường ít)

ƒ Đa thừa kế hay đơn thừa kế

ƒ Thừa kếtạo mối quan hệsupertype/subtype superclass/subclass

ƒ Có thểoverride method class cha, kết quảoverride chỉtác dụng đối tượng class

ƒ Đối tượng class có thểđóng vai trò đối tượng class cha ngược lại thường không

‰ VC++ cho phép hạn chếtầm vực truy xuất thành phần class cha :

class C : protected A, private B {…}

(12)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 23

Ví d

v

th

a k

ế

và override — VC++

classGeometry { // abstract base class

public:

Geometry( );

virtual voidDraw( Window *pWnd ) = 0; // abstract operation

protected:

int xPos, yPos; COLORREF color; };

classGroup : publicGeometry { public:

Group( ); ~Group( );

virtual voidDraw( Window *pWnd ); // override

private:

Geometry **ppGeo; // pointer container

int geoCount; };

Chương : Các khái niệm 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 hướng đối tượng

Slide 24

Tính bao g

p (aggregation)

ƒ đố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 cách đệquy đối tượng

ƒ Có góc nhìn vềtính báo gộp : ngữnghĩa & thực

O1 O2

O3

Góc nhìn ngữnghĩa Góc nhìn hiện thực

O1

O2

O3

(13)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 25

Ví d

v

bao g

p - VC++

classGeometry { // abstract base class

public:

Geometry( ); ~Geometry( );

virtual voidDraw( Window *pWnd ) = 0; // abstract operation

protected:

int xPos, yPos; double xScale, yScale; COLORREF color; };

classGroup : publicGeometry { public:

Group( ); ~Group( );

virtual voidDraw( Window *pWnd ); // override

private:

Geometry **ppGeo; // =Geometry* ppGeo[n];

int geoCount; };

Chương : Các khái niệm 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 hướng đối tượng

Slide 26

Thông

đ

i

p (Message)

‰ Thông điệp phép gọi tác vụ đến đối tượng từ1 tham khảo

‰ Thông điệp bao gồm phần : ƒ tham khảođến đối tượng đích ƒ Tên tác vụmuốn gọi

ƒ danh sách tham sốthực cần truyền theo (hay nhận vềtừ) tác vụ

ƒ ví dụ: aCircle.SetRadius (3); aCircle.Draw (pWnd);

‰ Thông điệp phương tiện giao tiếp (hay tương tác) đối tượng

(14)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 27

Tính

đ

a x

(Polymorphism)

‰ Cùng lệnh gởi thông điệp đến đối tượng thông qua tham khảo ởvịtrí/thời điểm khác có thểkích hoạt việc thực thi tác vụkhác đối tượng khác

T1 p1; // C1 C2 class Java thực T1

p1 = New C1; // tạo đối tượng C1, gán tham khảo vào biến p1

p1.meth1( ); // gởi thông điệp nhờtác vụmeth1 thực thi

p1 = New C2; // tạo đối tượng C2, gán tham khảo vào biến p1

p1.meth1( ); // gởi thông điệp nhờtác vụmeth1 thực thi

Lệnh gởi thơng điệp p1.meth1( );ở vịtrí khác kích hoạt tác vụkhác class khác

Chương : Các khái niệm 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 hướng đối tượng

Slide 28

Ki

m tra ki

u (type check)

‰ Chặt dùng mối quan hệ'conformity' (tương thích tổng quát) Type A tương thích với type B ⇔A chứa tác vụcủa B vàứng với tác vụcủa type B :

ƒ Tồn tác vụcùng tên A

ƒ danh sách tham sốcủa tác vụ tương ứng phải vềsố lượng tham số

ƒ kiểu đối sốOUThay giá trịreturn tác vụtrong A phải tương thích với kiểu đối số tương ứng B

ƒ kiểu đối sốINcủa tác vụtrong B phải tương thích với kiểu đối số tương ứng A

ƒ kiểu đối sốINOUTphải trùng với kiểu đối số tương ứng B

Ö quan hệso trùnghay quan hệcon/cha (sub/super) làtrường hợp đặc biệtcủa quan hệtương thích tổng quát

(15)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 29

Tính t

ng quát hóa (Generalization)

‰ Có ngữnghĩa khác tính tổng qt hóa :

ƒ class tổng qt hóa cho phép sản sinh tựđộng class bình thường, class bình thường tựnó chỉcó thểtạo đối tượng Thường dùng ngữnghĩa giai đoạn lập trình ƒ ngược với tính thừa kế: supertype/superclass type/class

tổng quát hóa của Thường dùng ngữnghĩa giai đoạn phân tích/thiết kếphần mềm

Chương : Các khái niệm 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 hướng đối tượng

Slide 30

Tính th

ườ

ng trú (persistence)

‰ Thời gian sống đối tượng độc lập với thời gian sống phần tử(ứng dụng, đối tượng khác) tạo

ƒ Đối tượng phải tồn tạikhi cịn tham khảo đến hệthống

ƒ Đối tượng phải bịxóakhi khơng cịn tham khảo đến nó, thời điểm đối tượng rác Việc xác định xác đối tượng có phải rác hay khơng việc phức tạp, code ứng dụng không phép thực hiện, công việc hệ thống thông qua module 'garbage collection'

ƒ thường trú vĩnh Mức độcó thểlà session máy ảo (JVM) hay lâu dài (thông qua đĩa cứng, CDROM)

(16)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 31

T

ng k

ế

t

‰ Mơ hình hướng đối tượng quan niệm thếgiới (hay chương trình) bao gồm đối tượng độc lập sống chung tương tác lẫn ‰ Các đặc điểm mơ hình hướng đối tượng :

ƒ Bao đóng : đối tượng bao gồm sốdữliệu tác vụ Các tác vụthiết lập nên hành vi đối tượng Các đối tượng loại

được đặc tảbằng class

ƒ Các đối tượng độc lập tương tác lẫn cách gởi thông

điệp

ƒ Giữa class/đối tượng có thểtồn quan hệbao gộp, thừa kế, tổng qt hóa

ƒ Tính đa xạ: kết quảcủa sựkiểm tra kiểu chặt dựa vào mối quan hệ'conformity'

ƒ Tính thường trú : đối tượng tồn cịn tham khảo

đến

Chương : Các khái niệm 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 hướng đối tượng

Slide 32 Chương 3

C

Ơ

CH

D

CH MÃ H

ƯỚ

NG

ĐỐ

I T

ƯỢ

NG

SANG MÃ MÁY

Chương 3: Cơ chếdịch mã OOP sang mã máy

(17)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 33

‰ Chương trình tập đối tượng sống độc lập tương tác lẫn cần thiết

‰ Các đối tượng thuộc sốloại định (n)

‰ Mỗi loại đối tượng miêu tảbởi type & class ‰ Mã nguồn chương trình tập nđịnh nghĩa type & class ‰ Dịch chương trình OOP qui trình lặp dịch n type & n class ‰ Ta sẽmiêu tảqui trình dịch type class chương

T

ng quát v

v

n

đề

d

ch OOP

Chương 3: Cơ chếdịch mã OOP sang mã máy

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 34

‰ Abstract type chỉchứa thông tin trừu tượng (interface), không miêu tả sựhiện thực →Kết quảviệc dịch type chỉdừng lại việc xây dựng ngữnghĩa type tương ứng đểphục vụviệc kiểm tra kiểu chương trình dịch, chứkhơng tạo code mã máy ‰ Chỉcần bước : duyệt từvựng, phân tích cú pháp phân tích

ngữnghĩa

‰ Nên dùng cơng cụhỗtrợ LEX, YACC cho bước duyệt từ vựng & phân tích cú pháp

D

ch abstract type

(18)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 35

‰ Dịch class công việc chương trình dịch hướng đối tượng

‰ Gồm cơng việc : dịch thuộc tính dữliệu dịch method (hay internal function)

‰ Cần đầy đủcác bước : duyệt từvựng, phân tích cú pháp, phân tích ngữnghĩa tạo mã

‰ Nên dùng công cụhỗtrợ LEX, YACC cho bước duyệt từ vựng & phân tích cú pháp

D

ch class

Chương 3: Cơ chếdịch mã OOP sang mã máy

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 36 ‰ class →cấu trúc record

class C1 : C0 { double d; int i ; public :

int proc4(int i);

void proc5 (double d);

};

D

ch thu

c tính d

li

u

typedef struct {

// import field từcấu trúc //được sinh từC0

// field tươngứng với C1 double C1_d;

int C1_i;

// field dữliệu điều khiển // tựtạo chương trình dịch void (*pvfaddr)() ;

} C1;

(19)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 37

D

ch thu

c tính d

li

u (tt)

‰ class →1 record dữliệu cổđiển ‰ tên class →tên record

‰ copy field dữliệu cấu trúc sinh từviệc dịch class cha ‰ Chuyển thuộc tính class thành field record,

“tuyệt đối hóa” tên thuộc tính đểtránh nhặp nhằng ‰ thêm field dữliệu điều khiển phục vụcho run-time : thí dụ

bảng địa chỉcác tác vụcủa đối tượng (pvftbl)

Chương 3: Cơ chếdịch mã OOP sang mã máy

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 38

D

ch thu

c tính d

li

u (tt)

‰ cấu trúc recordđược dịch mã máy thành vùng nhớliên tục có độdài đội dài record

- khai báo biến C1 o1; C1_o1 db dup (sizeof(C1))

‰ truy xuất thuộc tính dữliệu trởthành việc truy xuất nhớdùng cách định địa chỉchỉsố:

- o1.i = 5; mov bx, C1_o1 mov [bx+8],

(20)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 39

class C1 : C0 { double d; int i ; public :

void proc2(); //override int proc4(int i, double k); void proc5 (double d);

};

T

o b

ng

đị

a ch

các tác v

0 "proc1" C0_proc1 "proc2" C1_proc2

2 "proc3" C0_proc3

3 "proc4" C1_proc4 "proc5" C1_proc5

5

fname faddr

pvftbl

Chương 3: Cơ chếdịch mã OOP sang mã máy

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 40

T

o b

ng

đị

a ch

các tác v

(tt)

‰ Tạo bảng địa chỉgồm C1METHCNT phần tử(C1METHCNT số tác vụcủa class hành, kểcảcác tác vụthừa kế)

‰ Mỗi phần tửđược nhận dạng qua chỉsốvà gồm thơng tin : tên gợi nhớcủa tác vụvà địa chỉcủa tác vụ

‰ copy bảngđịa chỉcủa class chađã có

‰ Hiệu chỉnh lại địa chỉcủa tác vụbịoverride

‰ Thêm vào tác vụmới định nghĩa class hành

(21)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 41

int C1::proc1(int i,double k) { C2 o2;

C2 *p2; C1::i = i; d = k;

C1::proc5(d); o2.proc2(i,d); p2 = New(C2); p2->proc2(i,d);

};

D

ch method

int C1_proc1(C1* p, int i, double d) { C2 o2; C2 *p2;

// truy xuất thuộc tính p->C1_i = i; p->C1_d = d; // gọi hàm

C1_proc5(p,d); C2_proc2(&o2, i,d);

// gởi thông điệp : kiểm tra, load, // cập nhật bảngđịa chỉmethod for (i = 0; i <C2METHCNT; i ++)

if (strcmp ("proc2", p2-> pvftbl[i].fname)==0) break; (*p2->pvftbl[i].faddr)(p2,i,d);

};

1 2

3

Chương 3: Cơ chếdịch mã OOP sang mã máy

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 42

D

ch method (tt)

‰ tên methodđược chuyển từdạng “tương đối” sang “tuyệt đối” (nối kết tên class vào)

‰ thêm tham sốđầu tiên cho hàm sinh : miêu tảtham khảo đến đối tượng mà hàm sẽtruy xuất thuộc tính dữliệu

‰ tên thuộc tínhđược chuyển từdạng “tương đối” sang “tuyệt đối” (nối kết tên class vào)

‰ gọi hàm internal →gọi hàm thêm tham sốđầu tiên ‰ gởi thôngđiệp gồm bước :

ƒ kiểm tra, tìm, loadđối tượng cập nhật bảng địa chỉcác method củađối tượng

ƒ tìm chỉsốcủa method cần gọi bảng (i)

ƒ gọi gián tiếp method thông qua địa chỉphần tửthứi bảng

(22)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 43

T

i

ư

u hóa code t

o ra

‰ Có vấn đềlớn q trình dịch class sang ngôn ngữcổ điển

ƒ Bảng địa chỉcác method chiếm nhiều không gian

ƒ Tốn thời gian chạy lệnh gởi thơng điệp : kiểm tra, tìm, loadđối tượng, cập nhật bảng địa chỉcác tác vụ, tìm chỉsốmethod cần gọi gọi gián tiếp qua địa chỉtrong bảng

‰ số chương trình dịch tìm cách tối ưu hóa vấn đềtrên ‰ slide sau tối ưu hóa chương trình dịch C++ giá

phải trả

Chương 3: Cơ chếdịch mã OOP sang mã máy

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 44

T

i

ư

u hóa code t

o (tt)

‰ C++, tất cảđối tượng tạm thời gắn chặt vào ứng dụng →bảngđịa chỉcác method đối tượng nằm sẵn không gian ứng dụng

‰ Mỗi lần tạo đối tượng mới, biến pvftbl đối tượng gán địa chỉbảng địa chỉcác method →không cần thực bước xửlý lệnh gởi thông điệp đến đối tượng

‰ C++ chỉdùng mối quan hệcon/cha kiểm tra kiểu →cơng việc (tìm chỉsốtác vụ) làm thời điểm dịch thay thời điểm gởi thông điệp lúc chạy →cột tên gợi nhớ method không cần phải lưu trữtrong bảng địa chỉcác method ‰ chỉcó virtual function giải theo chế đa xạ

→bảng địa chỉchỉchứa hàm virtual class, function khác dịch lời gọi hàm trực tiếp

(23)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 45

T

i

ư

u hóa code t

o (tt)

‰ giá phải trảcủa việc tốiưu hóa C++ :

ƒ người lập trình phải tựquyếtđịnh tác vụnào cần xửlý theo cơchế đa xạ, tác vụnào không ? Nếu sựquyếtđịnh sai sẽgây lỗi chạy, mà người khó lịng quyếtđịnh xác

ƒ tínhđa xạchỉ cácđối tượng có mối quan hệ con/cha,ởđó thứtựcácđịa chỉmethod class bảngđịa chỉluôn giống thứtựcác method tươngứng class cha, nhiên class bất kỳthì khơng thể đảm bảo →kiểm tra kiểu C++ nâng cấp lên cách dùng mối quan hệ"conformity"

Chương 3: Cơ chếdịch mã OOP sang mã máy

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 46 Chương 4

T

NG QUÁT V

M

C

ĐỘ

H

TR

OOP C

A VC++ & JAVA

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

(24)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 47

4.1 Ngơn ng

Visual C++

Chỉhỗtrợclass, không hỗtrợabstract type

2 Cho phépđa thừa kế& Override method thừa kế Dùng 'abstract class' đểđịnh nghĩa interface

4 Tầm vực truy xuất thành phần Đa xạcó chọn lọc nhờ'virtual function' Chỉhỗtrợcác đối tượng tạm

7 Có thểđịnh nghĩa “overloaded function”

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 48

Ch

h

tr

class, không h

tr

abstract type

Chỉcung cấp lệnh “class” đểđặc tảsựhiện thực đối tượng, lệnh interface hay type đểđịnh nghĩa type đối tượng

Dùng classđểđịnh nghĩa kiểu cho biến, thuộc tính Cần phân biệt cách định nghĩa kiểu cho biến :

C1 o1; // biến o1 vùng nhớchứa đối tượng

C1* p1; // biến p1 vùng nhớchứa pointer tới đối tượng

ƒ Nếu class có chứa thuộc tính đối tượng thuộc kiểu class đối tượng tương ứng sẽlà đối tượng gộp vật lý đối tượng khác ƒ Nếu class có chứa thuộc tính đối tượng thuộc kiểu class

pointer đối tượng tương ứng sẽlà đối tượng gộp chứa tham khảo (pointer) đến đối tượng khác

(25)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 49

Đ

a th

a k

ế

Đa thừa kế định nghĩa class, hấp dẫn cho người lập trình chi phí thực cao :

ƒ dễgây việc trùng tên thành phần nằm class cha khác thừa kếcho class ⇒phải giải vấn đềtrùng tên tránh nhặp nhằng việc truy xuất chúng ƒ class có thểchứa nhiều class cha trùng ⇒phải giải việc

duplicate thành phần class cha trùng (dư thừa tính quán) ⇒VC++ đềnghịdùng "virtual base class" đểtối

ưu hóa bộnhớđối tượng

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

a b.

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 50

Đ

a th

a k

ế

ƒ Phát biểu :

class NguoiCa : publicNguoi, publicCa { };

sẽtạo đối tượng NguoiCa có cấu trúc dữliệu theo hình a slide trước ⇒các thuộc tính class Sinhvat nhân tồn lần ở2 vịtrí khác đối tượng NguoiCa

⇒ dư thừa dữliệu tính qn dữliệu ƒ Cịn phát biểu :

class NguoiCa : public virtualNguoi, public virtual Ca { }; sẽtạo đối tượng NguoiCa có cấu trúc dữliệu theo hình b slide trước ⇒các thuộc tính class Sinhvat chỉtồn lần đối tượng NguoiCa ⇒khắc phục dư thừa liệu khơng tính qn dữliệu

(26)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 51

Class tr

u t

ượ

ng (Abstract class)

VC++ hỗtrợkhái niệm "abstract class" đểđịnh nghĩa class chỉchứa thông tin interface không cho phép dùng class đểđịnh nghĩa kiễu cho biến hay thuộc tính (trừ pointer) Một “abstract class” class chứa "pure virtual funtion“, "pure virtual funtion“ virtual function

được gán =0 (nghĩa khơng có phần thực kèm theo)

classGeometry { // abstract class

public:

Geometry( ); ~Geometry( );

virtual voidDraw( Window *pWnd ) = 0; // pure virtual function

protected:

int xPos, yPos;

double xScale, yScale; COLORREF color;

};

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 52

T

m v

c truy xu

t thành viên c

a class

Tầm vực truy xuất thành viên đối tượng miêu tảbởi từkhóa sau :

private: thành phần bịche dấu hoàn toàn

protected: chỉche dấu bên cho con, cháu, chắt,… truy xuất

public: cho phép tất cảmọi nơi truy xuất

Friend class: class mà hàm có thểtruy xuất tự thành phần class hành

Friend function: function cổđiển có thểtruy xuất tựdo thành phần class hành

Có thểhạn chếtầm vực thành viên class cha thừa kế

class C : protected A, private B {…}

(27)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 53

H

tr

tính

đ

a x

có ch

n l

c

Định nghĩa 'virtual function' muốn áp dụng tính đa xạtrong lệnh gởi thơng điệp u cầu hàm thực thi

Tất cảcác 'virtual function' class quản lý danh sách "virtual function table" Danh sách field liệu nằm đối tượng tạo tựđộng chương trình dịch

địa chỉfunction

địa chỉfunction

địa chỉfunction

địa chỉfunction

địa chỉfunction

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 54

Các

đố

i t

ượ

ng

đề

u t

m th

i

Các đối tượng chỉtồn tạm thời không gian process

Tham khảođến đối tượng thực chất pointercục bộtrong không gian làm việc process

Chương trình phải tựviết code cho hoạt động save/restore đối tượng muốn lưu giữ/dùng lại đối tượng

VC++ hỗtrợhoạt động save/restore đối tượng nhờkhả 'Serialization'

Có quyền'override'bất cứmethod bất kỳfunction class cha

Cho phépđịnh nghĩa hàm'overloaded': tên 'signature' khác

(28)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 55

Skeleton

đị

nh ngh

ĩ

a class

classGeometry : Object { // == class Geometry : public Object { public:

Geometry( ); ~Geometry( );

virtual voidDraw( Window *pWnd ); // virtual method

BOOL IsDisplayed(void);

protected:

COLORREF color;

private :

int xPos, yPos;

double xScale, yScale;

};

classPoint : Geometry {}; classLine : Geometry { }; classPolygon : Geometry { }; classRectangle : Geometry { };

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 56

C

u trúc ch

ươ

ng trình Dialog based

đơ

n gi

n

InitInstance()

DoModal()

CProgramApp

CProgramDlg

(29)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 57

C

u trúc ch

ươ

ng trình SDI

đơ

n gi

n

InitInstance()

CProgramApp

CSingleDocTemplate

CMainFrame

CProgramView CProgramDoc

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 58

C

u trúc ch

ươ

ng trình MDI

đơ

n gi

n

InitInstance()

CProgramApp

CMultiDocTemplate

CChildFrame

CProgramView CProgramDoc

(30)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 59

4.2 Ngôn ng

Java

Hỗtrợđầy đủ'interface' (abstract type) class Hỗtrợđơn thừa kế

3 Có thểdùng 'abstract class' đểđịnh nghĩa interface Tầm vực truy xuất thành phần

5 Hỗtrợ package Đa xạđầy đủ

7 Chỉhỗtrợđối tượng tạm session JVM Override function thừa kế

9 Có thểđịnh nghĩa overloaded function

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 60

1 Java hỗ trợ việc định nghĩa đối tượng theo góc nhìn : phát biểu interface định nghĩa góc nhìn sử dụng phát biểu class định nghĩa góc nhìn thực ⇒ nguyên tắc người lập trình nên dùng tên interface để định nghĩa biến đối tượng, nhiên tập qn thói quen, người lập trình chủyếu dùng class để định nghĩa kiểu cho biến, thuộc tính Tuy nhiên dù dùng tên interface hay tên class định nghĩa biến đối tượng biến chứa tham khảo đến đối tượng, đối tượng tạo không gian quản lý máy ảo JVM (chứ không gian ứng dụng)

H

tr

Class Interface

(31)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 61

Phải gọi hàm tạo đối tượng cách tường minh, khơng cần xóa đối tượng (việc nên đểcho module dọn rác JVM thực đểđảm bảo tính đắn an tồn)

classC1 extendsRootClass { }

C1 o1; // o1 chứa tham khảo đến đối tượng C1

o1 = New C1; //tạo đối tượng gán tham khảo vào biến đối tượng

Việc dùng tên interface đặc tảkiểu cho biến, thuộc tính ln có lợi việc dùng tên class Thí dụvề ứng dụng hiển thịđồng hồ thời gian thực chương sẽcho ta thấy rõ điều

2.Đơn thừa kế định nghĩa interface định nghĩa class⇒mối quan hệthừa kếgiữa interface/class đơn giản, dễhiện thực

T

o & xóa

đố

i t

ượ

ng

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 62

H

tr

abstract class

3 Tiếp tục hỗtrợkhái niệm "abstract class" đểđịnh nghĩa class chứa thông tin interface không cho phép 'instanciate' đối tượng Người lập trình có thểdùng class 'abstract class' để đặc tảkiểu cho biến đểthừa kếtrong việc định nghĩa class

classabstract Geometry { // abstract class

protected int xPos, yPos;

protected double xScale, yScale;

protected COLORREF color;

public abstract Draw(Graphics g); // abstract function

};

Abstract class có thểchứa đầy đủcác thực bên trong, thường chứa 'abstract function'

(32)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 63

T

m v

c truy xu

t thành ph

n

4 Tầm vực truy xuất thành phần đối tượng : private: thành phần bịche dấu hoàn toàn

protected: che dấu bên cho phép cácđối tượng con, cháu, chắt truy xuất

public: cho phép tất cảmọi nơi truy xuất

friendly: cho phép phần tử package truy xuất Đây tầm vực mặc định khơng có từkhóa tầm vực tường minh

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 64

5 Packagelàđơn vị đóng gói class đơn vịquản lý tầm vực java, package chứa nhiều class (ởdạng mã trung gian — mã bytecode)

package graphics;

public class Circle extends Graphic implements Draggable {

}

Tất cảmọi phần tửđược định nghĩa file mã nguồn thuộc package, tên package đặc tảtrong phát biểu package, phát biểu phải nằm ởđầu file mã nguồn Nếu khơng có class file mã nguồn sẽđược chứa package mặc định (khơng có tên)

Nhiều file source có thểđược dịch lưu package

H

tr

package

(33)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 65

H

tr

đầ

y

đủ

tính

đ

a x

6 Tất cảcác tác vụmà có thểđược gọi từbên (public, protected, friendly) quản lý danh sách "public function table“ đối tượng

Địa chỉfunction

Địa chỉfunction

Địa chỉfunction

Địa chỉfunction i

Địa chỉfunction n

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 66

Các

đố

i t

ượ

ng

đề

u 't

m th

i'

7 Cácđối tượng chỉtồn tạm thời session chạy JVM Coe ứng dụng phải tạo đối tượng muốn dùng nó, khơng cần phải xóa đối tượng.Đối tượng sẽtồn cịn tham khảo đến khơng gian session JVM Module Garbage Collection JVM sẽchịu trách nhiệm phát đối tượng ‘rác’ xóa khỏi bộnhớJVM

8 Có quyền 'override' bất kỳfunction class cha Class cha có thểquyết định khơng cho class override tác vụcủa cách dùng từ khóa finaltrong lệnh định nghĩa tác vụ

9 Cho phép định nghĩa hàm 'overloaded' : tên 'signature' khác

(34)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 67

Thí d

v

ch

ươ

ng trình Java

import java.net.*; public class getnet {

public static void main(String args[]) { try {

if(args.length!=1) {

System.out.println("Usage: java AddrLookupApp <HostName>"); return;

}

InetAddress host = InetAddress.getByName(args[0]); String hostName = host.getHostName();

System.out.println ("Host name : "+hostName);

System.out.println ("IP address:"+host.getHostAddress()); }

catch (UnknownHostException e) { } }

}

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 68

Thí d

v

ch

ươ

ng trình Java

12.34.25 AlarmClock

GUIClock

wakeup() <<chứa>>

(35)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 69

Thí d

v

các class Java

public classAlarmClock {

private static final int MAX_CAPACITY = 10; private static final int UNUSED = -1;

private static final int NOROOM = -1;

private Sleeper[] sleepers = new Sleeper[MAX_CAPACITY]; private long[] sleepFor = new long[MAX_CAPACITY];

public AlarmClock () {

for (int i = 0; i < MAX_CAPACITY; i++) sleepFor[i] = UNUSED;

}

//còn tiếp ởslide kế

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 70

//tác vụđếm dùm khách hàng s thời gian time (ms)

public synchronized boolean letMeSleepFor(Sleeper s, long time) {

int index = findNextSlot(); if (index == NOROOM) {

return false; } else {

sleepers[index] = s; sleepFor[index] = time;

new AlarmThread(index).start(); return true;

} }

//còn tiếp ởslide kế

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

(36)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 71

private synchronized int findNextSlot() { for (int i = 0; i < MAX_CAPACITY; i++) {

if (sleepFor[i] == UNUSED) return i;

}

return NOROOM; }

private synchronized void wakeUpSleeper(int sleeperIndex) { sleepers[sleeperIndex].wakeUp();

sleepers[sleeperIndex] = null; sleepFor[sleeperIndex] = UNUSED; }

//còn tiếp ởslide kế

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Thí d

v

các class Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 72 private class AlarmThreadextends Thread {

int mySleeper;

AlarmThread(int sleeperIndex) { super();

mySleeper = sleeperIndex; }

public void run() { try {

sleep(sleepFor[mySleeper]); } catch (InterruptedException e) {} wakeUpSleeper(mySleeper); }

} }

//hết phần đặc tảclass AlarmClock

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

(37)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 73

public interface Sleeper{ public void wakeUp();

public long ONE_SECOND = 1000;// in milliseconds public long ONE_MINUTE = 60000; // in milliseconds }

import java.applet.Applet; import java.awt.Graphics; import java.util.*;

import java.text.DateFormat;

public class GUIClockextendsAppletimplements Sleeper{ private AlarmClock clock;

public void init() {

clock = new AlarmClock(); }

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

Thí d

v

các class Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 74

public void start() {

clock.letMeSleepFor(this, 1000); }

public void paint(Graphics g) {

Calendar cal = Calendar.getInstance(); Date date = cal.getTime();

DateFormat dateFormatter = DateFormat.getTimeInstance(); g.drawString(dateFormatter.format(date), 5, 10);

}

public voidwakeUp() { repaint();

clock.letMeSleepFor(this, 1000); }

}

Chương : Tổng quát vềmức độhỗtrợOOP VC++ & Java

(38)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 75

MƠN K

THU

T L

P TRÌNH

Chương 5

ĐẶ

C T

CLASS & CÁC TÍNH CH

T C

Ơ

B

N

C

A

ĐỐ

I T

ƯỢ

NG TRONG VC++

Chương :Đặc tảclass & tính chất đối tượng VC++

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 76

Chương :Đặc tảclass & tính chất đối tượng VC++

Thông tin chi tiết thực hành số6

(39)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 77

MƠN K

THU

T L

P TRÌNH

Chương 6

ĐẶ

C T

CLASS & CÁC TÍNH CH

T C

Ơ

B

N

C

A

ĐỐ

I T

ƯỢ

NG TRONG JAVA

Chương :Đặc tảclass & tính chất đối tượng Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 78

Thông tin chi tiết thực hành số7

Đặ

c t

interface (abstract type) Java

(40)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 79

MƠN K

THU

T L

P TRÌNH

Chương 7

G

I HÀM, G

I THÔNG

Đ

I

P

&

Đ

A X

TRONG VC++

Chương : Gọi hàm, gởi thông điệp & đa xạtrong VC++

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 80

Trong VC++, lệnh thực thi phải nằm thân hàm Ta phân biệt loại hàm :

ƒ Hàm cổđiển, tồn ởcấp ngồi (khơng thuộc class nào) ƒ Hàm class đối tượng đó, ta tạm dùng thuật ngữ "tác

vụ" đểnói vềloại hàm

Trong thân hàm cổđiển, xét lệnh sau : function1( );

::function1( );

Hai lệnh gọi lời gọi hàm cổ điển function1() Hàm function1() phải tồn module phần mềm module thư viện mà phần mềm sẽliên kết đến

T

ng quát v

g

i hàm VC++

(41)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 81

Trong thân tác vụ, xét lệnh sau : ::function1( );

Lệnh lời gọi hàm cổđiển function1() Hàm function1() phải tồn module phần mềm module thư viện mà phần mềm sẽliên kết đến

Trong thân tác vụ, xét lệnh sau : function1( );

Nếu function1() không định nghĩa class đối tượng tương ứng lệnh lời gọi hàm cổđiển function1() Hàm function1() phải tồn module phần mềm module thư viện mà phần mềm sẽliên kết đến

T

ng quát v

g

i hàm VC++

Chương : Gọi hàm, gởi thông điệp & đa xạtrong VC++

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 82

‰ Trong VC++, có cách truy xuất đối tượng khác : ƒ thông qua biến đối tượng MyClass obj;

ƒ thông qua biến tham khảo đến đối tượng : MyClass *pobj; ‰ Biến obj miêu tả thân đối tượng MyClass (1 cách tường

minh, xác định không nhầm lẫn với đối tượng thuộc class khác Cú pháp gọi tác vụthông qua biến đối tượng :

obj.function1( );

lệnh dịch thành lời gọi hàm function1( ) class MyClass thời điểm dịch Do thời điểm chạy, biến obj chứa đối tượng khác lệnh obj.function1( ) ln lời gọi hàm function1( ) class MyClass Khơng có đa xạ trường hợp Ngữ nghĩa lời gọi hàm có thểđúng/khơng với u cầu người lập trình thời điểm/vịtrí chạy

T

ng quát v

g

i hàm VC++

(42)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 83

Trong thân tác vụ, xét lệnh sau : function1( );

Nếu function1() định nghĩa class đối tượng tương ứng lệnh sẽđược chuyển thành lệnh :

this->function1( );

trong this tên biến tham khảo đến đối tượng hành Lệnh this->function1( ); trường hợp đặc biệt lệnh : pobj->function1( );

trong pobj tên biến tham khảo đến đối tượng định nghĩa trước

Bây giờchúng ta khảo sát chi tiết vềviệc xửlý lệnh

pobj->function1( );trong VC++

T

ng quát v

g

i hàm VC++

Chương : Gọi hàm, gởi thông điệp & đa xạtrong VC++

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 84 Giải sửbiến tham khảo pobj định nghĩa sau :

MyClass *pobj;

Việc xửlý lệnh gởi thông điệp pobj->function1( ); sau :

Kiểm tra xem function1 có phải làtác vụvirtualcủa class MyClass khơng? ƒ Nếu function1 tác vụ virtual, lệnh gởi thông điệp dịch lời gọi hàm tường minh đến hàm function1 class MyClass (bất chấp thời điểm chạy biến pobj tham khảo đến

đối tượng thuộc class khác) Như vậy, cách giải khơng tạo tính đa xạcho lời gởi thơng điệp

ƒ Nếu function1 tác vụ virtual, lệnh gởi thông điệp dịch

đoạn mã máy thực việc tìm liên kết động tới hàm fucntion1 nhờ bảng địa hàm virtual đối tượng tham khảo biến pobj Như vậy, cách giải tạo tính đa xạ cho lời gởi thông điệp

X

lý l

nh g

i thông

đ

i

p VC++

(43)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 85

Giới thiệu thực hành số8

Thí d

c

ng c

n

i dung ch

ươ

ng 7

Chương : Gọi hàm, gởi thông điệp & đa xạtrong VC++

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 86

MƠN K

THU

T L

P TRÌNH

Chương 8

G

I HÀM, G

I THÔNG

Đ

I

P

&

Đ

A X

TRONG JAVA

(44)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 87

Trong Java, chỉcó cách truy xuất đối tượng : thông qua biến tham khảo đến đối tượng Biến tham khảo định nghĩa theo cách :

MyClass pobj; //dùng class miêu tảkiểu cho biến MyInterface pobj; //dùng interface miêu tảkiểu cho biến Trong Java, lệnh thực thi phải nằm thân tác vụ class

T

ng quát v

g

i thông

đ

i

p Java

Chương : Gọi hàm, gởi thông điệp & đa xạtrong Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 88

Trong thân tác vụ, xét lệnh sau : function1( );

Nếu function1() định nghĩa class đối tượng tương ứng lệnh sẽđược chuyển thành lệnh :

this.function1( );

trong this tên biến tham khảo đến đối tượng hành Lệnh this.function1( ); trường hợp đặc biệt lệnh : pobj.function1( );

trong pobj tên biến tham khảo đến đối tượng định nghĩa trước

Bây giờchúng ta khảo sát chi tiết vềviệc xửlý lệnh

pobj.function1( );trong Java

T

ng quát v

g

i thông

đ

i

p Java

(45)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 89 Giảsửbiến tham khảo pobj định nghĩa sau :

MyClass pobj;

Việc xửlý lệnh gởi thông điệp pobj.function1( );là kiểm tra xem function1 có phải làtác vụprivatecủa class MyClass khơng?

ƒ Nếu function1 tác vụ private, lệnh gởi thông điệp chỉđược xử lý pobj = this Máy sẽdịch lời gọi hàm tường minh đến hàm function1 class FuncClass (class chứa hàm function1), bất chấp thời

điểm chạy biến this tham khảo đến đối tượng thuộc class khác Như vậy, cách giải khơng tạo tính đa xạcho lời gởi thơng điệp

ƒ Nếu function1 có tầm vực khác private, lệnh gởi thông điệp dịch đoạn mã máy thực việc tìm liên kết động tới hàm fucntion1 nhờ bảng địa chỉcác tác vụ đối tượng tham khảo biến pobj Như vậy, cách giải tạo tính đa xạ cho lời gởi thông điệp

X

lý l

nh g

i thông

đ

i

p Java

Chương : Gọi hàm, gởi thông điệp & đa xạtrong Java

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 90

Giới thiệu thực hành số9

Thí d

c

ng c

n

i dung ch

ươ

ng 8

(46)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 91

MƠN K

THU

T L

P TRÌNH

Chương 9

T

NG QUÁT HÓA TRONG XÂY D

NG

HÀM & CLASS

Chương : Tổng quát hóa xây dựng hàm & class

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 92

T nh t

̉

ng qua

t ho

a (Generalization)

‰ Như ta biết, xây dựng ứng dụng theo hướng đối tượng xây dựng class có đối tượng dùng đểphục vụ ứng dụng Cơng việc xây dựng class xây dựng method cấu thành interface class Có thể có nhiều method class khác dùng giải thuật (đoạn lệnh thực thi) tác động liệu có số lượng cấu trúc (kiểu) khác Tương tự có nhiều class khác cung cấp interface giống tác động dữliệu có số lượng cấu trúc khác ‰ Thí dụ ta cần method hoán vị số nguyên, method hoán vị

chuỗi, method hoán vị dãy,… Ta cần class quản lý danh sách n sốnguyên, class quản lý m chuỗi, class quản lý k dãy…

(47)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 93

T nh t

̉

ng qua

t ho

a (tt)

‰ Hàm tổng quát hóa (function template) cho phép ta đặc tả tập hàm mà dùng chung đoạn lệnh thực thi tác động liệu thuộc kiểu hay class khác và/hoặc với số lượng khác

‰ Class tổng quát hóa (class template) cho phép ta đặc tả tập class có tính chất giao diện giống tác động dữliệu thuộc kiểu hay class khác và/hoặc với số lượng khác Class tổng quát hóa cho phép sản sinh tựđộng class bình thường, class bình thường tự chỉcó thểtạo đối tượng

Chương : Tổng quát hóa xây dựng hàm & class

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 94

Function template cho phép ta đặc tả1 tập hàm mà dùng chung đoạn lệnh thực thi tác động liệu thuộc kiểu hay class khác Thí dụhàm IntSwap() sau :

void IntSwap(int& a, int& b ) { int c = a;

a = b; b = c; }

chỉcho phép swap số nguyên, template MySwap() sau : template <class T> void MySwap( T& a, T& b ) {

T c (a); a = b; b = c; }

định nghĩa họcác hàm swap dữliệu có kiểu

Function template

(48)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 95 ƒ Ta có thểgọi hàm “template function” y nhưgọi hàm bình

thường, khơng có sựkhác biệt cả: int i, j;

char k;

MySwap(i, j); //Ok

MySwap (i, k); //Sai khác kiểu

ƒ Ta đặc tảtham sốrõ ràng gọi hàm “template function”, thí dụ:

MySwap<int>(i,j); //tạo hàm MySwap (int&, int&) gọi với (i,j)

Function template (tt)

Chương : Tổng quát hóa xây dựng hàm & class

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 96 Class template cho phép ta đặc tả tập class mà dùng chung interface cấu trúc dữliệu tác động liệu thuộc kiểu hay class khác Thí dụ class IntStack sau :

class IntStack { int StackBuffer[100]; int cItems;

public:

void IntStack( void ) : cItems( 100 ) {}; void push( const int item );

int pop( void ); };

void IntStack::push( const int item ) {

if ( cItems > ) StackBuffer[ cItems] = item; else throw "Stack overflow error.";

return; }

Class template

Chương : Tổng quát hóa xây dựng hàm & class

int IntStack::pop ( void ) { if ( cItems < 100)

return StackBuffer[cItems++]; else

(49)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 97

Class IntStack đặc tả slide trước tạo đối tượng stack chứa số nguyên Nếu muốn stack chứa sốthực, ta phải định nghĩa class khác (gần giống với class IntStack) Tương tự, muốn stack chứa chuỗi, ta lại phải định nghĩa class khác (gần giống với class IntStack)

Class template cho phép ta khắc phục phiền hà

Class template

Chương : Tổng quát hóa xây dựng hàm & class

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 98

Cú pháp khai báo class template :

template-declaration :

template <template-argument-list >declaration template-argument-list :

template-argument

template-argument-list ,template-argument template-argument :

type-argument argument-declaration type-argument :

classidentifier

typenameidentifier declaration :

là đặc tảclass bình thường có nhiều vịtrí có dùng tham số

template

Class template

(50)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 99

template <class T, int i>class MyStack { T StackBuffer[i];

int cItems; public:

void MyStack( void ) : cItems( i ) {}; void push( const T item );

T pop( void ); };

template <class T, int i> void MyStack< T, i >::push( const T item ) { if( cItems > )

StackBuffer[ cItems] = item; else

throw "Stack overflow error."; return;

}

Class template (tt)

Chương : Tổng quát hóa xây dựng hàm & class

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 100

template <class T, int i> T MyStack< T, i >::pop( void ) { if( cItems < i )

return StackBuffer[cItems++]; else

throw "Stack underflow error."; }

Cho phép đặc tảcác class miêu tảcác stack gồm nhiều dữliệu

nào đó, thí dụ:

MyStack<int,20>intstack; // biến quản lý stack có tối đa 20 sốnguyên

MyStack<CString,40>strstack; // biến quản lý stack có tối đa 40 chuỗi

MyStack<double,100>dblstack; // biến quản lý stack có tối đa 100 số

thực

Chương : Tổng quát hóa xây dựng hàm & class

(51)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 101 Xem phần phụlục chương đểbiết chi tiết, cụthểcủa template MFC dùng phổbiến CArray CList

Chương : Tổng quát hóa xây dựng hàm & class

Class template (tt)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Môn : Lập trình hướng đối tượng

Slide 102 Đọc/ghi liệu biến thuộc kiểu cổ điển (int, double, char[], ) rấr dễ nội dung biến không chứa tham khảo đến thành phần khác Ngược lại, việc đọc/ghi nội dung đối tượng thường khó khăn đối tượng chứa nhiều tham khảo đến đối tượng khác đối tượng tham khảo vịng lẫn Để hỗtrợphần việc đọc/ghi nội dung đối tượng, VC++ đềnghịkỹthuật "Serialization"

Đểđịnh nghĩa class "serializable", ta cần thực tác vụ:

1 định nghĩa class class CObject(gián tiếp hay trực tiếp)

2 Overriding tác vụ"Serialize"

3 Dùng macro DECLARE_SERIALtrong phát biểu đặc tả class Định nghĩa hàm constructor không tham số

5 Dùng macro IMPLEMENT_SERIALtrong thực class

Đị

nh ngh

ĩ

a class "serializable"

(52)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 103

//1 thừa kếclass CObject

class MyClass : public CObject { public :

//3 dùng macro DECLARE_SERIAL

DECLARE_SERIAL( MyClass);

//4 định nghĩa constructor không tham số MyClass();

virtual void Serialize( CArchive& archive );

};

//5 dùng macro IMPLEMENT_SERIAL

IMPLEMENT_SERIAL(MyClass, CObject, )

//2 Override hàm Serialize

void MyClass::Serialize( CArchive& ar ) { }

Chương : Tổng quát hóa xây dựng hàm & class

Đị

nh ngh

ĩ

a class "serializable"

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 104 void MyClass::Serialize (CArchive& ar ) {

//1 gọi hàm Serialize class cha

CObject::Serialize(ar);

//2 gọi hàm Serialize đối tượng chứa vật lý

ba.Serialize( ar );

//3 Serialize đối tượng tạo động thuộc tính cổ điển

if ( ar.IsStoring() ) { //ởchế độghi đối tượng ar << pba1; ar << pba;

// Store other members ar << b1; ar << b2;

} else { //ởchế độđọc đối tượng

ar >> pba1; ar >> pba; // Polymorphic reconstruction of persistent object //load other members

ar >> b1; ar >> b2;

} }

Chương : Tổng quát hóa xây dựng hàm & class

(53)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 105

Để ghi đối tượng thuộc class "serializable", ta cần thực tác vụ : Định nghĩa đối tượng CFile miêu tảfile chứa thông tin

2 Định nghĩa đối tượng CArchive ổchếđộ"store" Gọi tác vụSerialize cần ghi đối tượng Đóng đối tượng CArchive

5 Đóng file

//1 Định nghĩa đối tượng CFile

CFile theFile;

theFile.Open("c:\\persist.bin", CFile::modeCreate | CFile::modeWrite);

//2 Định nghĩa đối tượng CArchive

CArchive archive(&theFile, CArchive::store); MyClass obj;

//3 Gọi tác vụ Serialize để ghi đối tượng

obj.Serialize(archive);

//4 Gọi tác vụ Close để đóng đối tượng archive

archive.Close();

//5 Gọi tác vụ Close để đóng đối tượng file

theFile.Close();

Ghi

đố

i t

ượ

ng

Chương : Tổng quát hóa xây dựng hàm & class

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 106

Để đọc lại đối tượng thuộc class "serializable", ta cần thực tác vụ : Định nghĩa đối tượng CFile miêu tảfile chứa thông tin

2 Định nghĩa đối tượng CArchive ổchếđộ"load" Gọi tác vụSerialize cần ghi đối tượng Đóng đối tượng CArchive

5 Đóng file

//1 Định nghĩa đối tượng CFile

CFile theFile;

theFile.Open("c:\\persist.bin", CFile::modeRead);

//2 Định nghĩa đối tượng CArchive

CArchive archive(&theFile, CArchive::load); MyClass obj;

//3 Gọi tác vụ Serialize đểđọc lại đối tượng

obj.Serialize(archive);

//4 Gọi tác vụ Close để đóng đối tượng archive

archive.Close();

//5 Gọi tác vụ Close để đóng đối tượng file

theFile.Close();

Đọ

c l

i

đố

i t

ượ

ng

(54)

Khoa Công nghệ Thông tin Trường ĐH Bách Khoa Tp.HCM

Mơn : Lập trình hướng đối tượng

Slide 107

Thí d

v

đọ

c/ghi

đố

i t

ượ

ng

Chương : Tổng quát hóa xây dựng hàm & class

intB1 = dblB2 = 2.345 ba

pba pba1

intA1 = dblA2 = 1.234 pab

intA1 = dblA2 = 3.456 pab

intA1 = dblA2 = 4.567 pab

đối tượng class B

Ngày đăng: 27/04/2021, 16:18

TỪ KHÓA LIÊN QUAN

w