Bài giảng Thiết kế và cài đặt lớp - Đối tượng (Tiếp theo)

Khi một đối tượng đang thực thi một phương

thức (không phải là phương thức tĩnh), tham

chiếu this tự động trỏ đến đối tượng này.

Có 3 trường hợp sử dụng tham chiếu this:

 Tránh xung đột tên khi tham số của phương

thức trùng tên với tên biến dữ liệu của Object

 Dùng truyền đối tượng hiện tại làm tham số

cho một phương thức khác (VD gọi đệ qui)

 Dùng với mục đích chỉ mục (Index)

pdf8 trang | Chuyên mục: Công Nghệ Phần Mềm | Chia sẻ: dkS00TYs | Lượt xem: 1647 | Lượt tải: 0download
Tóm tắt nội dung Bài giảng Thiết kế và cài đặt lớp - Đối tượng (Tiếp theo), để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
1OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com1
Class & Object (tt)
1
Thiết kế và cài đặt
lớp & đối tượng
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com2
8. Tham chiếu this
Khi một đối tượng đang thực thi một phương
thức (không phải là phương thức tĩnh), tham
chiếu this tự động trỏ đến đối tượng này.
Có 3 trường hợp sử dụng tham chiếu this:
Tránh xung đột tên khi tham số của phương
thức trùng tên với tên biến dữ liệu của Object
Dùng truyền đối tượng hiện tại làm tham số
cho một phương thức khác (VD gọi đệ qui)
Dùng với mục đích chỉ mục (Index)
2OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com3
Vd: this Xem thêm vd trang 25-26
public class Point
{ private int x,y;
public Point(int ox, int oy)
{
this.x = ox; // tương đương x = ox;
this.y = oy; // tương đương y = oy;
}
}
// Giả sử trong hàm Main ta khai báo như sau:
Point A = new Point(3,4);
Note:
Trong trường hợp này tham số truyền cho this
chính đối tượng A. Do đó: this.x chính là A.x
Tóm lại: Tham số truyền cho đối this chính là
đối tượng đi kèm với phương thức trong lời gọi
phương thức.
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com4
9. Đóng gói dữ liệu với thuộc tính
Thuộc tính là khái niệm cho phép truy cập trạng
thái của lớp thay vì thông qua truy cập trực tiếp
các biến thành viên, nó sẽ đựơc thay thế bằng
việc truy cập thông qua phương thức của lớp.
Nói cách khác Thuộc tính là các phương thức lấy
giá trị (get) và gán giá trị (set):
Chỉ đọc (read-only): chỉ có phương thức get
Chỉ ghi (write-only): chỉ có phương thức set
Vừa đọc vừa ghi (read/write): có cả hai phương
thức get và set
3OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com5
Khai báo Phương thức cho thuộc tính
public 
{
// phương thức lấy giá trị của thuộc tính
get
{ // trả về một giá trị cùng kiểu với biến thành viên
return BiểuThứcTrảVề;
}
// phương thức gán giá trị cho thuộc tính
set
{
BiếnThànhViên = value ;
}
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com6
VD minh họa
Public class Time
{ int _Hour, _Minute, _Second ;
public int Hour
{ set { _Hour = value ; }
get { return _Hour; }
}
public int Minute
{ set { _Minute = value ; }
get { return _Minute ; }
}
public int Second
{ set { _Second = value ; }
get { return _Second ; }
}
}
4OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com7
VD minh họa Xem thêm vd trang 28-29
Public class CSinhVien
{ string _MaSV, _Ten;
int _NamSinh ;
string _TenNguoiYeu; // No Access-Modifier
public string MaSV
{ // mã sinh viên read-only
get { return _MaSV; }
}
public string Ten
{ set { _Ten = value ; }
get { return _Ten ; }
}
public int NamSinh
{ set { _NamSinh = value ; }
get { return _NamSinh ; }
}
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com8
10. Toán tử (operator)
Trong C# toán tử là một phương thức tĩnh (static
method) dùng để quá tải (overload) một phép
toán nào đó trên các đối tượng.
Mục đích của toán tử là để viết mã chương trình
gọn gàng, dễ hiểu hơn, thay vì phải gọi phương
thức .
Vd: giả sử ta có lớp Phân Số có p. thức Cong
PhanSo ps1 = new PhanSo(2,4) ;
PhanSo ps2 = new PhanSo(1,3) ;
thay vì viết: ps3 = ps1.Cong(ps2)
ta viết: PhanSo ps3 = ps1 + ps2; nếu ta dùng
operator overloaded
5OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com9
10. Toán tử (operator) tt
Ta có thể quá tải các toán tử sau:
Toán học: + , - , * , / , %
Cộng trừ một ngôi: ++ , -- , -
Quan hệ so sánh: == , != , > , = , <=
Ép kiểu: ()
Cú pháp khai báo nguyên mẫu của một toán tử T:
public static KiểuTrảVề operator T (CácThamSố)
{
//các câu lệnh trong thân toán tử
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com10
10. Chú ý quá tải toán tử (operator overloaded)
Tham số của toán tử phải là tham trị (không
dùng các từ khóa ref, out).
Không được quá tải toán tử = (gán), && , || (and,
or logic), ?: (điều kiện), checked, unchecked,
new, typeof, as, is.
[ ] không được xem là một toán tử
Khi quá tải các toán tử dạng: +, -, *, / , % thì các
toán tử +=, -=, *=, /= , %= được quá tải tự động
Khi quá tải toán tử thì nên quá tải theo cặp đối
ngẫu. Chẳng hạn, khi quá tải toán tử == thì quá
tải thêm toán tử != …
6OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com11
10. Chú ý quá tải toán tử (operator overloaded)
Khi quá tải toán tử ==, != thì nên phát triển thêm
các phương thức Equals(), GetHashCode() để
đảm bảo luật “hai đối tượng bằng nhau theo toán
tử == hoặc phương thức Equals sẽ có cùng mã
băm”
Khi định nghĩa toán tử ép kiểu ta phải chỉ ra đây
là toán tử ép kiểu ngầm định (implicit) hay tường
minh (explicit)
Cú pháp định nghĩa toán tử ép kiểu:
public static [ implicit | explicit ] operator KiểuTrảVềT (Type V)
Trong đó Type V là biến cần ép sang kiểu KiểuTrảVềT
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com12
VD minh họa
Public class PhanSo
{
int Tu, Mau;
public PhanSo(int TuSo, int MauSo)
{
Tu = TuSo;
Mau = MauSo;
}
public static PhanSo operator + (PhanSo ps1, PhanSo ps2)
{
int MauMoi = ps1.Mau * ps2.Mau ;
int TuMoi = ps2.Mau * ps1.Tu + ps1.Mau * ps2.Tu;
return new PhanSo(TuMoi, MauMoi);
}
}
Xem thêm vd trang 31-33
7OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com13
11. Chỉ mục (Index)
Việc định nghĩa chỉ mục cho phép tạo
các đối tượng của lớp hoạt động giống
như một mảng ảo
Tức là các đối tượng có thể sử dụng
toán tử [ ] để truy cập đến một thành
phần dữ liệu nào đó.
Việc định nghĩa chỉ mục tương tự như
việc định nghĩa một thuộc tính.
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com14
11. Cú pháp tạo Chỉ mục (Index)
public KiểuTrảVề this [DanhSáchThamSố]
{ //Hàm đọc
get
{
// thân hàm đọc
}
// Hàm ghi
set
{
// thân hàm ghi
}
}
vd trang 34-35
8OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com15
11. Ghi chú về chỉ mục (Index)
Một chỉ mục phải có ít nhất một tham số, và
tham số có thể có kiểu bất kỳ.
Chỉ mục có thể chỉ có phương thức get.
Mặc dù chỉ mục là một đặc điểm thú vị của
C# nhưng cần phải sử dụng đúng mục đích
(sử dụng để đối tượng có thể họat động như
mảng, mảng nhiều chiều).
Một lớp có thể có nhiều chỉ mục nhưng
chúng phải có các dấu hiệu phân biệt với
nhau (tương tự như quá tải phương thức).
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com16
Q&A
Bài tập:
1. Đọc lại bài giảng
2. Làm các bài VD & bài tập trong GT
3. Đọc bài: Kế thừa
4. Buổi tới thảo luận & kiểm tra bài cũ
16

File đính kèm:

  • pdf02_Class_Object_2.pdf