1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Cơ bản về hướng đối tượng và C++ docx

120 484 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Cơ bản về hướng đối tượng và C++
Tác giả Trần Minh Châu, Nguyễn Việt Hà, Nguyễn Ngọc Long, Huỳnh Lê Tấn Tài
Trường học Đại học Công nghệ, ĐH Quốc gia HN; ĐH KHTN TPHCM
Chuyên ngành Công nghệ thông tin
Thể loại Tài liệu tham khảo
Định dạng
Số trang 120
Dung lượng 826 KB

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

Nội dung

Lập trình có cấu trúc/lập trình thủ tục• Nhược điểm – dữ liệu và mã xử lý là tách rời – người lập trình phải biết cấu trúc dữ liệu vấn đề này một thời gian dài được coi là hiển nhiên –

Trang 1

Cơ bản về hướng đối tượng

và C++

Trang 2

Tài liệu tham khảo

• Bài giảng LTHĐT, Trần Minh Châu, Đại học

Công nghệ, ĐH Quốc gia HN

• Bài giảng LTHĐT, Nguyễn Việt Hà, Đại học Công nghệ, ĐH Quốc gia HN

• Bài giảng LTHĐT, Nguyễn Ngọc Long, ĐH KHTN TPHCM

• Bài giảng LTHĐT, Huỳnh Lê Tấn Tài, ĐH KHTN TPHCM

• C++ How to Program, Dietel

• ………

Trang 3

Mục tiêu của kỹ sư phần mềm

• Tạo ra sản phẩm tốt một cách có hiệu quả

• Nắm bắt được công nghệ

Trang 4

Độ phức tạp và độ lớn ngày càng

cao

• Một số hệ Unix chứa khoảng 4M dòng lệnh

• MS Windows chứa hàng chục triệu dòng lệnh

• Người dùng ngày càng đòi hỏi nhiều chức

năng, đặc biệt là chức năng thông minh

• Phần mềm luôn cần được sửa đổi

Trang 5

– Giảm chi phí và thời gian phát triển

– Nâng cao chất lượng

Trang 8

Lập trình không có cấu trúc

• Là phương pháp xuất hiện đầu tiên

– các ngôn ngữ như Assembly, Basic

Trang 10

• Mỗi chương trình con này lại có thể chia nhỏ thành

các chương trình con nhỏ hơn

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

Trang 13

Lập trình có cấu trúc/lập trình thủ tục

• Nhược điểm

– dữ liệu và mã xử lý là tách rời

– người lập trình phải biết cấu trúc dữ liệu (vấn đề

này một thời gian dài được coi là hiển nhiên)

– khi thay đổi cấu trúc dữ liệu thì mã xử lý (thuật

toán) phải thay đổi theo

– khó đảm bảo tính đúng đắn của dữ liệu

– không tự động khởi tạo hay giải phóng dữ liệu

động

– không mô tả được đầy đủ, trung thực hệ

thống trong thực tế

Trang 14

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

• Trong thế giới thực, chung quanh chúng ta là những đối tượng, đó là các thực thể có mối

quan hệ với nhau Ví dụ: các phòng trong một công ty

• Lập trình hướng đối tượng (Object Oriented Programming - LTHĐT) là phương pháp lập trình

lấy đối tượng làm nền tảng để xây dựng thuật

giải, xây dựng chương trình

Trang 15

Một số khái niệm

• Đối tượng (object):

– Trong thế giới thực, khái niệm đối tượng được

hiểu như là một thực thể: người, vật hoặc một

Trang 16

Một số khái niệm

• Lớp:

– Các đối tượng có các đặc tính tương tự nhau

được gom chung lại thành lớp đối tượng Ví dụ Người là một lớp đối tượng Một lớp đối tượng

được đặc trưng bằng các thuộc tính, và các hoạt

động (hành vi, thao tác).

– Thuộc tính (attribute) là một thành phần của đối

tượng, có giá trị nhất định cho mỗi đối tượng tại mỗi thời điểm trong hệ thống Vd: Tên, Tuổi, Cân nặng là các thuộc tính của Người

– Thao tác (operation) thể hiện hành vi của một đối

tượng tác động qua lại với các đối tượng khác hoặc với chính nó.

Trang 17

• Cùng một thao tác(phương thức) có thể được

áp dụng cho nhiều lớp đối tượng khác nhau, một

thao tác như vậy được gọi là có tính đa hình

(polymorphism)

• Một đối tượng cụ thể thuộc một lớp được gọi là

một thể hiện (instance) của lớp đó

– Joe Smith, 25 tuổi, nặng 58kg, là một thể hiện của lớp người

Trang 18

Sơ đồ đối tượng

• Ta dùng sơ đồ đối tượng để mô tả các lớp đối tượng Sơ đồ đối tượng bao gồm sơ đồ lớp và

sơ đồ thể hiện

• Sơ đồ lớp mô tả các lớp đối tượng trong hệ

thống, một lớp đối tượng được diễn tả bằng một hình chữ nhật có 3 phần:

– phần đầu chỉ tên lớp,

– phần thứ hai mô tả các thuộc tính

– phần thứ ba mô tả các thao tác của các đối tượng trong lớp đó

Trang 19

Sơ đồ lớp và sơ đồ thể hiện

Sinh viên Họ tên

Năm sinh Mã số

Điểm TB

Đi học

Đi thi Phân loại

(Sinh viên) Nguyễn Văn A 1984

0610234T 9.2

Tên lớp

Thuộc tính

Thao tác

Sơ đồ lớp Sơ đồ thể hiện

Đối tượng = Dữ liệu + Phương thức

Trang 20

Các đặc điểm quan trọng của OO

• Các lớp đối tượng - Classes

• Đóng gói – Encapsulation

• Thừa kế - Inheritance

• Đa hình - Polymorphism

Trang 21

Trừu tượng hóa

cách nhìn khái quát hóa về một tập các đối tượng có

chung các đặc điểm được quan tâm (và bỏ qua những chi

tiết không cần thiết).

Trang 22

Đóng gói – Che dấu thông tin

• Đóng gói: Nhóm những gì có liên quan với nhau vào làm một, để sau này có thể dùng một cái tên

– che giấu những gì mà người dùng không cần

– che giấu những gì mà mình cần giữ bí mật

Trang 23

và thao tác đó đã được định nghĩa tại lớp D.

• cho phép cài đặt nhiều quan hệ giữa các đối tượng: đặc biệt hóa (“là”), khái quát hóa

Trang 25

Ngôn ngữ lập trình hướng đối tượng

• Cung cấp được những khả năng lập trình hướng đối tượng

– cung cấp khả năng kiểm soát truy cập

– kế thừa

– đa hình

Trang 26

Lịch sử ngôn ngữ lập trình

Trang 27

Một số thuật ngữ hướng đối tượng

• OOM (Object Oriented Methodology): Phương

pháp luận hướng đối tượng

• OOA (Object Oriented Analysis): Phân tích

hướng đối tượng

• OOD: Object Oriented Design (Thiết kế hướng

đối tượng)

• OOP: Object Oriented Programming (lập trình

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

• Inheritance: Kế thừa

• Polymorphism: Đa hình

• Encapsulation: Tính đóng gói.

Trang 28

Các ưu điểm của OOP

• Nguyên lý kế thừa: tránh lặp, tái sử dụng

• Nguyên lý đóng gói hay che dấu thông tin: chương trình

an toàn không bị thay đổi bới những đoạn chương trình khác

• Dễ mở rộng, nâng cấp

• Mô phỏng thế giới thực tốt hơn

Trang 29

OOP có các đặc tính chủ yếu sau

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

• Các cấu trúc dữ liệu được thiết kế sao cho đặc

tả được đối tượng

• Các hàm thao tác trên các vùng dữ liệu của đối tượng được gắn với cấu trúc dữ liệu đó

Trang 30

• Chương trình được thiết kế theo cách tiếp cận từ

dưới lên (bottom-up).

Trang 32

Khác biệt đối với C

Trang 34

– void swap1(int x, int y) { int t = x; x = y; y = t; }

– void swap2(int *x, int *y) { int *t = x; x = y; y = t; }

– void swap3(int &x, int &y) { int t = x; x = y; y = t; }

Trang 35

Chồng hàm (Functions overloading )

int abs(int i);

int abs(int i) { return abs(i);}

long abs(long l) { return labs(l);}

double abs(double d) { return fabs(d);}

void test_abs() {

int i = abs(10); // abs(int )

long l = abs(-10l); // abs(long )

double = abs(0.1l); // abs(double )

}

Trang 36

Tham số ngầm định trong lời gọi hàm

Trang 37

Toán tử quản lý bộ nhớ động

• Toán tử cấp phát bộ nhớ động new

int *x;

x = new int; // x = (int*)malloc(sizeof(int)); char *y;

y = new char[100]; // y = (char*)malloc(100);

• Toán tử giải phóng vùng nhớ động delete

delete x; // free(x);

delete y; // free(y);

Trang 38

• Nên khai báo hằng đối với:

– Các đối tượng mà ta không định sửa đổi

– const double PI = 3.14;

– const Date openDate(18,8,2003);

– Các tham số của hàm mà ta không định cho hàm

đó sửa đổi

– void printHeight(const LargeObj &LO)

{ cout << LO.height; }

– Các hàm thành viên không thay đổi đối tượng chủ

– int Date::getDay() const { return day; }

Trang 39

Lớp trong C++

• Một lớp bao gồm các thành phần dữ liệu hay là thuộc tính và các phương thức hay là hàm thành phần

• Lớp trong C++ thực chất là một kiểu dữ liệu do người sử dụng định nghĩa

Trang 40

Đối tượng

• Lưu giữ trạng thái: mỗi đối tượng có trạng thái

(dữ liệu của nó) và các thao tác

• Định danh: Mỗi đối tượng bất kể đang ở trạng

thái nào đều có định danh và được đối xử như một thực thể riêng biệt

• Thông điệp: là phương tiện để một đối tượng A

chuyển tới đối tượng B yêu cầu B thực hiện một trong số các thao tác của B

Trang 41

Lớp đối tượng - class

• Lớp: là khuôn mẫu để tạo các đối tượng (tạo các thể hiện) Mỗi đối tượng có cấu trúc và hành vi giống như lớp đối tượng mà nó được tạo từ đó

• Lớp là cái ta thiết kế và lập trình

• Đối tượng là cái ta tạo (từ một lớp) tại thời gian chạy

Trang 43

Định nghĩa các hàm thành phần ở

bên ngoài khai báo lớp

<tên kiểu giá trị trả lại> <tên lớp>::<tên hàm> (<danh sách tham số>)

{

<nội dung >

}

void point::display() { …… }

Trang 44

• Tạo đối tượng:

<tên lớp> <tên đối tượng>

<tên đối tượng> = new <tên lớp>

• Gọi hàm thành phần của lớp

<tên đối tượng>.<tên hàm thành phần>(<danh sách các tham số nếu có>);

<tên con trỏ đối tượng><tên hàm thành

phần>(<danh sách các tham số nếu có>);

Trang 45

• Khởi tạo

• Di chuyển

• In ra màn hình

• …………

Trang 46

void init(int ox, int oy);

void move(int dx, int dy);

void display();

};

Trang 47

void point::init(int ox, int oy) {

cout<<"Ham thanh phan init\n";

x = ox; y = oy;

/*x,y là các thành phần của đối tượng gọi hàm thành phần*/

}

void point::move(int dx, int dy) {

cout<<"Ham thanh phan move\n";

x += dx; y += dy;

}

void point::display() {

cout<<"Ham thanh phan display\n";

cout<<"Toa do: "<<x<<" "<<y<<"\n";

}

Trang 49

Ham thanh phan init

Ham thanh phan displayToa do: 2 4

Ham thanh phan moveHam thanh phan displayToa do: 3 6

Trang 50

Từ khoá xác định thuộc tính truy xuất

• Trong định nghĩa của lớp ta có thể xác định khả năng truy xuất thành phần của một lớp nào đó

từ bên ngoài phạm vi lớp

• private và public là các từ khoá xác định thuộc

tính truy xuất

• Mọi thành phần được liệt kê trong phần public

đều có thể truy xuất trong bất kỳ hàm nào

• Những thành phần được liệt kê trong phần

private chỉ được truy xuất bên trong phạm vi

lớp

Trang 51

Từ khoá xác định thuộc tính truy xuất

• Trong lớp có thể có nhiều nhãn private và public

• Mỗi nhãn này có phạm vi ảnh hưởng cho đến

khi gặp một nhãn kế tiếp hoặc hết khai báo lớp

• Nhãn private đầu tiên có thể bỏ đi vì C++ ngầm

hiểu rằng các thành phần trước nhãn public đầu tiên là private

Trang 52

class tamgiac{

private:

float a,b,c;/*độ dài ba cạnh*/

public:

void nhap();/*nhập vào độ dài ba cạnh*/

void in();/*in ra các thông tin liên quan đến tam giác*/

private:

int loaitg();/*cho biết kiểu của tam giác: 1-d,2-vc,3-c,4-v,5-t*/

float dientich();/*tính diện tích của tam giác*/

};

Trang 53

class tamgiac{

private:

float a,b,c;/*độ dài ba cạnh*/

int loaitg();/*cho biết kiểu của tam giác: 1-d,2-vc,3-c,4-v,5-t*/

float dientich();/*tính diện tích của tam giác*/

public:

void nhap();/*nhập vào độ dài ba cạnh*/

void in();/*in ra các thông tin liên quan đến tam giác*/

};

Trang 54

Đối tượng như tham số của hàm thành

phần

• Hàm thành phần có quyền truy nhập đến các thành phần private của đối tượng gọi nó:

void point::init (int xx,int yy)

{

}

Trang 55

Đối tượng như tham số của hàm thành

phần

• Hàm thành phần có quyền truy nhập đến tất cả các thành phần private của các đối tượng, tham chiếu đối tượng hay con trỏ đối tượng có cùng kiểu lớp khi được dùng là tham số hình thức của nó

int trung(point pt) {return(x==pt.x && y==pt.y);}

int trung(point *pt) {return(x==pt->x && y==pt->y);}

int trung(point &pt) {return(x==pt.x && y==pt.y);}

Trang 56

Con trỏ this

• Từ khoá this trong định nghĩa của các hàm thành phần lớp dùng để xác định địa chỉ của đối tượng dùng làm tham số ngầm định cho hàm thành phần

• Con trỏ this tham chiếu đến đối tượng đang gọi hàm thành phần

int trung(point pt)

{return(this->x==pt.x && this->y==pt.y);}

Trang 57

2

x y

việc sao chép giá trị các thành phần

dữ liệu (x, y) từ đối tượng a sang đối tượng b tương ứng từng đôi một

Trang 58

Phép gán đối tượng

• Nếu hai đối tượng A và B cùng kiểu, có các

thành phần dữ liệu x,y(tĩnh) và z là một con trỏ chỉ đến một vùng nhớ được cấp phát động

vùng dữ liệu động

zz

xy

x

Sao chép bề mặt

Trang 59

Hàm thiết lập - Constructor

• Constructor là một loại phương thức đặc biệt

dùng để khởi tạo thể hiện của lớp

• Bất kể loại cấp phát bộ nhớ nào được sử dụng (tự động, tĩnh,động), mỗi khi một thể hiện của lớp được tạo, một hàm constructor nào đó của lớp sẽ được gọi

Trang 60

point(int ox,int oy) {x=ox;y=oy;}/*hàm thiết lập*/

void move(int dx,int dy) ;

void display();

};

point a(5,2); //int i(5)

Trang 61

• Constructor có cùng tên với tên của lớp

• Constructor không có giá trị trả về (kể cả void)

• Constructor phải có thuộc tính public

• Constructor có thể được khai báo chồng như các hàm C++ thông thường khác

• Constructor có thể được khai báo với các tham

số có giá trị ngầm định

Trang 62

point(int ox,int oy) {x=ox;y=oy;}/*hàm thiết lập*/

void move(int dx,int dy) ;

Trang 63

point(int ox,int oy=1) {x=ox;y=oy;}/*hàm thiết lập*/

void move(int dx,int dy) ;

Trang 64

Constructor mặc định

• Constructor mặc định (default constructor) là

constructor được gọi khi thể hiện được khai báo

mà không có đối số nào được cung cấp

• MyClass x;

• MyClass* p = new MyClass;

• Ngược lại, nếu tham số được cung cấp tại khai báo thể hiện, trình biên dịch sẽ gọi phương thức constructor khác (overload)

• MyClass x(5);

• MyClass* p = new MyClass(5);

Trang 66

point(int ox,int oy=1) {x=ox;y=oy;}/*hàm thiết lập*/

void move(int dx,int dy) ;

Trang 67

point(int ox=0,int oy=0) {x=ox;y=oy;}/*hàm thiết lập*/

void move(int dx,int dy) ;

Trang 68

Copy constructor

Trang 70

class vector {

int n; //số chiều

float *v; //vùng nhớ toạ độ

public:

vector(); //Hàm thiết lập không tham số

vector(int size); //Hàm thiết lập một tham số

vector(int size, float *a);

~vector();//Hàm huỷ bỏ, luôn luôn không có tham số

void display();

};

Trang 71

Hàm bạn, lớp bạn

• Giả sử có lớp Vector, lớp Matrix

• Cần viết hàm nhân 1 Vector và 1 Matrix

• Hàm nhân:

– Không thể thuộc lớp Vector

– Không thể thuộc lớp Matrix

– Không thể tự do

• Giải pháp: xây dựng hàm truy cập dữ liệu

Trang 72

Hàm bạn - friend function

• Hàm bạn không thuộc lớp, nhưng có quyền truy cập các thành viên private

• Khi định nghĩa một lớp, có thể khai báo rằng một

hay nhiều hàm “bạn” (bên ngoài lớp)

• Ưu điểm: kiểm soát các truy nhập ở cấp độ lớp - không thể áp đặt hàm bạn cho một lớp nếu điều

đó không được dự trù trước trong khai báo của lớp

Trang 73

Các kiểu bạn bè

• Hàm tự do là bạn của một lớp

• Hàm thành phần của một lớp là bạn của một lớp khác

• Hàm bạn của nhiều lớp

• Tất cả các hàm thành phần của một lớp là bạn của một lớp khác

Trang 76

Các phương thức Truy vấn

• Các phương thức truy vấn (query method) là các

phương thức dùng để hỏi về giá trị của các thành

viên dữ liệu của một đối tượng

• Có nhiều loại câu hỏi truy vấn có thể:

– truy vấn đơn giản (“giá trị của x là bao nhiêu?”)

– truy vấn điều kiện (“thành viên x có lớn hơn 10 không?”) – truy vấn dẫn xuất (“tổng giá trị của các thành viên x và y

là bao nhiêu?”)

• Đặc điểm quan trọng của phương thức truy vấn là nó không nên thay đổi trạng thái hiện tại của đối tượng

Trang 77

Truy vấn

• Đối với các truy vấn đơn giản, quy ước đặt tên phươngthức: tiền tố “get”, tiếp theo là tên của thành viên

• int getX();

• int getSize();

• Các loại truy vấn khác nên có tên có tính mô tả

• Truy vấn điều kiện nên có tiền tố “is”

Trang 78

Các phương thức Cập nhật

• Ngược lại với truy vấn, các phương thức cập nhật thường thay đổi trạng thái của đối tượng bằng cách sửa đổi một hoặc nhiều thành viên

dữ liệu của đối tượng đó

• Dạng đơn giản nhất của các phương thức cập nhật là gán một giá trị nào đó cho một thành viên dữ liệu

• Đối với dạng cập nhật đơn giản, quy ước đặt tên: dùng tiền tố “set” kèm theo tên thành viên cần sửa

• int setX(int);

Trang 79

Truy vấn và Cập nhật

• Nếu các phương thức get/set chỉ có nhiệm vụ cho ta đọc và ghi giá trị cho các thành viên dữ liệu, quy định các thành viên private để được ích lợi gì?

• Ngoài việc bảo vệ các nguyên tắc đóng gói, ta còn cần kiểm tra xem giá trị mới cho thành viên dữ liệu

có hợp lệ hay không.

• Sử dụng phương thức truy vấn cho phép ta thực

hiện việc kiểm tra trước khi thực sự thay đổi giá trị của thành viên.

• Cho phép chỉ các dữ liệu có thể truy vấn hay thay đổi được truy cập đến.

Trang 81

Thành viên tĩnh – static member

• Đối với class, static dùng để khai báo thành

viên dữ liệu dùng chung cho mọi thể hiện của lớp

• một bản duy nhất tồn tại trong suốt quá trình chạy của chương trình,

• dùng chung cho tất cả các thể hiện của lớp,

• bất kể lớp đó có bao nhiêu thể hiện

Ngày đăng: 14/12/2013, 09:15

HÌNH ẢNH LIÊN QUAN

Sơ đồ đối tượng - Tài liệu Cơ bản về hướng đối tượng và C++ docx
i tượng (Trang 18)
Sơ đồ lớp và sơ đồ thể hiện - Tài liệu Cơ bản về hướng đối tượng và C++ docx
Sơ đồ l ớp và sơ đồ thể hiện (Trang 19)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w