Tải bản đầy đủ (.pptx) (54 trang)

Bài giảng lập trình hướng đối tượng dùng c + +chương 7 kỹ thuật thiết kế theo 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 (6.97 MB, 54 trang )

Chương 7. Thiết kế theo
hướng đối tượng
(Object Oriented Design – OOD)
TRẦN MINH THÁI
Email:
Website: www.minhthai.edu.vn
Cập nhật: 10 tháng 05 năm 2015
#2
Nộ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ụ
#3
Các giai đoạn phát triển hệ thống [1/7]
1. Phân tích yêu cầu (Requirement analysis)
2. Phân tích (Analysis)
3. Thiết kế (Design)
4. Lập trình (Programming)
5. Kiểm tra (Testing)
#4
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á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
#5


Cá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
#6
Các giai đoạn phát triển hệ thống [4/7]
Thiết kế
Các kết quả của quá trình phân tích được mở rộng
thành một giải pháp kỹ thuật
Mộ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, …
#7
Các giai đoạn phát triển hệ thống [5/7]
Lập trình
Giai đoạn này sẽ đặc tả chi tiết kết quả của giai
đoạn thiết kế
Các lớp của bước thiết kế sẽ được chuyển thành mã
nguồn theo một ngôn ngữ lập trình theo hướng đối
tượng nào đó
#8
Cá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
#9
Cá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
#10
Cá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
#11
Cá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
#12

Cá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ở
#13
Các bước để thiết kế chương trình [4/6]
#14
Cá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
#15
Cá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
#16
Ví dụ 1 [1/7]
Tính tiền lương của các nhân viên trong cơ quan theo
các dạng:
Biến chế: người lao động lãnh lương từ ngân sách
nhà nước được gọi là cán bộ, công chức
Hợp đồng: người lao động lãnh lương từ ngân sách

của cơ quan được gọi là người làm
#17
Ví 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
#18
Ví 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ờ
#19
Ví dụ 1 [4/7]
#20
Ví dụ 1 [5/7]
#define MAX_TEN
50
#define MAX_MASO 5
#define MUC_CO_BAN 120000
class CNguoi
{
protected:
char
HoTen[MAX_TEN+1];

char
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()
{
cout<<"Ma so:";
cin>>MaSo;
cin.ignore();
cout<<"Ho ten:";
cin.getline(HoTen,MAX_TEN);
}

#21
Ví dụ 1 [6/7]
class CBienChe: public CNguoi
{
protected:
double HeSoLuong;
double HeSoPhuCap;
public:
CBienChe();
virtual void
TinhLuong();
virtual void Nhap();
};
CBienChe::CBienChe()
{
HeSoLuong=HeSoPhuCap=0;
}
void CBienChe::Nhap()
{
CNguoi::Nhap();
cout<<"He so luong:";
cin>>HeSoLuong;
cout<<"He so phu cap chuc
vu:";
cin>>HeSoPhuCap;
}
void CBienChe::TinhLuong()
{
Luong=MUC_CO_BAN*(1.0+HeSoLuong+HeSoPhuCap);
}

#22
Ví dụ 1 [7/7]
class CHopDong : public CNguoi
{
protected:
double TienCong;
double NgayCong;
double HeSoVuotGio;
public:
CHopDong();
virtual void
TinhLuong();
virtual void Nhap();
};
CHopDong::CHopDong()
{
TienCong=NgayCong=HeSoVuotGio=0;
}
void CHopDong::Nhap()
{
CNguoi::Nhap();
cout<<"Tien cong:";
cin>>TienCong;
cout<<"Ngay cong:";
cin>>NgayCong;
cout<<"He so vuot gio:";
cin>>HeSoVuotGio;
}
void CHopDong::TinhLuong()
{

Luong=TienCong*NgayCong*(1+HeSoVuotGio);
}
#23
Ví 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í
#24
Ví dụ 2 [2/4]
#define MAX_TEN 50
class CNguoi
{
protected:
char HoTen[MAX_TEN+1];
public:
CNguoi(char *ht);
virtual bool DuocKhenThuong()
const=0;
virtual void Xuat() const=0;
};
CNguoi::CNguoi(char *ht)
{
strcpy(HoTen,ht);
}
class CSinhVien : public CNguoi
{
protected:
double DiemTB;
public:
CSinhVien(char *ht,double dtb);

virtual bool DuocKhenThuong() const;
virtual void Xuat() const;
};
#25
Ví dụ 2 [3/4]
CSinhVien::CSinhVien(char *ht,double dtb):CNguoi(ht)
{
DiemTB=dtb;
}
bool CSinhVien::DuocKhenThuong() const
{
return 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;
};

×