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

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

174 1,4K 5
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 đề Lập trình hướng đối tượng & C++
Tác giả Nguyễn Công Huy
Trường học Khoa Công Nghệ Thông Tin & Truyền Thông, Đại Học Cần Thơ
Chuyên ngành Lập trình hướng đối tượng
Thể loại Sách giáo trình
Năm xuất bản 2005
Thành phố Cần Thơ
Định dạng
Số trang 174
Dung lượng 2,72 MB

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

Nội dung

 Thiết kế được các lớp với các thuộc tính từ cơ bản đến phức tạp như thành viên tĩnh, thành viên hằng, thành viên đối tượng, ....  Hiểu được khái niệm hàm xây dựng, hàm hủy và quá trìn

Trang 1

LẬP TRÌNH HƯỚNG ĐỐI

TƯỢNG & C++

lập trình hướng đối tượng (OOP).

đối tượng bằng ngôn ngữ C++.

Trang 2

Mục tiêu

Sau khi hoàn tất học phần này, sinh viên có khả năng:

 Hiểu được thế nào là lập trình hướng đối tượng, trừu tượng hóa, 3 đặc điểm cơ bản trong LT HĐT là bao gói, thừa kế, và đa hình.

 Phân biệt được sự khác nhau giữa lớp và đối tượng, thuộc tính và

phương thức, thông điệp và truyền thông điệp.

 Hiểu được khái niệm cơ bản về cách xây dựng mô hình lớp dùng UML.

 Thiết kế được các lớp với các thuộc tính từ cơ bản đến phức tạp như thành viên tĩnh, thành viên hằng, thành viên đối tượng,

 Hiểu được khái niệm hàm xây dựng, hàm hủy và quá trình khởi tạo đối tượng cũng như hủy bỏ đối tượng.

 Nắm được khái niệm về phạm vi truy xuất, đối số mặc định, hàm bạn.

 Vận dụng được nguyên lý tái định nghĩa để có thể tái định nghĩa các hàm thành viên, hàm xây dựng, phép gán của một lớp và các toán tử.

 Phân biệt được lớp dẫn xuất, lớp cơ sở, hàm ảo và lớp ảo trong thừa

kế Thiết kế được các lớp có dùng thừa kế.

 Phân biệt được sự khác nhau giữa liên kết tĩnh và liên kết động.

 Sử dụng được các cú pháp cơ bản của ngôn ngữ lập trình hướng đối

Trang 3

Nội dung môn học

Trang 4

Giáo trình - Tài liệu tham khảo

Giáo trình:

 ThS Trương Văn Chí Công, Lập trình HĐT C++, ĐHCT, 2005

 TS Phạm Thị Xuân Lộc, Lập trình HĐT và C++, ĐHCT, 1998

Tài liệu tham khảo:

 Herbert Schildt, C++: A beginner’s guide, 2nd edition,

 Stanley B Lippman, Essential C++, Addision Wesley, 2002

 Bjanrne Stroustrup, The C++ Programming Language,

3rd edition, Addision Wesley, 1997.

 Bất kỳ tài liệu nào về Lập trình hướng đối tượng và C++

 Internet

Trang 5

Phương pháp học tập và đánh giá

Phương pháp học tập:

 Giáo viên giảng trực tiếp trên lớp 30 tiết.

 Sinh viên phải đọc tài liệu trước ở nhà.

Phương pháp đánh giá

 Thi lý thuyết cuối khóa: 50%

Thi trên hệ thống E-Learning của khoa.

Đề thi dạng trắc nghiệm , không sử dụng tài liệu.

 Thực hành

Thi thực hành: 30%

 Nội dung căn bản

 Bài thi còn lỗi sẽ nhận điểm 0

Đề tài nhóm: 20%

 Từ 3-4 sinh viên / nhóm

 Nộp báo cáo, chạy demo, trả lời chất vấn.

Trang 7

Nội dung

 Các khái niệm cơ bản trong C++

 Cấu trúc điều khiển

Trang 8

Các khái niệm cơ bản

VD: x, hoten, a1, num_of_var, Delta, TEN,

Trang 9

Các khái niệm cơ bản

Trang 10

Các khái niệm cơ bản

Biến

 Khai báo : bất kỳ vị trí nào trong chương trình

 Khởi tạo : có thể vừa khai báo và khởi tạo

VD: int x=5, y=10;

for( int i=0, tong =0 ; i<10 ; i++) tong +=i ;

 Biến khai báo trong 1 khối lệnh : chỉ có phạm

vi hoạt động trong khối lệnh đó.

VD: if( delta >0 ) {

float x1= (-b + sqrt(delta)) / (2*a);

float x2= (-b - sqrt(delta)) / (2*a);

.

Trang 11

Các khái niệm cơ bản

Biến

 Biến toàn cục : có tác dụng trong toàn bộ CT.

 Biến địa phương (cục bộ): chỉ có tác dụng trong phạm vi của nó.

VD: int so = 5;

void GanSo(int x) {

so = x;

} int NuaSo(int x) { int c=2;

int so =x/c ; return so;

}

Trang 12

Các khái niệm cơ bản

char *str=“Chuoi Ky Tu”;

char chuoi[50]; strcpy(chuoi,“ ”);

if ( strcmp(chuoi,“”)==0) cout << “Chuoi rong”;

Trang 13

Các khái niệm cơ bản

Cú pháp: ( Kiểu ) biểu thức ( Kiểu ) biểu thức

hoặc Kiểu ( biểu thức )

Ví dụ:

int a=10, b=3;

float c1 = a / b ; float c2 = float (a/b);

float c3 = (float) a / b ; float c4 = float (a)/b;

Trang 14

Các khái niệm cơ bản

/= , %= , -= , &= , |= , ^=

Trang 15

Các khái niệm cơ bản

 Khai báo :

<Kiểu> <Tên mảng> [<Kích thước>];

VD : int m[10]; float ds[MAX];

 Sử dụng : phép toán lấy giá trị phần tử.

 Thứ tự phần tử : từ 0 đến (kích thước -1)

VD: // CT tính tổng của 10 số Fibonacci đầu tiên

long a[10]; a[0]=a[1]=1;

for (int i=2; i<10 ; i++) a[i] = a[i-1] + a[i-2];

long tong=0;

for(i=0 ; i<10 ; i++) tong+=a[i];

Trang 16

Các khái niệm cơ bản

# if # elif # else # endif

# ifdef # else # endif

# ifndef # else # endif

Trang 17

Các khái niệm cơ bản

 Thư viện hàm : # include <iostream.h>

 Nhập : cin >> Biến

 Xuất : cout << (Biểu thức)

 Các kiểu dữ liệu có thể nhập xuất :

char , int, unsigned, long, unsigned long, … float, double, char* , char []

(void*): lấy địa chỉ đầu của chuỗi

 Có thể nhập xuất liên tục trên một dòng.

VD: cout << “Gia tri x = “ << x << “ , y = “ <<y; cout << “Nhap n = “; cin >> n;

Trang 18

Các khái niệm cơ bản

Trang 19

Các khái niệm cơ bản

Trang 20

Cấu trúc điều khiển

 Khối lệnh :

Là dãy các lệnh viết trong cặp { }

Tương đương với 1 câu lệnh

Bằng 0 : <=> SAI

 Khác 0 : <=> đúng

VD: int x=0;

if(x=2) cout<< “ x bang 2 “;

else

Trang 21

Cấu trúc điều khiển

Trang 22

Cấu trúc điều khiển

Trang 23

Cấu trúc điều khiển

 Thoát ra khỏi cấu trúc switch

 Thoát ra khỏi vòng lặp : while, do while, for

 Dùng chung với nhãn lệnh

 Không nên sử dụng vì sẽ phá vở cấu trúc CT

 Ưu điểm : thoát khỏi các vòng lặp lồng sâu

Trang 24

Hàm và cấu trúc chương trình

 Cú pháp :

<Kiểu trả về> <Tên hàm> (Danh sách kiểu và tham số)

{ [ Khai báo dữ liệu cục bộ ] [ Thân hàm ]

[ Câu lệnh return ] }

VD: int Max ( int x, int y) {

int somax;

somax = (x>y) ? x : y;

return somax;

}

Trang 25

Hàm và cấu trúc chương trình

 Khai báo prototype :

<Kiểu trả về> <Tên hàm> ( Danh sách kiểu );

VD: int Max ( int , int );

int Min ( int , int );

void main() {

int a =10 , b =5;

cout <<“ So max= “<< Max (a,b)<< endl ; cout <<“ So min= “<< Min (a,b)<< endl ; }

int Max ( int x , int y) { } int Min ( int x , int y) { }

Trang 26

cout<<“So max= “<< Max ( a , b ) << endl; }

Tham số (hình thức)

Đối số (Tham số thực tế)

Trang 27

 Dạng chung :

# include < Thư viện hàm >

Khai báo prototype;

Khai báo dữ liệu toàn cụcĐịnh nghĩa các hàm đã khai báo

Định nghĩa hàm main()

Trang 28

Con trỏ và chuỗi ký tự

Khái niệm

 Con trỏ lưu địa chỉ của 1 đối tượng dữ liệu khác.

 Kích thước con trỏ = 1 ô nhớ của hệ điều hành

 Trên MS-DOS, kích thước của con trỏ là 2 bytes.

Khai báo : < Kiểu> *<Tên con trỏ>;

Trang 29

Cấp vùng nhớ : Con trỏ = new <Kiểu> [ Số lượng ];

Ví dụ: int *px= new int;

long *py; py= new long[20];

Thu hồi vùng nhớ : delete <con trỏ>;

Ví dụ: delete px;

delete[] py;

Trang 30

Con trỏ

Con trỏ và mảng

 Con trỏ là 1 mảng động => kích thước có thể thay đổi.

 Mảng như là 1 con trỏ nhưng độ lớn vùng nhớ cố định.

Cách sử dụng mảng và con trỏ gần như giống nhau

Trang 32

Con trỏ

Con trỏ đến con trỏ

 Tương tự (tổng quát hơn) mảng nhiều chiều.

 Cẩn thận khi cấp vùng nhớ.

Trang 33

int (*p1) (const char *, const char *);

long (*p2) (int a, int b);

 Thường dùng con trỏ này để gọi 1 hàm và gửi

Trang 34

Con trỏ đến hàm

Gọi hàm check sử dụng con trỏ đến hàm như là 1 đối số

Trang 35

Con trỏ void*

 Có thể trỏ đến bất kỳ loại dữ liệu nào.

 Phải dùng phép ép kiểu khi thay đổi.

Trang 36

Con trỏ và chuỗi ký tự

 Là 1 mảng ký tự hay con trỏ ký tự

=> truy xuất phần tử của chuỗi tương tự như mảng.

VD: char chuoi1[20], *chuoi2;

char c = chuoi1[0];

 Phải cấp vùng nhớ cho chuỗi dạng con trỏ.

VD: chuoi2 = new char [50];

Chuỗi sẽ được đánh dấu bởi ký tự kết thúc : ‘\0 \0

Trang 37

Con trỏ và chuỗi ký tự

 Một số hàm xử lý chuỗi trong < string.h >:

Copy chuỗi: char* strcpy (char* s1, char* s2);

Tạo bản sao: char* strdup (char* s1);

Chiều dài: int strlen (char* s);

So sánh: int strcmp (char* s1, char* s2);

Ghép chuỗi: char* strcat (char* s1, char* s2);

Đảo ngược: char* strrev (char* s);

Đổi sang HOA: char* strupr (char* s);

Đổi sang thường: char* strlwr (char* s);

Gán n ký tự c:

char* strnset (char* s, int c , int n);

Trang 38

Tham số mặc nhiên

Khái niệm

 Gán các giá trị mặc nhiên cho các tham số của hàm

Ưu điểm

 Không cần phải hiểu rõ ý nghĩa tất cả các tham số.

 Có thể giảm được số lượng hàm cần định nghĩa.

Khai báo tham số mặc nhiên

 Tất cả các tham số mặc nhiên đều phải đặt ở cuối hàm

 Chỉ cần đưa vào khai báo , không cần trong định nghĩa.

Gọi hàm có tham số mặc nhiên

 Nếu cung cấp đủ tham số => dùng tham số truyền vào.

 Nếu không đủ tham số => dùng tham số mặc nhiên

Trang 39

Tham số mặc nhiên

MessageBox( LPCTSTR lpszText,

LPCTSTR lpszCaption = NULL,

UINT nType = MB_OK )

Hàm thể hiện 1 cửa sổ thông báo trong Visual C++

MessageBox(“Hien thi thong bao ra man hinh");

MessageBox( “Chuc nang khong su dung duoc",

“Bao loi“ );

Có thể gọi hàm theo các dạng sau:

MessageBox( “Ban muon thoat khoi chuong trinh?",

“Thong bao“,

MB_YESNO | MB_ICONASTERISK );

Trang 40

Tham số mặc nhiên

void Ham1 ( int a=0, int b=1) {

cout <<“ tham so 1 = “<<a<< endl ;

cout <<“ tham so 2 = “<<b<< endl ;

Trang 41

Tái định nghĩa hàm

Khái niệm

C++ cho phép định nghĩa các hàm trùng tên

Quy tắc tái định nghĩa

 Các hàm trùng tên phải khác nhau về tham số:

Trang 44

Hàm inline

 Là 1 hàm nhưng tác dụng tương tự như một macro.

 Khắc phục được các nhược điểm của hàm và macro

 Giảm thời gian thực thi chương trình.

 Tăng kích thước của mã lệnh thực thi.

 Chỉ nên định nghĩa inline khi hàm có kích thước nhỏ.

VD: inline float sqr(float x) {

return (x*x);

} inline int Max(int a, int b) {

return ((a>b) ? a : b) ; }

Trang 46

Tham chiếu

Tham chiếu dùng như một biến

 Khởi tạo : int x=5; int &rx = x;

int &a; int &b=5; // SAI

 Tham chiếu hằng : không thể sửa đổi giá trị.

const int &n=10;

<=> int x=3; const int &n=x;

n=5; // Báo lỗi vì n lúc này là hằng số

 Gán trị lại :

Không thể sửa đổi đối tượng tham chiếu.

Chỉ là thay đối giá trị.

int x = 5, y = 20; int &rx = x;

rx = y; // Chính là gán x=20

// không phải là rx tham chiếu đến y

Trang 47

Tham chiếu

 Làm thay đổi giá trị của tham số.

 Hữu ích cho hàm trả về nhiều kết quả.

 Tiết kiệm được ô nhớ trung gian (tham số hình thức) trong hàm.

void Nhap ( int& a, float& b) { cout << “ Nhap tham so 1 : “; cin >>a;

cout << “ Nhap tham so 2 : “; cin >>b;

}

void main () { int n; float m;

Nhap( n , m );

}

Trang 48

Tham chiếu

Tham chiếu dùng như trị trả về của hàm

 Đối tượng trả về vẫn bền vững khi hàm kết thúc.

 Trị trả về là 1 đối tượng toàn cục hay 1 vùng nhớ cục bộ.

=> Ích lợi : che đi cách biểu diễn của dữ liệu.

( Chẳng hạn : ta đổi lại dùng CTDL là danh sách liên kết

=> chỉ viết lại hàm GiaTri(int ) mà thôi )

Trang 49

Truyền tham số

Truyền theo giá trị

Giá trị tham số khi ra khỏi hàm sẽ không thay đổi không thay đổi

void Swap1 ( int a, int b) {

x y

a b

main Swap1

STEP 01

5 10

x y

5 10

a b

main Swap1

STEP 02

5 10

x y

10 5

a b

main Swap1

STEP 03

Trang 50

Truyền tham số

Truyền theo địa chỉ (con trỏ)

Giá trị tham số khi ra khỏi hàm có thể thay đổi có thể thay đổi

void Swap2 ( int * a, int * b) {

x y

a b

x y

100 200

a b

x y

100 200

a b

main Swap2

STEP

Trang 51

Truyền tham số

Truyền theo tham chiếu:

Giá trị tham số khi ra khỏi hàm có thể thay có thể thay đổi

void Swap3 ( int & & a, int & & b) {

Trang 52

Khái niệm

Struct Là 1 dạng cấu trúc dữ liệu mà bản thân có thể chứa

nhiều loại dữ liệu có kiểu khác nhau.

*hoten masosv[]

Trang 54

LỚP VÀ ĐỐI TƯỢNG

Chương 2:

Trang 56

<Kiểu trả về> <Tên lớp> :: :: <Tên hàm>( Các tham số + Kiểu ) {

< Khai báo các dữ liệu cục bộ của hàm>

< Thân hàm - Nội dung hàm >

< Câu lệnh return >

}

Toán tử chỉ phạm vi

Trang 57

Lớp

Trang 58

Đối tượng

 Dạng biến: <Tên lớp> <Tên đối tượng>;

1000H

b

x y

x y

1008H

Trang 59

Đối tượng

Khởi tạo đối tượng

 Dạng con trỏ :

VD: Diem *pa, *ds;

pa= new Diem; ds= new Diem[10];

delete pa; delete[] ds;

Chú ý: Phải cấpthu hồi vùng nhớ cho con trỏ đối tượng.

*ds 1064

Trang 60

Đối tượng

Sử dụng đối tượng

 Khi khởi tạo đối tượng xong, ta có thể :

Truy xuất đến dữ liệu thành viên của đối tượng.

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

tùy theo thuộc tính truy cập của các thành phần đó.

Trang 61

Đối tượng

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

Dùng dấu = = ( có sẵn trong ngôn ngữ C++)

 Thực chất là gán tương ứng các thành phần dữ liệu của hai đối tượng cho nhau.

Chỉ đúng đúng khi thành phần dữ liệu không có con trỏ

=> Phải định nghĩa lại phép gán khi dữ liệu có con trỏ.

void main() { Diem a; a.KhoiTao(10,20);

Diem b, *pb;

b = a; b.InDiem(); // In ra (10, 20)

pb = new Diem ; *pb = a; pb->InDiem(); // In ra (10, 20)

Trang 63

Hàm xây dựng – Hàm hủy

Hàm xây dựng (constructor)

 Dùng để khởi tạo đối tượng:

Gán giá trị đầu cho các dữ liệu thành viên.

Cấp vùng nhớ cho các con trỏ thành viên.

 Cú pháp:

Cùng tên với tên lớp, không có trị trả về (kể cả void).

Có thể không có hay có nhiều tham số.

Có thể không có, có 1 hay nhiều hàm xây dựng.

 Sử dụng :

Không được gọi trực tiếp.

Sẽ được tự động gọi khi khởi tạo đối tượng.

Trang 64

a InDiem(); // In (0,0)

Diem b(10,5); // Diem(int,int)

Diem c(3); // Diem(int)

Diem *pa = new Diem();

Diem *pb = new Diem(10,5);

Diem *pc = new Diem(3);

Diem ds1[10]; // Goi Diem()

Diem *ds2 = new Diem [10];

// Goi Diem()

.

}

Trang 65

Hàm xây dựng – Hàm hủy

Trang 66

Hàm xây dựng – Hàm hủy

Hàm hủy (destructor)

 Dùng để thu hồi vùng nhớ đã cấp cho các dữ liệu thành viên là con trỏ của đối tượng, khi hủy bỏ đối tượng.

=> delete các con trỏ là dữ liệu thành viên.

 Một lớp có thể không có hoặc chỉ có duy nhất 1 hàm hủy

Trang 67

Các loại đối tượng

Đối tượng toàn cục - Đối tượng cục bộ

 Đối tượng toàn cục :

Khai báo ngoài các lớp và ngoài hàm main()

Sẽ được khởi tạo (tự động gọi hàm xây dựng tương ứng) trước khi hàm main() thực thi.

Sẽ được hủy bỏ ( tự động gọi hàm hủy cho đối tượng ) sau khi kết thúc hàm main().

 Đối tượng cục bộ :

Khai báo trong một hàm.

Sẽ khởi tạo trong khi thực thi hàm đó.

Sẽ được hủy bỏ ( tự động gọi hàm hủy cho đối tượng đó) trước khi hàm kết thúc.

Trang 68

Dữ liệu và hàm thành viên tĩnh

Dữ liệu thành viên tĩnh (static)

 Là dữ liệu thành viên dùng chung cho tất cả các đối tượng của cùng 1 lớp => tồn tại độc lập với các đối tượng.

 Giống như 1 biến toàn cục.

 Phải được khởi tạo bên ngoài của lớp.

 Thường được sử dụng để đếm số lượng đối tượng hiện có.

Tại thời điểm này

dem = ?

Trang 69

Dữ liệu và hàm thành viên tĩnh

Hàm thành viên tĩnh (static)

 Độc lập với các đối tượng

=> khi gọi hàm không cần đối tượng nào :

<Tên lớp> :: <Tên hàm> (danh sách tham số)

 Chỉ cần thêm static vào trước khai báo hàm trong lớp.

 Giống như 1 hàm toàn cục.

Trang 70

Khai thác một lớp

Khai báo lớp : file <tên lớp>.hpp

Định nghĩa hàm thành viên : file <tên lớp>.cpp

Sử dụng lớp : trong 1 file khác vidu.cpp

void Diem::InDiem() { … }

Vidu.cpp

#include “Diem.cpp”

void main () { Diem a;

a.InDiem();

}

Trang 71

Khai thác một lớp

Tránh định nghĩa lớp nhiều lần :

Để tránh #include nhiều lần một lớp có trong nhiều tập tin khác nhau, ta dùng các từ khóa tiền xử lý

#ifndef #define #endif

Trang 72

HÀM THÀNH VIÊN

 Tái định nghĩa, Đối số mặc nhiên

 Hàm inline

 Truyền đối tượng như đối số của hàm.

 Trị trả về của hàm là đối tượng

 Con trỏ *this

 Hàm thành viên hằng

Chương 3:

Ngày đăng: 19/03/2014, 04:20

HÌNH ẢNH LIÊN QUAN

Sơ đồ lớp - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Trang 55)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 163)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 164)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 165)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 166)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 167)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 168)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 169)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 170)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 171)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 172)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 173)
Sơ đồ lớp (Class Diagram) - Lập trình hướng đối tượng pdf
Sơ đồ l ớp (Class Diagram) (Trang 174)

TỪ KHÓA LIÊN QUAN

w