Các giai đoạn phát triển hệ thống [2/7] Phân tích yêu cầu Bằng việc tìm hiểu các use case để nắm bắt các yêu cầu của khách hàng, của vấn đề cần giải quyết Dựa vào use case xác định cá
Trang 1Chương 7 Thiết kế theo
hướng đối tượng
(Object Oriented Design – OOD)
TRẦN MINH THÁI
Email: minhthai@itc.edu.vn
Website: www.minhthai.edu.vn
Cập nhật: 10 tháng 05 năm 2015
Trang 2Nội dung
1 Các giai đoạn phát triển hệ thống
2 Các bước thiết kế chương trình theo hướng OOP
3 Kỹ thuật thiết kế lớp
4 Ví dụ
Trang 3Các giai đoạn phát triển hệ thống [1/7]
1 Phân tích yêu cầu (Requirement analysis)
Trang 4Các giai đoạn phát triển hệ thống [2/7]
Phân tích yêu cầu
Bằng việc tìm hiểu các use case để nắm bắt các yêu cầu của
khách hàng, của vấn đề cần giải quyết
Dựa vào use case xác định các nhân tố bên ngoài có tham gia vào hệ thống cũng được mô hình hóa bằng các tác nhân (actor) Mỗi use case được mô tả bằng văn bản, đặc tả yêu cầu của
khách hàng
Trang 5Các giai đoạn phát triển hệ thống [3/7]
Phân tích
Từ các đặc tả yêu cầu trên, hệ thống sẽ bước đầu được
mô hình hóa bởi các khái niệm lớp, đối tượng và các
cơ chế để diễn tả hoạt động của hệ thống
Trong giai đoạn phân tích, ta chỉ mô tả các lớp trong lĩnh vực của vấn đề cần giải quyết chứ không đi sâu vào các chi tiết kỹ thuật
Trang 6Một số các lớp được thêm vào để cung cấp cơ sở
hạ tầng kỹ thuật như lớp giao diện, lớp cơ sở dữ liệu, lớp chức năng, …
Trang 8Các giai đoạn phát triển hệ thống [6/7]
Kiểm tra: có bốn hình thức kiểm tra hệ thống
Kiểm tra từng đơn thể (unit testing): dùng kiểm tra các lớp hoặc các nhóm đơn
Kiểm tra tính tích hợp (integration testing): kết hợp với các thành phần và các lớp để kiểm tra xem chúng hoạt động với nhau có đúng không
Trang 9Các giai đoạn phát triển hệ thống [7/7]
Kiểm tra hệ thống (system testing): kiểm tra xem
hệ thống có đáp ứng được chức năng mà người dùng yêu cầu không
Kiểm tra tính chấp nhận được (acceptance testing): được thực hiện bởi khách hàng, việc kiểm tra cũng thực hiện giống như kiểm tra hệ thống
Trang 10Các bước để thiết kế chương trình [1/6]
Để thiết kế một chương trình theo hướng đối tượng, ta phải trải qua bốn bước sau:
Xác định các dạng đối tượng (lớp) của bài toán (định danh các đối tượng)
Tìm kiếm các đặc tính chung (dữ liệu chung) trong các dạng đối tượng này, những gì chúng cùng nhau chia sẻ
Xác định được lớp cơ sở dựa trên cơ sở các đặc tính chung của các dạng đối tượng
Trang 11Các bước để thiết kế chương trình [2/6]
Từ lớp cơ sở, sử dụng quan hệ tổng quát hóa để đặc tả trong việc đưa ra các lớp dẫn xuất chứa các thành viên, những đặc tính không chung còn lại của dạng đối tượng
Từ đó xây dựng được một cây kế thừa và các mối quan hệ giữa các lớp
Trang 12Các bước để thiết kế chương trình [3/6]
Đối với hệ thống phức tạp hơn, cần phải phân tích để
giải quyết được vấn đề đặt ra theo nguyên tắc:
Phân tích một cách cẩn thận về các đối tượng của
bài toán theo trật tự từ dưới lên (bottom up)
Tìm ra những gì tồn tại chung giữa các đối tượng,
nhóm các đặc tính này lại để được các lớp cơ sở
Trang 13Các bước để thiết kế chương trình [4/6]
Trang 14Các bước để thiết kế chương trình [5/6]
Tiếp tục theo hướng từ dưới lên, ta thiết kế được các đối tượng phù hợp
Trang 15Các bước để thiết kế chương trình [6/6]
Bằng cách này, tiếp tục tìm các đặc tính chung cho đến tột cùng của các đối tượng
Sau đó cài đặt theo hướng đối tượng từ trên xuống bằng cách cài đặt lớp cơ sở chung nhất
Tiếp tục cài đặt các lớp dẫn xuất trên cơ sở các đặc tính chung của từng nhóm đối tượng
Cho đến khi tất cả các dạng đối tượng của hệ thống được cài đặt xong để được cây kế thừa
Trang 17Ví dụ 1 [2/7]
Hệ thống có hai đối tượng: biên chế và hợp đồng
Hai loại đối tượng này có đặc tính chung đó là viên chức làm việc cho cơ quan
Tạo lớp cơ sở để quản lý một viên chức (lớp CNguoi) bao gồm mã số, họ tên và lương
Trang 18Ví dụ 1 [3/7]
Xây dựng các lớp còn lại kế thừa từ lớp cơ sở trên
Lớp dành cho cán bộ, công chức (lớp CBienChe) gồm các thuộc tính: hệ số lương, tiền phụ cấp chức vụ
Lớp dành cho người làm hợp đồng (lớp CHopDong) gồm các thuộc tính: tiền công lao động, số ngày làm việc trong tháng, hệ số vượt giờ
Trang 19Ví dụ 1 [4/7]
Trang 20char MaSo[MAX_MASO+1];
double Luong;
public:
CNguoi();
virtual void TinhLuong()=0;
void Xuat() const;
virtual void Nhap();
};
CNguoi::CNguoi() {
strcpy(HoTen,"");
strcpy(MaSo,"");
Luong=0;
} void CNguoi::Xuat() const {
cout<<"Ma so:"<<MaSo;
cout<<",Ho ten:"<<HoTen;
cout<<",Luong:"<<Luong<<endl; }
void CNguoi::Nhap() {
Trang 21virtual void Nhap();
};
CBienChe::CBienChe() {
HeSoLuong=HeSoPhuCap=0; }
void CBienChe::Nhap() {
Luong=MUC_CO_BAN*(1.0+HeSoLuong+HeSoPhuCap);
}
Trang 22virtual void Nhap();
};
CHopDong::CHopDong() {
TienCong=NgayCong=HeSoVuotGio=0; }
void CHopDong::Nhap() {
Luong=TienCong*NgayCong*(1+HeSoVuotGio);
}
Trang 23Ví dụ 2 [1/4]
Giả sử cuối năm học cần trao giải thưởng cho các sinh viên xuất sắc và các giảng viên có nhiều công trình khoa học được công bố trên tạp chí
Trang 25return DiemTB>9.0;
} void CSinhVien::Xuat() const {
cout<<"Ho va ten cua sinh vien:"<<HoTen<<endl;
} class CGiangVien : public CNguoi {
protected:
int SoBaiBao;
public:
CGiangVien(char *ht,int sbb);
virtual bool DuocKhenThuong() const;
virtual void Xuat() const;
};
Trang 26return SoBaiBao>5;
} void CGiangVien::Xuat() const {
cout<<"Ho va ten cua giang vien:"<<HoTen<<endl; }
Trang 27Kỹ thuật thiết kế 1 lớp đối tượng
Thiết kế thuộc tính
Thiết kế phương thức
Trang 28Stt Thuộc tính Kiểu/ lớp Ràng buộc Diễn giải
Stt Mô tả ràng buộc Thuộc tính
liên quan Ghi chú
Nếu có ràng buộc liên thuộc tính
Trang 29Ràng buộc [1/6]
Ràng buộc trên lớp là các quy định, quy tắc áp đặt trên các giá trị thuộc tính của đối tượng sao cho đối tượng này thể hiện đúng với thực tế
Ràng buộc tĩnh: ràng buộc trên giá trị thuộc tính
Ràng buộc trên thuộc tính (Ràng buộc MGT)
Ràng buộc liên thuộc tính
Ràng buộc động: ràng buộc trên biến đổi giá trị thuộc
Trang 3131
VD: Xét lớp điểm ký tự (CDiemKT) trên cửa sổ Console
Stt Thuộctính Kiểu/ lớp Ràng buộc Diễn giải
1 x Số nguyên 0 ≤ x < Kích thước ngang Cột
2 y Số nguyên 0 ≤ y < Kích thước dọc Dòng
3 ch Ký tự Ký tự hiển thị
Ràng buộc [3/6]
Trang 3232
Stt Thuộc tính Kiểu/ lớp Ràng buộc Diễn giải
2 cngang Số nguyên 1<ngang< K/thước ngang Chiều ngang
3 cdung Số nguyên 1<dung< K/thước dọc Chiều đứng
Tọa độ góc Chiều ngang
Trang 33Goc, m
2 Tổng của tung độ góc và
n nhỏ hơn kích thước dọc
Goc, n
Ràng buộc [5/6]
Trang 34đa là 28
Ng, Th, Nm
Ràng buộc [6/6]
Trang 35Bài tập: thiết kế thuộc tính các lớp
35
Lớp thời gian CTime
Lớp ngày tháng năm CDate
Trang 36Thiết kế các hành động của lớp [1/2]
thuộc tính của đối tượng
thông tin của đối tượng
của đối tượng
Trang 375 Cung cấp thông tin
1 Kiểm tra ràng buộc
Trang 38Mẫu cài đặt ràng buộc [1/
Giá trị trả về
true: Thoả ràng buộc
false: Không thoả ràng buộc
Tham số
Ràng buộc miền giá trị: Chỉ có 1 tham số ứng với
tham số cần kiểm tra
Ràng buộc liên thuộc tính: Có tham số là các thuộc
tính liên quan
38
Mẫu: bool KiemTra ( tham số )
Trang 39Tên phương thức
Bắt đầu bằng chữ KiemTra
Ràng buộc miền giá trị: Ghép thêm tên thuộc tính
Ràng buộc liên thuộc tính: Ghép thêm số thứ tự
ràng buộc
39
Mẫu cài đặt ràng buộc [2/
Trang 40public bool KiemTraDung(int d);
public bool KiemTra1(int ng, CDiem X);
public bool KiemTra2(int d, CDiem Y);
};
40
VD cài đặt ràng buộc cho lớp CHCN
Trang 41Cài đặt phương thức khởi tạo và cập nhật
Các phương thức thuộc nhóm khởi tạo và cập nhật
có liên quan đến ràng buộc phải được bổ sung thêm kiểm tra ràng buộc
Việc kiểm tra tham số thoả hoặc không thoả ràng buộc bằng cách gọi phương thức kiểm tra ràng buộc tương ứng
41
Trang 42if (Tham số thoả ràng buộc)
{
gán giá trị tương ứng cho thuộc tính của lớp kq=true;
}return kq;
}
42
Trang 44bool CHCN::CapNhatX(int xx) {
Trang 4545
1 Nhóm kiểm tra ràng buộc
bool KiemTraX(int xx);
bool KiemTraY(int yy);
2 Nhóm khởi tạo
Trang 4646
3 Nhóm cập nhật
//Trực tiếpbool CapNhatX(int xx);
bool CapNhatY(int yy);
void CapNhatCh(char c);
//Gián tiếp bool DichPhai(uint k);
Trang 48bool KhoiTao(CDiemKT M,int cng, int cd);
bool KhoiTao(int x, int y, int cng, int cd);
void KhoiTao(CDiemKT X, CDiemKT Y);
void PhatSinh();
VD2 Thiết kế các hành động của lớp CHCN
Trang 53Bài tập: thiết kế phương thức các lớp
53
Lớp thời gian CTime
Lớp ngày tháng năm CDate
Trang 54Q&A