Giới thiệu và ôn tập LT có cấu trúc/thủ tục Lập trình hướng đối tượng OOP Đối tượng và lớp trong OOP Một số khái niệm khác trong OOP Chương 1: Tổng quan về OOP... http://sit
Trang 1ĐH CÔNG NGHỆ THÔNG TIN http://sites.google.com/site/khaiphong
Số tiết lý thuyết: 45 tiết
Số tiết thực hành: 30 tiết
1
GVHD: Dương Khai Phong – Email khaiphong@gmail.com
Trang 2 Chương 1: Tổng quan về OOP
Chương 2: Lớp & đối tượng
Chương 3: Hàm và hàm đa năng trong OOP
Chương 4: Đa năng hóa toán tử
Chương 5: Sự kế thừa và tính đa hình
Nội dung môn học:
Trang 3http://sites.google.com/site/khaiphong
3
Nội dung môn học:
Trang 4 Giới thiệu và ôn tập LT có cấu trúc/thủ tục
Lập trình hướng đối tượng (OOP)
Đối tượng và lớp trong OOP
Một số khái niệm khác trong OOP
Chương 1: Tổng quan về OOP
Trang 5http://sites.google.com/site/khaiphong
5
Giới thiệu và ôn tập LT có cấu trúc/thủ tục
Chương 1: Tổng quan về OOP
Trang 7Ví dụ: viết chương trình xuất bảng cửu chương
include “stdio.h” // Khai báo thư viện
void main(){
for (int i=2;i<10;i++) {
for (int j=1;j<10;j++) printf ("%d*%d=%d",i,j,i*j);
printf ("\n");
}
}
Trang 8 Lập trình có cấu trúc/thủ tục
Ưu điểm:
Chương trình cục bộ hóa, dễ hiểu, dễ bảo trì hơn
Dễ dàng tạo ra các thư viện phần mềm
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
Trang 91 Khai báo thư viện
2 Khai báo hằng, biến, cấu trúc TOÀN CỤC
Trang 10 Các lưu ý quan trọng trong lập trình
float: %f double: %lf
char: %c
string: %s
(nếu ngôn ngữ lập trình
có hỗ trợ)
Trang 11 Chương 2: Lớp và đối tượng trong OOP
Các cấu trúc điều khiển:
Hàm:
Lưu ý: có 2 loại tham số là tham số
đầu vào (tham trị) và tham số đầu ra (tham biến)
LẶP
ĐIỀU KIỆN
ĐIỀU KIỆN
RẼ NHÁNH
IF IF ELSE
SWITCH CASE
FOR WHILE DO WHILE
<Kiểu_data> Tên_Hàm(DS_Tham số) {
// Định nghĩa hàm
return <giá_trị_trả_về>
}
Trang 12 Các lưu ý quan trọng trong lập trình
Trang 13ĐH CÔNG NGHỆ THÔNG TIN http://sites.google.com/site/khaiphong
13
Trang 15http://sites.google.com/site/khaiphong
15
Bài tập chương 1 – Phần lập trình có cấu trúc/thủ tục:
Buổi 1
1 Viết chương trình nhập dài (height), rộng
(width) Tính chu vi P và diện tích S của hình chữ nhật
2 Viết chương trình nhập 3 cạnh tam giác a,b,c
Tính P và S của tam giác
3 Viết chương trình kiểm tra một số nguyên nhập
từ bàn phím có phải là số nguyên tố hay không?
4 Viết chương trình kiểm tra ngày tháng năm có
hợp lệ hay không?
5 Viết chương trình cộng, trừ hai phân số
Trang 16 Giới thiệu và ôn tập LT có cấu trúc/thủ tục
Chương 1: Tổng quan về OOP
Trang 17http://sites.google.com/site/khaiphong
17
Lập trình hướng đối tượng (OOP)
Chương 1: Tổng quan về OOP
Lập trình hướng đối tượng ( O bject
O riented P rogramming - 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
Đối tượng là gi?
Trang 18 Giới thiệu và ôn tập LT có cấu trúc/thủ tục
Chương 1: Tổng quan về OOP
Trang 19http://sites.google.com/site/khaiphong
19
Đối tượng và lớp trong OOP
Chương 1: Tổng quan về OOP
• Đối tượng (object):
– Khái niệm đối tượng trong thế giới thực được hiểu như là
một thực thể: người, vật hoặc một bảng dữ liệu…
– Đối tượng phục vụ hai mục đích: giúp hiểu rõ thế giới
thực và cung cấp cơ sở cho việc cài đặt trên máy tính
– Mỗi đối tượng có một nét nhận dạng, thuộc tính để phân biệt với các đối tượng khác
– Ví dụ:
- Đối tượng Sinh viên , Nhân viên
- Đối tượng thời gian
Trang 20 Đối tượng và lớp trong OOP
• Lớp: (class)
– 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)
– Một thuộc tính (attribute): là một giá trị dữ liệu cho mỗi
đối tượng trong lớp (Ví dụ:Tên, Tuổi, Cân nặng là các thuộc tính của Người)
– Một thao tác (operation): là một hàm hay một phép biến
đổi có thể áp dụng vào hay áp dụng bởi các đối tượng trong lớp
Trang 21http://sites.google.com/site/khaiphong
21
Giới thiệu và ôn tập LT có cấu trúc/thủ tục
Chương 1: Tổng quan về OOP
Trang 22 Một số khái niệm khác trong OOP
Trang 23http://sites.google.com/site/khaiphong
23
Một số khái niệm khác trong OOP
Chương 1: Tổng quan về OOP
được gọi là một phương
thức (method)
Trang 24 Một số khái niệm khác trong OOP
Trang 25http://sites.google.com/site/khaiphong
25
Một số khái niệm khác trong OOP
Chương 1: Tổng quan về OOP
Trang 26 Một số khái niệm khác trong OOP
Sơ đồ đối tượng:
Là sơ đồ dùng để mô tả 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 đó
Sinh viên
Họ tên Năm sinh
Mã số Điểm TB
1984 0610234T
Trang 27http://sites.google.com/site/khaiphong
27
Một số khái niệm khác trong OOP
Chương 1: Tổng quan về OOP
Ví dụ:
Đối với nhân viên trong cùng một công ty nhưng cách tính lương của nhân viên văn phòng khác cách tính lương của nhân viên sản xuất
Trang 28 Một số khái niệm khác trong OOP
để tạo ra các lớp mới từ một hay nhiều lớp đã có
Ví dụ:
Đối Xét về bản chất: NV_VP
và NV_SX đều là nhân viên nên nó phải có các thuộc tính chung: MaNV, Hoten, CMND của một ngưởi nhân viên => kế thừa từ lớp NV
Trang 29http://sites.google.com/site/khaiphong
29
Một số khái niệm khác trong OOP
Chương 1: Tổng quan về OOP
Là cơ chế ràng buộc dữ liệu
và thao tác trên dữ liệu đó thành một thể thống nhất, tránh được các tác động bất ngờ từ bên ngoài
Ví dụ:
Một lớp có thể có nhiều thuộc tính và hàm Ta có thể xét quyền truy cập cho các thuộc tính và hàm này
…
Trang 30 Chương 1: Tổng quan về OOP
Nội dung môn học:
Trang 31http://sites.google.com/site/khaiphong
31
Khai báo lớp, đối tượng
Từ khoá xác định thuộc tính truy xuất
Con trỏ this
Phép gán đối tượng
Hàm thiết lập (Constructor)
Hàm hủy (Destructor)
Các lưu ý quan trọng trong OOP
Chương 2: Lớp & đối tượng
Chương 2: Lớp và đối tượng trong OOP
Trang 32 Khai báo lớp, đối tượng
Từ khoá xác định thuộc tính truy xuất
Con trỏ this
Phép gán đối tượng
Hàm thiết lập (Constructor)
Chương 2: Lớp & đối tượng
Trang 33<định nghĩa của các hàm thành phần chưa được định nghĩa bên
trong khai báo lớp>
Lưu ý cuối lớp phải có dấu “;”
Trang 34 Khai báo lớp, đối tượng
Ví dụ: khai báo lớp HINHCHUNHAT
Trang 35http://sites.google.com/site/khaiphong
35
Khai báo lớp, đối tượng
Định nghĩa các hàm thành phần ở bên ngoài khai báo lớp:
Chương 2: Lớp và đối tượng trong OOP
<Kiểu giá trị trả về> <tên lớp>::<tên hàm> ( [danh sách tham số] )
{
[nội dung]
[return giá_trị_nếu có;]
}
Tạo đối tượng:
<tên lớp> <Tên đối tượng>
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ó>);
Toán tử phạm vi
Trang 36 Khai báo lớp, đối tượng
Ví dụ: khai báo và định nghĩa lớp HINHCHUNHAT
Trang 38 Khai báo lớp, đối tượng
Từ khoá xác định thuộc tính truy xuất
Con trỏ this
Phép gán đối tượng
Hàm thiết lập (Constructor)
Chương 2: Lớp & đối tượng
Trang 39http://sites.google.com/site/khaiphong
39
Từ khoá xác định thuộc tính truy xuất
Từ khoá là gì? Truy xuất là gì?
Trong lớp có thể có nhiều nhãn
private và private.
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 40 Từ khoá xác định thuộc tính truy xuất
Ý nghĩa của các từ khoá truy xuất: các từ khoá này xác
định khả năng truy xuất thành phần (thuộc tính, phương thức) của một lớp
private: những thành phần được liệt kê bên trong phần
private chỉ được truy xuất bên trong phạm vi lớp và không
được phép kế thừa
public: những thành phần được liệt kê bên trong phần
public được truy xuất từ bất kỳ phạm vi nào và được kế
thừa lại trong lớp dẫn xuất (kế thừa)
protected được truy xuất từ bên trong phạm vi lớp,từ lớp
dẫn xuất (kế thừa) và được kế thừa lại trong lớp dẫn xuất
Trang 41http://sites.google.com/site/khaiphong
41
Từ khoá xác định thuộc tính truy xuất
Ví dụ về từ khoá truy xuất:
Chương 2: Lớp và đối tượng trong OOP
Trang 42 Khai báo lớp, đối tượng
Từ khoá xác định thuộc tính truy xuất
Con trỏ this
Phép gán đối tượng
Hàm thiết lập (Constructor)
Chương 2: Lớp & đối tượng
Trang 43http://sites.google.com/site/khaiphong
43
Con trỏ this
Con trỏ là gì?
Con trỏ this được dùng để tham
chiếu đến chính địa chỉ của đối
tượng của lớp
Dùng toán tử -> để truy cập đến
các thành viên của đối tượng
Công dụng:
Giúp ta truy cập, phân biệt
được các thành viên ngay bên trong lớp
Khi hàm thành viên cần trả giá
}
Trang 44 Khai báo lớp, đối tượng
Từ khoá xác định thuộc tính truy xuất
Con trỏ this
Phép gán đối tượng
Hàm thiết lập (Constructor)
Chương 2: Lớp & đối tượng
Trang 4528
123456
Per son b
tuoi CMND
28
123456
Trang 46 Khai báo lớp, đối tượng
Từ khoá xác định thuộc tính truy xuất
Con trỏ this
Phép gán đối tượng
Hàm thiết lập (Constructor)
Chương 2: Lớp & đối tượng
Trang 47http://sites.google.com/site/khaiphong
47
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 một cách tự động
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
Một lớp không có khai báo bất kỳ hàm thiết lập nào thì hàm thiết lập không đối số được tạo ra mặc định
Đặc điểm của hàm thiết lập (khởi tạo):
– 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
Trang 48Lưu ý: ta có thể định nghĩa các hàm khởi tạo ngay bên trong
việc khai báo lớp hoặc định nghĩa bên ngoài lớp
Hàm thiết lập (Constructor)
Trang 49http://sites.google.com/site/khaiphong
49
Khai báo lớp, đối tượng
Từ khoá xác định thuộc tính truy xuất
Con trỏ this
Phép gán đối tượng
Hàm thiết lập (Constructor)
Chương 2: Lớp & đối tượng
Chương 2: Lớp và đối tượng trong OOP
Trang 50 Hàm hủy (Destructor)
Destructor cũng như phương thức constructor (được gọi khi
một đối tượng được tạo), loại phương thức thứ hai là destructor, được gọi ngay trước khi thu hồi một đối tượng
Destructor thường được dùng để thực hiện mọi việc dọn dẹp
cần thiết trước khi một đối tượng bị huỷ
Đặc điểm của hàm huỷ (destructor):
– Destructor có cùng tên với tên của lớp nhưng bắt đầu dấu ~ – Destructor không có giá trị trả về (kể cả void)
– Destructor phải có thuộc tính public
– Destructor không có các tham số
Trang 51 Hàm hủy (Destructor)
// Hàm huỷ của lớp HCN
Trang 53http://sites.google.com/site/khaiphong
53
Bài tập hàm khởi tạo và hàm huỷ:
1 Khai báo lớp phân số(tuso,mauso) gồm các hàm khởi tạo ứng
với định nghĩa trong hàm main như sau:
3 Khai báo lớp mảng các số nguyên gồm n phần tử
4 Khai báo lớp ma trận vuông n*n phần tử
Trang 54 Khai báo lớp, đối tượng
Từ khoá xác định thuộc tính truy xuất
Con trỏ this
Phép gán đối tượng
Hàm thiết lập (Constructor)
Chương 2: Lớp & đối tượng
Trang 56 Các lưu ý quan trọng trong OOP
#include "iostream“ // trong VS 2008 phần khai báo bắt buộc
using namespace std; // trong VS 2008 phần khai báo bắt buộc
Trang 57 Chương 2: Lớp và đối tượng trong OOP
Đối tượng toàn cục:
Là đối tượng được khai báo bên ngoài hàm main() và chỉ
bị hủy khi chương trình kết thúc
Ví dụ: cho biết kết quả của
đoạn chương trình sau:
class Test{
public: Test(){cout<<"Xin chao";}
Trang 58 Các lưu ý quan trọng trong OOP
Đối tượng toàn cục:
Là đối tượng được khai báo bên ngoài hàm main() và chỉ
bị hủy khi chương trình kết thúc
Ví dụ: cho biết kết quả của
đoạn chương trình sau
class Test{
public: Test(){cout<<"Xin chao";}
Hi
- Kết thúc
* Các bước thực hiện:
1/ Gọi hàm khởi tạo của đối tượng a là
Test (do a là đối tượng toàn cục)
2/ Thực hiện lệnh trong hàm main
3/ Kết thúc hàm main, giải phóng đối
tượng a
Trang 59 Chương 2: Lớp và đối tượng trong OOP
Đối tượng là thành phần dữ liệu của lớp:
Là đối tượng được khai báo bên trong một lớp
Ví dụ: cho biết kết quả của đoạn
chương trình sau:
class Diem{
double x,y;
public: Diem(double xx,double yy){
};
Diem D(1,1);
Tamgiac T;
Trang 60 Đối tượng là thành phần dữ liệu của lớp:
Là đối tượng được khai báo bên trong một lớp
Ví dụ: cho biết kết quả của đoạn
chương trình sau
class Diem{
double x,y;
public: Diem(double xx,double yy){
Các lưu ý quan trọng trong OOP
(click vào màn hình đen để xem tiếp các bước)
1/ Khai báo đối tượng D không gây ra báo lỗi
2/ Khai báo đối tượng T gây ra báo lỗi do:
Trong đối tượng T có các thành phần dữ liệu là đối tượng (a,b,c)
mà không có hàm khởi tạo không đối số tương ứng
Khắc phục:
- Cách 1: khai báo và định nghĩa
constructor không đối số cho lớp Diem
- Cách 2: khai báo và định nghĩa
constructor tam giác không đối số cho lớp Tamgiac Trong đó xác định hàm khởi tạo cho đối tượng
là thành phần trong lớp
Trang 61 Đối tượng là thành phần dữ liệu của lớp:
Là đối tượng được khai báo bên trong một lớp
Ví dụ: cho biết kết quả của đoạn
chương trình sau
class Diem{
double x,y;
public: Diem(double xx,double yy){
xB, double yB, double xC, double yC):a(xA,yA), b(xB,yB),c(xC,yC) {}
void Ve(){…};
};
Diem D(1,1);
Tamgiac T;
Trang 62 Các lưu ý quan trọng trong OOP
Ví dụ: (xem ví dụ slide sau)
Trang 63Ví dụ: (xem ví dụ slide sau)
void Ve(Diem p); // Tham số hình thức là đối tượng
void Ve(Diem *p); // Tham số hình thức là con trỏ đối tượng
void Ve(Diem &p); // Tham số hình thức là tham chiếu đối tượng
Trang 64 Các lưu ý quan trọng trong OOP
Trong OOP, toán tử new và delete
thường được dùng để cấp phát và giải phóng bộ nhớ thay cho toán tử malloc
và free
Ví dụ:
int *pi;
// cấp phát một vùng nhớ kiểu int
pi=new int;
// khai báo một đối tượng kiểu point
Trang 65nhiên, ta phải sử dụng thêm [ ] trong
Trang 66 Các lưu ý quan trọng trong OOP
Ví dụ 1: cho biết dòng nào sau đây
gây ra lỗi và giải thích
*Giải thích:
Dòng 4 gây ra lỗi do num là một
hằng số nên không thể gán lại giá trị mới
Dòng 5 gây ra lỗi (tương tự)
1 void main(){
3 const int num = 5;
4 num = 200;
5 num++;
6 };
Trang 67Ví dụ 2: giải thích ý nghĩa của các
khai báo con trỏ sau
*Ý nghỉa:
Dòng 1: khai báo 1 biến con trỏ số
nguyên
Dòng 2: khai báo 1 hằng con trỏ
số nguyên (pointer to constant)
Dòng 3: khai báo 1 con trỏ hằng
số nguyên (constant pointer)
Dòng 4: khai báo con trỏ vừa là
hằng con trỏ vừa là con trỏ hằng
Giả sử ta có biến số nguyên num (int num)
1 int *p;
2 const int *p = #
3 int * const p =#
4 const int * const p = #