Tải bản đầy đủ (.pdf) (24 trang)

Lập trình hướng đối tượng tren C/C++ - OOP 06 the STL library and encapsulation

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (627.91 KB, 24 trang )

ThưThư việnviện STL,STL,
TínhTính
đóngđóng
góigói
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
TínhTính
đóngđóng
góigói
1Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 ThưThư việnviện C++.C++.
 ThưThư việnviện STL.STL.
 TínhTính đóngđóng góigói
2Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 ThưThư việnviện C++.C++.
 ThưThư việnviện STL.STL.
 TínhTính đóngđóng góigói
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện C++C++
 KháiKhái niệmniệm thưthư việnviện::

ThợThợ xâyxây dựngdựng dùngdùng gìgì đểđể xâyxây nhànhà??
 TayTay khôngkhông
 CôngCông cụcụ hỗhỗ trợtrợ
 ThưThư việnviện lậplập trìnhtrình::
BộBộ
côngcông
cụcụ
hỗhỗ
trợtrợ


củacủa
lậplập
trìnhtrình
viênviên


BộBộ
côngcông
cụcụ
hỗhỗ
trợtrợ
củacủa
lậplập
trìnhtrình
viênviên

 TậpTập hợphợp tri tri thứcthức củacủa ngườingười điđi trướctrước
 CCácác lớplớp, , hàmhàm dựngdựng sẵnsẵn (file .lib).(file .lib).
 CácCác thưthư việnviện C++ C++ phổphổ biếnbiến::
 ThưThư việnviện chuẩnchuẩn C++.C++.
 ThưThư việnviện boost: boost: hơnhơn 80 80 thưthư việnviện hỗhỗ trợtrợ lậplập trìnhtrình C++.C++.
 ThưThư việnviện MFC: MFC: hỗhỗ trợtrợ lậplập trìnhtrình C++ C++ trêntrên Windows.Windows.
4Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện C++C++
 ThưThư việnviện chuẩnchuẩn (C++ Standard Library):(C++ Standard Library):

PhátPhát triểntriển vàvà chuẩnchuẩn hóahóa vàovào 1990s.1990s.
 BộBộ côngcông cụcụ lậplập trìnhtrình nềnnền tảngtảng
 TậpTập hợphợp cáccác lớplớp trongtrong namespace std.namespace std.
 ĐặcĐặc điểmđiểm: file header : file header khôngkhông .h h.

 CấuCấu trúctrúc::
 ThưThư việnviện nhậpnhập xuấtxuất: : iostreamiostream, , fstreamfstream, , iomanipiomanip, , 
 ThưThư việnviện STL.STL.
 ThưThư việnviện chuẩnchuẩn C: file header C: file header ccxxx.hxxx.h
5Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 ThưThư việnviện C++.C++.
 ThưThư việnviện STL.STL.
 TínhTính đóngđóng góigói
6Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện STLSTL
 GiớiGiới thiệuthiệu STLSTL––SStandard tandard TTemplate emplate LLibrary:ibrary:

Alexander Alexander StepanovStepanov, 1994., 1994.
 PhầnPhần chínhchính yếuyếu củacủa thưthư việnviện chuẩnchuẩn
 TậpTập hợphợp class template class template dựngdựng sẵnsẵn
 HỗHỗ trợtrợ cấucấu trúctrúc dữdữ liệuliệu tổngtổng quátquát
 CấuCấu trúctrúc thưthư việnviện::
 NhómNhóm containers.containers.
 NhómNhóm iteratorsiterators
 NhómNhóm algorithms.algorithms.
 NhómNhóm functorsfunctors
7Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Thư viện chuẩn
Thư viện STL
iterators
algorithms functions
containers
ThưThư việnviện STLSTL
 LớpLớp string (header <string>):string (header <string>):


LớpLớp đạiđại diệndiện chocho chuỗichuỗi kýký tựtự
 GiảiGiải quyếtquyết 3 3 vấnvấn đềđề con con trỏtrỏ
 CácCác phươngphương thứcthức chínhchính::
Phương
thức
Ý
nghĩa
8Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Phương
thức
Ý
nghĩa
string(char *) Khởi tạo từ một chuỗi char *.
length() Lấy chiều dài chuỗi.
Toán tử [ ] Lấy ký tự tại vị trí nào đó.
Toán tử >, <, >=, <=, ==, != So sánh chuỗi theo thứ tự từ điển.
Toán tử +, += Nối chuỗi.
find(char *) Tìm vị trí chuỗi con.
substr(int, int) Trích chuỗi con.
ThưThư việnviện STLSTL
 LớpLớp string:string:
void main()void main()
{{
stringstring s1(“software”);s1(“software”);
stringstring s2(“s2(“SoftWareSoftWare”);”);
if (s1 == s2)if (s1 == s2)
coutcout
<< “equal.” << << “equal.” <<
endlendl

;;
coutcout
<< “equal.” << << “equal.” <<
endlendl
;;
elseelse
coutcout << “not equal.” << << “not equal.” << endlendl;;
s2 = s1.substr(4, 4);s2 = s1.substr(4, 4);
coutcout << s2;<< s2;
stringstring s3 = s1 + s2;s3 = s1 + s2;
coutcout << s3 << << s3 << endlendl;;
}}
9Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện STLSTL
 LớpLớp vector (header <vector>):vector (header <vector>):

LớpLớp mảngmảng kiểukiểu tổngtổng quátquát T.T.
 GiảiGiải quyếtquyết 3 3 vấnvấn đềđề con con trỏtrỏ
 CácCác phươngphương thứcthức chínhchính::
Phương
thức
Ý
nghĩa
10Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Phương
thức
Ý
nghĩa
vector<T>() Khởi tạo mảng kiểu T.
size() Lấy kích thước mảng.

resize(int) Thay đổi kích thước mảng.
Toán tử [ ] Lấy phần tử tại vị trí nào đó.
push_back(T) Thêm phần tử vào cuối mảng.
insert(position, T) Chèn phần tử vào vị trí nào đó.
ThưThư việnviện STLSTL
 LớpLớp vector:vector:
void main()void main()
{{
vector<vector<intint>> v1;v1;
v1.push_back(1);v1.push_back(1);
v1.push_back(2);v1.push_back(2);
for (for (intint ii = 0; = 0; ii < v1.size(); < v1.size(); ii++)++)
coutcout << v1[<< v1[ii] << “ “;] << “ “;
vector<vector<PhanSoPhanSo *> *> v2;v2;
v2.push_back(new v2.push_back(new PhanSoPhanSo(1, 3));(1, 3));
v2[0]v2[0] >>rutGonrutGon(); ();
}}
11Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện STLSTL
 LuyệnLuyện tậptập::
ViêtViêt chươngchương trìnhtrình thựcthực hiệnhiện việcviệc sausau::
NhậpNhập vàovào danhdanh sáchsách N N chuỗichuỗi kýký tựtự
NốiNối cáccác chuỗichuỗi vừavừa nhậpnhập vàvà xuấtxuất kếtkết quảquả
CàiCài đặtđặt theotheo haihai cáchcách::

SửSử
dụngdụng
lớplớp
mảngmảng
độngđộng

thuầnthuần
túytúy


SửSử
dụngdụng
lớplớp
mảngmảng
độngđộng
thuầnthuần
túytúy

SửSử dụngdụng lớplớp string string vàvà vector vector củacủa thưthư việnviện STL.STL.
12Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 ThưThư việnviện C++.C++.
 ThưThư việnviện STL.STL.
 TínhTính đóngđóng góigói
13Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TínhTính đóngđóng góigói
 QuyQuy tắctắc hộphộp đenđen::

ThuộcThuộc tínhtính: : privateprivate đểđể hạnhạn chếchế truytruy xuấtxuất
 PhươngPhương thứcthức: : publicpublic đểđể cungcung cấpcấp tínhtính năngnăng
class class HocSinhHocSinh
{{
{{
private:private:
char*char* m_hoTenm_hoTen;;
floatfloat m_diemVanm_diemVan;;

floatfloat m_diemToanm_diemToan;;
};};
14Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Dữ liệu
(Thuộc tính)
Tính năng
(Phương thức)
TínhTính đóngđóng góigói
 NhuNhu cầucầu xửxử lýlý vs. vs. quyquy tắctắc hộphộp đenđen::

CóCó nhunhu cầucầu truytruy xuấtxuất thuộcthuộc tínhtính đốiđối tượngtượng??
 PhươngPhương ánán 1: 1: private private  public.public.
 PhươngPhương ánán 2: 2: phươngphương thứcthức truytruy xuấtxuất
 VẫnVẫn vi vi phạmphạm quyquy tắctắc hộphộp đenđen!!!!
class class HocSinhHocSinh
{{
public:public:
char*char* m_hoTenm_hoTen;;
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
};};
15Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
class class HocSinhHocSinh
{{
private:private:
char*char* m_hoTenm_hoTen;;
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
public:public:
float&float& layDiemVanlayDiemVan();();

float&float& layDiemToanlayDiemToan();();
};};
TínhTính đóngđóng góigói
 LàmLàm saosao vẫnvẫn tuântuân thủthủ quyquy tắctắc hộphộp đenđen??

ĐưaĐưa xửxử lýlý chocho đốiđối tượngtượng thựcthực hiệnhiện
class class HocSinhHocSinh
{{
private:private:
char*char*
m_hoTenm_hoTen
;;
char*char*
m_hoTenm_hoTen
;;
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
public:public:
float float tinhDTBtinhDTB();();
intint xepLoaixepLoai();();
};};
16Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TínhTính đóngđóng góigói
 Dr. Guru Dr. Guru khuyênkhuyên: : quyquy tắctắc “Tell, Don’t Ask”“Tell, Don’t Ask”

ThôngThông tin tin đốiđối tượngtượng
 KhôngKhông thểthể truytruy xuấtxuất từtừ bênbên ngoàingoài
 ĐốiĐối tượngtượng nắmnắm giữgiữ thôngthông tintin
 ChịuChịu tráchtrách nhiệmnhiệm xửxử lýlý thôngthông tin.tin.
 ““ĐừngĐừng hỏihỏi tôitôi thôngthông tin tin đểđể thựcthực hiệnhiện côngcông việcviệc””

 ““HãyHãy nhờnhờ tôitôi làmlàm giùmgiùm!!”!!”
 ĐãĐã giaogiao thôngthông tintin
 GGiaoiao luônluôn xửxử lýlý thôngthông tin.tin.
17Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TínhTính đóngđóng góigói
 LuyệnLuyện tậptập::
// // TínhTính trọngtrọng tâmtâm tam tam giácgiác????
class class DiemDiem
{{
private:private:
floatfloat m_Xm_X;;
floatfloat m_Ym_Y;;
// // XuấtXuất danhdanh sáchsách họchọc sinhsinh đậuđậu ????
// (ĐTB >= 5.0)// (ĐTB >= 5.0)
class class HocSinhHocSinh
{{
private:private:
charchar **m_hoTenm_hoTen;;
};};
class class TamGiacTamGiac
{{
private:private:
DiemDiem m_Am_A;;
DiemDiem m_Bm_B;;
DiemDiem m_Cm_C;;
};};
18Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
};};

class class BangDiemBangDiem
{{
private:private:
vector<vector<HocSinhHocSinh> > m_danhSachm_danhSach;;
};};
TómTóm tắttắt
 ThưThư việnviện C++:C++:

BộBộ côngcông cụcụ dựngdựng sẵnsẵn hỗhỗ trợtrợ lậplập trìnhtrình C++.C++.
 CácCác thưthư việnviện phổphổ biếnbiến::
 ThưThư việnviện chuẩnchuẩn::
 ThưThư việnviện boost.boost.
ThưThư
việnviện
MFC.MFC.

ThưThư
việnviện
MFC.MFC.
 ThưThư việnviện STL:STL:

PhầnPhần chínhchính yếuyếu củacủa thưthư việnviện chuẩnchuẩn
 CácCác lớplớp dựngdựng sẵnsẵn: string, vector.: string, vector.
 TínhTính đóngđóng góigói::

Tell, Don’t Ask.Tell, Don’t Ask.
19Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 6.1:6.1:
VớiVới mỗimỗi thưthư việnviện bênbên dướidưới, , hãyhãy liệtliệt kêkê têntên vàvà chocho biếtbiết tínhtính năngnăng củacủa ítít

nhấtnhất 3 3 lớplớp đốiđối tượngtượng trongtrong thưthư việnviện::
 ThưThư việnviện chuẩnchuẩn
 ThưThư việnviện boost.boost.

ThưThư
việnviện
MFC.MFC.
ThưThư
việnviện
MFC.MFC.
20Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 6.2:6.2:
MộtMột đoạnđoạn vănvăn baobao gồmgồm nhiềunhiều câucâu. . MỗiMỗi câucâu baobao gồmgồm nhiềunhiều từtừ vàvà kếtkết
thúcthúc bằngbằng dấudấu câucâu ((dấudấu ., ?, !). ., ?, !). XâyXây dựngdựng cáccác lớplớp cầncần thiếtthiết đểđể::
 ĐọcĐọc mộtmột đoạnđoạn vănvăn từtừ file file vănvăn bảnbản
 ĐếmĐếm sốsố lượnglượng câucâu vàvà sốsố lượnglượng từtừ cócó trongtrong đoạnđoạn vănvăn

TìmTìm
từtừ
xuấtxuất
hiệnhiện
nhiềunhiều
nhấtnhất
trongtrong
đoạnđoạn
vănvăn

TìmTìm
từtừ

xuấtxuất
hiệnhiện
nhiềunhiều
nhấtnhất
trongtrong
đoạnđoạn
vănvăn

 SắpSắp xếpxếp tăngtăng dầndần ((thứthứ tựtự từtừ điểnđiển) ) cáccác từtừ trongtrong mỗimỗi câucâu
 GhiGhi đoạnđoạn vănvăn đãđã chỉnhchỉnh sửasửa vàovào file file vănvăn bảnbản
21Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 6.3:6.3:
XâyXây dựngdựng lớplớp đađa thứcthức cócó nhữngnhững phươngphương thứcthức sausau::
((NhómNhóm tạotạo hủyhủy))
 KhởiKhởi tạotạo mặcmặc địnhđịnh đađa thứcthức = 0.= 0.
 KhởiKhởi tạotạo vớivới bậcbậc vàvà mảngmảng hệhệ sốsố chocho trướctrước

KhởiKhởi
tạotạo
từtừ
mộtmột
đốiđối
tượngtượng
đađa
thứcthức
kháckhác


KhởiKhởi

tạotạo
từtừ
mộtmột
đốiđối
tượngtượng
đađa
thứcthức
kháckhác

 HủyHủy đađa thứcthức, , thuthu hồihồi bộbộ nhớnhớ
((NhómNhóm truytruy xuấtxuất thôngthông tin)tin)
 LấyLấy bậcbậc đađa thứcthức
 LấyLấy hệhệ sốsố tạitại bậcbậc nàonào đóđó
22Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 6.3:6.3:
XâyXây dựngdựng lớplớp đađa thứcthức ((tiếptiếp theotheo):):
((NhómNhóm xửxử lýlý nghiệpnghiệp vụvụ))
 So So sánhsánh vớivới đađa thứcthức kháckhác
 RútRút gọngọn đađa thứcthức

TínhTính
giágiá
trịtrị
, ,
đạođạo
hàmhàm
, ,
nguyênnguyên
hàmhàm



TínhTính
giágiá
trịtrị
, ,
đạođạo
hàmhàm
, ,
nguyênnguyên
hàmhàm

((NhómNhóm toántoán tửtử))
 ToánToán tửtử sốsố họchọc: +, : +, , *, /, =., *, /, =.
 ToánToán tửtử so so sánhsánh: >, <, ==, >=, <=, !=: >, <, ==, >=, <=, !=
 ToánToán tửtử đạođạo hàmhàm (!), (!), nguyênnguyên hàmhàm (~).(~).
 ToánToán tửtử nhậpnhập xuấtxuất: >>, <<.: >>, <<.
23Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 6.4:6.4:
XâyXây dựngdựng cáccác lớplớp cầncần thiếtthiết đểđể thựcthực hiệnhiện cáccác thaothao táctác trêntrên tam tam giácgiác::
 TínhTính chuchu vi vi vàvà diệndiện tíchtích
 TìmTìm trọngtrọng tâmtâm ((giaogiao 3 3 đườngđường trungtrung tuyếntuyến).).
 TìmTìm đườngđường trungtrung trựctrực củacủa mộtmột cạnhcạnh ((vuôngvuông gócgóc tạitại trungtrung điểmđiểm).).

TìmTìm
tâmtâm
đườngđường
tròntròn
ngoạingoại

tiếptiếp
((
giaogiao
3 3
đườngđường
trungtrung
trựctrực
).).

TìmTìm
tâmtâm
đườngđường
tròntròn
ngoạingoại
tiếptiếp
((
giaogiao
3 3
đườngđường
trungtrung
trựctrực
).).
24Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy

×