Tác vụlTác vụ có thể bị che dấu hoặc truy xuất được từ bên ngoài uMột số ngôn ngữ lập trìnhvà UML: public, protected, private lTác vụ có thể được override trong các lớp con thừa kế uTrừu
Trang 1Chương 8 Công nghệ phần mềm hướng đối tượng
Mô hình hướng đối tượng
Giới thiệu
lMô hình hướng đối tượng giới thiệu một quan điểm lậptrình(và phân tích/thiết kế) khác hẳn so với trường phái
cổ điển (có cấu trúc)
lBắt đầu nhen nhóm vào những năm cuối60 và đến đầu
90 trở nên rất phổ biến trong công nghiệp phần mềm
lNhững ngôn ngữ hướng đối tượng đầu tiên: Smalltalk, Eiffel Sau đó xuất hiện: Object Pascal, C++, Java…
Đối tượng và lớp
lHình thành các phương pháp phân tích/thiết kế hướng
đối tượng
lMô hình hướng đối tượng quan niệm thế giới bao gồm
các đối tượng(object) sinh sống và tương tác với nhau
lĐối tượng bao gồm
udữ liệu: mang một giá trị nhất định
utác vụ: thực hiện một công việc nào đó
Đối tượng và lớp
mà đặc tả đầy đủ cấu trúc và hành vi của các đối tượng
từ lớp
dùng định nghĩa
Trang 2Đóng bao
lĐóng bao: việc gộp thuộc tính và tác vụ trong một đối
tượng đồng thời giới hạn cách truy xuất các thuộc tính
đó(thường phải thông qua các tác vụ get/set)
x = 3.2
y = 1.7
Thuộc tính
lThuộc tiùnh(attribute) là một vùng có thể chứa dữ
liệu(đơn hoặc tổ hợp) của lớp
lDữ liệu mà thuộc tính thể hiện nằm trong một khoảnggiá trị nào đó được xác định bởi kiểu
lGiá trị của tất cả thuộc tính xác định trạng thái của đốitượng
uVí dụ: một đối tượng của Circle có (Radius, x, y) = (1.2, 3.4, 5.3)
mang giá trị khác nhau)
Tác vụ
lTác vụ(operation) là một dịch vụ có thể yêu cầu từ phía
đối tượng để thực hiện hành vi
lDấu hiệu nhận dạng của tác vụ(signature) xác định các
thông số có thể truyền cũng như kết quả trả về
lPhương thức(method) là phần hiện thực của tác vụ
Trang 3Tác vụ
lTác vụ có thể bị che dấu hoặc truy xuất được từ bên ngoài
uMột số ngôn ngữ lập trình(và UML): public, protected,
private
lTác vụ có thể được override trong các lớp con thừa kế
uTrừu tượng(abstract): không có hiện thực
lMột số ngôn ngữ lập trình cho phép định nghĩa
uTác vụ khởi tạo(constructor): được gọi khi đối tượng
mới tạo ra
uTác vụ hủy(destructor): được gọi khi đối tượng sắp bị
huỷ bỏ
Ví dụ lớp, đối tượng java
class abstract HTMLObject { protected static final int LEFT = 0;
protected static final int MIDDLE = 1;
protected static final int RIGHT = 2;
private int alignment = LEFT;
protected Vector objects = null;
uDấu hiệu nhận dạng của tác vụ muốn gọi
uDanh sách thông số gọi
Thông điệp
lĐối với các ngôn ngữ lập trình
uĐối tượng đích: biến đối tượng hoặc bản thân đối
tượng muốn gửi thông điệp (self, this)
uDấu hiệu nhận dạng của tác vụ muốn gọi: tên tác vụtrùng nhau⇒xem các thông số gọi
uDanh sách thông số gọi: như phép gọi hàm bìnhthường, chú ý kiểu khi truyền và gán kết quả trả về
uVí dụ: aCircle.SetRadius( 3 ); aCircle.Draw( pWnd);
Trang 4Bao gộp
lBao gộp(aggregation) là quan hệ giữa hai đối tượng
lMột đối tượng bao lấy đối tượng kia
lQuan hệ này thường xảy ra trong thế giới thực, ví dụ
uXe hơi bao gồm: bánh xe, động cơ, khung xe
uTrang HTML bao gồm: text, hình ảnh, tiêu đề, các
uLỏng lẻo: chu kỳ sống của hai đối tượng độc lập nhau
lQuan hệ bao gộp cũng được áp dụng cho lớp
lMột số ngôn ngữ lập trình hỗ trợ cả2 dạng liên kết: biến
int xPos, yPos;
double xScale, yScale;
lThừa kế(inheritance) là quan hệ giữa hai lớp
lLớp con thừa hưởng tất cả thuộc tính và tác vụ của lớpcha
lLớp con(subclass) là cụ thể hoá của lớp cha (superclass); lớp cha là tổng quát hoá của lớp con
lQuan hệ này cũng thường được ghi nhận trong thế giớithực, ví dụ
uHổ, báo, sói đều là thú
uButton, Checkbox và Dialog đều là Window
uHình tròn, hình chữ nhật, hình ellipse đều là hình vẽ
Trang 5Thừa kế và nạp chồng
lHai loại thừa kế: đơn thừa kế và đa thừa kế
lĐơn thừa kế: mỗi lớp con có nhiều nhất là một lớp cha
lĐa thừa kế:
uMỗi lớp con có một hoặc nhiều lớp cha
uNảy sinh hai vấn đề: đụng độ giữa tên các thành phần
(member) của lớp cha và thừa kế lại
Thừa kế và nạp chồng
lLớp con có thể override lại một số tác vụ của lớp cha.
lPhải giữa nguyên dấu vết nhận dạng(signature) của tác
vụ bị override; chỉ được thay đổi phương thức (phần hiện
thực) của nó
lĐa số ngôn ngữ lập trình hướng đối tượng hỗ trợ thừa kế
lMột số ngôn ngữ đưa ra khái niệm phương thức ảo
(virtual)
Ví dụ thừa kế và nạp chồng java
class HTMLDocument extends HTMLObject {
private String title = null;
public String toHTML( ) { // override
StringBuffer html = new StringBuffer;
Trang 6Tính đa hình
Ví dụ: đối tượng http
được xem như thuộc
kiểu của HttpView,
View và Window
Window
# hWnd: HWND + MoveWindow( ) + GetClass( ): String
View + GetClass( ): String + GetDocument( ): Document
HttpView + GetClass( ): String
lChu kỳ sống của đối tượng có thể vượt ra khỏi sự thực
thi của chương trình⇒tính vĩnh cửu(persistence)
uĐối tượng được cất vào bộ nhớ vĩnh cửu khi
chương trình kết thúc
uKhi cần thiết có thể khôi phục lại đối tượng vào bộ
nhớ chính
uChỉ lưu trữ trạng thái của đối tượng
uNgôn ngữ C++ và Java: streaming
CNPM Hướng đối tượng - Giới thiệu
lKhách hàng và nhà phát triển gặp nhau cùng thảo luận
về yêu cầu của hệ thống phần mềm cần xây dựng
lMô hình nghiệp vụ được thiết lập để hỗ trợ cả nhàphát triển lẫn khách hàng trong việc kiểm chứng lại vàthống nhất yêu cầu phần mềm và vai trò các tác nhânbên ngoài
Trang 7Khái niệm về actor
lActor xác định một bộ vai trị mà người hoặc vật sẽ
đĩng vai khi tương tác với hệ thống phần mềm
lActor nằm ngồi phạm vi của hệ thống
uChỉ quan tâm các thơng điệp mà actor gửi hay nhận
uKhơng quan tâm cấu trúc bên trong của actor
lPhân loại actor
uChủ yếu / Thứ yếu
uTích cực / Thụ động
Nhận diện các actor
lTrả lời một số câu hỏi như
uAi là người sử dụng chức năng chính của hệ thống ?
uAi cần sự hỗ trợ từ hệ thống để thực hiện cơng việcthường nhật của họ ?
uAi phải thực hiện cơng việc bảo dưỡng, quản trị vàgiữ cho hệ thống hoạt động ?
uHệ thống sẽ kiểm sốt thiết bị phần cứng nào ?
uHệ thống đang xây dựng cần tương tác với những
hệ thống khác hay khơng ?
uAi hoặc vật thể nào quan tâm đến hay chịu ảnhhưởng bởi kết quả mà hệ thống phần mềm tạo ra ?
Actor trong UML
lActor được biểu diễn bằng ký hiệu hình người
lActor được xem là một lớp (class) cĩ stereotype là
<<actor>>
lGiữa các actor cĩ thể cĩ quan hệ tổng quá hố
uVí dụ: Sinh viên, giảng viên và khách đều là độc
giả của hệ thống quản lý thư viện
lVí dụ: một hệ thống đăng ký mơn học trong trường
đại học
Actor trong UML
Sinh viên
Hệ thống đăng ký môn học
Phòng Đào Tạo
Trang 8Actor trong UML
Người đăng ký mailbox Hệ thống
gửi nhận mail
Quản trị viên
Khái niệm về Use-case
lBiểu diễn một chức năng của hệ thống phần mềm
lUse-case được biểu diễn bằng một chuỗi các thơng điệp
trao đổi bên trong hệ thống và một hoặc một số thơng
điệp trao đổi với actor
Khái niệm về Use-case
lĐiểm mở rộng là một vị trí trong use-case mà tại đĩ
cĩ thể chèn chuỗi sự kiện của một use-case khác
lUse-case cĩ thể chứa điều kiện rẽ nhánh, xử lý lỗi,
ngoại lệ
lMinh dụ của use-case là kịch bản (scenario): miêu tả
cụ thể trình tự các sự kiện
Tìm kiếm Use-case
lTrả lời một số câu hỏi như
uActor yêu cầu chức năng gì của hệ thống ?
uActor cần phải đọc, tạo, xố, sửa đổi hoặc lưu trữ
thơng tin nào đĩ của hệ thống khơng ?
uActor cần thiết phải được cảnh báo về những sự
kiện trong hệ thống, hay actor cần phải báo hiệu
cho hệ thống về vấn đề nào đĩ khơng ?
uHệ thống cĩ thể hỗ trợ một số cơng việc thường
nhật của actor nào đĩ hay khơng ?
Trang 9Một số câu hỏi cần lưu ý
lMột số câu hỏi khác cần chú ý
uHệ thống cần dữ liệu input/ouput nào ? Dữ liệu đĩ
đến từ đâu ?
uNhững khĩ khăn nào liên quan đến hiện thực của
hệ thống hiện tại (chẳng hạn hệ thống quản lý bằng
giấy tờ nên được thay thế bằng hệ thống quản lý trên
máy tính) ?
Use-case trong UML
lUse-case được biểu diễn bằng hình ellipse
lGiữa use-case và actor thường cĩ quan hệ liên kết
lGiữa các use-case cũng cĩ quan hệ liên kết hoặc tổng
Đăng ký học
Đăng ký dạy
Quản lý SV Quản lý MH
Thêm SV mới
<<extend>>
Thiết lập các mối quan hệ
lQuan hệ giữa actor với actor
lQuan hệ giữa actor với use-case
lQuan hệ giữa use-case với use-case
lUML đưa ra quan hệ liên kết (association)
Trang 10Quan hệ liên kết
lQuan hệ liên kết chỉ ra một quan hệ có ý nghĩa giữa
hai bên
uTrong thực tế: hành khách với lái xe, sinh viên với
giáo viên, giảng viên với môn học …
lMột số tính chất liên quan
uTên của liên kết
uMột chiều hay 2 chiều
uBậc: số lượng thực thể tham gia vào liên kết tại mỗi
bên
Quan hệ liên kết trong UML
lUML biểu diễn liên kết như là một đoạn thẳng (haichiều) hoặc mũi tên (một chiều)
Liên kết trong mô hình nghiệp vụ
lLiên kết là quan hệ duy nhất giữa actor và use-case
lCó thể là một chiều hoặc hai chiều
uactor kích hoạt use-case và nhận kết quả về: liên
Quan hệ giao tiếp
lLà quan hệ liên kết có stereotype là
Trang 11Quan hệ gộp
lLà quan hệ liên kết cĩ stereotype là <<include>>
lDùng để liên kết giữa 2 use-case
lTrong use-case nguồn cĩ một điểm mở rộng mà tại đĩ
bắt buộc phải chèn use-case đích vào
Quan hệ gộp
lTại điểm mở rộng, diễn tiến của use-case nguồn tạm thời ngừng lại để chuyển sang diễn tiến của use-case
đích
lKhi kết thúc use-case đích, diễn tiến của use-case
nguồn lại tiếp tục
Đăng nhập
<<include>>
Tìm kiếm
Quan hệ mở rộng
lLà quan hệ liên kết cĩ stereotype là <<extend>>
lDùng để liên kết giữa 2 use-case
lTrong use-case nguồn cĩ một điểm mở rộng mà tại đĩ
cĩ thể (hoặc khơng) phải chèn use-case đích vào
lChèn hay khơng phụ thuộc vào điều kiện rẽ nhánh
hoặc tương tác từ phía actor
Quan hệ mở rộng
lTại điểm mở rộng, nếu được mở rộng thì diễn tiến của
use-case nguồn tạm thời ngừng lại để chuyển sang
diễn tiến của use-case đích
lKhi kết thúc use-case đích, diễn tiến của use-case
nguồn lại tiếp tục
Đăng ký đặt chỗ
<<extend>>
Tìm kiếm
Trang 12Xây dựng mô hình use-case
lCác yêu cầu của phần mềm được miêu tả trong mô
hình use-case
lMô hình use-case bao gồm các lược đồ use-case
(use-case diagram ) và (có thể) một số package
lMỗi lược đồ use-case bao gồm các actor, use-case và
các mối quan hệ
lCó thể sử dụng package để gom một số use-case liên
quan tạo thành một bộ chức năng con của hệ thống
Xây dựng mô hình use-case
lCác quan hệ có thể xảy ra trong lược đồ use-case
uQuan hệ liên kết giữa actor và use-case: một chiều hoặc hai chiều, thường có stereotype là
<<communicate>>
uQuan hệ mở rộng hay gộp giữa 2 use-case: quan hệ liên kết với stereotype <<extend>> hay <<include>>
uQuan hệ tổng quát hoá (generalization) giữa các
actor: nhiều actor có vai trò của một actor trừu tượng
uQuan hệ tổng quát hoá giữa các case: nhiều
use-case là trường hợp cụ thể của một use-use-case trừu tượng
Xây dựng mô hình use-case
People
Finance Prints timetable Makes timetable
Trang 13Xây dựng mô hình use-case
Phân tích yêu cầu – giới thiệu
lMô hình nghiệp vụ biểu diễn các chức năng phần mềm
cần xây dựng dưới dạng các use-case
lMô hình phân tích sẽ tìm kiếm các đối tượng “sống”
trong ngữ cảnh của phần mềm
lCác đối tượng sẽ tương tác với nhau để tạo nên các
chức năng mô tả bởi use-case
Phân tích yêu cầu – giới thiệu
lMô hình phân tích tập trung mô tả vai trò và cấu trúc
của các đối tượng
lChưa quan tâm đến hành vi cụ thể và nhiệm vụ chi
tiết của chúng trong ngữ cảnh của hệ thống
lNguyên tắc: mô hình phân tích phải độc lập với o/s,
ngôn ngữ lập trình, công cụ phát triển
Nhận diện đối tượng/lớp
lDựa vào đặc tả của từng use-case để tìm kiếm các đối
Trang 14Nhận diện đối tượng/lớp
lPhân loại đối tượng/lớp
uĐối tượng thực thể(entity): biểu diễn các thông tin
thiết yếu của hệ thống, có thể được lưu trong cơ sở
dữ liệu
uĐối tượng biên(boundary): thực hiện chức năng
giao tiếp với actor
uĐối tượng điều khiển(control): điều khiển các đối
tượng khác
Nhận diện đối tượng/lớp
lTrong UML, lớp được biểu diễn bằng một hình chữnhật gồm3 phần: tên, các thuộc tính và các tác vụ
lCó thể áp dụng stereotype cho lớp: <<entity>>,
<<boundary>>, <<control>>
lĐối tượng cũng được biểu diễn bằng hình chữ nhật, thông thường gồm2 phần: tên đối tượng + tên lớp(được gạch chân), giá trị các thuộc tính (trạng thái củađối tượng)
Nhận diện đối tượng/lớp
HTMLObject
# alignment: int + GetAlignment( ): int
- title: String alignment = MIDDLE
title = “A document”
lTrong UML, được gán stereotype <<entity>>
lDễ nhận diện các thuộc tính của chúng
Trang 15Đối tượng/lớp thực thể
l Ví dụ:
u Đối với hệ thống đăng ký môn
học hệ tín chỉ qua WEB, nhận
diện các đối tượng thực thể như:
thông tin SV, thông tin GV,
nhóm lớp học, đăng ký nhóm,
sổ tay sinh viên …
u Đối với hệ thống mail, nhận
diện các đối tượng thực thể như:
hộp thư, thông điệp mail…
u Đối tượng đường đồng mức,
đứt gãy và bản đồ trong chương
trình vẽ bề mặt địa hình
+ GetSubject( ): String + toString( ): String
Đối tượng/lớp biên
lThực hiện chức năng giao tiếp với actor
lThường chứa các phần tử hoặc điều khiển giao diệnngười dùng(nút nhấn, hộp danh sách, tuỳ chọn, menu )
lTrong UML, được gán stereotype <<boundary>>
lKhó nhận biết các thuộc tính và tác vụ trong mô hìnhphân tích
Đối tượng/lớp biên
l Ví dụ:
u Đối với hệ thống đăng ký
môn học hệ tín chỉ qua
WEB, nhận diện các đối
tượng biên như:
RegisterForm,
StudentForm…
u Đối với hệ thống mail,
nhận diện các đối tượng
biên như: MailView,
MailCompose
MailView
<<boundary>>
Đối tượng/lớp điều khiển
lCó nhiệm vụ điều khiển các lớp khác hoặc
l(Đơn giản hơn) Những lớp không phải là lớp thực thể
và lớp biên
lTrong UML, được gán stereotype <<control>>
lLớp biên thường có quan hệ liên kết hoặc phụ thuộcvới các lớp khác
Trang 16Đối tượng/lớp điều khiển
# Do( )
PasteCommand
<<control>>
+ Execute( ) + Reexecute( ) + Unexecute( )
# Do( )
BgCommand
<<control>>
+ Execute( ) + Reexecute( ) + Unexecute( )
# Do( )
Nhận diện các thuộc tính
lDựa vào đặc tả của từng use-case, tìm kiếm các danh
từ hoặc nhóm danh từ liên quan đến đối tượng đangxét
lTrả lời câu hỏi: những thành phần nào cấu thành đốitượng đang xét?
lLưu ý: cùng một đối tượng trong các ngữ cảnh khácnhau chúng ta có thể tìm được các thuộc tính khácnhau
Nhận diện các thuộc tính
lNên xác định(tuy nhiên không bắt buộc) trong mô
hình phân tiùch
uKiểu của thuộc tính: một số kiểu cơ bản
uBậc của thuộc tính: số ít hoặc số nhiều
uVisibility của thuộc tính: mức độ cho phép truy xuất
thuộc tiùnh từ bên ngoài
lUML: thuộc tính được miêu tả tường minh hoặc thông
qua quan hệ với các lớp khác
Nhận diện các thuộc tính
lMột số kiểu cơ bản của các ngôn ngữ lập trình:
integer, float, double, long, char
lMột số kiểu cơ bản khác: string, date, time
lUML cho phép định nghĩa tất cả các kiểu dữ liệu trên
Trang 17+ GetCode( ): Long + GetName( ): String
+ GetCode( ): String
Nhận diện các thuộc tính
lHệ thống đăng kýmôn học hệ tínchỉ qua WEB-Nhận diện cácthuộc tính chocác đối tượng:
CourseOffering, Catalog
lBậc của thuộc tính: số ít hay số nhiều
lNếu thuộc tính được đặc tả tường minh: dùng dấu []
để chỉ số nhiều hoặc số lượng chính xác
lTrường hợp thuộc tính được miêu tả thông qua quan
hệ với các lớp khác: UML cho phép thể hiện bậc trênquan hệ(ví dụ: 1, 0, *, 2 9, 0 n)
Trang 18Mức độ truy xuất thuộc tính
lUML định nghĩa3 mức độ truy xuất thuộc tính (visibility)
upublic(+): có thể truy xuất thuộc tính từ tất cả các vị trí
khác nhau
uprotected (#): bản thân lớp đang xét và các lớp con của
nó có thể truy xuất thuộc tính
uprivate(-): chỉ có lớp đang xét có thể truy xuất thuộc
tính
lThông thường nên đặt mức độ truy xuất thuộc tính là
private hoặc protected(cho các lớp cơ sở), không nên là
public Thuộc tính nên được truy xuất thông qua tác vụ
get/set
Nhận diện các tác vụ
lDựa vào đặc tả của từng use-case, tìm kiếm các động
từ hoặc nhóm động từ liên quan đến đối tượng đangxét
lChú ý xem đối tượng được tạo ra và bị huỷ bỏ đi nhưthế nào? Trong thời gian đó nó gửi/nhận thông điệp rasao?
lCác đối tượng biên có các tác vụ nhận lệnh từ actor.
Nhận diện các tác vụ
lXem xét mức độ truy xuất của tác vụ tương tự như đối
với các thuộc tính; các tác vụ thường có visibility là +
hoặc#
lMột số tác vụ không xuất hiện một cách tự nhiên
trong mô hình phân tích⇒mô hình thiết kế sẽ nghiên
cứu kỹ trách nhiệm và hành vi của từng đối tượng
lUML hỗ trợ quan hệ tổng quát hoá(generalization)
lLớp cơ sở trừu tượng(không thể cụ thể hoá tạo ra đốitượng) có tên in nghiêng