Công nghệ phần mềm - Ngôn ngữ lập trình nâng cao (tiếp)

Giả sử đã xây dựng lớp CDate hoàn chỉnh

 Cần xây dựng ứng dụng tính tiền lãi của một ngân hàng

thành lập ngày 15/2/2007

 Cần xây dựng ứng dụng quản lý sinh viên có thuộc tính

ngày tháng năm sinh (sinh viên phải từ 17 tuổi trở lên)

Cần có cơ chế cho phép khai báo lớp CDate mới là lớp

CDate cũ với 1 số các sửa đổi bổ sung

pdf 48 trang dienloan 15780
Bạn đang xem 20 trang mẫu của tài liệu "Công nghệ phần mềm - Ngôn ngữ lập trình nâng cao (tiếp)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Công nghệ phần mềm - Ngôn ngữ lập trình nâng cao (tiếp)

Công nghệ phần mềm - Ngôn ngữ lập trình nâng cao (tiếp)
Slide 1 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
NGÔN NGỮ LẬP TRÌNH NÂNG CAO 
Slide 2 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Kế thừa lớp đối tượng 
Tính đa hình 
Cài đặt giao diện 
Nội dung 
Slide 3 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Khái niệm về tính kế thừa 
• Thiết kế lớp kế thừa 
• Thiết lập và hủy trong kế thừa 
Kế thừa lớp đối tượng 
Slide 4 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Giả sử đã xây dựng lớp CDate hoàn chỉnh 
 Cần xây dựng ứng dụng tính tiền lãi của một ngân hàng 
thành lập ngày 15/2/2007 
 Cần xây dựng ứng dụng quản lý sinh viên có thuộc tính 
ngày tháng năm sinh (sinh viên phải từ 17 tuổi trở lên) 
Cần có cơ chế cho phép khai báo lớp CDate mới là lớp 
CDate cũ với 1 số các sửa đổi bổ sung. 
Đặt vấn đề 
Slide 5 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Tương tự với chương trình đánh cờ caro, cờ tướng trên 
máy tính. Mỗi quân cờ được xem như 1 điểm ký tự 
(CDiemKT) nhưng mỗi quân cờ có những đặc điểm 
khác nhau. Do vậy cần sử dụng lớp CDiemKT bổ sung 
và sửa đổi một số phần thay cho việc xây dựng lại từ 
đầu. 
Đặt vấn đề 
Slide 6 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Kế thừa cho phép khai báo 1 lớp B là 1 lớp 
dẫn xuất từ lớp A. Khi đó B sẽ có tất cả các 
thuộc tính và đặc điểm của A, ngoài ra B có thể 
có thêm những thuộc tính và những hành động 
mới. 
Khái niệm 
Slide 7 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 Kế thừa thể hiện khả năng tái sử dụng các lớp 
đã được định nghĩa. 
 Có thể định nghĩa lớp đối tượng mới dựa trên 
1 hay nhiều lớp đối tượng đã có sẵn. 
 Lớp có sẵn được gọi là lớp cơ sở (based 
class) và lớp kế thừa được gọi là lớp dẫn xuất 
(derived class) 
Khái niệm 
Slide 8 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 A B 
 * tính chất chung 
- tính chất của A 
+ tính chất của B 
- - *- - - *- 
*- - * - - * 
+ * + + + * + * 
+ * + + + * + 
 C 
 A B 
- - - - - - - - 
- - 
+ + + + + + +
+ + + 
* * * * 
* 
Khái niệm 
Slide 9 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• A: Là trường hợp tổng quát của B 
• B: Là trường hợp đặc biệt của A 
A 
B 
A 
B C 
 A: Là trường hợp tổng quát 
của B và C 
 B, C: Là trường hợp đặc biệt 
của A 
Ký hiệu 
Slide 10 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
CDate 
CDateNH CDateSV 
VD: Lớp ngày cho ngân hàng và sinh viên 
Slide 11 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class TênLớpCha 
{ 
 Thuộc tính và phương thức của lớp cha 
} 
class TênLớpDẫnXuất : TênLớpCha 
{ 
 Thuộc tính và phương thức bổ sung của 
 lớp dẫn xuất 
} 
Khai báo 
Slide 12 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Có 2 cách để định nghĩa hành động bổ sung cho 
phương thức đã có sẵn ở lớp cha trong lớp dẫn 
xuất (phương thức lớp dẫn xuất trùng tên với 
phương thức lớp cha) 
• Dùng từ khóa new 
• Dùng từ khóa virtual và override 
Khai báo 
Slide 13 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class COSO 
{ 
 protected kiểu data1; 
 protected kiểu data2; 
 public void Method1() 
 {} 
 public void Method2() 
 {} 
} 
class DANXUAT : COSO 
{ 
 private kiểu data3; 
 public new void Method1() 
 {} 
 public void Method4() 
 {} 
} 
Khai báo – Dùng từ khóa new 
Slide 14 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class COSO 
{ 
 protected kiểu data1; 
 protected kiểu data2; 
 public virtual void Method1() 
 {} 
 public virtual void Method2() 
 {} 
} 
class DANXUAT : COSO 
{ 
 private kiểu data3; 
 public override void Method1() 
 {} 
 public void Method4() 
 {} 
} 
Khai báo – Dùng virtual & override 
Slide 15 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Viết chương trình nhập xuất nhân viên, biết rằng có 2 loại 
nhân viên: Nhân viên biên chế và nhân viên hợp đồng. 
Thông tin của nhân viên gồm: Mã số, Họ tên. 
• Nhân viên biên chế có thông tin riêng là bậc lương. 
• Nhân viên hợp đồng có thông tin riêng là số giờ làm. 
Ví dụ 
Slide 16 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Ta có cây kế thừa sau: 
CNHANVIEN 
CHOPDONG CBIENCHE 
Ví dụ 
Slide 17 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class CNHANVIEN 
 { protected int maso; 
 protected string hoten; 
 public void Nhap() 
 { Console.Write("Nhap ma so nhan vien: "); 
 maso = int.Parse(Console.ReadLine()); 
 Console.Write("Nhap ho ten nhan vien: "); 
 hoten = Console.ReadLine(); 
 } 
 public void Xuat() 
 { Console.WriteLine("Ma so: {0}\nHo ten: {1}", maso, hoten); 
 } 
 } 
Ví dụ - dùng từ khóa new 
Slide 18 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class CBIENCHE : CNHANVIEN 
 { 
 private float hesoluong; 
 public new void Nhap() 
 { base.Nhap(); 
 Console.Write("Nhap he so luong: "); 
 hesoluong = float.Parse(Console.ReadLine()); 
 } 
 public new void Xuat() 
 { base.Xuat(); 
 Console.WriteLine("He so luong: " + hesoluong); 
 } 
 } 
Ví dụ - dùng từ khóa new 
Slide 19 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class CHOPDONG : CNHANVIEN 
 { private float sogio; 
 public new void Nhap() 
 { base.Nhap(); 
 Console.Write("Nhap so gio lam viec: "); 
 sogio = float.Parse(Console.ReadLine()); 
 } 
 public new void Xuat() 
 { base.Xuat(); 
 Console.WriteLine("So gio lam viec: " + sogio); 
 } 
 } 
Ví dụ - dùng từ khóa new 
Slide 20 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class CNHANVIEN 
 { protected int maso; protected string hoten; 
 public virtual void Nhap() 
 { Console.Write("Nhap ma so nhan vien: "); 
 maso = int.Parse(Console.ReadLine()); 
 Console.Write("Nhap ho ten nhan vien: "); 
 hoten = Console.ReadLine(); 
 } 
 public virtual void Xuat() 
 { Console.WriteLine("Ma so: {0}\nHo ten: {1}", maso, hoten); 
 } 
 } 
Ví dụ - dùng virtual & override 
Slide 21 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class CBIENCHE : CNHANVIEN 
 { 
 private float hesoluong; 
 public override void Nhap() 
 { base.Nhap(); 
 Console.Write("Nhap he so luong: "); 
 hesoluong = float.Parse(Console.ReadLine()); 
 } 
 public override void Xuat() 
 { base.Xuat(); 
 Console.WriteLine("He so luong: " + hesoluong); 
 } 
 } 
Ví dụ - dùng virtual & override 
Slide 22 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class CHOPDONG : CNHANVIEN 
 { private float sogio; 
 public override void Nhap() 
 { base.Nhap(); 
 Console.Write("Nhap so gio lam viec: "); 
 sogio = float.Parse(Console.ReadLine()); 
 } 
 public override void Xuat() 
 { base.Xuat(); 
 Console.WriteLine("So gio lam viec: " + sogio); 
 } 
 } 
Ví dụ - dùng virtual & override 
Slide 23 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 static void Main(string[] args) 
 { CBIENCHE nvbc = new CBIENCHE(); 
 nvbc.Nhap(); 
 CHOPDONG nvhd = new CHOPDONG(); 
 nvhd.Nhap(); 
 Console.WriteLine("\nNhan vien bien che: "); 
 nvbc.Xuat(); 
 Console.WriteLine("\nNhan vien hop dong: "); 
 nvhd.Xuat(); 
 } 
Ví dụ - Sử dụng phương thức trong Main() 
Slide 24 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Có 3 phạm vi kế thừa: 
• public 
• protected 
• private 
Lưu ý: Nếu không nói rõ là phạm vi kế thừa gì, 
chúng ta ngầm định đó là kế thừa public 
Phạm vi kế thừa 
Slide 25 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• public: thành phần public & protected của lớp 
cơ sở là thành phần public & protected của 
lớp dẫn xuất. 
• protected: thành phần public & protected của 
lớp cơ sở là thành phần protected của lớp 
dẫn xuất. 
• private: thành phần public & protected của 
lớp cơ sở là thành phần private của lớp dẫn 
xuất. 
Phạm vi kế thừa 
Slide 26 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Khi khởi tạo đối tượng: 
– Hàm tạo của lớp cha sẽ được gọi trước 
– Sau đó mới đến hàm tạo của lớp con. 
• Khi hủy đối tượng: 
– Hàm hủy của lớp con sẽ được gọi trước 
– Sau đó mới đến hàm hủy của lớp cha. 
Hàm tạo và hàm hủy trong kế thừa 
Slide 27 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
A 
B 
C 
Hàm tạo và hàm hủy trong kế thừa 
Slide 28 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Trong hàm tạo của lớp dẫn xuất, chúng ta có thể 
chỉ định hàm tạo nào của lớp cơ sở sẽ được gọi 
thực hiện. Nếu không chỉ định, hàm tạo mặc 
định của lớp cơ sở sẽ được gọi. 
Hàm tạo và hàm hủy trong kế thừa 
Slide 29 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class A 
{ 
 public A(){} 
 public A(int){} 
} 
class B : public A 
{ 
 public B(int) //Thực hiện A() 
 {} 
} 
Hàm tạo và hàm hủy trong kế thừa 
Slide 30 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class A 
{ 
 public A(){} 
 public A(int){} 
} 
class B : public A 
{ 
 public B(int) : base(int) //Thực hiện A(int) 
 {} 
} 
Hàm tạo và hàm hủy trong kế thừa 
Slide 31 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Thiết kế chương trình quản lý các đối tượng sau trong một Viện khoa học: 
nhà khoa học, nhà quản lý và NV phòng thí nghiệm. Các thành phần dữ 
liệu của các đối tượng trên: 
- Nhà khoa học: họ tên, năm sinh, bằng cấp, chức vụ, số bài báo công bố, 
số ngày công trong tháng, bậc lương 
- Nhà quản lý: họ tên, năm sinh, bằng cấp, chức vụ, số ngày công trong 
tháng, bậc lương 
- Nhân viên phòng thí nghiệm: họ tên, năm sinh, bằng cấp, lương trong 
tháng 
Thực hiện các yêu cầu sau: 
- Các hàm tạo để nhập liệu, biết rằng nhân viên phòng thí nghiệm lĩnh 
lương khoán, còn lương của nhà khoa học và nhà quản lý bằng số ngày 
công trong tháng * bậc lương 
- Xuất dữ liệu ra màn hình 
- In tổng lương đã chi trả cho từng loại đối tượng 
Bài tâp 
Slide 32 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Khái niệm về tính đa hình 
• Thiết kế lớp trừu tượng 
• Các ví dụ minh họa 
Tính đa hình 
Slide 33 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Làm thế nào lưu danh 
sách (mảng) 2 loại ấn 
phẩm cùng lúc & thực 
thi đúng hành động 
“LayRa” của loại ấn 
phẩm đó ? 
Đặt vấn đề 
Slide 34 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Tính đa hình là khả năng để cho một thông 
điệp có thể thực hiện bằng nhiều cách khác 
nhau tùy thuộc vào đối tượng cụ thể nhận 
thông điệp. 
• Khi một lớp dẫn xuất được tạo ra, nó có thể 
thay đổi cách thực hiện các phương thức nào 
đó mà nó thừa hưởng từ lớp cơ sở. 
Khái niệm tính đa hình 
Slide 35 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Trừu tượng hóa là khả năng mô tả khái quát 
các thao tác chung của các lớp đối tượng. 
• Đặc tính này giúp cho việc thiết kế lớp mang 
tính đa hình 
Trừu tượng hóa 
Slide 36 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Nhận xét đoạn code sau 
static void Main() 
{ 
 AnPham a = new AnPham(); 
 a.LayRa(); 
 TapChi t = new TapChi(); 
 t.LayRa(); 
 a = t; 
 a.LayRa(); 
} 
Ví dụ 
Slide 37 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Nhận xét đoạn code sau 
static void Main() 
{ 
 AnPham[] ds = new AnPham[100]; 
 for(int i=0;i<100;i++) 
 { 
 if(Nhập tạp chí ?) 
 { 
 ds[i] = new TapChi(); 
 } 
 else 
 { 
 ds[i] = new Sach(); 
 } 
 } 
} 
Ví dụ 2 
Slide 38 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Phương thức trừu tượng là phương thức chỉ có tên thôi và nó phải 
được cài đặt lại ở tất các các lớp kế thừa. Lớp trừu tượng chỉ thiết lập 
một cơ sở cho các lớp kế thừa mà nó không thể có bất kỳ một thể hiện 
nào tồn tại 
class DANXUAT : COSO 
{ 
 private kiểu data3; 
 public override void Method1() 
 {} 
 public override void Method2() 
 {} 
} 
abstract class COSO 
{ 
 protected kiểu data1; 
 protected kiểu data2; 
 public abstract void Method1(); 
 public abstract void Method2(); 
} 
Lớp trừu tượng 
Slide 39 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
abstract class Window 
{ 
 protected int top, left; 
public Window(int top, int left) 
{ this.top = top; this.left = left; } 
 abstract public void DrawWindow( ); 
} 
class ListBox : Window 
{ 
 private string listBoxContents; 
 public ListBox(int top, int left, string contents) : base(top, left) 
{ listBoxContents = contents; } 
public override void DrawWindow( ) 
{ 
 Console.WriteLine("Writing string to the listbox: {0}", listBoxContents); 
} 
} 
Lớp trừu tượng 
Slide 40 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public class Button : Window 
{ 
 public Button( int top, int left): base(top, left) 
 { } 
 public override void DrawWindow( ) 
 { Console.WriteLine("Drawing a button at {0}, {1}\n", top, left); } 
} 
public class Tester 
{ 
 static void Main( ) 
 { 
 Window[] winArray = new Window[3]; 
 winArray[0] = new ListBox(1,2,"First List Box"); 
 winArray[1] = new ListBox(3,4,"Second List Box"); 
 winArray[2] = new Button(5,6); 
 for (int i = 0;i < 3; i++) 
 { winArray[i].DrawWindow( ); } 
 } 
} 
Lớp trừu tượng 
Slide 41 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Ví dụ 
Slide 42 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Khái niệm về giao diện (Interface) 
• Thiết kế 
• Các ví dụ minh họa 
Giao diện 
Slide 43 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Giao diện là một dạng của lớp trừu tượng 
• Chỉ có các nguyên mẫu phương thức, thuộc tính, chỉ 
mục, được khai báo trong giao diện. 
• Tất cả các thành phần khai báo trong giao diện mặc định 
là public (nên không có từ khóa về mức độ truy cập 
trong khai báo các thuộc tính và phương thức) 
• Khi một lớp kế thừa một giao diện ta nói rằng lớp đó 
thực thi (Implement) giao diện 
Định nghĩa 
Slide 44 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
[MứcĐộTruyCập] Interface TênGiaoDiện [: GiaoDiệnCơ Sở] 
{ 
 //Nội dung giao diện 
} 
• Trong đó: 
– [MứcĐộTruyCập] : thường là public; 
– [: GiaoDiệnCơ Sở] : danh sách các Interface khác mà 
nó kế thừa, mỗi Interface các nhau bởi dấu phẩy (,) 
Cú pháp 
Slide 45 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public interface IPlayerManager 
{ 
public void PlayMusic(); 
public void PauseMusic(); 
public void Stop(); 
public int OnOff //thuộc tính của Interface 
{ 
 get ; 
} 
} 
Ví dụ 
Slide 46 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public interface IPlayerManager 
{ 
void PlayMusic(); 
void PauseMusic(); 
void Stop(); 
int OnOff // thuộc tính của Interface 
{ 
 get ; 
} 
} 
// Error ? 
Ví dụ 
Slide 47 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public class Player : IPlayerManager 
{ int _Switch; 
public void PlayMusic() 
{ Console.WriteLine(“Music is playing ”); 
 _Switch = 1 ; 
} 
public void PauseMusic() 
{ Console.WriteLine(“Music is pause ”); 
 _Switch = 0 ; 
} 
public void Stop() 
{ Console.WriteLine(“Music is stopped ”); 
 _Switch = -1 ; 
} 
} // Error ? 
Ví dụ 
Slide 48 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public class Player : IPlayerManager 
{ int _Switch; 
public void PlayMusic() 
{ Console.WriteLine(“Music is playing ”); 
 _Switch = 1 ; } 
public void PauseMusic() 
{ Console.WriteLine(“Music is pause ”); 
 _Switch = 0 ; } 
public void Stop() 
{ Console.WriteLine(“Music is stopped ”); 
 _Switch = -1 ; } 
public int OnOff 
{ 
 get { return _Switch ; } 
} 
} 
Ví dụ 

File đính kèm:

  • pdfcong_nghe_phan_mem_ngon_ngu_lap_trinh_nang_cao_tiep.pdf