Tải bản đầy đủ (.pdf) (27 trang)

Bài giảng lập trình hướng đối tượng chương 5 nguyễn minh thành

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (367.87 KB, 27 trang )

1

Thiế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] :


2

Nhắc Lại
 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.


3

Nhắc lại (tt)
class <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 được
quyề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 đó.



4

Thiết Kế Các Phương Thức
• 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


5

Thiết Kế Các Phương Thức (tt)
• 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


6


Thiết Kế Các Phương Thức (tt)
• 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ếp
public 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);


7

Thiết Kế Các Phương Thức (tt)
• 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);



8

Thiết Kế Các Phương Thức (tt)
• 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


9

Thiết Kế Các Phương Thức (tt)
• Ví dụ 2: Thiết kế các hành động của lớp CHCN
▫ 2. Nhóm cập nhật
//Gián tiếp
public 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ồ)


10

Thiết Kế Các Phương Thức (tt)
• 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();


11

Thiết Kế Các Phương Thức (tt)
• 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);


12

Bài tập
• 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


13

Hàm Dựng (Contructor)
• 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.


14

Hàm Dựng (Contructor) (tt)
• 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;
}
...
}



15

Thuộc tính
• Để 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;}
}
}


16

Cài đặt phép toán (operator)
• 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à:

c = a.Cong(b);
Tương tự cho trường hợp nhân
c = a.Nhan(b);
• Cách này hơi gượng ép và không thể hiện hết ý nghĩa. Điều ta muốn
viết là:
c = a + b;
c = a * b;
Muốn làm được điều này, C# đã cung cấp cơ chế cài đặt phương thức
thông qua các ký hiệu phép toán (operator).


17

Cài đặt phép toán (operator)
• 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;



18

Cài đặt phép toán (operator)
Không dùng operator
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;
c = a.Cong(b);
Console.WriteLine("Ket qua: ");
c.Xuat();
}
}


19

Cài đặt phép toán (operator)
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;
}
public void Xuat()
{
Console.WriteLine("{0}/{1}", tuso, mauso);
}
}


20

Sự trùng tên phương thứ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ề kiểu hoặc
khác về số lượng tham số)

public
{ }
public
{ }
public

{ }
public
{ }

void Nhap()
void Nhap(int aa)
void Nhap(float aa)
void Nhap(int aa, float bb)


21

Sử dụng từ khoá this
• Ví dụ
class ViDu
{
int a, b;
public void GanGiaTri(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)
{
ViDu vd = new ViDu();
vd.GanGiaTri(21, 9);
vd.Xuat();
}
}


22

Sử dụng từ khoá (this)
• 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 ViDu
{
int a, b;
public void GanGiaTri(int a, int b)
{
this.a = a;
this.b = b;
}
public void Xuat()
{
Console.WriteLine("a={0}, b={1}", a, b);

}
}


23

Nạp chồng (Overloading)
• 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.
• Thông thường, phương thức toString là
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 đó.


24

Nạp chồng (Overloading)
phương thức xuất toString()
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;
}
public void Xuat()
{
Console.WriteLine("{0}/{1}", tuso, mauso);
}
}


25

Nạp chồng (Overloading)
phương thức xuất toString()
static void Main(string[] args)
{
CPHANSO a = new CPHANSO(3, 5);
Console.Write("Xuat bang phuong thuc xuat doi tuong: ");
a.Xuat();
Console.WriteLine("Xuat bang phuong thuc WriteLine: " +
a.ToString());
}
Kết quả:


×