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

Lập Trình Hướng Đối Tượng (Object-oriented Programming) 1 pot

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 (430.06 KB, 10 trang )

1
L
L


P TRÌNH HƯ
P TRÌNH HƯ


NG Đ
NG Đ


I TƯ
I TƯ


NG
NG
C
C
++
++
Bộ mônCôngnghệ phầnmềm
Khoa Công Nghệ Thông Tin
ĐạiHọcBáchkhoa–Đạihọc ĐàNẵng
CHƯƠNG
CHƯƠNG
1
1
18/02/2009


L
L


p Tr
p Tr
ì
ì
nh Hư
nh Hư


ng Đ
ng Đ


i Tư
i Tư


ng
ng
(Object
(Object
-
-
oriented Programming)
oriented Programming)
 Mụctiêu
 Giớithiệunhững khái niệmcơ bảntronglập

trình hướng đốitượng
 Nộidung
 Trừutượng hóa, đốitượng, lớp
 Thuộctínhvàphương thức
 Thông điệpvàtruyền thông điệp
 Tính bao gói, tính kế thừa, tính đahình
18/02/2009
Kh
Kh
á
á
i
i
Ni
Ni


m
m
 Lậptrìnhhướng đốitượng (OOP- Object-
Oriented Programming)
 mộtcáchtư duy mới, tiếpcậnhướng đốitượng để
giải quyếtvấn đề bằng máy tính.
 mộtphương pháp thiếtkế và phát triểnphầnmềm
dựatrênkiếntrúclớpvàđốitượng.
 Quá trình tiếnhóacủa OOP
1. Lậptrìnhtuyến tính
2. Lập trình có cấutrúc
3. Sự trừutượng hóa dữ liệu
4. Lậptrìnhhướng đốitượng

18/02/2009
L
L


p
p
tr
tr
ì
ì
nh
nh
không
không
c
c
ó
ó
c
c


u
u
tr
tr
ú
ú
c

c
(non
(non
-
-
structured programming)
structured programming)
 Là phương pháp xuấthiện đầutiên
 các ngôn ngữ như Assembly, Basic
 sử dụng các biếntổng thể
 lạmdụng lệnh GOTO
 Các nhược điểm
 khó hiểu, khó bảo trì, hầunhư không thể sử dụng lại
 chấtlượng kém
 chi phí cao
 không thể phát triển các ứng dụng lớn
2
18/02/2009
L
L


p
p
tr
tr
ì
ì
nh
nh

không
không
c
c
ó
ó
c
c


u
u
tr
tr
ú
ú
c
c
(non
(non
-
-
structured programming)
structured programming)
 Đoạn trình trên khó theo dõi, khó hiểu, dễ gây lỗi,
khó sửa đổi.
10 k=1
20 gosub 100
30 if y > 120 goto 60
40 k = k + 1

50 goto 20
60 print k, y
70 stop
100 y = 3*k*k + 7*k - 3
110 return
Lệnh nhảy đếnvị trí bất
kỳ trong chương trình
18/02/2009
L
L


p
p
tr
tr
ì
ì
nh
nh
c
c
ó
ó
c
c


u
u

tr
tr
ú
ú
c/l
c/l


p
p
tr
tr
ì
ì
nh
nh
th
th


t
t


c
c
(structured/procedural programming)
(structured/procedural programming)
 sử dụng các lệnh có cấu trúc: for, do while, if
then else

 các ngôn ngữ: Pascal, C,
 chương trình là tập các hàm/thủ tục
 Mã chương trình tập trung thể hiệnthuật toán:
làm như thế nào.
 Ưu điểm
 chương trình đượccụcbộ hóa, do đódễ hiểu, dễ bảo
trì hơn
 dễ dàng tạoracácthư việnphầnmềm
18/02/2009
V
V
í
í
d
d


int func(int j)
{
return (3*j*j + 7*j-3);
}
int main()
{
int k = 1
while (func(k) < 120)
k++;
printf("%d\t%d\n", k, func(k));
return(0);
}
18/02/2009

L
L


p
p
tr
tr
ì
ì
nh
nh
c
c
ó
ó
c
c


u
u
tr
tr
ú
ú
c/l
c/l



p
p
tr
tr
ì
ì
nh
nh
th
th


t
t


c
c
 Nhược điểm
 dữ liệuvàmãxử lý là tách rời
 dữ liệuthụđộng, xử lý chủđộng
 khó đảmbảo tính đúng đắncủadữ liệu
 không tựđộng khởitạo hay giải phóng dữ liệu động
 không đảmbảo được tính nhất quán và các ràng
buộccủadữ liệu
 khó cấmmãứng dụng sửadữ liệucủathư viện
 khó bảo trì code
 phầnxử lý có thể nằmrảirác
 ngườilập trình phảibiếtcấutrúcdữ liệu(vấn đề này
mộtthờigiandàiđược coi là hiểnnhiên)

 khi thay đổicấutrúcdữ liệuthìmãxử lý (thuật toán)
phảithayđổitheo
3
18/02/2009
V
V
í
í
d
d


struct Date
{
int day;
int month;
int year;
};
void setDate(Date& date, int newDay, int newMonth,
int newYear)
{
date.day = newDay;

}

Chuyệngìxảyranếucácđốisố
newDay, newMonth, newYear
tạo thành ngày tháng năm không hợplệ?
18/02/2009
T

T


i
i
sao
sao
ph
ph


i
i
thay
thay
đ
đ


i
i
c
c


u
u
tr
tr
ú

ú
c
c
d
d


li
li


u
u
?
?
 Cấutrúcdữ liệulàmôhìnhcủa bài toán cầngiải
quyết
 Do thiếukiếnthứcvề bài toán, về miền ứng dụng ,
không phải lúc nào cũng tạo đượccấutrúcdữ liệu
hoàn thiện ngay từđầu.
 Tạoramộtcấutrúcdữ liệuhợp lý luôn là vấn đề đau
đầucủangườilập trình.
 Bản thân bài toán cũng không bấtbiến
 Cầnphải thay đổicấutrúcdữ liệu để phù hợpvớicác
yêu cầuthayđổi.
18/02/2009
C
C
á
á

c
c
v
v


n
n
đ
đ


 Thay đổicấutrúc
 dẫn đếnviệcsửalạimãchương trình (thuật toán)
tương ứng và làm chi phí phát triểntăng cao.
 không tái sử dụng đượccácmãxử lý ứng vớicấu
trúc dữ liệucũ.
 Đảmbảo tính đúng đắncủadữ liệu
 một trong những nguyên nhân chính gây ra lỗiphần
mềm là gán các dữ liệu không hợplệ
 cầnphảikiểm tra tính đúng đắncủadữ liệumỗikhi
thay đổigiátrị
18/02/2009
V
V
í
í
d
d



:
:
MyDate
MyDate
struct Date {
int year, month, day;
};
Date d;
d.day = 32; // invalid day
d.day = 31; d.month = 2; // how to check
d.day = d.day + 1; //
4
18/02/2009
V
V
í
í
d
d


:
:
MyDate
MyDate
(2)
(2)
Thay đổicấutrúcdữ liệu:
struct Date {

short year;
short mon_n_day;
};
18/02/2009
Gi
Gi


i
i
ph
ph
á
á
p
p
 Che dấudữ liệu(chedấucấutrúc)
 Truy cậpdữ liệu thông qua giao diệnxácđịnh
class MyDate {
private int year, mon, day;
public int getDay() { }
public boolean setDay(int) { }

};
18/02/2009
S
S


d

d


ng
ng
giao
giao
di
di


n
n
MyDate d;;

d.day = 30; // compile error
d.setDay(31);
d.setMonth(2); // should return False
18/02/2009
T
T


i
i
Sao
Sao
Ti
Ti
ế

ế
p
p
C
C


n
n




ng
ng
Đ
Đ


i
i




ng
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ắnkế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
5
18/02/2009
Đ
Đ


c Đi
c Đi


m Quan Tr
m Quan Tr


ng
ng
 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
18/02/2009
Thu
Thu


n L
n L


i
i
 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.
18/02/2009
L
L



ch
ch
s
s


OOP
OOP
 Các ngôn ngữ lậptrìnhhướng đốitượng không
mới
 Simula (1967) là ngôn ngữđầu tiên, có lớp, thừakế,
liên kết động (hay còn gọi là hàm ảo)
 Nhưng các ngôn ngữ hướng đốitượng chậm
hơn các ngôn ngữ thờikỳđầu
 nên chúng chỉđược dùng rộng rãi khi máy tính bắt
đầuchạy nhanh (khoảng thờigianchiếc máy Pentium
đầutiênrađời)
 Lưuý rằng biên dịch các chương trình hướng đối
tượng cũng chậm
18/02/2009
L
L


ch
ch
s
s



OOP
OOP
 Mộtsố hệ thống “hướng đốitượng” thờikỳđầu không
có các lớp
 chỉ có các “đốitượng” và các “thông điệp” (v.d. Hypertalk)
 Hiệngiờ, đãcósự thống nhấtrằng hướng đốitượng là:
 lớp-class
 thừakế - inheritance và liên kết động - dynamic binding
 Mộtsốđặc tính củalậptrìnhhướng đốitượng có thể
đượcthựchiệnbằng C hoặc các ngôn ngữ lậptrìnhthủ
tục khác.
 Điểm khác biệtsự hỗ trợ và ép buộc ba khái niệmtrên
đượccàihẳn vào trong ngôn ngữ.
 Mức độ hướng đốitượng của các ngôn ngữ không
giống nhau
 Eiffel (tuyệt đối), Java (rất cao), C++ (nửanọ nửakia)
6
18/02/2009
L
L


ch
ch
s
s


ngôn

ngôn
ng
ng


l
l


p
p
tr
tr
ì
ì
nh
nh
FORTRAN I
FORTRAN II
ALGOL 60
LISP
ALGOL 58
CPL
COBOL
COMTRAN
FLOW-MATIC
PROLOG
ADA
PASCAL
SIMULA 67

SIMULA I
PL/1
BASIC
FORTRAN IV
B
BCPL
ALGOL 68
SMALLTALK 80
EIFFEL
C++
C
BETA
JAVA
1957
1960
1965
1970
1975
1980
1985
1990
1995
MODULA 2
MODULA 3OBERON
C# 2000
18/02/2009
Tr
Tr



u
u




ng
ng
H
H
ó
ó
a
a
(Abstraction)
(Abstraction)
 Trừutượng hóa
 Phân biệt cầnthiết với chi tiết
 Giao diện–Càiđặt
 Cái gì – Thế nào
 Phân tích – Thiếtkế

Các kỹ thuậttrừutượng
 Đóng gói (encapsulation)
 Ẩn thông tin (information hiding)
 Thừakế (inheritance)
 Đahình(polymorphism)
18/02/2009
Đ
Đ



i Tư
i Tư


ng
ng
(Object)
(Object)
 Đối tượng là
chìa khóa để hiểu
đượckỹ thuật
hướng đốitượng
 Trong hệ thống
hướng đốitượng,
mọithứđềulàđối
tượng
Viếtmộtchương trình hướng đốitượng nghĩalàđang xây dựng
mộtmôhìnhcủamộtvàibộ phậntrongthế giớithực
18/02/2009
Đ
Đ


i
i





ng
ng
Th
Th
ế
ế
Gi
Gi


i
i
Th
Th


c
c
(Real Object)
(Real Object)
 Một đốitượng thế giớithực là mộtthực
thể cụ thể mà thông thường bạncóthể sờ,
nhìn thấy hay cảmnhận được.
 Tấtcả có
trạng thái
(state) và
hành động
(behaviour)
7

18/02/2009
Đ
Đ


i
i




ng
ng
Ph
Ph


n
n
M
M


m
m
(Software Object)
(Software Object)
 Các đốitượng phầnmềm có thểđược
dùng để biểudiễn các đốitượng thế giới
thực.

 Cũng có trạng thái và
hành động
 Trạng thái: thuộc tính
(attribute; property)
 Hành động: phương thức
(method)
18/02/2009
Đ
Đ


i
i




ng
ng
Đốitượng (object) là một
thựcthể phầnmềm bao
bọccácthuộctínhvà
các phương thức liên
quan.
Đốitượng phầnmềm Đốitượng phầnmềm Xe Đạp
Thuộc tính đượcxácđịnh
bởigiátrị cụ thể gọilà
thuộctínhthể hiện.
Một đốitượng cụ thể
đượcgọilàmột thể hiện.

18/02/2009
L
L


p
p
(Class)
(Class)
 Trong thế giớithực có nhiều đốitượng cùng loại.
 Chương trình hướng đốitượng có nhiều đối
tượng cùng loạichiasẻ những đặc điểm chung.
 Ví dụ
18/02/2009
L
L


p
p
(Class)
(Class)
 Một lớp là mộtthiếtkế (blueprint) hay mẫu (prototype)
cho các đốitượng cùng kiểu
 Ví dụ:lớp XeDap là mộtthiếtkế chung cho nhiều đốitượng xe
đạp đượctạora
 Lớp định nghĩacácthuộctínhvàcácphương thức chung
cho tấtcả các đốitượng của cùng mộtloại nào đó
 Một đốitượng là một thể hiện cụ thể củamộtlớp.
 Ví dụ: mỗi đốitượng xe đạplàmộtthể hiệncủalớp XeDap

 Mỗithể hiệncóthể có những thuộc tính thể hiện khác
nhau
 Ví dụ: mộtxeđạpcóthểđang ở bánh răng thứ 5 trong khi mộtxe
khác có thể là đang ở bánh răng thứ 3.
8
18/02/2009
Đ
Đ


i
i




ng
ng
(Object)
(Object)
 Đốitượng có
 định danh
 thuộc tính (dữ liệu)
 hành vi (phương thức)
 Mỗi đốitượng bấtkểđang ở trạng thái nào đềucó
định danh và được đốixử như mộtthựcthể riêng
biệt.
 mỗi đốitượng có một handle (trong C++ là địa
chỉ)
 hai đốitượng có thể có giá trị giống nhau nhưng

handle khác nhau
18/02/2009
V
V
í
í
D
D


L
L


p
p
Xe
Xe
Đ
Đ


p
p
Khai báo cho lớp
XeDap
Đốitượng củalớp
XeDap
18/02/2009
Thu

Thu


c
c
T
T
í
í
nh
nh
L
L


p
p
&
&
Phương
Phương
Th
Th


c
c
L
L



p
p
18/02/2009
Thu
Thu


c
c
T
T
í
í
nh
nh
L
L


p
p
&
&
Phương
Phương
Th
Th



c
c
L
L


p
p
 Thuộctínhlớp (class attribute) là mộthạng mụcdữ
liệu liên kếtvớimộtlớpcụ thể mà không liên kếtvới
các thể hiệncủalớp. Nó được định nghĩa bên trong
định nghĩalớpvàđượcchiasẻ bởitấtcả các thể hiện
củalớp.
 Phương thứclớp (class method) là mộtphương
thức đượctriệugọi mà không tham khảotớibấtkỳ
một đốitượng nào. Tấtcả các phương thứclớp ảnh
hưởng đếntoànbộ lớpchứ không ảnh hưởng đến
mộtlớp riêng rẽ nào.
9
18/02/2009
Thu
Thu


c
c
T
T
í
í

nh
nh
&
&
Phương
Phương
Th
Th


c
c
 Thuộctính(attribute) là dữ liệu trình bày
các đặc điểmvề một đốitượng.
 Phương thức (method) cóliênquantới
những thứ mà đốitượng có thể làm. Một
phương thức đáp ứng mộtchứcnăng tác
động lên dữ liệucủa đốitượng (thuộc
tính).
18/02/2009
Thông
Thông
Đi
Đi


p
p
&
&

Truy
Truy


n
n
Thông
Thông
Đi
Đi


p
p
 Thông điệp (message) là mộtlờiyêucầu
mộthoạt động. Gồmcó:
 Đốitượng nhận thông điệp
 Tên củaphương thứcthựchiện
 Các tham số mà phương thứccần
 Truyền thông điệp: một đốitượng triệu
gọimột hay nhiềuphương thứccủa đối
tượng khác để yêu cầuthôngtin.
18/02/2009
T
T
í
í
nh
nh
Bao

Bao
G
G
ó
ó
i
i
(Encapsulation)
(Encapsulation)
 Đóng gói (encapsulation) là tiếntrìnhche
giấuviệcthựcthichi tiếtcủamột đối
tượng.
18/02/2009


n
n
Thông
Thông
Tin
Tin
(Information Hiding)
(Information Hiding)
 Đóng gói Æ Thuộctínhđượclưutrữ
hay phương thức đượccàiđặtnhư thế
nào Æ đượcchegiấu đitừ các đối
tượng khác
Việc che giấunhững chi
tiếtthiếtkế và cài đặttừ
những đốitượng khác

đượcgọilàẩn thông tin
10
18/02/2009
T
T
í
í
nh
nh
Th
Th


a
a
K
K
ế
ế
(Inheritance)
(Inheritance)
 Hệ thống hướng đốitượng cho phép các
lớp được định nghĩakế thừatừ các lớp
khác
 Ví dụ, lớp xe đạpleonúivà xe đạp đua là
những lớp con (subclass) củalớp xe đạp.
 Thừakế nghĩalàcácphương thứcvàcác
thuộctínhđược định nghĩa trong mộtlớp
có thểđượcthừakế hoặc đượcsử dụng
lạibởilớp khác.

18/02/2009
T
T
í
í
nh
nh
Th
Th


a
a
K
K
ế
ế
(Inheritance)
(Inheritance)
 cho phép các phần
mềmsử dụng quan hệ
“là”
 giúp ta thiếtkế các
dịch vụ tổng quát rồi
chuyên môn hóa
chúng
18/02/2009
T
T
í

í
nh
nh
Đa
Đa
H
H
ì
ì
nh
nh
(Polymorphism)
(Polymorphism)
 Đahình: “nhiềuhìnhthức”, hành động
cùngtêncóthểđượcthựchiện khác nhau
đốivớicácđốitượng/các lớp khác nhau.
 Ngữ cảnh khác Æ kếtquả khác
Đường Thẳng Hình TrònĐiểm Hình Vuông
Vẽ
18/02/2009
T
T
í
í
nh
nh
Đa
Đa
H
H

ì
ì
nh
nh
(Polymorphism)
(Polymorphism)
 Đa hình hàm - Functional polymorphism
 cơ chế cho phép một tên thao tác hoặcthuộctínhcóthểđược
định nghĩatạinhiềulớpvàcóthể có nhiềucàiđặt khác nhau tại
mỗilớptrongcáclớp đó
 v.d. lớp Date cài 2 phương thức setDate(),mộtnhận tham số là một
đốitượng Date, phương thứckianhận 3 tham số day, month, year.

Đahìnhđốitượng - Object polymorphism
 các đốitượng thuộccáclớp khác nhau có khả năng hiểucùngmột
thông điệp theo các cách khác nhau
 vd. khi nhận được cùng một thông điệp draw(), các đốitượng
Rectangle và Triangle hiểuvàthựchiện các thao tác khác nhau

×