Các giai đoạn phát triển hệ thống
Các bước thiết kế chương trình theo hướng OOP
Kỹ thuật thiết kế lớp
Ví dụ
Các giai đoạn phát triển hệ thống
Phân tích yêu cầu (Requirement analysis)
Phân tích (Analysis)
Thiết kế (Design)
Lập trình (Programming)
Kiểm tra (Testing)
54 trang |
Chia sẻ: candy98 | Lượt xem: 518 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng - Chương 7: Thiết kế theo hướng đối tượng - Trần Minh Thái, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 7. Thiết kế theo hướng đối tượng(Object Oriented Design – OOD)TRẦN MINH THÁIEmail: minhthai@itc.edu.vnWebsite: www.minhthai.edu.vn Cập nhật: 10 tháng 05 năm 2015Nội dungCác giai đoạn phát triển hệ thốngCác bước thiết kế chương trình theo hướng OOPKỹ thuật thiết kế lớpVí dụCác giai đoạn phát triển hệ thống [1/7]Phân tích yêu cầu (Requirement analysis)Phân tích (Analysis)Thiết kế (Design)Lập trình (Programming)Kiểm tra (Testing)Các giai đoạn phát triển hệ thống [2/7]Phân tích yêu cầuBằ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ếtDự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àngCác giai đoạn phát triển hệ thống [3/7]Phân tíchTừ 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ốngTrong 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ậtCá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ậtMộ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, Các giai đoạn phát triển hệ thống [5/7]Lập trìnhGiai đ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 đó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ốngKiểm tra từng đơn thể (unit testing): dùng kiểm tra các lớp hoặc các nhóm đơnKiể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ôngCá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ôngKiể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ốngCá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ượngCá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ượngTừ đó xây dựng được một cây kế thừa và các mối quan hệ giữa các lớpCá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ở Các bước để thiết kế chương trình [4/6] 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ợpCá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ượngSau đó 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ấtTiế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ượngCho đế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 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ứcHợ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àmVí dụ 1 [2/7]Hệ thống có hai đối tượng: biên chế và hợp đồngHai loại đối tượng này có đặc tính chung đó là viên chức làm việc cho cơ quanTạ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ươngVí 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ênLớ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ờ Ví dụ 1 [4/7]Ví dụ 1 [5/7]#define MAX_TEN 50#define MAX_MASO 5#define MUC_CO_BAN 120000class 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>MaSo; cin.ignore(); cout>HeSoLuong; cout>HeSoPhuCap;}void CBienChe::TinhLuong(){ Luong=MUC_CO_BAN*(1.0+HeSoLuong+HeSoPhuCap);}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>TienCong; cout>NgayCong; cout>HeSoVuotGio;}void CHopDong::TinhLuong(){ Luong=TienCong*NgayCong*(1+HeSoVuotGio);}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í Ví dụ 2 [2/4]#define MAX_TEN 50class 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;};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{ cout5;}void CGiangVien::Xuat() const{ cout<<"Ho va ten cua giang vien:"<<HoTen<<endl;}Kỹ thuật thiết kế 1 lớp đối tượngThiết kế thuộc tínhThiết kế phương thứcThiết kế thuộc tính28Đối với mỗi đối tượng, xác định các thông tin cần lưu trữ. Sau đó lập bảng mô tả thuộc tính như sau:SttThuộc tínhKiểu/ lớpRàng buộc Diễn giảiSttMô tả ràng buộcThuộc tính liên quanGhi chúNếu có ràng buộc liên thuộc tínhRà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ínhRàng buộc trên thuộc tính (Ràng buộc MGT)Ràng buộc liên thuộc tínhRàng buộc động: ràng buộc trên biến đổi giá trị thuộc tính29Ràng buộc [2/6]Ví dụ: “Lương của nhân viên ít nhất là 1.500.000 đồng” Ràng buộc tĩnh.“Lương của nhân viên chỉ có thể tăng” Ràng buộc động.3031VD: Xét lớp điểm ký tự (CDiemKT) trên cửa sổ ConsoleSttThuộctínhKiểu/ lớpRàng buộc Diễn giải1xSố nguyên0 ≤ x < Kích thước ngangCột2ySố nguyên0 ≤ y < Kích thước dọcDòng3chKý tựKý tự hiển thịRàng buộc [3/6]32SttThuộc tínhKiểu/ lớpRàng buộc Diễn giải1gocCDiemKTToạ độ góc2cngangSố nguyên1<ngang< K/thước ngangChiều ngang3cdungSố nguyên1<dung< K/thước dọcChiều đứngTọa độ gócChiều ngangChiều đứngXét lớp hình chữ nhật (CHCN) trên cửa sổ ConsoleRàng buộc [4/6]33STTMô tả ràng buộcThuộc tính liên quanGhi chú1Tổng của hoành độ góc và m nhỏ hơn kích thước ngangGoc, m2Tổng của tung độ góc và n nhỏ hơn kích thước dọcGoc, nRàng buộc [5/6]34Mô tả ràng buộc liên thuộc tính cho lớp CDateSTTMô tả ràng buộcThuộc tính liên quanGhi chú1Nếu Th là 4, 6, 9, 11 thì Ng tối đa là 30Ng, Th2Nếu Th là 2 và Nm nhuận thì Ng tối đa là 29Nếu Th là 2 và Nm không nhuận thì Ng tối đa là 28Ng, Th, NmRàng buộc [6/6]Bài tập: thiết kế thuộc tính các lớp35Lớp thời gian CTimeLớp ngày tháng năm CDateLớp phân số CPhanSoLớp CDaThuc (Đa thức 1 ẩn) Pn(x) = a0 + a1x + a2x2+ a3x3 + ... + anxnLớp đường thẳng trong mặt phẳng CDuongThangThiết kế các hành động của lớp [1/2]Nhóm kiểm tra ràng buộc: Kiểm tra tính hợp lệ giá trị thuộc tính của đối tượngNhóm khởi tạo: Cung cấp giá trị ban đầu cho đối tượngNhóm cập nhật: Thay đổi giá trị thuộc tính của đối tượngNhóm xử lý tính toán: Xử lý tính toán các yêu cầu từ thông tin của đối tượngNhóm cung cấp thông tin: Cung cấp thuộc tính nội bộ của đối tượngThiết kế các hành động của lớp [2/2]2. Khởi tạo3. Cập nhật4. Xử lý, tính toán5. Cung cấp thông tin1. Kiểm tra ràng buộcMẫ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.38Mẫu: bool KiemTra... ( tham số )Tên phương thức Bắt đầu bằng chữ KiemTraRàng buộc miền giá trị: Ghép thêm tên thuộc tínhRàng buộc liên thuộc tính: Ghép thêm số thứ tự ràng buộc 39Mẫu cài đặt ràng buộc [2/class CHCN{ private: CDIEM Goc; int ngang, dung; public: bool KiemTraNgang(int ng); public bool KiemTraDung(int d); public bool KiemTra1(int ng, CDiem X); public bool KiemTra2(int d, CDiem Y);};40VD cài đặt ràng buộc cho lớp CHCNCài đặt phương thức khởi tạo và cập nhậtCá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ộcViệ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 ứng41bool Tên hàm ( Tham số ){ //Trả về true: thực hiện được //Trả về false: không thực hiện được bool kq = false; if (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; }42hoặcbool Tên hàm ( Tham số ){ //Trả về true: thực hiện được, false: không thực hiện được if (Tham số không thoả ràng buộc) return false; gán giá trị tương ứng cho thuộc tính của lớp return true; }43bool CHCN::CapNhatX(int xx){ if(!KiemTraX(xx)) return false; x=xx; return true;}bool CHCN::CapNhatM(int mm){ if(!KiemTra1(mm, Goc)) return false; m=mm; return true;}44451. Nhóm kiểm tra ràng buộc bool KiemTraX(int xx); bool KiemTraY(int yy);2. Nhóm khởi tạo void Nhap(); bool KhoiTao (int xx, int yy, char cc); void PhatSinh();VD1 Thiết kế các hành động của lớp CDiemKT463. Nhóm cập nhật //Trực tiếp bool CapNhatX(int xx); bool CapNhatY(int yy); void CapNhatCh(char c); //Gián tiếp bool DichPhai(uint k); bool DichTrai(uint k); bool DichLen(uint k); bool DichXuong(uint k); bool DichXien1(uint k); bool DichXien2(uint k);VD1 Thiết kế các hành động của lớp CDiemKT474. Nhóm xử lý tính toán double KhoangCach(CDiemKT M); int KhoangCachX(CDiemKT M); int KhoangCachY(CDiemKT M); 5. Nhóm cung cấp thông tin void Xuat(); void Xoa(); int GiaTriX(); int GiaTriY(); char GiaTriCh();VD1 Thiết kế các hành động của lớp CDiemKT481. Nhóm kiểm tra ràng buộc bool KiemTraM(int mm); bool KiemTraN(int nn);2. Nhóm khởi tạo void Nhap(); bool 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 CHCN493. Nhóm cập nhật //Trực tiếp bool CapNhatGoc(CDiemKT M); bool CapNhatNgang(int cng); bool CapNhatDung(int cd); VD2 Thiết kế các hành động của lớp CHCN503. Nhóm cập nhật //Gián tiếp bool DichPhai(int k); bool DichTrai(int k); bool DichLen(int k); bool DichXuong(int k); bool TangNgang(int k); bool GiamNgang(int k); bool TangDung(int k); bool GiamDung(int k); bool XoayThuan(); void XoayNghich();VD2 Thiết kế các hành động của lớp CHCN 4. Nhóm xử lý tính toán int XetViTri(CDiemKT M); //-1: Bên trong, 0: Trên cạnh, 1: Bên ngoài int KhoangCachX(CDiemKT M); int KhoangCachY(CDiemKT M);VD2 Thiết kế các hành động của lớp CHCN 5. Nhóm cung cấp thông tin void Xuat(); void Xoa(); CDiemKT ToaDoGoc(); int ChieuNgang(); int ChieuDung(); int ChuVi(); long DienTich(); double DuongCheo();VD2 Thiết kế các hành động của lớp CHCNBài tập: thiết kế phương thức các lớp53Lớp thời gian CTimeLớp ngày tháng năm CDateLớp phân số CPhanSoLớp CDaThuc (Đa thức 1 ẩn) Pn(x) = a0 + a1x + a2x2+ a3x3 + ... + anxnLớp đường thẳng trong mặt phẳng CDuongThangQ&A