14/9/2009
1
Chươ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
l
Mô hình hướng đối tượng giới thiệu một quan điểm lập
trì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)
l
Bắt đầu nhen nhóm vào những năm cuối 60 và đến đầu
90 trở nên rất phổ biến trong công nghiệp phần mềm
l
Nhữ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
l
Hình thành các phương pháp phân tích/thiết kế hướng
đối tượng
l
Mô 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
u
dữ liệu: mang một giá trị nhất định
u
tác vụ: thực hiện một công việc nào đó
Đối tượng và lớp
Thuộc tính
l
Thuộ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.
l
Dữ liệu mà thuộc tính thể hiện nằm trong một khoảng
giá trị nào đó được xác định bởi kiểu.
l
Giá trị của tất cả thuộc tính xác định trạng thái của đối
tượng
u
Ví dụ: một đối tượng của Circle có (Radius, x, y) =
(1.2, 3.4, 5.3)
Thuộc tính
l
Thuộc tính có thể bị che dấu hoặc truy xuất được từ bên
ngoài
u
Một số ngôn ngữ lập trình (và UML): public, protected,
private
l
Có 2 loại tầm vực
u
Tầm vực lớp: thuộc tính chung cho tất cả các đối tượng
của một lớp
u
Tầm vực đối tượng: thuộc tính của từng đối tượng (có thể
mang giá trị khác nhau)
l
Bậc của thuộc tính chỉ ra số lượng dữ liệu mà bản thân thuộc
u
Tá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;
HTMLObject( ){ // constructor
objects = new Vector ( 5 );
}
public void setAlignment( int algnmt ) {
alignment = algnmt;
}
public int getAlignment( ) {
return alignment;
}
public abstract String toHTML( ); // abstract operation
}
Thông điệp
l
Thông điệp là một phép gọi tác vụ đến một đối tượng cụ
thể
.
l
Thông điệp bao gồm 3 phần
u
Đối tượng đích
u
Xe hơi bao gồm: bánh xe, động cơ, khung xe...
u
Trang HTML bao gồm: text, hình ảnh, tiêu đề, các
liên kết...
u
Checkbox, ComboBox, Slider… nằm trong một hộp
thoại
Bao gộp
l
Hai dạng liên kết giữa đối tượng nguồn và đối tượng
đích
u
Chặt chẽ: đối tượng đích được tạo ra và huỷ đi đồng
thời với đối tượng nguồn
u
Lỏng lẻo: chu kỳ sống của hai đối tượng độc lập nhau
l
Quan hệ bao gộp cũng được áp dụng cho lớp
l
Một số ngôn ngữ lập trình hỗ trợ cả 2 dạng liên kết: biến
& con trỏ
Ví dụ bao gộp C++
class Geometry { // abstract base class
public:
Geometry( );
~Geometry( );
virtual void Draw( Window *pWnd ) = 0; // abstract
operation
protected:
u
Hình tròn, hình chữ nhật, hình ellipse đều là hình vẽ
2D.
14/9/2009
5
Thừa kế và nạp chồng
l
Hai 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ế:
u
Mỗi lớp con có một hoặc nhiều lớp cha
u
Nả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
l
Lớp con có thể override lại một số tác vụ của lớp cha.
l
Phả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ế
l
Mộ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
Hàm được gọi để đáp ứng các thông điệp được xác
định trong thời gian thực thi chứ không phải biên dịch
u
Mỗi đối tượng có một bảng phương thức ảo
14/9/2009
6
Tí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
http : HttpView
Tính vĩnh cửu
l
Chu kỳ sống của đối tượng: khoảng thời gian từ lúc
đối tượng được tạo ra đến lúc nó bị huỷ đi.
l
Thông thường chu kỳ sống của đối tượng gói gọn
trong thời gian chương trình thực thi
Tính vĩnh cửu
l
Actor nằm ngồi phạm vi của hệ thống
u
Chỉ quan tâm các thơng điệp mà actor gửi hay nhận
u
Khơng quan tâm cấu trúc bên trong của actor
l
Phân loại actor
u
Chủ yếu / Thứ yếu
u
Tích cực / Thụ động
Nhận diện các actor
l
Trả lời một số câu hỏi như
u
Ai là người sử dụng chức năng chính của hệ thống ?
u
Ai cần sự hỗ trợ từ hệ thống để thực hiện cơng việc
thường nhật của họ ?
u
Ai 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 ?
u
Hệ thống sẽ kiểm sốt thiết bị phần cứng nào ?
u
Hệ 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 ?
u
Ai hoặc vật thể nào quan tâm đến hay chịu ảnh
hưởng bởi kết quả mà hệ thống phần mềm tạo ra ?
l
Biểu diễn một chức năng của hệ thống phần mềm
l
Use-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
l
Một số quy ước
u
Use-case ln ln được bắt đầu bằng thơng điệp đến
từ actor
u
Use-case phải hồn tất: chuỗi thơng điệp phải kết thúc
bằng kết quả cụ thể.
u
Lỗi thường gặp: chia nhỏ use-case trở thành những
chức năng vụn vặt
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
l
Use-case có thể chứa điều kiện rẽ nhánh, xử lý lỗi,
ngoại lệ...
l
Minh 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
l
Trả lời một số câu hỏi như
l
Giữa các use-case cũng có quan hệ liên kết hoặc tổng
qt hố
l
Ví dụ: một hệ thống đăng ký mơn học theo tín chỉ
trong trường đại học
Use-case trong UML
Sinh viên
Giảng viên
Đă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ệ
l
Quan hệ giữa actor với actor
l
Quan hệ giữa actor với use-case
l
Quan hệ giữa use-case với use-case
l
UML đưa ra quan hệ liên kết (association)
14/9/2009
10
Quan hệ liên kết
l
Quan hệ liên kết chỉ ra một quan hệ có ý nghĩa giữa
hai bên
Có thể là một chiều hoặc hai chiều
u
actor kích hoạt use-case và nhận kết quả về: liên
kết 2 chiều
u
actor kích hoạt use-case, khơng quan tâm kết quả
về: liên kết 1 chiều
Người bán hàng
Đặt hàng
1
*
Quan hệ giao tiếp
l
Là quan hệ liên kết có stereotype là
<<communicate>>
l
Dùng để liên kết giữa actor với use-case mà nó kích
hoạt
Giảng viên
Đăng ký dạy
<<communicate>>
14/9/2009
11
Quan hệ gộp
l
Là quan hệ liên kết có stereotype là <<include>>
l
Dùng để liên kết giữa 2 use-case
l
Trong use-case nguồn có một điểm mở rộng mà tại đó
l
Khi 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
14/9/2009
12
Xây dựng mô hình use-case
l
Các yêu cầu của phần mềm được miêu tả trong mô
hình use-case
l
Mô hình use-case bao gồm các lược đồ use-case (use-
case diagram) và (có thể) một số package
l
Mỗi lược đồ use-case bao gồm các actor, use-case và
các mối quan hệ
l
Có 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
l
Các quan hệ có thể xảy ra trong lược đồ use-case
u
Quan 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>>
u
Quan hệ mở rộng hay gộp giữa 2 use-case: quan hệ
<<include>>
<<include>>
<<include>>
<<include>>
Undertakes
courses
<<include>>
Xây dựng mô hình use-case
Administrator
Views mail
<<extend>>
Forwards
<<extend>>
Replies
<<extend>>
Adds mailbox
Removes mailbox
<<communicate>>
Subcriber
<<communicate>>
<<communicate>>
Login
<<include>>
<<include>>
<<include>>