BÀI 9 ĐỊNH NGHĨA CÁC THUỘC TÍNH, PHƯƠNG THỨC HÀNH
2. Định nghĩa các phương thức hành động cho lớp đối tượng
Phương thức khởi tạo – Constructor
Phương thức khởi tạo là phương thức của lớp, nó được thi hành ngay khi đối tượng được tạo (bởi toán tử new), phương thức khởi tạo có tên trùng với tên của lớp, không có kiểu trả về.
Ví dụ bổ sung thêm phương thức khởi tạo vào lớp Box ở trên:
Nếu khai báo vào khởi tạo giống như ở trên chương trình sẽ báo lỗi vì khi tạo đối tượng Box mới cần gán các giá trị ban đầu cho đối tượng: chiều dài, chiều rộng, chiều cao.
Lúc này có thể sử như sau:
Kết quả tương tự như ví dụ trên, việc sử dụng hàm khởi tạo đảm bảo dữ liệu của đối tượng bắt buộc phải khởi tạo ngay khi đối tượng đó được tạo – tránh việc sử dụng đối tượng mà dữ liệu không chính xác.
Phương thức Destructor trong C#
Một destructor trong C#, là một hàm thành viên đặc biệt của một lớp, được thực thi bất cứ khi nào một đối tượng của lớp đó thoát ra khởi phạm vi. Một destructor có tên giống tên lớp với một dẫu ngã (~) ở trước và nó có thể: không trả về một giá trị hoặc không nhận bất kỳ tham số nào.
Destructor trong C# có thể rất hữu ích để giải phóng tài nguyên bộ nhớ trước khi thoát khỏi chương trình. Destructor không thể bị kế thừa hoặc nạp chồng.
Ví dụ sau minh họa khái niệm về destructor trong C#:
Chương trình được viết trong Program.cs
Kết quả thực hiện chương trình
Hình 9.1. Kết quả gọi class Box và truyền tham số
Quá tải (Overloading) phương thức
Kỹ thuật quá tải phương thức (Method Overloading) là cách thức triển khai khái niệm tính đa hình của lập trình hướng đối tượng. Quá tải phương thức là các phương thức có cùng tên nhưng tham số khác nhau (hàm có thể trả về kiểu dữ liệu khác nhau)
Tính đa hình (polymorphism) là cách ứng xử của đối tượng - ứng xử này là
khác nhau tùy thuộc vào tình huống cụ thể.
Public static void WriteLine();
public static void WriteLine(bool value);
public static void WriteLine(decimal value);
public static void WriteLine(int value);
...
Điều này giúp cho bạn khi bạn gọi Console.Writeline(a), tùy thuộc vào kiểu dữ liệu của a mà một hàm WriteLine tương ứng được thi hành.
Ví dụ:
public class OverloadingExample {
public static int Sum(int a, int b)
{
return a + b;
}
public static double Sum(double a, double b)
{
return a + b;
}
}
Lớp trên có hàm Sum quá tải, tùy thuộc vào kiểu tham số mà hàm Sum cụ thể được gọi.
double a = 1;
double b = 2;
var c = OverloadingExample.Sum(a, b); // c = 3 có kiểu double
int a = 1;
int b = 2;
var c = OverloadingExample.Sum(a, b); // c = 3 nhưng có kiểu int
Chú ý: Khai báo hai hàm cùng tên, giống nhau hoàn toàn về tham số chỉ khác kiểu trả về sẽ gây lỗi.
Tính đóng gói lập trình hướng đối tượng
Tính đóng gói mục đích hạn chế tối đa việc can thiệp trực tiếp vào dữ liệu, hoặc thi hành các tác vụ nội bổ của đối tượng. Nói cách khác, một đối tượng là hộp đen đối với các thành phần bên ngoài, nó chỉ cho phép bên ngoài tương tác với
C# triển khai tính đóng gói này chính là sử dụng các Access Modifiers: public
private protected internal khi khai báo lớp, phương thức, thuộc tính, trường dữ liệu (biến).
Ví dụ:
class Student
{
private string Name;
}
Khi sử dụng
var s = new Student();
s.Name = “ABC”;
Biên dịch sẽ lỗi error CS0122: ‘Student.Name’ is inaccessible due to its protection level. Vì trường Name là private không thể truy cập bằng code bên ngoài lớp như trên. Nhưng nếu thay bằng public thì không lỗi.
Khi lập trình cố gắng tối đa ẩn thông tin ra bên ngoài lớp càng nhiều càng tốt để đảm bảo tính đóng gói của kỹ thuật lập trình OOP, nó giúp cho code dễ bảo trì
và giám sát lỗi.
Câu hỏi ôn tập và bài tập
1. Lớp đối tượng sinh viên bao gồm các thông tin: masv (mã sinh viên), tennv (tên sinh viên), ngaysinh (ngày sinh), diachi (địa chỉ), diemtoan (điểm toán), diemvan (điểm văn). Viết các phương thức phù hợp cho lớp để gán thông tin, tính điểm trung bình.
2. Lớp đối tượng đồng hồ bao gồm các thông tin: thoigian, gio, phut, giay. Viết phương thức đổi ra giây của dữ liệu được nhập vào
3. Lớp đối tượng sản phẩm bao gồm các thông tin: masp (mã sản phẩm), tensp (tên sản phẩm), gia (giá), ngaynhap (ngày nhập), ngayxuat (ngày xuất). Viết phương thức kiểm tra dữ liệu nhập: ngày xuất phải sau ngày nhập.