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 đủ
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:
bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_03_lop.pdf

