Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 6: Ngôn ngữ lập trình hướng đối tượng - Nguyễn Văn Hòa
Chương 6: Ngôn ngꢀ lꢁp
trình hưꢂng ñꢃi tưꢄng
Giꢀng viên: Ph.D Nguyꢁn Văn Hòa
Khoa KT-CN-MT – ðH An Giang
1
Nꢅi dung chính cꢆa chương
ꢀ Giꢂi thiꢃu
ꢀ Khái niꢃm vꢄ trꢅu tưꢆng hóa
ꢀ Trꢅu tưꢆng hóa dꢇ liꢃu
ꢀ Sꢈ ñóng gói
ꢀ Tính thꢅa kꢉ
ꢀ Mꢊt sꢋ ngôn ngꢇ lꢌp trình hưꢂng ñꢋi tưꢆng
2
Sꢇ phát triꢈn kꢉ thuꢁt lꢁp trình
ꢀ Mꢍc tiêu cꢎa kꢏ sư phꢐn mꢄm
ꢁ Tꢑo ra sꢀn phꢒm tꢋt bꢓng mꢊt cách có hiꢃu quꢀ
ꢁ Nꢔm bꢔt ñưꢆc công nghꢃ
ꢀ Phꢐn mꢄm ngày càng lꢂn
ꢁ Hꢃ ñiꢄu hành (Unix, Windows) : hàng chꢍc triꢃu dòng
lꢃnh
ꢁ Ngưꢕi dùng ngày càng ñòi hꢖi nhiꢄu chꢗc năng
ꢁ Phꢐn mꢄm luôn cꢐn ñưꢆc sꢇa ñꢘi
3
Vì vꢁy
ꢀ Cꢐn kiꢙm soát chi phí
ꢁ Chi phí phát triꢙn
ꢁ Chi phí bꢀo trì
ꢀ Giꢀi pháp chính là sử dụng lại code
ꢁ Giꢀm chi phí và thꢕi gian phát triꢙn
ꢁ Nâng cao chꢚt lưꢆng
4
ðꢈ sꢊ dꢋng lꢌi code (mã nguꢍn)
ꢀ Mã nguꢛn cꢐn dꢁ hiꢙu
ꢀ Mã nguꢛn phꢀi chính xác
ꢀ Có giao diꢃn (inteface) rõ ràng
ꢀ Không yêu cꢐu thay ñꢘi khi sꢜ dꢍng trong chương
trình mꢂi
5
Giꢎi pháp: LT hưꢂng ñꢃi tưꢄng
ꢀ Che dꢚu dꢇ liꢃu (che dꢚu cꢚu trúc)
ꢀ Truy cꢌp dꢇ liꢃu thông qua giao diꢃn xác ñꢝnh
class MyDate {
private int year, mon, day;
public int getDay() {...}
public boolean setDay(int) {...}
...
}
6
Khái niꢏm
ꢀ Lꢀp trình hưꢁng ñꢂi tưꢃng (OOP- Object-
Oriented Programming)
ꢁ Mꢊt cách tư duy mꢂi, tiꢉp cꢌn hưꢂng ñꢋi tưꢆng ñꢙ giꢀi
quyꢉt vꢚn ñꢄ bꢓng máy tính
ꢁ Mꢊt phương pháp thiꢉt kꢉ và phát triꢙn phꢐn mꢄm dꢈa
trên kiꢉn trúc lꢂp và ñꢋi tưꢆng
ꢀ Qui trình tiꢉn hóa cꢎa OOP
ꢁ Lꢌp trình tuyꢉn tính
ꢁ Lꢌp trình cꢚu trúc (lꢌp trình thꢎ tꢍc)
ꢁ Trꢅu tưꢆng hóa dꢇ liꢃu
ꢁ Lꢌp trình hưꢂng ñꢋi tưꢆng
7
Tꢌi sao tiꢐp cꢁn hưꢂng ñꢃi tưꢄng
ꢀ Loꢑi bꢖ nhꢇng thiꢉu sót cꢎa tiꢉp cꢌn theo thꢎ tꢍc
ꢀ Trong OOP
ꢁ Dꢇ liꢃu ñưꢆc xem như mꢊt phꢐn tꢜ chính yꢉu và ñưꢆc
bꢀo vꢃ
ꢁ Hàm gꢔn kꢉt vꢂi dꢇ liꢃu, thao tác trên dꢇ liꢃu
ꢁ Phân tách bài toán thành nhiꢄu thꢈc thꢙ (ñꢋi tưꢆng) ꢂ
xây dꢈng dꢇ liꢃu + hàm cho các ñꢋi tưꢆng này
ꢀ Tăng cưꢕng khꢀ năng sꢜ dꢍng lꢑi
8
ðꢑc ñiꢈm cꢆa OOP
ꢀ Nhꢚn mꢑnh trên dꢇ liꢃu hơn là thꢎ tꢍc
ꢀ Các chương trình ñưꢆc chia thành các ñꢋi tưꢆng
ꢀ Dꢇ liꢃu ñưꢆc che giꢚu và không thꢙ ñưꢆc truy
xuꢚt tꢅ các hàm bên ngoài
ꢀ Các ñꢋi tưꢆng có thꢙ giao tiꢉp vꢂi nhau thông qua
các hàm
ꢀ Dꢇ liꢃu hay các hàm mꢂi có thꢙ ñưꢆc thêm vào
khi cꢐn
ꢀ Theo tiꢉp cꢌn tꢅ dưꢂi lên
9
Ưu ñiꢈm cꢆa OOP
ꢀ
So vꢂi các tiꢉp cꢌn cꢘ ñiꢙn thì OOP có
nhꢇng thuꢌn lꢆi sau:
ꢁ OOP cung cꢚp mꢊt cꢚu trúc module rõ ràng
ꢀ
Giao di
ꢃ
n
ñưꢆ
c
ñꢝnh nghĩa tꢋt
ꢀ
Nh ng chi ti
ꢇ
ꢉ
t cài ñꢞ
t
ñưꢆc ꢒn
ꢁ OOP giúp lꢌp trình viên duy trì mã và sꢜa ñꢘi mã tꢛn
tꢑi dꢁ dàng (các ñꢋi tưꢆng ñưꢆc tꢑo ra vꢂi nhꢇng khác
nhau nhꢖ so vꢂi nhꢇng ñꢋi tưꢆng tꢛn tꢑi).
ꢁ OOP cung cꢚp mꢊt framework tꢋt vꢂi các thư viꢃn mã
mà các thành phꢐn có thꢙ ñưꢆc chꢟn và sꢜa ñꢘi bꢠi lꢌp
trình viên.
10
Trꢒu tưꢄng hóa
ꢀ Trꢅu tưꢆng hóa là chꢡ biꢙu diꢁn nhꢇng ñꢞc ñiꢙm
cꢐn thiꢉt cꢎa vꢚn ñꢄ
ꢀ Trꢅu tưꢆng hóa là nꢄn tꢀng cơ bꢀn trong lꢌp trình
(và trong khoa hꢟc máy tính)
ꢀ Gꢐn như toàn bꢊ các NNLT ñꢄu hꢢ trꢆ trꢅu tưꢆng
hóa tiꢉn trình bꢓng chương trình con
ꢀ Tꢅ 1980s, gꢐn như các NNLT ñꢄu ñưꢆc thiꢉt kꢉ
ñꢙ hꢢ trꢆ trꢅu tưꢆng hóa dꢇ liꢃu
11
Ưu ñiꢈm cꢆa viꢏc trꢒu tưꢄng hóa
ꢀ Tꢌp trung vào các vꢚn ñꢄ cꢐn quan tâm
ꢀ Xác ñꢝnh nhꢇng ñꢞc tính thiꢉt yꢉu và nhꢇng hành
ñꢊng cꢐn thiꢉt
ꢀ Giꢀm thiꢙu nhꢇng chi tiꢉt không cꢐn thiꢉt
12
Các kꢉ thuꢁt trꢒu tưꢄng
ꢀ ðóng gói (encapsulation)
ꢀ Che dꢚu thông tin (information hiding)
ꢀ Thꢅa kꢉ (inheritance)
13
Trꢒu tưꢄng hóa dꢀ liꢏu
ꢀ Kiꢙu dꢇ liꢃu trꢅu tưꢆng là kiꢙu do ngưꢕi dùng
ñꢝnh nghĩa thꢖa mãn 2 ñiꢄu kiꢃn sau:
ꢁ Khai báo kiꢙu và các hành ñꢊng ñꢋi vꢂi ñꢋi tưꢆng cꢎa
kiꢙu → cung cꢚp mꢊt giao diꢃn cꢎa kiꢙu
ꢁ Kiꢙu cꢎa ñꢋi tưꢆng thì ñưꢆc giꢚu ñi ñꢋi vꢂi bên ngoài,
cho nên các hành ñꢊng có thꢙ ñưꢆc cung cꢚp trong
phꢐn ñꢝnh nghĩa kiꢙu
ꢀ VD : các sꢋ dꢚu chꢚm ñꢊng
14
Che dꢓu thông tin
15
Ngôn ngꢀ C++
ꢀ Dꢈa trên kiꢙu struct cꢎa C và lꢂp cꢎa Simula
67
ꢀ Lꢂp cꢎa C++ ñưꢆc xem như là kiꢙu
ꢀ Dꢇ liꢃu ñưꢆc ñꢝnh nghĩa trong lꢂp là dꢇ liꢃu thành
viên
ꢀ Hàm hay phương thꢗc ñưꢆc ñꢝnh nghĩa trong lꢂp
là hàm thành viên
ꢀ Tꢚt cꢀ các thꢈc thꢙ cꢎa lꢂp ñiꢄu có cùng phương
thꢗc, nhưng mꢢi thꢈc thꢙ thì có dꢇ liꢃu riêng
ꢀ Thꢈc thꢙ cꢎa lꢂp có thꢙ là tĩnh hoꢞc ñꢊng
16
Ngôn ngꢀ C++ (tt)
ꢀ Dꢚu thông tin: 3 loꢑi quyꢄn truy xuꢚt ñꢉn các
thành viên trong lꢂp
ꢁ Thành viên riêng (Private): truy xuꢚt bꢠi các thành
viên trong lꢂp
ꢁ Thành viên chung (Public): truy xuꢚt bꢠi tꢚt cꢀ các
thành viên sꢜ dꢍng lꢂp
ꢁ Thành viên bảo vệ (Protected): truy xuꢚt bꢠi các thành
viên cꢎa lꢂp dꢣn xuꢚt
17
Ngôn ngꢀ C++ (tt)
class stack {
private:
int *stackPtr, maxLen, topPtr;
public:
stack() { // a constructor
stackPtr = new int [100];
maxLen = 99;
topPtr = -1;
};
~stack () {delete [] stackPtr;};
void push (int num) {…};
void pop () {…};
int top () {…};
int empty () {…};
}
18
Ngôn ngꢀ Java
ꢀ Tương tꢈ C++, chꢡ trꢅ:
ꢁ Tꢚt cꢀ các kiꢙu do ngưꢕi dùng ñꢝnh nghĩa ñꢄu là
lꢂp (Java không có structs, union)
ꢁ Tꢚt cꢀ các ñꢋi tưꢆng ñưꢆc cꢚp phát vùng nhꢂ tꢅ
Heap và ñưꢆc truy cꢌp bꢓng tham chiꢉu biꢉn
ꢁ Tꢅng hàm và biꢉn trong lꢂp ñꢄu có gán quyꢄn truy
cꢌp (private or public) khi khai báo
ꢁ Java có cơ chꢉ phꢑm vi thꢗ hai, phꢑm vi cꢎa gói
(package scope), VD
ꢀ
import com.acme.utils.AcmeIO;
ꢀ
import com.acme.utils.*;
19
Ngôn ngꢀ Java
class StackClass {
private int [] *stackRef;
private int [] maxLen, topIndex;
public StackClass() { // a constructor
stackRef = new int [100];
maxLen = 99;
topPtr = -1;
};
public void push (int num) {…};
public void pop () {…};
public int top () {…};
public boolean empty () {…};
}
20
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 Nguyên lý ngôn ngữ lập trình - Chương 6: Ngôn ngữ lập trình hướng đối tượng - Nguyễn Văn Hòa", để 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_nguyen_ly_ngon_ngu_lap_trinh_chuong_6_ngon_ngu_lap.pdf

