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

Thông tin cơ bản

Tiêu đề Lập Trình Hướng Đối Tượng
Trường học Trường Đại Học Bách Khoa Tp.HCM
Chuyên ngành Công Nghệ Thông Tin
Thể loại Tài liệu tham khảo
Thành phố Tp.HCM
Định dạng
Số trang 54
Dung lượng 334,81 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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]

Trang 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 1

MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

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

Đối tượng : SV đại học chính 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 2

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

Trang 2

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

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 4

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.

Phương pháp phân tích từ-trên-xuống

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

Trang 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 5

Phương pháp phân tích từ-trên-xuống (tt)

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

Công việc cần giải quyết (A)

chia thành nhiều công

việc nhỏ hơn, đơn giản để

giải quyết hơn.

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).

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

Trang 4

Khoa Công nghệ Thông tin

Cấu trúc 1 chương trình hướng cấu trúc

Chương 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 trình hướng đối tượng

Slide 8

‰ 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”.

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

Cấu trúc 1 chương trình hướng cấu trúc

Trang 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 9

‰ 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

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

Cấu trúc 1 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 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);

//đặc tả interface của 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 của module A

int A_intA;

static int A_intB;

int A_func1(int a, double b) {

static int B_intB;

int B_func1(int a, double b) {

B_func2(a);

} static void B_func2(int a) { }

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

Trang 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 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);

//đặc tả interface của 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 của module A

int A_intA;

static int A_intB;

int A_func1(int a, double b) {

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 các tính chất của lập trình cấu trúc

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

MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Trang 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 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.

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

Cấu trúc chương trình OOP

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

Trang 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 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

Chương 2 : Các khái niệm chính của 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 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

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

Trang 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 2 : Các khái niệm chính của 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 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êntá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ăngcủ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

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 {…}

Trang 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 2 : Các khái niệm chính của lập trình hướng đối tượng

~ 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.

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 {

virtual BOOL OnInitDialog();

afx_msg void OnPaint();

afx_msg void OnConnect();

Trang 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 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 functionvà 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

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 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

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 {…}

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

Trang 12

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

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)

ƒ 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

Trang 13

Khoa Công nghệ Thông tin

int xPos, yPos;

double xScale, yScale;

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

Slide 26

Thông điệp (Message)

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

khảo

‰ Thông điệp bao gồm 3 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 là phương tiện giao tiếp (hay tương tác) duy nhất

giữa các đố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

Trang 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 1 lệnh gởi thông điệp đến đối tượng thông qua cùng 1 tham

khảo nhưng ở vị trí/thời điểm khác nhau có thể kích hoạt việc thực

thi tác vụ khác nhau của các đối tượng khác nhau

T1 p1; // C1 và C2 là 2 class Java hiện 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( );ở 2 vị trí khác nhau kích hoạt

2 tác vụ khác nhau của 2 class khác nhau

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

Slide 28

Kiểm tra kiểu (type check)

‰ Chặt và 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 mọi tác vụ của B và ứng

với từng tác vụ của type B :

ƒ Tồn tại 1 tác vụ cùng tên trong A

ƒ danh sách tham sốcủa 2 tác vụ tương ứng phải bằng nhau

về số lượng tham số

ƒ kiểu đối số OUThay giá trị return của tác vụ trong A phải

tương thích với kiểu của đối số tương ứng trong B

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

của đối số tương ứng trong A

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

trong 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

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

Trang 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ó 2 ngữ nghĩa khác nhau của tính tổng quát hóa :

ƒ class tổng quát hóa cho phép sản sinh tự động các class bình

thường, các class bình thường tự nó chỉ có thể tạo ra đối

tượng Thường dùng ngữ nghĩa này trong giai đoạn lập trình

ƒ ngược với tính thừa kế : supertype/superclass là type/class

tổng quát hóa của các con của nó Thường dùng ngữ nghĩa

này trong giai đoạn phân tích/thiết kế phần mềm

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

Slide 30

Tính thường trú (persistence)

‰ Thời gian sống của 1 đối tượng độc lập với thời gian sống của

phần tử (ứng dụng, đối tượng khác) tạo ra nó

ƒ Đối tượng phải tồn tạikhi còn ít nhất 1 tham khảo đến nó

trong hệ thống

ƒ Đối tượng phải bị xóakhi không còn tham khảo nào đến nó, vì

tại thời điểm này đối tượng là rác Việc xác định chính xác 1

đối tượng có phải là rác hay không là 1 việc phức tạp, code

ứng dụng không được phép thực hiện, đây là công việc của hệ

thống thông qua module 'garbage collection'

ƒ thường trú không phải là vĩnh hằng Mức độ có thể là 1

session của máy ảo (JVM) hay lâu dài (thông qua đĩa cứng,

CDROM)

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

Trang 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 các đối tượng độc lập sống chung và tương tác lẫn nhau.

‰ Các đặc điểm chính của mô hình hướng đối tượng :

ƒ Bao đóng : mỗi đối tượng bao gồm 1 số dữ liệu và tác vụ Các tác

vụ thiết lập nên hành vi của đối tượng Các đối tượng cùng loại

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

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

MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Trang 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 là tập các đối tượng sống độc lập và tương tác lẫn

nhau khi cần thiết

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

‰ Mỗi loại đối tượng được miêu tả bởi 1 type & 1 class

‰ Mã nguồn chương trình là tập n định nghĩa type & class

‰ Dịch chương trình OOP là qui trình lặp dịch n type & n class

‰ Ta sẽ miêu tả qui trình dịch 1 type và 1 class trong chương này

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 1 type chỉ dừng lại ở

việc xây dựng cây ngữ nghĩa của type tương ứng để phục vụ việc

kiểm tra kiểu của chương trình dịch, chứ không tạo code mã máy

‰ Chỉ cần 3 bước : duyệt từ vựng, phân tích cú pháp và phân tích

Trang 18

Khoa Công nghệ Thông tin

‰ Gồm 2 công việc chính : dịch thuộc tính dữ liệu và dịch các

method (hay các 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 và tạo mã

‰ Nên dùng công cụ hỗ trợ như LEX, YACC cho 2 bước duyệt từ

vựng & phân tích cú pháp

Dịch 1 class

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

Khoa Công nghệ Thông tin

int proc4(int i);

void proc5 (double d);

};

Dịch thuộc tính dữ liệu

typedef struct {// import các field từ cấu trúc// được sinh ra từ C0

// các field tương ứng với C1double C1_d;

int C1_i;

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

} C1;

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

Trang 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)

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

‰ tên class → tên record

‰ copy các field dữ liệu của cấu trúc sinh ra từ việc dịch class cha

‰ Chuyển từng thuộc tính của class thành từng field của record,

“tuyệt đối hóa” tên của thuộc tính để tránh nhặp nhằng

‰ thêm các 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 ra mã máy thành 1 vùng nhớ liên tục có

độ dài bằng đội dài của record

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

‰ truy xuất 1 thuộc tính dữ liệu trở thành việc truy xuất ô nhớ dùng

Trang 20

Khoa Công nghệ Thông tin

void proc2(); //override

int proc4(int i, double k);

void proc5 (double d);

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 là số

tác vụ của class hiện 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 2 thông tin chính :

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 các địa chỉ của các tác vụ bị override

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

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

Trang 21

Khoa Công nghệ Thông tin

C2_proc2(&o2, i,d);

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

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 1 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 ra : miêu tả tham khảo đến

đối tượng mà hàm sẽ truy xuất các 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 nhưng thêm tham số đầu tiên

‰ gởi thông điệp gồm 3 bước :

ƒ kiểm tra, tìm, load đối tượng rồi 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 trong bảng (i)

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

bảng

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

Trang 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ó 2 vấn đề lớn trong quá trình dịch 1 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 và gọi gián tiếp qua địa chỉ trong bảng

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

‰ slide sau là các tối ưu hóa của chương trình dịch C++ và cá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 ra (tt)

‰ trong C++, tất cả đối tượng đều tạm thời và gắn chặt vào ứng

dụng → bảng địa chỉ các method của các đối tượng luôn nằm

sẵn trong không gian của ứng dụng

‰ Mỗi lần tạo đối tượng mới, biến pvftbl trong đối tượng được gán

ngay địa chỉ bảng địa chỉ các method → không cần thực hiện

bước 1 khi xử lý lệnh gởi thông điệp đến đối tượng

‰ C++ chỉ dùng mối quan hệ con/cha trong kiểm tra kiểu → công

việc 2 (tìm chỉ số tác vụ) được làm tại thời điểm dịch thay vì tại

thời điểm gởi thông điệp trong 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ó các virtual function mới được giải quyết theo cơ chế đa xạ

→ bảng địa chỉ chỉ chứa các hàm virtual của class, còn các

function khác được dịch ra lời gọi hàm trực tiếp

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

Trang 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 ra (tt)

‰ cái giá phải trả của việc tối ưu hóa trong 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 này sai

thì sẽ gây lỗi khi chạy, mà là người thì khó lòng quyết định

chính xác

ƒ tính đa xạ chỉ đúng giữa các đối tượng có mối quan hệ

con/cha, ở đó thứ tự các địa chỉ method của mọi class con

trong bảng địa chỉ luôn giống thứ tự các method tương ứng

của class cha, tuy nhiên giữa 2 class bất kỳ thì không thể

đảm bảo → kiểm tra kiểu trong C++ không thể nâng cấp lên

bằng 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

OOP CỦA VC++ & JAVA

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

MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Trang 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++

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

2 Cho phép đa thừa kế & Override method khi thừa kế

3 Dùng 'abstract class' để định nghĩa interface

4 Tầm vực truy xuất các thành phần

5 Đa xạ có chọn lọc nhờ 'virtual function'

6 Chỉ hỗ trợ các đối tượng tạm

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

Chương 4 : Tổng quát về mức độ hỗ trợ OOP của 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 của đối tượng,

không có lệnh interface hay type để định nghĩa type của đối

tượng

Dùng class để định nghĩa kiểu cho các biến, các 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 là vùng nhớ chứa đối tượng

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

ƒ Nếu 1 class có chứa thuộc tính đối tượng thuộc kiểu class thì

đối tượng tương ứng sẽ là đối tượng gộp vật lý đối tượng khác

ƒ Nếu 1 class có chứa thuộc tính đối tượng thuộc kiểu class

pointer thì đố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

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

Trang 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ế trong định nghĩa class, hấp dẫn cho người lập trình nhưng

chi phí hiện thực thì rất cao :

ƒ dễ gây ra việc trùng tên giữa các thành phần nằm trong các class cha

khác nhau nhưng đều được thừa kế cho class con ⇒ phải giải quyết

vấn đề trùng tên và tránh nhặp nhằng trong việc truy xuất chúng.

ƒ 1 class có thể chứa nhiều class cha trùng nhau ⇒ phải giải quyết việc

duplicate các thành phần của các class cha trùng nhau này (dư thừa và

mất tính nhất quán) ⇒ VC++ đề nghị dùng " virtual base class " để tối

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

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

class NguoiCa : publicNguoi, publicCa { };

sẽ tạo ra các đối tượng NguoiCa có cấu trúc dữ liệu theo hình a

trong slide trước ⇒ các thuộc tính trong class Sinhvat được nhân

bản và tồn tại 2 lần ở 2 vị trí khác nhau trong đối tượng NguoiCa

⇒ dư thừa dữ liệu và mất tính nhất quán dữ liệu

ƒ Còn phát biểu :

class NguoiCa : public virtualNguoi, public virtual Ca { };

sẽ tạo ra các đối tượng NguoiCa có cấu trúc dữ liệu theo hình b

trong slide trước ⇒ các thuộc tính trong class Sinhvat chỉ tồn tại

1 lần trong đối tượng NguoiCa ⇒ khắc phục được sự dư thừa dữ

liệu và không mất tính nhất quán dữ liệu

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

Trang 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 nhưng không cho phép dùng class này để định nghĩa kiễu cho

biến hay thuộc tính (trừ pointer) Một “abstract class” là 1 class chứa ít

nhất 1 " pure virtual funtion “, một "pure virtual funtion“ là 1 virtual function

được gán =0 (nghĩa là không có phần hiện thực kèm theo).

class Geometry { // abstract class

int xPos, yPos;

double xScale, yScale;

COLORREF color;

};

Chương 4 : Tổng quát về mức độ hỗ trợ OOP của 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 trong đối tượng được miêu tả bởi 1

trong 3 từ khóa sau :

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

protected: chỉ che dấu bên ngoài nhưng 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: là class mà mỗi hàm của nó đều có thể truy xuất tự

do các thành phần của class hiện hành

Friend function: là function cổ điển có thể truy xuất tự do các

thành phần của class hiện hành

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

class C : protected A, private B {…}

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

Trang 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' nếu muốn áp dụng tính đa xạ trong lệnh

gởi thông điệp yêu cầu hàm này thực thi

Tất cả các 'virtual function' của class được quản lý trong 1 danh

sách "virtual function table" Danh sách này là 1 trong các field dữ

liệu nằm trong đối tượng được tạo tự động bởi chương trình dịch

Chương 4 : Tổng quát về mức độ hỗ trợ OOP của 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ại tạm thời trong không gian process

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

gian làm việc của process

Chương trình phải tự viết code cho hoạt động save/restore đối tượng

nếu 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ả năng

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

HÌNH ẢNH LIÊN QUAN

Bảng địa chỉ các tác vụ của đối tượng (pvftbl). - Slide Lap Trinh Huong Doi Tuong
ng địa chỉ các tác vụ của đối tượng (pvftbl) (Trang 19)

TỪ KHÓA LIÊN QUAN

w