• Các mô hình được tạo ra cần dễ tạo, dễ thay đổi, mở rộng, thẩm định và kiểm chứng • Các hệ thống được xây dựng linh hoạt trong thay đổi, có các kiến trúc xác định và có cơ hội để tạo r
Trang 1LẬP TRÌNH H NG Đ I T ỢNG
Cao Tuấn Dũng dungct@soict.hut.edu.vn
Trang 4• Công nghệ đối tượng là một
tập các quy tắc (trừu tượng
hóa, đóng gói, đa hình), các
Trang 55
• Tạo ra các mô hình phản ánh một lĩnh vực nào
đó sử dụng thuật ngữ của lĩnh vực đó
• Các mô hình được tạo ra cần dễ tạo, dễ thay
đổi, mở rộng, thẩm định và kiểm chứng
• Các hệ thống được xây dựng linh hoạt trong
thay đổi, có các kiến trúc xác định và có cơ hội
để tạo ra và thực thi các thành phần có khả
năng tái sử dụng
• Quy trình phát triển + Ngôn ngữ mô hình hóa +
Kỹ thuật công cụ phát triển
Trang 61.2 Công ngh ệ đối tượng được sử dụng ở đâu?
• Các hệ thống Client/Server và phát triển Web
Công nghệ đối tượng cho
phép các công ty đóng gói thông tin doanh nghiệp trong các đối tượng và giúp phân phối quá trình xử lý qua
mạng Internet hoặc một mạng máy tính
Trang 77
Công ngh ệ đối tượng được sử dụng ở đâu?
• Hệ nhúng (embedded system)
• Hệ thống thời gian thực (real-time)
▫ Công nghệ đối tượng cho phép các hệ thống
th ời gian thực có thể phát triển với chất lượng
cao h ơn và linh hoạt hơn
Trang 8• Các mốc chính c a công nghệ đối tượng
Trang 10Assembly code
Trang 11phải tuân theo một cách
thức chung truy cập vào
dữ liệu
Trang 12L ịch sử phát triển của các NNLT
• c NNLT hướng đối tượng:
▫ Thể hiện các thành phần c a bài toán là các “đối
t ượng” (object)
▫ Hướng đối tượng là một kỹ thuật để mô hình hóa
h ệ thống thành nhiều đối tượng
Trang 13▫ Ngôn ngữ cấu trúc: Trừu tượng hóa điều khiển
(control abstraction) + tr ừu tượng hóa ch c năng (functional abstraction)
▫ Ngôn ngữ HĐT: Trừu tượng hóa dữ liệu (Data
abstraction)
Trang 14Bài t ập Đọc hiểu
• Đọc và tóm tắt một số điểm khác nhau giữa lập
trình cấu trúc (hướng th tục) và OOP
• http://www.desy.de/gna/html/cc/Tutorial/node3.htm
Trang 161 Tất cả đều là đối tượng
4 Mỗi đối tượng đều có dạng đặc
trưng c a lớp các đối tượng đó
5 Tất cả các đối tượng thuộc về cùng
một lớp đều có các hành vi giống
nhau
Alan Kay
Trang 1718
• Đối tượng là chìa
khóa để hiểu được kỹ
thuật hướng đối
tượng
• Trong hệ thống
hướng đối tượng,
mọi th đều là đối
tượng
Viết một chương trình hướng đối tượng nghĩa là đang xây dựng
một mô hình của một vài bộ phận trong thế giới thực
Trang 18• Đối tượng trong thế giới thực
▫ Ví dụ một chiếc ô tô
• Liên quan đến chiếc ô tô:
▫ Các thông tin về chiếc xe như: màu sắc, tốc độ, số km
đã đi được,
▫ Các hoạt động c a chiếc xe như: tăng tốc khi nhấn
ga, gi ảm tốc khi đạp phanh,
2.1 Đối tượng là gì?
Trang 20Object)
• Một đối tượng thế giới thực là một thực thể cụ thể
mà thông thường chúng ta có thể s ờ, nhìn thấy hay
Trang 21▫ Hành vi được biểu diễn bởi các
thao tác (operations), ph ương
th c (methods)
22
Trang 22Dave Age: 32 Height: 6’ 2”
Brett Age: 35 Height: 5’ 10”
Gary Age: 61 Height: 5’ 8”
Trang 23Hành vi
Get the mail Cook dinner
Trang 24Đ ịnh danh
Okay, which one of
you wise guys is
the real Poppini?
De great Poppini at-a your service
Trang 25phương thức liên quan.
Thuộc tính được xác định bởi giá trị cụ thể gọi là
thuộc tính thể hi n Một đối tượng cụ thể được gọi là một thể hi n.
Trang 26Đ ối tượng phần mềm và bài toán thực tiễn
Bài toán quản lý tài khoản ngân hàng – thẻ ATM – thanh toán điện tử
Thuộc
tính
Account name: Duc Binh Balance: 2.000.000 VND Deposit Debit
Balance inquiry
Yêu cầu dịch vụ Balance inquiry
Tôi muốn xem số
dư tài khoản
Trang 2731
• M ột l ớp là m ột thiết kế (blueprint) hay mẫu (prototype)
cho các đối tượng cùng kiểu
▫ Ví dụ: lớp XeDap là một thiết kế chung cho nhiều đối
t ượng xe đạp được tạo ra
• L ớp định nghĩa các thuộc tính và các phương th c chung cho t ất cả các đối tượng c a cùng một loại nào đó
• M ột đối tượng là một thể hiện cụ thể c a một lớp
▫ Ví dụ: mỗi đối tượng xe đạp là một thể hiện c a lớp
XeDap
• M ỗi thể hiện có thể có những thuộc tính thể hiện khác
nhau
▫ Ví dụ: một xe đạp có thể đang ở bánh răng th 5 trong
khi m ột xe khác có thể là đang ở bánh răng th 3
Trang 2933
Attribute name: Duc Binh
Balance: 2.000.000 VND Deposit() Withdraw()
checkBalance() operation
Account object of Mr Duc Binh
Attribute name: Thu Lan
Balance: 1.000.000 VND Deposit() Withdraw()
checkBalance() operation
Account object of Mrs Thu Lan
Account Class (model of objects)
Method definition
operation
INSTANTIATE
Trang 30L ớp và đối tượng
Thể hiện
Thiết kế mẫu
Trang 3135
• Xét hệ thống bán hàng trực tuyến Amazon Đưa
ra một số ví dụ về lớp và đối tượng trong hệ
thống?
• Cùng câu hỏi cho hệ thống thông tin quản lý đào
tạo SIS ĐHBK?
Trang 322.3 T ương tác giữa các đối tượng
• S ự giao tiếp giữa các đối tượng trong thế giới thực:
• Các đối tượng và sự tương tác giữa chúng trong lập
trình
▫ Các đối tượng giao tiếp với nhau bằng cách gửi thông điệp
(message)
Trang 33Trao đ ổi thông điệp
• Một chương trình (xây dựng theo tiếp cận HĐT)
là tập các đối tượng trao đổi thông điệp với nhau
return SS#
Trang 34G ọi hàm vs Gửi thông điệp
• Gọi hàm (Call function)
▫ Ch ỉ ra chính xác đoạn mã nào sẽ được thực hiện
▫ Ch ỉ có duy nhất một sự thực thi c a một hàm với một tên nào đó
▫ Không có hai hàm trùng tên
• Gửi thông điệp
▫ Yêu cầu một dịch vụ từ một đối tượng và đối tượng
s ẽ quyết định cần phải làm gì
▫ Các đối tượng khác nhau sẽ có các cách thực thi
các thông điệp theo cách khác nhau
Trang 35Thông đi ệp vs Phương thức
• Thông điệp
▫ Được gửi từ đối tượng này đến đối tượng kia, không bao gồm đoạn
• Ph ương th c
▫ Th tục/hàm trong ngôn ngữ lập trình cấu trúc
▫ Là sự thực thi dịch vụ được yêu cầu bởi thông điệp
▫ Là đoạn mã sẽ được thực thi để đáp ng thông điệp được gửi đến
cho đối tượng
39
Trang 362.4 H ướng cấu trúc vs Hướng ĐT?
• Hướng cấu trúc:
▫ data structures + algorithms = Program
▫ (cấu trúc dữ liệu + giải thuật = Chương trình)
• Hướng đối tượng:
▫ objects + messages = Program
▫ (đối tượng + thông điệp = Chương trình)
Trang 37H ướng cấu trúc – Hướng đối tượng
• Lập trình cấu trúc (procedural Programming):
▫ Đơn vị là các th tục, hàm
▫ D ữ liệu có ranh giới nhất định với th tục
• Lập trình Hướng đối tượng
▫ Đơn vị là đối tượng
▫ D ữ liệu gắn với hàm (phương th c) trong đối tượng
▫ M ỗi cấu trúc dữ liệu có các phương th c họat động trên nó
Trang 382.5 Giao di ện của đối tượng
• Thử thách c a LTHDT là có thể ánh xạ một phần
tử (thực thể) trong không gian bài toán về một
đối tượng trong không gian lời giải
• Một đối tượng có thể được sử dụng khi nó có thể
đáp ng được một số "yêu cầu" nào đó từ bên
ngoài Giao diện c a đối tượng định nghĩa các
dịch vụ mà đối tượng cung cấp
lt.on();
Trang 3944
• Quyết định bằng cách áp dụng nguyên lý Đóng
gói
Trang 40Ví d ụ về lớp và đối tượng trong
• Lớp Time trong Java
Trang 4146
Trang 4348
Trang 44Ch ương trình và các đối tượng: C++
Trang 4752
• “Sự bỏ qua có chọn lựa”
▫ Quyết định cái gì là quan trọng và không
▫ Tập trung và dựa trên những gì là quan trọng
▫ Bỏ qua và không phụ thuộc vào những gì là không
quan tr ọng
Trang 482.1 Tr ừu tượng hóa (Abstraction)
• Là quá trình loại bỏ đi các thông tin
cụ thể và giữ lại những thông tin
chung
• Tập trung vào các đặc điểm cơ bản
của thực thể, các đặc điểm phân
biệt nó với các loại thực thể khác
• Phụ thuộc vào góc nhìn
▫ Quan trọng trong ngữ cảnh này nhưng
lại không có ý nghĩa nhiều trong ngữ
cảnh khác
53
Trang 4954
54
Sinh viên Giáo viên
Khóa học diễn ra lúc 9:00 sáng các ngày thứ 3, 5, 7
Khóa học (ví dụ đại số)
Trang 50Ví d ụ: Cửa ra vào
Trang 5156
Trang 52Câu h ỏi trên lớp
• Hệ thống làm quen kết bạn qua mạng
▫ Góc nhìn người sử dụng
▫ Góc nhìn người quản lý
Trang 5358
2.2 Đóng gói (Encapsulation)
Tăng cường tính mềm dẻo
• Che giấu, ẩn đi chi tiết thực hiện bên trong
Cung cấp cho thế giới bên ngoài một giao diện
Người dùng không phụ thuộc vào việc sửa đổi
sự thực thi bên trong
Trang 54together
• Kết quả c a quá trình trừu tượng hóa:
▫ Đối tượng = Thuộc tính + phương th c
• Che giấu:
▫ Che giấu dữ liệu (thông tin)
▫ Che giấu hành động: Thực hiện ẩn
Trang 5560
• Bảo vệ dữ liệu: Cung cấp các con đường được
cấp phép để truy cập dữ liệu
• Thay đổi dữ liệu linh hoạt dễ dàng
Trang 56Vai trò c ủa thực hiện ẩn
• Class creator và client programmers
• Thực hiện ẩn cho phép:
▫ Quy định những người sử dụng (client) chỉ được phép truy nh ập và sử dụng những gì đã quy định cho họ
M ột phần class được che dấu và không cho người sử
d ụng được quyền truy nhập
▫ Những người thiết kế các class có khả năng thay đổi hay định nghĩa lại class mà vẫn chắc chắn rằng không ảnh hưởng tới chương trình c a những người sử dụng class này.
Trang 5762
• Giao diện thông điệp
(phương th c) c a đối
tượng
• Giáo sư Clark được yêu
cầu dạy 4 lớp tháng tới
TakeSabbatical ()
Giáo sư Clark
Name: J Clark Employee ID: 567138 HireDate: 07/25/1991 Status: Tenured Discipline: Finance MaxLoad:4
SetMaxLoad(4)
Trang 58Câu h ỏi thảo luận:
• Tính đóng gói đem lại lợi ích gì?
Trang 5964
Tính đóng gói
• Cho phép điều khiển
▫ Việc sử dụng đối tượng
được kiểm soát thông qua
các method public
• Hỗ trợ sự thay đổi
▫ Việc sử dụng đối tượng
không b ị ảnh hưởng nếu
d ữ liệu nội tại (private) bị
thay đổi
Withdraw( ) Deposit( ) dollars 12
Withdraw( ) Deposit( ) balance 12.56
cents 56
Trang 602.3 Mô đun hóa (Modularity)
Trang 61H thống quản lý siêu thị sách
H thống
k toán
H thống quản lý nhân viên
Trang 622.4 Phân c ấp (Hierarchy)
• Phân cấp có thể được định nghĩa là:
▫ việc xếp hạng hay xếp thứ tự các mức trừu tượng vào một cấu trúc cây Các loại: phân cấp kết tập, phân cấp lớp, phân cấp phạm vi, phân cấp mức
kế thừa, phân cấp thành phần, phân cấp mức độ
chuyên môn hóa, phân cấp loại (Dictionary of
Object Technology, Firesmith, Eykholt, 1995.)
Trang 63Tài khoản ngân hàng
Tiên gửi Cổ phiếu
Chứng khoán
Các loại giấy tờ có giá trị
Các phần tử ở cùng cấp trong sơ đồ phân cấp
thì có cùng mức trừu tượng hóa
Trang 65Phân tích và thi ết kế hướng đối
• Phương pháp luận (methodology) trong PT&TK
phần mềm thông thường được định nghĩa như
là một tập các quá trình và thao tác để tìm và khám phá cách có thể giải quyết được bài toán
phần mềm
• Một trong các phương pháp hiệu quả nhất để phát triển phần mềm
Trang 66Phân tích và thi ết kế hướng đối
• Sáu giai đoạn
▫ Giai đoạn 0: Lập kế hoạch (make a plan)
▫ Giai đoạn 1: Xác định mục tiêu - làm gì (what are we making)
▫ Giai đoạn 2: Xác định cách làm thế nào (how to build it)
▫ Giai đoạn 3: Xây dựng phần lõi - Building the core
▫ Giai đoạn 4: Lặp lại (hiệu chỉnh) các trường hợp sử dụng
▫ Giai đoạn 5: Phát triển (evolution)
Trang 6772
Giai đoạn 1: Xác định mục tiêu - làm gì (what are we
making)
• Trong giai đoạn này chúng ta có nhiệm vụ xác định cụ
th ể các mục tiêu, ch c năng và nhiệm vụ mà phần mềm chúng ta c ần xây dựng phải đáp ng
• Trong ph ương pháp lập trình cổ điển hướng th tục
ng ười ta gọi giai đoạn này là giai đoạn tạo ra “phân tích yêu cầu và mô tả hệ thống” (requirements analysis and
system specification)
• Trong PT&TK h ướng đối tượng người ta sử dụng các ký pháp và k ỹ thuật Use case để mô tả các công việc này
Trang 68Bi ểu đồ Use case
Trang 70Khuôn d ạng của thẻ CRC
• 1 Tên c a lớp Thông thường người ta đặt tên
lớp liên quan đến vai trò c a lớp, chúng ta sẽ sử
dụng lớp để làm gì
• 2 Trách nhiệm c a lớp: lớp có thể làm gì Thông
thường các thông tin ở đây bao gồm tên c a các
hàm thành phần – Tri th c mà lớp đó quản lý
• 3 Tương tác c a lớp: lớp này có thể tương tác
được với những lớp nào khác Những lớp cần
thiết để lớp đang xét hoàn thành nhiệm vụ
Trang 7176
CRC card
Trang 72M ột số đặc điểm cần lưu ý khi
1 Chúng ta c ần phân biệt rõ việc tạo ra lớp, sau đó mới nghĩa tới
vi ệc phát triển và hoàn thiện lớp trong quá trình giải quyết bài toán
2 Vi ệc phát hiện ra các lớp cần thiết cho chương trình là một trong
nh ững nhiệm vụ chính c a thiết kế hệ thống, nếu chúng ta đã có
nh ững lớp này (trong một thư viện lớp nào đó chẳng hạn) thì
công vi ệc sẽ dễ dàng hơn
3 Khi phân tích hay phát tri ển các lớp không nên tập trung vào để
bi ết tất cả về một lớp, chúng ta sẽ biết tất cả các thuộc tính này
khi phát tri ển hệ thống (learns as you go)
Trang 7378
4 Khi ti ến hành lập trình cần tuân th theo các thiết kế đã làm
Không nên băn khoăn rằng chúng ta sẽ không sử dụng phương
pháp l ập trình truyền thống và cảm thấy choáng ngợp trước số
l ượng lớn các đối tượng
5 Luôn luôn gi ữ nguyên tắc: mọi vấn đề cần giải quyết theo
ph ương án đơn giản nhất, không nên ph c tạp hóa Sử dụng
nguyên lý c a Occam Razor: L ớp đơn giản nhất bao giờ cũng là
l ớp tốt nhất, hãy bắt đầu bằng những cái đơn giản và chúng ta sẽ
k ết thúc bằng những hệ thống phức tạp
Trang 74Xác đ ịnh cách làm: Đối tượng
• Trong giai đoạn này , một trong những yêu cầu quan trong đó là thiết kế các đối tượng (object design) Trong PT&TK h ướng đối tượng người ta đã tổng kết 5 bước để thi ết kế đối tượng:
• Bước 1 Phát hiện đối tượng (Object discovery) B ước này được thực hiện ở giai đoạn phân tích chương trình Chúng ta phát
hi ện các đối tượng nhờ các yếu tố bên ngoài và các đặc điểm bên ngoài
• Bước 2 Lắp ráp đối tượng (Object assembly) B ước tìm
ki ếm các đặc điểm c a đối tượng để thêm vào các thuộc tính, các hàm thành ph ần cho đối tượng
Trang 7580
B ước 3 Xây dựng hệ thống (System construction) Trong giai đoạn
này chúng ta phát tri ển các đối tượng, xem xét các tương tác giữa
các đối tượng để hình thành hệ thống hoạt động
B ước 4 Mở rộng hệ thống (System extension) Khi chúng ta thêm
vào các tính năng c a hệ thống, chúng ta cần thêm các lớp mới, các
đối tượng mới và các tương tác giữa các đối tượng này với các đối
t ượng đã có trong hệ thống
B ước 5 Tái sử dụng đối tượng (Object reuse) Đây là một trong
nh ững thử nghiệm quan trọng c a các đối tượng và lớp trong thiết
k ế phần mềm Chúng ta cần phải sử dụng lại các lớp và các đối
t ượng trong phần mềm (thông qua tính kế thừa và tương tác giữa
các đối tượng)
Trang 775.1 Ngôn ng ữ C++
• Phiên b ản cải tiến ngôn ngữ lập trình C thành ngôn ngữ
l ập trình hướng đối tượng
• T ất cả các chương trình đã có sẵn c a C sẽ chạy được trong C++
• C++ có nh ững đặc tính phát triển tốt hơn ngôn ngữ C:
▫ TRong C++ có đặc tính tham chiếu c a các biến
(references) cho phép quản lý địa chỉ c a các biến hay l ấy ra giá trị c a các biến ở các địa chỉ tương ng
▫ Quản lý tên hàm và biển đã được mở rông thông qua
cơ chế chồng hàm function overloading,
Trang 785.1 Ngôn ng ữ C++
• Tư tưởng phân vùng các biến namespaces cho phép
qu ản lý các biến được tốt hơn
• Tính hi ệu quả
• Các ph ần mềm xây dựng trở nên dễ hiểu hơn
• Hi ệu quả sử dụng c a các thư viện
• Kh ả năng sử dụng lại mã thông qua templates
• Qu ản lý lỗi
• Cho phép xây d ựng các phần mềm lớn hơn
Trang 7984
5.2.1 Java là gì?
• Java là một ngôn ngữ lập trình HĐT được phát triển
bởi Sun Microsystems
khiển các bộ xử lý bên trong
các thiết bị điện tử dân dụng
như máy điện thoại cầm tay,
lò vi sóng…
Bắt đầu được sử dụng từ
năm 1995
Trang 815.2.2 Các ấn bản của Java
86
J2EE: Xây dựốg dựa trêố ốềố tảốg của J2SE, cuốg cấp các tíốh ốăốg để ớây dựốg Ố t ốềố tảốg đầy đủ, ổố địốh, aố toàố ộà ốhaốh để ớây dựốg các ứốg dụốg doaốh ốghiệp
J2ME: Cuốg cấp Ố t Ốôi tr ờốg Ốạốh Ốẽ, liốh hoạt cho các ứốg dụốg chạy trêố di đ ốg ộà các thiết bị ốhúốg khác (PDAs, b giải
Ốã cáp truyềố hìốh, Ốáy iố…)
Jaộa Card: Cuốg cấp Ốôi
tr ờốg aố toàố chạy trêố các thẻ thôốg Ốiốh (sỐart card) ộà các thiết