Bài giảng Ngôn ngữ lập trình nâng cao - Bài 3 - Lý Anh Tuấn

Khái niệm về lớp và đối tượng

Thiết kế các thuộc tính và hành động của

lớp

Cài đặt các phương thức

- Truy xuất và cập nhật dữ liệu (get-set)

- Nạp chồng phương thức (overload)

- Hàm tạo (constructor)

- Nạp chồng toán tử (operator)

- Ghi đè phương thức có sẵn (override)

pdf48 trang | Chuyên mục: Visual C# | Chia sẻ: yen2110 | Lượt xem: 254 | Lượt tải: 3download
Tóm tắt nội dung Bài giảng Ngôn ngữ lập trình nâng cao - Bài 3 - Lý Anh Tuấn, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
́p thêm số thứ tự 
ràng buộc 
Thiết kế phương thức ràng buộc 
Slide 19 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
VD: Phương thức kiểm tra ràng buộc cho lớp CHocSinh 
public class CHocSinh 
{ 
 private string hoten; 
 private int toan, van; 
 private float dtb; 
 public bool KiemTraDiem (int d); 
 public void Nhap() 
 { } 
 public void Xuat() 
 { } 
} 
Slide 20 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• 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 
• Kiểm tra tham số thỏa hoặc không thỏa ràng 
buộc bằng cách gọi phương thức kiểm tra 
ràng buộc tương ứng 
Cài đặt phương thức khởi tạo và cập nhật 
Slide 21 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public bool 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; 
} 
Slide 22 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
hoặc 
public bool 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; 
} 
Slide 23 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public bool CapNhatToan(int dt) 
{ 
 bool kq=false; 
 if(KiemTraDiem(dt)){ 
 toan=dt; 
 return true; 
 } 
 return kq; 
} 
public bool CapNhatVan(int dv) 
{ 
 if(!KiemTraDiem(dv)) 
 return false; 
 van=dv; 
 return true; 
} 
Slide 24 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• Truy xuất và cập nhật dữ liệu (get-set) 
• Nạp chồng phương thức (overload) 
• Hàm tạo (constructor) 
• Nạp chồng toán tử (operator) 
• Ghi đè phương thức có sẵn (override) 
Cài đặt phương thức 
Slide 25 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class CViDu 
 { 
 private int a, b; 
 public void Nhap() 
 { 
 } 
 public void Xuat() 
 { 
 } 
 } 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 CViDu vd = new CViDu(); 
 vd.a = 5; // Lỗi 
 vd.b = 4; //Lỗi 
 vd.Xuat(); 
 } 
 } 
Truy xuất và cập nhật dữ liệu 
Slide 26 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public Tên thuộc tính 
{ 
 get 
 { 
 return ; 
 } 
 set 
 { 
 if(kiểm tra value thỏa đk) 
 = value; 
 } 
} 
Mẫu cài đặt thuộc tính 
Slide 27 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
• get : Đọc thuộc tính 
• set : Gán giá trị cho thuộc tính 
• Tên thuộc tính: Đặt tên bất kỳ theo quy ước 
nhưng nên đặt dễ nhớ (tốt nhất là trùng tên với 
tên thuộc tính và ký tự đầu viết hoa) 
Mẫu cài đặt thuộc tính 
Slide 28 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class CViDu 
 { 
 private int a, b; 
 public int A 
 { 
 get{return a;} 
 set{a=value;} 
 } 
 public int B 
 { 
 get {return b;} 
 set { b = value; } 
 } 
 } 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 CViDu vd = new CViDu(); 
 vd.A = 5; 
 vd.B = 4; 
 } 
 } 
Slide 29 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Các phương thức có thể có tên trùng nhau ngay 
cả các phương thức này ở cùng trong 1 lớp 
nhưng trong số các tham số phải có ít nhất 1 
tham số khác 
 khác về KDL (nếu cùng số lượng tham số) 
 hoặc khác về số lượng tham số 
Nạp chồng phương thức 
Slide 30 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public void Nhap() 
{ } 
public void Nhap(int aa) 
{ } 
public void Nhap(float aa) 
{ } 
public void Nhap(int aa, float bb) 
{ } 
public int Nhap() 
Nạp chồng phương thức 
Slide 31 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Phân biệt khi gọi phương thức ? 
1. public void PhuongThuc(int a) {} 
2. public void PhuongThuc(float a) {} 
void Main() 
{ 
 int x=7; 
 float y=6.0; 
 PhuongThuc(x); //Gọi phương thức số 1 
 PhuongThuc(y); //Gọi phương thức số 2 
} 
Nạp chồng phương thức 
Slide 32 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Tự động thực hiện khi đối tượng được sinh ra, 
các phương thức này có các đặc điểm: 
Không trả về giá trị. 
Tên trùng với tên lớp. 
Có thể có hoặc không có tham số. 
Khi sử dụng phải có từ khóa new 
Hàm tạo 
Slide 33 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class 
{ 
 //Thuộc tính 
 //Các phương thức 
 public ([tham số]) 
 { 
 Gán giá trị cho thuộc tính 
 } 
} 
Mẫu hàm tạo 
Slide 34 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class CViDu 
 { 
 private int a, b; 
 public CViDu() 
 { 
 a = 4; 
 b = 2; 
 } 
 public CViDu(int aa, int bb) 
 { 
 a = aa; 
 b = bb; 
 } 
 public void Xuat() 
 { 
 Console.WriteLine("a = {0}, b = {1}", a, b); 
 } 
 } 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 CViDu vd = new CViDu(); 
 vd.Xuat(); 
 vd = new CViDu(1, 23); 
 vd.Xuat(); 
 } 
 } 
Slide 35 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class CViDu 
{ 
 int a, b; 
 public void Gan(int a, int b) 
 { 
 a = a; 
 b = b; 
 } 
 public void Xuat() 
 { 
 Console.WriteLine("a={0}, b={1}", a, b); 
 } 
} 
class Program 
 { 
 static void Main(string[] args) 
 { 
 CViDu vd = new CViDu(); 
 vd.Gan(21, 9); 
 vd.Xuat(); 
 } 
 } 
Sử dụng từ khóa this 
Slide 36 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Trường hợp tên tham số trùng với tên thuộc tính của đối tượng ta 
dùng từ khóa this. Từ khoá this được dùng để tham chiếu đến 
chính bản thân của đối tượng đó 
class CViDu 
{ 
 int a, b; 
 public void Gan(int a, int b) 
 { 
 this.a = a; 
 this.b = b; 
 } 
 public void Xuat() 
 { 
 Console.WriteLine("a={0}, b={1}", a, b); 
 } 
} 
Sử dụng từ khóa this 
Slide 37 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Giả sử lớp phân số (CPhanSo) có phương thức 
cộng (Cong) và nhân (Nhan) hai phân số. Khi 
đó, ta muốn cộng 2 phân số a và b lưu vào phân 
số tổng c, ta phải viết là: 
 c = a.Cong(b); 
 Tương tự cho trường hợp nhân 
 c = a.Nhan(b); 
Nạp chồng toán tử 
Slide 38 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Nếu muốn viết một cách tự nhiên như sau: 
 c = a + b; 
 c = a * b; 
Thì phải cài đặt phương thức thông qua các ký 
hiệu phép toán (operator) 
Nạp chồng toán tử 
Slide 39 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public static operator ký hiệu (TênLớp 
trái, TênLớp phải) 
 Ký hiệu: Gồm các ký hiệu phép toán số học, 
logic và so sánh 
 Trái: Tên tham số sẽ nằm bên trái phép toán 
 Phải: Tên tham số sẽ nằm bên phải phép toán 
 KDL: bool nếu operator so sánh 
 TênLớp nếu operator tính toán 
Mẫu nạp chồng toán tử 
Slide 40 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
public static CPhanSo operator + (CPhanSo 
ps1, CPhanSo ps2) 
{ 
 //Cài đặt 
} 
Giả sử có 2 phân số a, b và phân số tổng c. 
Yêu cầu thực hiện như sau: 
c = a + b; 
VD: Nạp chồng toán tử + cho lớp CPhanSo 
Slide 41 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Không dùng operator 
class CPhanSo 
{ 
 private int tuso, mauso; 
 public CPhanSo(int t, int m) 
 { 
 tuso = t; 
 mauso = m; 
 } 
 public CPhanSo Cong(CPhanSo ps2) 
 { 
 int tu = tuso*ps2.mauso + ps2.tuso*mauso; 
 int mau = mauso*ps2.mauso; 
 CPhanSo c = new CPhanSo(tu, mau); 
 return c.RutGon(); 
 } 
} 
VD: Nạp chồng toán tử + cho lớp CPhanSo 
Slide 42 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 CPhanSo a = new CPhanSo(3, 5); 
 a.Xuat(); 
 CPhanSo b = new CPhanSo(1, 2); 
 b.Xuat(); 
 CPhanSo c=new CPhanSo(); 
 c = a.Cong(b); 
 Console.WriteLine("Ket qua: "); 
 c.Xuat(); 
 } 
 } 
Slide 43 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Dùng operator 
class CPhanSo 
{ 
 private int tuso, mauso; 
 public CPhanSo(int t, int m) 
 { tuso = t; mauso = m; 
 } 
 public static CPhanSo operator +(CPhanSo ps1, CPhanSo ps2) 
 { 
 int tu = ps1.tuso*ps2.mauso + ps2.tuso*ps1.mauso; 
 int mau = ps1.mauso*ps2.mauso; 
 CPhanSo c = new CPhanSo(tu, mau); 
 return c.RutGon(); 
 } 
 public void Xuat() 
 { Console.WriteLine("{0}/{1}", tuso, mauso); 
 } 
} 
VD: Nạp chồng toán tử + cho lớp CPhanSo 
Slide 44 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 class Program 
 { 
 static void Main(string[] args) 
 { 
 CPhanSo a = new CPhanSo (3, 5); 
 a.Xuat(); 
 CPhanSo b = new CPhanSo(1, 2); 
 b.Xuat(); 
 CPhanSo c=new CPhanSo(); 
 c = a + b; 
 Console.WriteLine("Ket qua: "); 
 c.Xuat(); 
 } 
 } 
Slide 45 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
 Phương thức Write() chỉ xuất những dữ liệu 
có kiểu cơ bản. Ví dụ: 
 int a = 4; 
 float b = 7; 
 Console.Write(“a={0}, b={1}”, a, b); 
 Đối với đối tượng thì phương thức Write() 
không thực hiện được, giả sử có lớp phân số 
(CPhanSo) 
 CPhanSo ps = new CPhanSo(5, 3); 
 Console.Write(“Phan so: “ + ps); 
Ghi đè phương thức Xuất 
Slide 46 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Để sử dụng được Console.Write(“Phan so: “+ps) 
phải cài đặt lại phương thức ToString() như sau: 
public override string ToString() 
{ 
 string s=Tạo chuỗi cần xuất; 
 return s; 
} 
Ghi đè phương thức Xuất 
Slide 47 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
class CPhanSo { 
 private int tuso, mauso; 
 public CPhanSo(int t, int m) { 
 tuso = t; 
 mauso = m; 
 } 
 public override string ToString() { 
 string s = tuso.ToString() + "/" + mauso.ToString(); 
 return s; 
 } 
} 
static void Main(string[] args) { 
 CPhanSo a = new CPhanSo(3, 5); 
 Console.Write(“Phan so: “ + a); 
} 
Ghi đè phương thức Xuất 
Slide 48 of 25 Ver. 1.0 
Object-Oriented Programming Using C# 
Thiết kế và cài đặt thuộc tính, hàm tạo, operator và ghi 
đè phương thức xuất cho các lớp sau: 
 Lớp phân số (CPhanSo) 
 Lớp thời gian (CTime) 
 Lớp ngày tháng năm (CDate) 
Bài tập 

File đính kèm:

  • pdfbai_giang_lap_trinh_nang_cao_bai_3_ngon_ngu_lap_trinh_nang_c.pdf
Tài liệu liên quan