• Thuộc tính hay dữ liệu mà phương thức truy cập sẽ tương ứng với đối tượng được tạo từ class đó... • Có 5 nhóm hành động phương thức▫ Nhóm khởi tạo: Cung cấp giá trị đầu cho đối tượng ▫
Trang 1Thiết Lập Các Phương Thức
Môn Lập Trình Hướng Đối Tượng – Chương 5
Nguyễn Minh Thành
[Mail] : Thanhnm@itc.edu.vn
Trang 2 Sự đóng gói là cơ chế ràng buộc dữ liệu và thao
tác trên dữ liệu để thành một thể thống nhất,
tránh được các tác động bất ngờ từ bên ngoài
Thể thống nhất này gọi là đối tượng
Trang 3class <Tên lớp>
{
<từ khóa truy xuất> thuộc tính;
<từ khóa truy xuất> phương thức();
}
• Chỉ có các phương thức nằm trong class mới đượcquyền truy cập thuộc tính (hay dữ liệu)
• Thuộc tính (hay dữ liệu) mà phương thức truy cập
sẽ tương ứng với đối tượng được tạo từ class đó
Trang 4• Có 5 nhóm hành động (phương thức)
▫ Nhóm khởi tạo: Cung cấp giá trị đầu cho đối tượng
▫ Nhóm cập nhật: Thay đổi giá trị thuộc tính của đối tượng
▫ Nhóm kiểm tra ràng buộc: Kiểm tra khởi tạo, cập nhật
▫ Nhóm cung cấp thông tin: Cung cấp thuộc tính nội bộ của đối tượng cho thế giới bên ngoài
▫ Nhóm xử lý tính toán: Xử lý tính toán có tác dụng tương tự thế giới cung cấp thông tin do bên ngoài gởi vào
Trang 5• Ví dụ 1: Thiết kế các hành động của lớp CDIEM
▫ 1 Nhóm khởi tạo
public void Nhap();
public void KhoiTao (int xx, int yy, char cc);
public void PhatSinh();
▫ 2 Nhóm cập nhật
//Trực tiếp
public void GanX (int xx);
public void GanY (int xx);
//property set: Tìm hiểu sau
Trang 6• Ví dụ 1: Thiết kế các hành động của lớp CDIEM
▫ 2 Nhóm cập nhật
//Gián tiếppublic void DichPhai(uint k);
public void DichTrai(uint k);
public void DichLen(uint k);
public void DichXuong(uint k);
public void DichXien1(uint k);
public void DichXien2(uint k);
▫ 3 Nhóm kiểm tra ràng buộc
public bool KiemTraX(int xx);
public bool KiemTraY(int yy);
Trang 7• Ví dụ 1: Thiết kế các hành động của lớp CDIEM
▫ 4 Nhóm cung cấp thông tin
public void Xuat();
public int LayX();
public int LayY();
public char LayKiTu();
//property get: Tìm hiểu sau
▫ 5 Nhóm xử lý tính toán
public float KhoangCach(CDIEM M);
public int KhoangCachX(CDIEM M);
public int KhoangCachY(CDIEM M);
Trang 8• Ví dụ 2: Thiết kế các hành động của lớp CHCN
▫ 1 Nhóm khởi tạo
public void Nhap();
public void KhoiTao (CDIEM M, int mm, int nn);
public void KhoiTao(int x, int y, int m, int n);public void KhoiTao(CDIEM X, CDIEM Y);
public void PhatSinh();
▫ 2 Nhóm cập nhật
//Trực tiếp
//property set: Tìm hiểu sau
Trang 9▫ 2 Nhóm cập nhật
//Gián tiếppublic void DichPhai(uint k);
public void DichTrai(uint k);
public void DichLen(uint k);
public void DichXuong(uint k);
public void TangNgang(uint k);
public void GiamNgang(uint k);
public void TangDung(uint k);
public void GiamDung(uint k);
public void Xoaythuan();
public void Xoaynghich();
//Xoay 1 góc 90o với tâm xoay là điểm gốc (Xoay thuận theo chiều kim đồng hồ)
Trang 10• Ví dụ 2: Thiết kế các hành động của lớp CHCN
▫ 3 Nhóm kiểm tra ràng buộc
public bool KiemTraM(int mm);
public bool KiemTraN(int nn);
▫ 4 Nhóm cung cấp thông tin
public void Xuat();
public void Xoa();
//property get: Tìm hiểu sau
public int ChuVi();
public long DienTich();
public double DuongCheo();
Trang 11• Ví dụ 2: Thiết kế các hành động của lớp CHCN
▫ 5 Nhóm xử lý tính toán
public int XetViTri(CDIEM M);
//-1: Bên trong, 0: Trên cạnh, 1: Bên ngoài
public int KhoangCachX(CDIEM M);
public int KhoangCachY(CDIEM M);
Trang 12• Thiết kế các lớp sau:
▫ Lớp phân số (CPHANSO)
▫ Lớp các đoạn thẳng trong mặt phẳng (CDOAN)
▫ Lớp các tam giác (CTAMGIAC)
▫ Lớp các đường tròn (CDTRON)
• Cài đặt hoàn chỉnh những lớp trên
• Cài đặt chương trình quản lý học sinh của một lớp học gồm tối
đa 50 học sinh
• Cài đặt chương trình quản lý học sinh của một trường học gồm tối đa 20 lớp học
Trang 13• Là hàm khởi tạo đặc biệt, hàm dựng có một số tính chất sau :
▫ Được gọi đến một cách tự động khi một đối tượng của lớp
được tạo ra (new) Dùng để khởi động các giá trị đầu cho
các thành phần dữ liệu của đối tượng thuộc lớp
▫ Tên phương thức giống với tên lớp và có mức độ truy cập là public
▫ Không có giá trị trả về
▫ Trước khi phương thức tạo lập chạy, đối tượng chưa thực sự tồn tại trong bộ nhớ, sau khi tạo lập hoàn thành, bộ nhớ lưu trữ một thể hiện hợp lệ của lớp
▫ Khi ta không định nghĩa một phương thức tạo lập nào cho
lớp, trình biên dịch sẽ tự động tạo một phương thức tạo lập mặc định cho lớp đó và khởi tạo các biến bằng các giá trị mặc định
Trang 14• Khai báo : Tên hàm dựng chính là tên của lớp
public tên_lớp([tham_số_khởi_tạo])
Ví dụ :
class SinhVien
{
string hoten; int namsinh; string gioitinh;
public SinhVien(){}; //Khởi tạo rỗng
//Khởi tạo có giá trị sẵn public SinhVien(string ht, int ns, string gt) {
hoten = ht;
namsinh = ns;
gioitinh = gt;
}
}
Trang 15• Để dễ dàng cho việc truy xuất dữ liệu trong lớp, C# đưa ra khái niệm thuộc tính.
public <kiểu_dữ_liệu> tên_thuộc_tính {
get { return dữ_liệu ; } set { dữ_liệu = value ; } }
Ví dụ :
class SinhVien
{
string hoten; int namsinh; string gioitinh;
public string HoTen {
get {return hoten;}
set {hoten = value;}
} }
Trang 16• Giả sử khi ta thiết kế lớp phân số (CPHANSO) có phương thức cộng (Cong), trừ (Tru), nhân (Nhan) và chia (Chia) 2 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à:
Trang 17• Công thức
public static TênLớp operator ký hiệu(TênLớp trái, TênLớp phải)
• Trong đó :
▫ 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
• Ví dụ: Giả sử có lớp phân số (CPHANSO)
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;
Trang 19Dùng operator
class CPHANSO {
private int tuso, mauso;
public CPHANSO(int t, int 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;
} public void Xuat() {
Console.WriteLine("{0}/{1}", tuso, mauso);
}
}
Trang 20• 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ề kiểu hoặc
Trang 21static void Main(string[] args)
{ ViDu vd = new ViDu(); vd.GanGiaTri(21, 9);
vd.Xuat();
} }
Trang 22• 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 đó
Console.WriteLine("a={0}, b={1}", a, b);
}
}
Trang 23• Một số phương thức đã được định nghĩa
mặc định cho các lớp Tuy nhiên, ta có thể
viết lại nó Điều này được gọi là nạp chồng phương thức.
phương thức mặc định của các lớp Thường
là trả về tên của lớp Ta có thể viết lại để
xuất ra nội dung của lớp đó.
Trang 24private int tuso, mauso;
public CPHANSO(int t, int m) {
Trang 25static void Main(string[] args)
{
CPHANSO a = new CPHANSO(3, 5);
Console.Write("Xuat bang phuong thuc xuat doi tuong: ");
Trang 27Hết chương 5
Môn Lập Trình Hướng Đối Tượng