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

Chương 8-Công nghệ phần mềm hướng đối tượng

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 (9.19 MB, 32 trang )

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


l
Lớp (class) định nghĩa một tập hợp các tác vụ và thuộc tính
mà đặc tả đầy đủ cấu trúc và hành vi của các đối tượng.
l
Đối tượng (còn gọi là minh dụ (instance) ) được cụ thể hoá
từ lớp
l
Các ngôn ngữ lập trình hướng đối tượng
u
Khai báo lớp: tương tự như khai báo một kiểu do người
dùng định nghĩa
u
Khai báo đối tượng: biến của kiểu lớp
14/9/2009
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)
Circle
# Radius: float
- x: float
- y: float
+ Draw( w: Window)
+ GetClass( ): String
c1 : Circle
Radius = 1.3
x = 3.2
y = 1.7

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

tính có thể nắm giữ
: 0..1, 1, *, 5..8
Tác vụ
l
Tá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
.
l
Dấ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ề
.
l
Phương thức (method) là phần hiện thực của tác vụ
14/9/2009
3
Tác vụ
l
Tác vụ 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
Tác vụ có thể được override trong các lớp con thừa kế
u
Trừu tượng (abstract): không có hiện thực
l
Một số ngôn ngữ lập trình cho phép định nghĩa
u
Tác vụ khởi tạo (constructor): được gọi khi đối tượng
mới tạo ra

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
Dấu hiệu nhận dạng của tác vụ muốn gọi
u
Danh 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)
u
Dấ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
u
Danh sách thông số gọi: như phép gọi hàm bình
thường
, chú ý kiểu khi truyền và gán kết quả trả về
u
Ví dụ: aCircle.SetRadius( 3 ); aCircle.Draw( pWnd
);
14/9/2009
4
Bao gộp
l
Bao gộp (aggregation) là quan hệ giữa hai đối tượng
l
Một đối tượng bao lấy đối tượng kia
l
Quan hệ này thường xảy ra trong thế giới thực, ví dụ

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:

int xPos, yPos;
double xScale, yScale;
COLORREF color;
};
class Group : public Geometry {
public:
Group( );
~Group( );
virtual void Draw( Window *pWnd ); // override
private:
Geometry **ppGeo; // pointer container
int geoCount;
};
Thừa kế và nạp chồng
l
Thừa kế (inheritance) là quan hệ giữa hai lớp
l
Lớp con thừa hưởng tất cả thuộc tính và tác vụ của lớp
cha
l
Lớ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
l
Quan hệ này cũng thường được ghi nhận trong thế giới
thực
, ví dụ
u
Hổ, báo, sói đều là thú
u
Button, Checkbox và Dialog đều là Window

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

class HTMLDocument extends HTMLObject {
private String title = null;
// other attributes...
HTMLDocument( ){
}
public void setTitle( String ttl ) {
if ( ttl != null )
title = ttl;
}
public String getTitle( ) {
return title;
}
public String toHTML( ) { // override
StringBuffer html = new StringBuffer;
// additional implementation...
return html.toString( );
}
}
Tính đa hình
l
Một đối tượng mang nhiều bộ mặt khác nhau: của chính
lớp đặc tả nó và của các lớp cha ⇒ tính đa hình
(polymorphism)
l
Tương hợp kiểu: kiểu của lớp con luôn tương hợp với
kiểu lớp cha
l
Một số ngôn ngữ lập trình định nghĩa khái niệm liên kết
muộn
u

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

Chu 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
u
Khi cần thiết có thể khôi phục lại đối tượng vào bộ
nhớ chính
u
Chỉ lưu trữ trạng thái của đối tượng
u
Ngôn ngữ C++ và Java: streaming
CNPM Hướng đối tượng - Giới
thiệu
l
Khá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
l
Mô 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ân
bên ngoài
14/9/2009
7
Khái niệm về actor
l
Actor 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
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 ?

Actor trong UML
l
Actor được biểu diễn bằng ký hiệu hình người
l
Actor được xem là một lớp (class) có stereotype là
<<actor>>
l
Giữa các actor có thể có quan hệ tổng q hố
u
Ví 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
l
Ví 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
Giảng viên
Phòng Tài Vụ
14/9/2009
8
Actor 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

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ư

u
Actor u cầu chức năng gì của hệ thống ?
u
Actor 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 ?
u
Actor 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 ?
u
Hệ 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 ?
14/9/2009
9
Một số câu hỏi cần lưu ý
l
Một số câu hỏi khác cần chú ý
u
Hệ thống cần dữ liệu input/ouput nào ? Dữ liệu đó
đến từ đâu ?
u
Nhữ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
l
Use-case được biểu diễn bằng hình ellipse
l
Giữa use-case và actor thường có quan hệ liên kết

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

u
Trong 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 …
l
Một số tính chất liên quan
u
Tên của liên kết
u
Một chiều hay 2 chiều
u
Bậ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
l
UML biểu diễn liên kết như là một đoạn thẳng (hai
chiều) hoặc mũi tên (một chiều)
l
Có thể áp dụng stereotype:
u
<<include>>
u
<<extend>>
u
<<communicate>>
u
...
Liên kết trong mơ hình nghiệp vụ
l
Liên kết là quan hệ duy nhất giữa actor và use-case
l

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 đó

bắt buộc phải chèn use-case đích vào
Quan hệ gộp
l
Tạ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
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 nhập
<<include>>
Tìm kiếm
Quan hệ mở rộng
l
Là quan hệ liên kết có stereotype là <<extend>>
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 đó
có thể (hoặc khơng) phải chèn use-case đích vào
l
Chè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
l
Tạ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

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ệ

liên kết với stereotype <<extend>> hay <<include>>
u
Quan 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
u
Quan hệ tổng quát hoá giữa các use-case: nhiều use-
case là trường hợp cụ thể của một use-case trừu tượng
Xây dựng mô hình use-case
People
Finance
Prints timetable Makes timetable
fee summary
Adds students
Removes students
Administration
print request
<<communicate>>
timetable command
<<communicate>>
Student
Lecturer
Reads courses
Manages students
<<extend>>
<<extend>>
Manages lecturers
Manages course
Registers courses
Login
<<include>>

<<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>>

×