Lập trình hướng đối tượng Phần 9

Mục tiêu: Xây dựng chương trình quản lý

về hồ sơ cá nhân của các đối tượng này,

qua đó để có được danh sách những

người làm việc trong cơ quan, nguồn gốc

xuất thân của họ và chức năng của từng

người.

pdf14 trang | Chia sẻ: thienmai908 | Lượt xem: 1297 | Lượt tải: 0download
Nội dung tài liệu Lập trình hướng đối tượng Phần 9, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
11 Object – Oriented Programming PGS. TS. Trần Văn Lăng KHOA CÔNG NGHỆ THÔNG TIN TRƯỜNG ĐẠI HỌC LẠC HỒNG lang@lhu.edu.vn 2 Chương 9 Xây dựng chương trình theo hướng đối tượng 3 Các bước cơ bản Để thiết kế một chương trình theo hướng đối tượng cần phải trải qua các bước:  Xác định các dạng đối tượng của bài toán (định danh các đối tượng)  Tìm kiếm những đặc tính chung trong các dạng đối tượng này, những gì các dạng đối tượng này cùng nhau chia sẻ.  Xác định được lớp cơ sở trên cơ sở các đặc tính chung của những dạng đối tượng. 4  Từ lớp cơ sở, sử dụng quan hệ tổng quát hóa (generalization) để đặc tả hóa (specification) trong việc tạo ra các lớp dẫn xuất chứa những thành phần là những đặc tính còn lại (những đặc tính không chung còn lại) của dạng đối tượng. 25  Bên cạnh đó còn đưa ra những lớp có quan hệ với các lớp cơ sở và lớp dẫn xuất, các quan hệ này có thể là quan hệ Kết hợp (association), Tập hợp lại (aggregation), Phụ thuộc (dependency) Trường hợp tham số của hàm là dữ liệu thuộc kiểu lớp, cũng được xem là quan hệ phụ thuộc 6 Từ đó xây dựng được một phả hệ mang tính thừa kế (có tổ tiên và hậu duệ) và các mối quan hệ giữa các đối tượng 7 Với các bước trên, có được phả hệ và quan hệ giữa các lớp. Đối với hệ thống phức tạp hơn, chúng ta phải phân tích để giải quyết được vấn đề đặt ra theo trật tự như sau: 8  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.  Và 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 chung này lại để được các lớp cơ sở 39 Ñoái tö ôïng N Caùc ñaëc tính chung tö ø ñoái tö ôïng 1 ñeán ñoái tö ôïng I Caùc ñaëc tính chung tö ø oi tö ôïng J ñeán oái tö ôïng N Ñoái tö ôïng 1 Ñoái tö ôïng I Ñoái tö ôïng J 10 Tiếp tục theo hướng từ dưới lên chúng ta thiết kế được các đối tượng phù hợp Caùc ñaëc tính chung tö ø ñoái tö ôïng J ñeán ñoái tö ôïng N Caùc ñaëc tính chung tö ø ñoái tö ôïng 1 ñeán ñoái tö ôïng N Caùc ñaëc tính chung tö ø ñoái tö ôïng 1 ñeán ñoái tö ôïng I 11 Bằng cách này tiếp tục tìm những đặ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 theo cài đặt các lớp dẫn xuất trên cơ sở những đặc tính chung của từng nhóm đối tượng.  Cho đến khi tất cả các đối tượng của hệ thống được cài đặt xong để được một phả hệ. 12 Ví dụ tính lương của một cơ quan Mục tiêu: Quản lý thu nhập hằng tháng của một cơ quan, cuối tháng in bảng tiền lương của tất cả những người làm việc trong cơ quan theo các dạng khác nhau. Giả sử trong một cơ quan, lương tiền có được từ hai nguồn:  Ngân sách Nhà nước  Kinh phí tự có do sản xuất kinh doanh 413 Tương ứng, mỗi loại có tên gọi riêng  Công chức (dạng biên chế)  Người làm hợp đồng 14 Từ đây có thể tạo nên lớp cơ sở để quản lý một viên chức (NGUOI) trong cơ quan bao gồm  Tên họ (th) Mã số (ms)  Tiền lương (tl) 15 Sau đó xây dựng các lớp còn lại được kế thừa từ lớp chung này dựa trên các thuộc tính cho từng lớp:  Lớp BIENCHE Hệ số lương (hsl), Tiền phụ cấp từ nguồn tự có (pc) 16  Lớp HOPDONG Tiền công lao động (l1n) Số ngày làm việc trong tháng (nc) 517 Chương trình có nhiệm vụ in bảng lương theo cán bộ công chức và người làm hợp đồng. NGUOI BIENCHE HOPDONG 18 Các lớp liên quan class NGUOI{ char th[30]; char ms[4]; float tl; public: void input(); void output(); void setTl( float ); float getTl(); }; 19 class BIENCHE: public NGUOI{ float hsl; float pc; public: BIENCHE(){} BIENCHE( BIENCHE*, int ); void inBangLuong(BIENCHE*,int); }; 20 class HOPDONG: public NGUOI{ int nc; float l1n; public: HOPDONG(){} HOPDONG( HOPDONG*, int ); void inBangLuong(HOPDONG*,int); }; 621 void main(){ const int nb = 3; const int nh = 3; BIENCHE *b = new BIENCHE[nb]; HOPDONG *h = new HOPDONG[nh]; BIENCHE B( b, nb ); HOPDONG H( h, nh ); B.inBangLuong( b, nb ); H.inBangLuong( h, nh ); } 22 Ví dụ quản lý phòng khám bệnh Mục tiêu: Quản lý phòng khám của bác sĩ, qua đó thống kê số bệnh nhân đến khám bệnh tại phòng khám. Để thực hiện công việc, trước hết xem xét các tác nhân (actor) tác động đến hệ thống. Từ đó suy ra xuất xứ của các nguồn dữ liệu cần cho hệ thống. 23 Hai nhân tố cần cho hệ thống đó là  Bệnh nhân  Bác sĩ Để giải quyết được vấn đề đặt ra, phải xem xét trong bối cảnh của ngôn ngữ lập trình hướng đối tượng sẽ được sử dụng để cài đặt.  Chuỗi ký tự  Ngày tháng 24 Với những nhận định trên, chúng ta có thể có các dạng đối tượng (lớp) sau đây cần cho hệ thống:  Lớp bệnh nhân (PATIENT), bao gồm các thuộc tính như: Họ tên (name) Ngày tháng năm sinh (date) Số lần khám bệnh trong tháng (visit) 725  Lớp bác sĩ (DOCTOR), bao gồm Tên họ của người bác sĩ (name) Danh sách những bệnh nhân đến khám bệnh (list) Số bệnh nhân đã khám bệnh trong tháng (count).  Lớp chuỗi ký tự (STRING) để quản lý Tên họ (data)  Lớp ngày tháng (DATE) để lưu trữ Dữ liệu ngày (day) Tháng (month) Năm (year) 26 Qua các lớp trên, xây dựng hệ thống phả hệ bằng cách tìm ra những đặc tính chung của các lớp đã nêu. Hai lớp bệnh nhân và bác sĩ có thể chung nhau những dữ liệu và hành vi liên quan đến họ tên. 27 Từ đó, có thể cấu tạo nên lớp người (PERSON) với thuộc tính  Tên họ (name) thuộc kiểu chuỗi ký tự. 28 Trên cơ sở những đặc tính không chung còn lại, có được hai lớp dẫn xuất là bệnh nhân và bác sĩ được kế thừa từ lớp người. Lớp người có thuộc tính là tên họ thuộc lớp chuỗi ký tự (name), điều đó có nghĩa là nó được tập hợp lại từ những thuộc tính riêng của nó và lớp chuỗi ký tự. 829 Lớp bệnh nhân có thuộc tính ngày sinh (date), nên lớp ngày tháng được tập hợp lại trong lớp bệnh nhân. Lớp bác sĩ lại có danh sách những bệnh nhân đến khám (list), nên cũng được tập hợp lại dưới dạng kết hợp một bác sĩ có thể có một hoặc nhiều bệnh nhân. 30 Mô hình hóa hệ thống MAIN DOCTORPATIENT DATE PERSONSTRING 31 Các lớp liên quan class PERSON{ STRING name; public: STRING getName(); void setName( STRING& ); }; 32 class PATIENT:public PERSON{ DATE date; int visit; public: PATIENT( STRING&, DATE&, int ); PATIENT(); int getVisit(); }; 933 class DOCTOR: public PERSON{ PATIENT list[MAX]; int count; public: DOCTOR( STRING& n ); void registerPatient( PATIENT& p ); double statistics(); void output( double ); }; 34 class STRING{ char* data; public: STRING ( unsigned int = 0, char = ' ' ); STRING ( STRING& ); ~STRING (); friend istream& operator >> (i&,STRING&); friend ostream& operator << (o&,STRING&); }; 35 class DATE{ int day, month, year; public: DATE(int=1,int=1,int=2008); void input(); void output(); }; 36 Để chương trình mang tính thực thi, xây dựng lớp MAIN, Trong lớp này được tập hợp vào đối tượng thuộc lớp DOCTOR. class MAIN{ DOCTOR *dr; public: MAIN(); }; 10 37 Ví dụ quản lý hoạt động khoa học Mục tiêu: Quản lý hoạt động khoa học trong một trường đại học có chức năng đào tạo sinh viên đại học và sau đại học. Những hoạt động ở đây chủ yếu là nghiên cứu khoa học và giảng dạy. 38 Đây là hoạt động của con người nên những yếu tố được xoay quanh người làm việc trong trường đại học. Từ đó có được các dạng đối tượng cần cho hệ thống bao gồm:  Giáo sư (giáo sư, phó giáo sư)  Giảng viên (giảng viên cao cấp, giảng viên chính, giảng viên)  Nghiên cứu sinh (tiến sĩ, thạc sĩ)  Sinh viên 39 Trong các lớp trên, chúng ta phải sử dụng chuỗi ký tự để mô tả những dữ liệu dạng văn bản. 40 Các đối tượng này được nhóm lại theo từng nhóm trên cơ sở những thuộc tính chung theo chiều từ dưới lên.  Lớp giáo sư (PROFESSOR), lớp giảng viên (LECTURER) được xem là dạng người tham gia việc giảng dạy (TEACHER). Hai lớp nghiên cứu sinh (RESEARCHER) và sinh viên (STUDENT) được xem là dạng người đi học (PUPIL). 11 41 PUPIL PROFESSOR LECTURER RESEARCHER STUDENT PERSON TEACHER STRING 42 Từ đó, có các lớp cơ sở PERSON với các thuộc tính có thể như là  Name chứa tên họ,  NumberID chứa mã số Lớp này được đặc tả hóa để có lớp TEACHER với thuộc tính  Degree lưu trữ học vị của giáo viên,  Paper về số bài báo 43 Lớp PUPIL gồm  GPA là điểm trung bình. Những lớp còn lại có thể quan hệ kết hợp (association), tập hợp (aggregation) hay kế thừa (inheritance) từ các lớp trên. 44 Trong lớp PROFESSOR ngoài việc được kế thừa từ lớp TEACHER, còn có thêm một số thuộc tính như:  NumberResearcher chứa số nghiên cứu sinh đã bảo vệ,  NumberBook là số sách đã xuất bản. 12 45 Lớp LECTURER thừa kế từ lớp TEACHER và chứa  Số sinh viên đã bảo vệ xuất sắc luận văn tốt nghiệp (NumberStudent). 46 Lớp RESEARCHER thừa kế từ hai lớp TEACHER và PUPIL, đồng thời để phân biệt, chúng ta đưa thêm vào  Loại hình nghiên cứu sinh là thạc sĩ hay tiến sĩ. 47 Lớp STUDENT chỉ thừa kế từ lớp PUPIL ngoài ra chúng ta đưa thêm yếu tố để biết  Có nghiên cứu khoa học không (Studying), nếu có, tên công trình. 48 Bên cạnh đó, có lớp STRING lưu trữ các thuộc tính và hành vi liên quan đến chuỗi ký tự. Lớp này được kết hợp với những lớp có thuộc tính chuỗi ký tự như Name, Degree, v.v... 13 49 Lưu ý với lớp RESEARCHER, do thừa kế bội với cấu trúc không bình thường, Nên trong trường hợp này phải sử dụng thừa kế ảo (virtual inheritance) khi xây dựng lớp để tránh tình trạng các phương thức của lớp PERSON xuất hiện hai lần trong lớp RESEARCHER. 50 Ví dụ quản lý hồ sơ cá nhân Trong một cơ sở nghiên cứu khoa học có những thành viên khác nhau:  Người làm công việc quản lý hành chánh  Người nghiên cứu khoa học  Những thí nghiệm viên trợ lý cho những nhà nghiên cứu 51 Mục tiêu: Xây dựng chương trình quản lý về hồ sơ cá nhân của các đối tượng này, qua đó để có được danh sách những người làm việc trong cơ quan, nguồn gốc xuất thân của họ và chức năng của từng người. 52 EMPLOYEE Name : STRING Age : int EDUCATION School : STRING Degree : STRING MANAGER Title : STRING STRING SCIENTIST pubs : int slave : LABORER LABORER What : STRING 14 53 Lớp SCIENTIST và lớp MANAGER được dẫn xuất từ hai lớp EMPLOYEE và EDUCATION, Hai lớp này lưu trữ  Hồ sơ nhân thân  Nền học vấn của từng cá nhân 54 Lớp STRING đóng vai trò kiểu dữ liệu sử dụng trong các lớp khác, nên có mối quan hệ kết hợp giữa các lớp tương ứng. Bên cạnh đó, mỗi nhà khoa học lại có một người trợ lý, nên giữa hai lớp SCIENTIST và LABORER cũng có mối quan hệ. 55 Yêu cầu Tạo ra cây phả hệ gồm 2 hoặc 3 cấp Hiểu các chương trình minh hoạ Viết vài chương trình đơn giản 56 Ôn tập Hai vấn đề chính:  Xây dựng lớp hoàn chỉnh dùng C++ Minh hoạ hệ thống từ 2 đến 3 cấp gồm các lớp có quan hệ thừa kế, quan hệ dạng lớp là thành viên của lớp.  Viết chương trình chính bằng C++ để thử nghiệm.

Các file đính kèm theo tài liệu này:

  • pdfjyksagupierh'iufgoasidu[ps (9).pdf
Tài liệu liên quan