1. Trang chủ
  2. » Giáo án - Bài giảng

Kỹ thuật lập trình chương 6 9

210 14 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
Định dạng
Số trang 210
Dung lượng 2,59 MB

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

Nội dung

Microsoft PowerPoint LapTrinh1 26 3 XOAved Autosaved pptx KỸ THUẬT LẬP TRÌNH Chương 6 Lập trình hướng đối tượng 277 Lập trình hướng đối tượng C++ 278 Tổng quan 279 Lập trình cấu trúc • Lập trình cấu trúc (1960s) – Phân chia vấn đề lớn thành các vấn đề con độc lập, từ đó tạo thành thủ tục và hàm – Trọng tâm của lập trình truyền thống dựa trên các chi tiết của việc thực hiện – Phương pháp viết chương trình chặt chẽ – Rõ ràng, dễ thử nghiệm và sửa lỗi, dễ thay đổi – Khi chương trình lớn hơn  kh.

Trang 1

KỸ THUẬT LẬP TRÌNH

Chương 6 Lập trình hướng

đối tượng

Trang 2

Lập trình hướng đối tượng

C++

Trang 3

Tổng quan

Trang 4

– Phương pháp viết chương trình chặt chẽ

– Rõ ràng, dễ thử nghiệm và sửa lỗi, dễ thay đổi

– Khi chương trình lớn hơn  khó quản lý

– Dữ liệu đóng vai trò quan trọng

• Khi thêm 1 dữ liệu kiểu mới, phải thay đổi tất cả các công việc

và các hàm liên quan đến dữ liệu đó

Trang 7

(1) Lập trình tuyến tính: Đặc điểm

• Chương trình đơn giản, số dòng lệnh ít

• Thực hiện trình tự từ đầu đến cuối

• Không có cấu trúc

• Dùng các lệnh “goto/ gosub” để nhảy đến một

vị trí nào đó trong chương trình

Trang 9

(2) Lập trình có cấu trúc

• Khái niệm trừu tượng hóa (abstraction) theo

tiết bên trong

• Phân chia công việc thành các chức năng đơn

giản hơn gọi là lập trình đơn thể (module)

Trang 10

(2) Lập trình có cấu trúc: Đặc điểm

Ưu điểm

• Đơn giản hóa quá trình thiết kế và cài đặt

• Dễ đọc chương trình, hiểu chi tiết bài toán

• Các chương trình con tương đối độc lập, dễ

phân công cho từng nhóm

Trang 12

(2) Lập trình có cấu trúc: Đặc điểm

Khuyết điểm

• Sai sót trong việc trao đổi thông tin giữa các

thành viên trong nhóm có thể mất nhiều thời gian để sửa chữa chương trình

• Phần xử lý nằm rải rác và phải hiểu rõ cấu

trúc dữ liệu

Trang 13

(3) Lập trình Hướng đối tượng

Trang 14

Mục tiêu

• Loại bỏ những thiếu sót của tiếp cận theo thủ tục

• Tiếp cận theo hướng trừu tượng hoá (abstraction)

• Dữ liệu được xem là phần trung tâm và được bảo vệ

• Hàm gắn kết với dữ liệu

(3) Lập trình Hướng đối tượng

(Object-oriented Programming)

Trang 15

Mục tiêu

• Phân tách bài toán thành nhiều đối tượng và yêu cầu chúng thực hiện hành động của mình

• Tăng cường khả năng sử dụng lại

(3) Lập trình Hướng đối tượng (Object-oriented Programming)

Trang 16

Ưu điểm

• Cung cấp một cấu trúc module rõ ràng: Giao diện định nghĩa rõ ràng và chi tiết cài đặt ẩn

• Duy trì và sửa đổi mã nguồn dễ dàng

• Cung cấp framework tốt với các thư viện mã nguồn

(3) Lập trình Hướng đối tượng (Object-oriented Programming)

Trang 17

• Object oriented programming (OOP)

– Chia bài toán thành các nhóm nhỏ có liên hệ với nhau gọi là đối tượng.

Lập trình hướng đối tượng

Trang 18

Đối Tượng (Object)

hướng đối tượng,

mọi thứ đều là đối

tượng

Trang 19

Accounts

What is the salary of Jack?

Jack's salary

is $2000

– Hộp đen chứa các lệnh (code) và dữ liệu.

– Thông tin truyền giữa các phần khác nhau gọi là các

thông điệp giữa các đối tượng

– Các thông điệp này

có thể được chuyển thành lời gọi hàm

trong chương trình.

Đối tượng (Object)

Trang 20

Một đối tượng cụ thể

Trang 21

Đối Tượng Thế Giới Thực

Trang 22

Đối Tượng Phần Mềm

(Software Object)

• Các đối tượng phần mềm có thể được

dùng để biểu diễn các đối tượng thế giới

Trang 23

Lớp (Class)

• Nhóm các đối tượng có cùng thuộc tính (hay còn gọi là trạng thái, hoặc Dữ liệu thành viên), hành vi (Hàm thành viên) và mối quan hệ chung.

• Lớp là viết tắt của “lớp của đối tượng”.

• Một lớp là một thiết kế (blueprint) hay mẫu (prototype) cho các đối tượng cùng kiểu

– Ví dụ: lớp XeDap là một thiết kế chung cho nhiều đối tượng xe đạp được tạo ra

• Một đối tượng là một thể hiện (instance) cụ thể của một lớp.

– Ví dụ: mỗi đối tượng xe đạp là một thể hiện của lớp XeDap

• Mỗi thể hiện có thể có những thuộc tính thể hiện khác

nhau

– Ví dụ: một cây mai có hoa 6 cánh, trong khi một cây khác có hoa

Trang 24

Số cạnh Màu viền Màu nền

Phương thức (methode):

Vẽ Xóa Đối tượng đa giác

Trang 25

Thuộc Tính Lớp

& Phương Thức Lớp

đối tượng hoặc thực thể được biểu diễn trong một lớp

• Thuộc tính lớp được định nghĩa bên trong định nghĩa lớp

và được chia sẻ bởi tất cả các thể hiện của lớp.

– Ví dụ: Lớp đa giác gồm các thuộc tính như: số cạnh, màu viền, màu chữ…

động) yêu cầu của đối tượng hoặc thực thể được biểu diễn trong một lớp

• Tất cả các phương thức lớp ảnh hưởng đến toàn bộ lớp chứ không ảnh hưởng đến một lớp riêng rẽ nào.

– Ví dụ: Lớp đa giác gồm các phương thức như: vẽ, xóa, di chuyển…

Trang 26

Thuộc tính (Attribute) và Phương

Trang 27

Thông Điệp

& Truyền Thông Điệp

một hoạt động Gồm có:

– Đối tượng nhận thông điệp

– Tên của phương thức thực hiện

– Các tham số mà phương thức cần

gọi một hay nhiều phương thức của đối tượng khác để yêu cầu thông tin.

Trang 28

Đặc Điểm Quan Trọng

• Nhấn mạnh trên dữ liệu hơn là thủ tục

• Các chương trình được chia thành các đối tượng

• Dữ liệu được che giấu và không thể được truy xuất từ các hàm bên ngoài

• Các đối tượng có thể giao tiếp với nhau

thông qua các hàm

• Dữ liệu hay các hàm mới có thể được

thêm vào khi cần

Trang 29

Thuận Lợi

• So với các tiếp cận cổ điển thì OOP có

những thuận lợi sau:

– OOP cung cấp một cấu trúc module rõ ràng

• Giao diện được định nghĩa tốt

• Những chi tiết cài đặt được ẩn – OOP giúp lập trình viên duy trì mã và sửa đổi mã tồn tại dễ dàng (các đối tượng được tạo ra với những

khác nhau nhỏ so với những đối tượng tồn tại).

– OOP cung cấp một cơ chế tốt với các thư viện mã mà các thành phần có thể được chọn và sửa đổi bởi lập trình viên

Trang 30

Trừu Tượng Hóa

(Abstraction)

• Trừu tượng hóa

– Tiến trình xem xét các khía cạnh nào đó của bài toán.

– Biểu diễn những đặc tính, bỏ qua những chi tiết vụn vặt hoặc những giải thích

• Các kỹ thuật trừu tượng

– Đóng gói (encapsulation)

– Ẩn thông tin (information hiding)

– Thừa kế (inheritance)

Trang 31

Tính đóng gói (Encapsulation)

– Cho phép truy cập đối tượng chỉ qua thông điệp của nó trong khi giữ kín các chi tiết riêng

tư gọi là ẩn thông tin.

– Là tiến trình che giấu việc thực thi chi tiết của một đối tượng.

Trang 32

Ẩn thông tin (Information Hiding)

• Đóng gói  Thuộc tính được lưu trữ

hay phương thức được cài đặt như thế nào  được che giấu đi từ các đối

tượng khác

Việc che giấu những chi tiết thiết kế và cài đặt từ những đối tượng khác được gọi là ẩn thông tin

Trang 33

Tính Thừa Kế (Inheritance)

• Hệ thống hướng đối tượng cho phép các lớp được định nghĩa kế thừa từ các lớp

khác

– Ví dụ, lớp xe đạp leo núi và xe đạp đua là

những lớp con (subclass) của lớp xe đạp

thuộc tính được định nghĩa trong một lớp

có thể được thừa kế hoặc được sử dụng lại bởi lớp khác.

Trang 34

Tính Đa Hình (Polymorphism)

Trang 35

Chương trình học

• Chương 1 Tổng quan

• Chương 2 Biến, biểu thức và toán tử

• Chương 3 Cấu trúc điều khiển

Trang 36

KỸ THUẬT LẬP TRÌNH

Chương 7 Lớp

Trang 37

Khái niệm lớp

• Lớp: khái niệm trung tâm của OOP

• Định nghĩa: Lớp là nhóm của những đối

tượng (objects) có cùng chung thuộc tính (properties) và có những mối quan hệ

chung

• Đối tượng: thể hiện một thực thể trong thế giới thực.

Trang 38

Cú pháp khai báo lớp

class < Ten lop >

{ private : < Khai bao cac

thanh phan private >

public : < Khai bao cac

thanh phan public >

protected : < Khai bao

cac thanh phan protected >

};

class Xedap { };

Trang 39

Sử dụng lớp đối tượng

• <Tên lớp> <Tên biến lớp>;

• Tên lớp: là tên lớp đối tượng đã được định nghĩa trước khi khai báo biến.

• Tên biến lớp: là tên đối tượng cụ thể Tên biến lớp sẽ được

sử dụng như các biến thông thường trong C++, ngoại trừ

việc nó có kiểu lớp đối tượng.

Xedap xedap ; // đúng, nhưng khai báo:

class Xedap xedap ; ; // Lỗi cú pháp là sai cú pháp

Trang 40

Các thành phần của lớp

• Thuộc tính của lớp (Dữ liệu thành viên)

<Kiểu dữ liệu> <Tên thuộc tính>;

Các thành phần chỉ dữ liệu của lớp, được gọi

là thuộc tính của lớp

class Xedap

{ private : int tocdo ;

public : string nhanhieu ;

};

Trang 41

Các thành phần của lớp

<Kiểu trả về> <Tên phương thức>([<Các

Trang 42

Khái niệm lớp

• Lớp: kiểu dữ liệu trừu tượng.

TÊN LỚP

Dữ liệu thành viên

Hàm thành viên

{ < Quyền truy xuất > :

Trang 43

Quyền truy xuất

• Các thành viên lớp được liệt kê vào một trong ba loại quyền truy

xuất khác nhau:

• Các thành viên (hàm thành viên và dữ liệu thành viên) có quyền truy cập là chung: (public) có thể được truy xuất bởi tất cả các

thành phần sử dụng lớp.

• Các thành viên riêng (hàm thành viên và dữ liệu thành viên) có

quyền truy cập là riêng: (private) chỉ có thể được truy xuất bởi các thành viên lớp.

• Các thành viên hàm thành viên và dữ liệu thành viên) có quyền truy cập là chung: được bảo vệ (protected) chỉ có thể được truy

xuất bởi các thành viên lớp và các thành viên của một lớp dẫn xuất

Trang 44

void OffsetPt (int, int);

void main() {Point pt;

Tạo ra đối tượng thuộc lớp Point

Trang 45

void OffsetPt (int, int);

yVal += y;

}

void main() {Point pt;

Tạo ra đối tượng thuộc lớp Point

Đối tượng

Trang 46

void OffsetPt (int, int);

void main() {Point pt;

Tạo ra đối tượng thuộc lớp Point

Trang 47

void OffsetPt (int, int);

yVal += y;

}

void main() { Point pt;

pt.SetPt(10,20);

Gọi hàm trên đối tượng

Tạo ra đối tượng thuộc lớp Point

Trang 48

void OffsetPt (int, int);

void main() {Point pt;

Tạo ra đối tượng thuộc lớp Point

Trang 49

Cơ bản về lớp

• Lớp gồm các thành viên:

– Dữ liệu thành viên (Member Data):

• Có cú pháp của định nghĩa biến

• Một đặc trưng của đối tượng

• Có thể là kiểu đã được định nghĩa hoặc tự định nghĩa

• Dữ liệu thành viên của lớp không thể có kiểu của lớp đó, nhưng có thể là con trỏ kiểu lớp đó.

– Hàm thành viên (Member Function) hay phương thức (Method)

• Có cú pháp của khai báo hàm

• Chỉ định các thao tác của lớp

• Một hoạt động, hành vi của đối tượng

Trang 50

Cơ bản về lớp

• Đối tượng của lớp

– Đối tượng là một thể hiện cụ thể của một lớp

– Đối tượng được khai báo sau định nghĩa lớp

• Khai báo đối tượng hoặc mảng, con trỏ, tham chiếu đến đối tượng

Trang 51

Cơ bản về lớp

Trang 52

Cơ bản về lớp

• Dữ liệu thành viên:

– Nên được khai báo với từ khoá private.

– Không được khởi tạo giá trị của dữ liệu thành phần trong định nghĩa lớp.

class Employee // khai báo tên lớp

{

private: // từ khóa cho biết không thể truy nhập từ ngoài lớp

unsigned int EmpID =1; // sai

char EmpName[30];

float EmpSalary;

public: // từ khóa cho biết có thể truy nhập từ ngoài lớp

void AddEmployee();

Trang 53

Kiểutrảvề Tênlớp::Tênhàmthànhviên( ) { …

}

– Không phụ thuộc vào hàm public hay private

• Các hàm thành viên định nghĩa bên trong lớp

– Không cần toán tử :: và tên lớp

– Trình biên dịch sẽ cố thực hiện inline

• Ở ngoài lớp, ta chỉ định inline với từ khoá inline

Trang 54

Ví dụ

• Viết chương trình nhập từ bàn phím chiều

dài và chiều rộng của một hình chữ nhật

và hiển thị diện tích và chu vi ra màn hình

• Phương pháp lập trình hướng đối tượng là

phương pháp giải quyết các bài toán lập

trình thông qua các đối tượng, do đó bài

này bạn cần tạo ra một đối tượng thuộc

lớp Rectangle (hình chữ nhật) giống như

sau:

Trang 55

Ví dụ

Trong đó:

•length và width là hai thuộc tính (Dữ liệu thành

viên) chỉ chiều dài và chiều rộng của hình

chữ nhật.

•getInformation() là phương thức nhập dữ liệu

(Hàm thành viên) cho thuộc

tính length và width từ bàn phím.

•display() là phương thức dùng để hiển thị thông

tin về chu vi và diện tích của hình chữ nhật ra

màn hình.

•getArea() và getPerimeter() là hai phương thức trả

về diện tích và chu vi của hình chữ nhật, hai

phương thức này được dùng trong phương

thức display().

Trang 56

{ return width * length;

} double getPerimeter()

{ return (width + length)

void display() { cout << "Area: " << getArea()

<< endl;

cout << "Perimeter: " <<

getPerimeter() << endl; } };

int main() {

Rectangle r1;

r1.getInformation();

r1.display();

return 0; }

Trang 57

Điền chỗ thiếu vào các ô trống

Trang 59

Hàm inline

• Hàm không phải thành viên:

– Dùng từ khóa inline trong khai báo hàm và dòng đầu định nghĩa

Trang 60

Hàm thành viên nội tuyến

void OffsetPt (int, int);

xVal = x;

yVal = y;

} void OffsetPt (int x, int y) {

xVal += x;

Cách 2:

Định nghĩa bên trong lớp

Trang 61

– public

• Bất kỳ hàm nào trong chương trình xử lý đối tượng đó cũng

có thể truy cập được (có thể được truy xuất bởi tất cả các thành phần sử dụng lớp)

– protected

• Sẽ được học sau Hiện tại giống với private

• Dữ liệu mặc định là private để đảm bảo giấu kín

• Hàm mặc định là public để có thể dùng mọi nơi

Trang 62

Các hàm truy cập và các hàm hữu dụng

Trang 63

Sự đóng gói (encapsulation)

• Sự truy xuất đến đối tượng thông qua các thông điệp

(message) mà vẫn giữ các thuộc tính private dưới

dạng thông tin ẩn

• Làm cho việc truy xuất đến dữ liệu của các lớp từ bên ngoài lớp bị giới hạn, trở nên không cần thiết hoặc

không thể thực hiện được

• Người dùng không cần quan tâm đến cấu trúc và hoạt động bên trong của lớp, chỉ quan tâm giải quyết vấn đề lớn hơn

• Mục tiêu:

– tạo bức tường không thể thâm nhập được để bảo vệ, tránh

những hư hại vô tình hoặc cố ý do những lỗi chúng ta mắc phải – Dễ dàng cô lập lỗi  dễ dàng tìm kiếm và sữa chữa

Trang 64

Hàm tạo (Constructor)

• Dùng để định nghĩa và khởi tạo đối tượng cùng 1 lúc.

• (1) Có tên trùng với tên lớp,

• (2) Không cần khai báo kiểu cho hàm tạo

• (3) Không có kiểu trả về.

• Không gọi trực tiếp, sẽ được tự động gọi khi khởi tạo đt.

• Gán giá trị, cấp vùng nhớ cho các dữ liệu thành viên.

class Point {

int xVal, yVal;

public: Point (int x, int y) {

xVal = x; yVal = y;

} void OffsetPt (int x, int y) {

xVal += x; yVal += y;

}

void main() { Point pt1(10,20);

Trang 65

Định nghĩa lớp Set

Trang 66

Định nghĩa lớp Set

Trang 67

Point (float len, float angle) {

xVal = (int) (len * cos(angle));

yVal = (int) (len * sin(angle));

Set s2(20);

Set s3(1000); …}

Mềm dẻo hơn

Không cần phải nhớ gọi hàm EmptySet() khi khởi tạo

Trang 68

Point (float len, float angle) {

xVal = (int) (len * cos(angle));

yVal = (int) (len * sin(angle));

Set s2(20);

Set s3(1000); …

Mềm dẻo hơn

Không cần phải nhớ gọi hàm EmptySet()

Trang 69

Point (float len, float angle) {

xVal = (int) (len * cos(angle));

yVal = (int) (len * sin(angle));

Set s2(20);

Set s3(1000); …}

Mềm dẻo hơn

Không cần phải nhớ gọi hàm EmptySet() khi khởi tạo

Trang 70

Hàm tạo

• Hàm tạo sao chép khởi tạo đối tượng dựa trên một đối tượng khác thuộc cùng lớp.

• Mỗi lớp có một hàm tạo sao chép mặc định – hàm này

có một tham số là đối tượng cùng lớp.

• Ta có thể định nghĩa lại hàm tạo sao chép.

Trang 71

Hàm hủy

• Giải phóng 1 đối tượng trước khi nó được thu hồi.

• Cú pháp: Có tên trùng với tên lớp, có dấu ~ phía trước

Set(const int size) { …… }

~Set() { delete[] elems; }

s2 = TestFunct1(s1);

}

Tổng cộng

có bao nhiêu lần

hàm hủy được gọi ?

4

Trang 72

Set(const int size) { …… }

~Set() { delete[] elems; }

s2 = TestFunct1(s1);

}

Tổng cộng

có bao nhiêu lần

hàm hủy được gọi ?

Trang 73

Hàm tạo và hàm hủy mặc định

• Hàm tạo mặc định:

– Thường tạo hàm tạo và hàm hủy khi lớp có thành phần cấp phát động

– Nếu lớp không có hàm tạo thì trình biên dịch

sẽ cung cấp 1 hàm tạo mặc định không đối Hàm này chỉ cấp phát bộ nhớ, không khởi tạo

Trang 74

Point (int x = 0, int y = 0);

Point (float x=0, float y=0, int i=0);

//

};

void main() {Point p2(1.6, 5.0); // như là ???

Point p3(10,20, 10); // như là ???Point p4; // ?????

Tối nghĩa

Mơ hồ

Trang 75

Cho biết kết quả?

class Point {

int xVal, yVal;

public : Point( int x = 0, int y = 0){

xVal = x ; yVal = y ; }

pt.Print();

}

Đáp án (5,0)

Trang 76

Point (int x = 0, int y = 0);

Point (float x=0, float y=0, int i=0);//

};

void main() {Point p2(1.6, 5.0); // như là ???

Point p3(10,20, 10); // như là ???Point p4; // ?????

Tối nghĩa

Mơ hồ

Trang 77

• Có những trường hợp sử dụng *this là dư thừa (Ví dụ trên)

• Tuy nhiên, có những trường hợp phải sử dụng con trỏ *this

Trang 79

Sử dụng con trỏ this

• Các lời gọi hàm thành phần liên tiếp

– Nhiều hàm được gọi trong cùng 1 lệnh

– Hàm trả về 1 tham chiếu đến cùng đối tượng đó

{ return *this; }

– Các hàm khác hoạt động trên con trỏ này

– Hàm không trả về tham chiếu phải được gọi sau cùng

Ngày đăng: 26/04/2022, 19:49

TÀI LIỆU CÙNG NGƯỜI DÙNG

w