Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 03: Lớp và đối tượng (Tiếp theo) - Phạm Tú San

Tuần 03:  
Lꢀp và đꢁi tưꢂng (tt)  
Nhꢀc lꢁi ꢂ Lꢃp và đꢄi tưꢅng  
Lꢃp trình hưꢀng đꢁi tưꢂng là phương pháp lꢃp  
trình dꢄa trên kiꢅn trúc lꢀp (class) và đꢁi  
tưꢂng (object)  
Mꢆi đꢁi tưꢂng bao gꢇm 2 thành phꢈn: thuꢉc  
tính (attributes) và hành đꢉng (methods)  
Kiꢊu dꢋ liꢌu lꢀp đꢁi tưꢂng: class  
Đóng gói: chꢍa đꢄng dꢋ liꢌu và các hàm/thꢎ tꢏc  
liên quan  
Che giꢐu dꢋ liꢌu: các thꢄc thꢊ phꢈn mꢑm khác  
không can thiꢌp trꢄc tiꢅp vào dꢋ liꢌu bên trong  
ñưꢂc mà phꢒi thông qua các phương thꢍc cho  
phép  
Tách thành phꢈn khai báo và cài đꢓt  
File header (interface): .h  
Chứa các thông tin về khai báo của lớp.  
File xử lý (implementation): .cpp  
Chứa các cài đặt về xử lý của lớp.  
CON TRỎ THIS  
Con trꢔ this  
Xét đoạn code sau  
Đoạn code này có đúng không? Về cú pháp và ngữ  
nghĩa?  
class PhanSo  
{
void main()  
{
private:  
int  
PhanSo a;  
a.GanTuSo (2);  
PhanSo b;  
mTuSo;  
mMauSo;  
int  
Public:  
b.GanTuSo(5);  
void GanTuSo(int mTuSo)  
}
{
mTuSo = mTuSo;  
}
};  
Con trꢔ this (tt)  
a
b
c
+ mTuSo  
+ mTuSo  
+ mTuSo  
+ mMauSo  
+ mMauSo  
+ mMauSo  
void PhanSo::LayTuSo()  
{
return mTuSo;  
}
Làm sao trong phần cài đặt, chúng ta biết được  
mTuSo nào đang được dùng?  
Con trꢔ this  
Trong C++, trình biên dꢕch tꢄ đꢉng thêm  
vào trong các đꢁi sꢁ cꢎa hàm 1 con trꢔ this  
Con trꢔ this trꢔ tꢀi đꢁi tưꢂng tương ꢍng  
hiꢌn tꢖi.  
void PhanSo::LayTuSo( PhanSo* const this )  
{
return this->mTuSo;  
}
void main()  
{
void main()  
{
PhanSo a;  
int t = a.LayTuSo();  
PhanSo a;  
int t = a.LayTuSo(&a);  
}
}
Con trꢔ this  
class PhanSo  
{
Đoạn code đầu tiên:  
private:  
int  
mTuSo;  
int  
mMauSo;  
Public:  
void GanTuSo(int mTuSo)  
{
this->mTuSo = mTuSo;  
}
};  
Tuy nhiên, trong trường hợp này do các đối số bị trùng  
tên với thành phần dữ liệu nên mới xảy ra vấn đề vừa  
nêu. Nếu không, hàm sẽ tự động ngầm hiểu con trỏ this  
cho các biến có tên thuộc lớp đối tượng tương ứng  
Con trꢔ this  
Trong các hàm, con trỏ this (trỏ tới đối tượng  
được khởi tạo tương ứng) được truyền vào  
hàm 1 cách không tường minh.  
Các đối số khác được khai báo bình thường  
trong hàm.  
float Diem::tinhKhoangCach(Diem d)  
{
return sqrt( (thisꢀ>x – d.x)*(thisꢀ>x – d.x)  
+(thisꢀ>y – d.y)*(thisꢀ>y – d.y) );  
}
NẠP CHỒNG HÀM  
Nꢖp chꢇng hàm  
Mỗi hàm đều có 1 “chữ ký hàm”  
Phân biꢌt giꢋa các hàm.  
Đꢓt trưng cꢎa mꢉt hàm:  
Tên hàm.  
Danh sách tham sꢁ (sꢁ lưꢂng, kiꢊu)  
Chương trình có thể có  
nhiều hàm trùng tên  
(nhưng khác tham số)  
Nꢖp chꢇng hàm  
Lꢀp phân sꢁ có thꢊ có nhiꢑu hàm cꢉng  
Trình biên dꢕch sꢗ căn cꢍ vào danh sách các đꢁi  
sꢁ truyꢑn vào và so sánh chúng vꢀi tham sꢁ trong  
nguyên mꢘu hàm đꢊ xác đꢕnh đúng phương án  
thꢄc hiꢌn.  
Nꢖp chꢇng hàm  
Lưu ý: kiểu trả về không thuộc chữ kí hàm  
PhanSo PhanSo::Cong(PhanSo );  
float PhanSo::Cong(PhanSo );  
Getter/Setter  
Qui tꢙc đóng gói kín  
Kỹ_sư_CNTT a  
học tập  
kiến thức  
tiền  
Đóng gói hở: Mở một số  
thuộc tính ra “public” cho  
mọi người sử dụng trực  
tiếp ꢀ nguy hiểm!  
làm  
việc  
ăn chơi 
Đóng gói kín: Mọi thuộc  
tính đều “private”, muốn  
đọc giá trị của nó cũng phải  
thông qua phương thức!  
Đối tượng kiểm soát được  
mọi tác động đến thuộc  
tính của mình.  
a.tiền = 0;  
cout<<“Tên này có ”<<a.khoeTiền()<<“ đô”  
<<“ mà ta không lấy được!”;  
Đạo_tặc b  
trộm cắp  
cướp  
ngân hàng  
tiền  
ăn chơi  
buôn lậu  
Getter/setter  
Quy tꢙc đóng kín  
Truy xuꢐt thông qua getter: int ĐꢇngHꢇ::hiꢌnGiꢚ()  
Truy nhꢃp thông qua setter: void ĐꢇngHꢇ::đꢓtGiꢚ(int h)  
Các loꢖi thuꢉc tính:  
Thuꢉc tính nꢉi bꢉ không có get/setter.  
Thuꢉc tính chꢛ đꢜc chꢛ có getter  
Thuꢉc tính ꢒo có getter (setter), nhưng không có thꢄc  
trong bꢉ nhꢀ. Thưꢚng là công thꢍc tương đương vꢀi  
nhꢋng thuꢉc tính thꢄc khác. VD: (giꢚ, phút, giây) ~  
i_giây  
Thuꢉc tính công cꢉng có cꢒ getter và setter nhưng mꢜi  
truy cꢃp đꢅn thuꢉc tính đꢑu đưꢂc kiꢊm soát.  
VD: PhânSꢁ::đꢓtMꢘu(float ≠ 0)  
Getter/Setter  
Các thuꢉc tính cꢎa lꢀp SinhVien  
Thuꢆc tính  
MSSV  
Get  
x
Set PThꢇc khác  
Ghi chú  
thiLT(), thiTH(), làmNhóm() Đꢕnh danh  
Tên  
x
thiLT(), thiTH(), làmNhóm() Đꢕnh danh  
MS Nhóm  
điꢊm LT  
điꢊm TH  
điꢊm Cꢉng  
điꢊm TK  
x
x
làmNhóm()  
thiLT()  
(x)  
(x)  
(x)  
x
thiTH()  
làmNhóm()  
Xác đꢕnh bꢝi đ. LT, đ.  
TH, đ. Cꢉng  
HÀM DỰNG(CONSTRUCTOR)  
Tꢖi sao cꢈn hàm dꢄng?  
Khi đối tượng vừa được tạo:  
Giá trị các thuộc tính bằng bao nhiêu?  
Một số đối tượng cần có thông tin ban đầu.  
PhanSo  
HocSinh  
void main()  
{
ꢁTử số??  
ꢁMẫu số??  
ꢁHọ tên??  
ꢁĐiểm văn??  
ꢁĐiểm toán??  
PhanSo a;  
a.Xuat();  
HocSinh b;  
b.Xuat();  
ꢁKhởi tạo  
ꢁKhởi tạo  
Giải pháp:  
}
Xây dựng phương thức khởi tạo.  
Người dùng quên gọi?!  
Tính chꢐt hàm dꢄng  
Tính chất hàm dựng (constructor):  
Tự động thực hiện khi đối tượng được tạo.  
Có thể nạp chồng nhiều hàm dựng.  
Trong C++, hàm dựng có tên trùng tên lớp  
Không có kiểu trả về  
class PhanSo  
{
private:  
void main()  
{
int  
int  
m_iTuSo;  
m_iMauSo;  
PhanSo p1(1, 2);  
PhanSo *p2 = new PhanSo(5);  
public:  
};  
}
PhanSo(int iTuSo, int iMauSo);  
PhanSo(int iGiaTri);  
Tải về để xem bản đầy đủ
pdf 43 trang baolam 19140 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 03: Lớp và đối tượng (Tiếp theo) - Phạm Tú San", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_03_lop.pdf