Bài giảng Thiết kế và cài đặt lớp - Đối tượng
Lớp (Class): Để định nghĩa một kiểu dữ liệu mới
hay một lớp đầu tiên phải khai báo rồi sau đó mới
định nghĩa các thành phần dữ liệu (thuộc tính) và
các hàm (phương thức) của kiểu dữ liệu đó.
Cú pháp:
[Mức độ truy cập] Class <Tên lớp> [:Lớp cơ sở]
{
<Phần thân của lớp>
}
1OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com1 Class & Object 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 1. Class Lớp (Class): Để định nghĩa một kiểu dữ liệu mới hay một lớp đầu tiên phải khai báo rồi sau đó mới định nghĩa các thành phần dữ liệu (thuộc tính) và các hàm (phương thức) của kiểu dữ liệu đó. Cú pháp: [Mức độ truy cập] Class [:Lớp cơ sở] { } 2OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com3 Class & Object (tt) Mức độ truy cập: gồm các từ khóa sau public, private, internal, protected, internal protected Tên lớp (name class): định danh của lớp Lớp cơ sở (basic class): lớp cha Thân lớp: được bao bọc bới dấu { } là nơi chứa khai báo: Các thành phần dữ liệu (data members) Các phương thức (methods) OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com4 Mức độ truy cập (Access Modifier : A.M) A.M Ý nghĩa public Thành viên được nhìn thấy bởi bất kỳphương thức nào của lớp khác. private Chỉ có các phương thức của lớp A (cùng lớp)mới được phép truy cập đến thành phần này protected Chỉ có các phương thức của lớp A hoặc của lớp dẫn xuất (con) từ A mới được phép truy cập đến thành phần này internal Các thành viên internal trong lớp A được truy xuất trong các phương thức của bất kỳ lớp trong khối kết hợp (assembly) của A protected internal Tương đương với protected or internal 3OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com5 Ghi chú về Access Modifier Mặc định Mức độ truy cập là private nếu chúng ta bỏ trống từ khóa về Khả năng truy cập Mức độ truy cập internal cho phép truy cập: Các phương thức của các lớp trong cùng một khối kết hợp (assembly) với lớp đang định nghĩa. Các lớp thuộc cùng một project có thể xem là cùng một khối kết hợp. Các Project khác với Project hiện tại không thể truy cập các đối tượng có múc truy cập là internal OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com6 ví dụ minh họa CPhanSo Tu Mau Nhap() Xuat() Cong() Tru() Nhan() Chia() ToiGian() KiemTra() CPhanSo 3 5 Tên lớp Thuộc tính (thành phần dữ liệu) Phương thức Sơ đồ lớp Sơ đồ thể hiện 4OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com7 VD minh họa namespace Toanhoc // xem trang 90 { Public class CPhanSo { int Tu, Mau; //private members public void Nhap() { // Code nhập tử và mẫu số } public void Xuat() { // Code xuất tử và mẫu số } } } Một namespace có bao nhiêu class và class được viết ở đâu trong namespace? OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com8 2. Object Object thể hiện của 1 class ra thành 1 thực thể Có thể tạo nhiều object từ 1 class, từng object trong cùng class có những đặc tính khác nhau Object là 1 kiểu tham chiếu nên dữ liệu được tạo ra ở vùng nhớ Heap và phải dùng toán tử new để cấp phát object syntax: ClassName ObjectName ; ObjectName = new ClassName([parameter list]) ; hoặc ClassName ObjectName = new ClassName([param list]) ; 5OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com9 VD trang 7-8 namespace LopDoiTuongHCN { Public class HCN { protected float Dai, Rong; public float ChuVi() { return (Dai+Rong)*2 ; } public float DienTich() { return Dai*Rong ; } } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com10 3. Phương thức tạo lập (constructor) // thiết lập Constructor có cùng tên với tên của class Constructor thường có thuộc tính public. Constructor không có giá trị trả về và không khai báo void Có thể có nhiều Constructor trong cùng lớp (overloaded function) Khi một lớp có nhiều Constructor, việc tạo các đối tượng phải kèm theo các tham số phù hợp với một trong các Constructor đã khai báo. 6OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com11 3. Phương thức tạo lập (constructor) (tt) Constructor được gọi tự động khi một đối tượng của lớp được tạo ra. Trình biên dịch sẽ tự động tạo một constructor mặc định cho lớp đó và khởi tạo các biến bằng các giá trị mặc định. Nếu lớp chỉ có 1 constructor có tham số thì khi khởi tạo đối tượng (= new) ta phải truyền tham số cho constructor. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com12 Vd: Where is constructor and member Variables ? // Define Constructor // Biến thành viên - private xem thêm VD: trang 10-11 // Use Constructor 7OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com13 4. Copy constructor Phương thức tạo lập sao chép (Copy constructor) khởi gán giá trị cho đối tượng mới bằng cách sao chép dữ liệu của đối tượng đã tồn tại (cùng kiểu). OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com14 VD: copy constructor public ThoiGian(ThoiGian tg) { Nam = tg.Year; Thang = tg.Month; Ngay = tg.Date; Gio = tg.Hour; Phut = tg.Minute; Giay = tg.Second; } Khi đó cú pháp (syntax) khai báo t2 là: // Giải sử t1 đã được tạo và có giá trị t.gian hiện hành ThoiGian t2 = new Thoigian(t1) ; 8OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com15 5. Quá tải hàm (overloaded function) // nạp chồng Là định nghĩa các hàm cùng tên nhưng khác tham số hoặc kiểu trả về. Hàm thích hợp nhất được gọi khi chạy chương trình. Public class Date { public Date() { // Coding here } public Date(DateTime dt) { // Coding here } public Date(Date ExistingDate) { // Coding here } } vd: xem trang 12-15 OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com16 6. Sử dụng hàm thành viên tĩnh (static) Những thuộc tính và phương thức trong một lớp có thể là những thành viên thể hiện (instance members) hay những thành viên tĩnh (static members). instance members hay thành viên của đối tượng liên quan đến thể hiện của một kiểu dữ liệu Trong khi static members (có từ khóa static đứng trước) được xem như một phần của lớp. 9OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com17 6. Sử dụng hàm thành viên tĩnh (static) (tt) Việc truy cập đến thành viên tĩnh phải thực hiện thông qua tên lớp (không được truy cập thành viên tĩnh thông qua đối tượng) // điều này khác với ngôn ngữ C++. Cú pháp truy cập static members C# : TênLớp.TênThànhViênTĩnh Phương thức tĩnh hoạt động ít nhiều giống như phương thức toàn cục thảo luận: Phương thức tĩnh trùng tên thì sao? Phương thức tĩnh có thuộc đối tượng nào không? VD xem trang 16-17 OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com18 7. Tham số của phương thức Truyền tham trị bằng tham số kiểu giá trị Truyền tham chiếu bằng tham số kiểu giá trị với từ khóa ref Truyền tham chiếu với tham số kiểu giá trị bằng từ khóa out (từ khóa out cho phép ta sử dụng tham chiếu mà không cần phải khởi tạo) Truyền tham trị với tham số thuộc kiểu tham chiếu; (chỉ có thể thực hiện các thao tác làm thay đổi các dữ liệu thành phần của đối số) Truyền tham chiếu với tham số thuộc kiểu dữ liệu tham chiếu VD xem trang 18-24 10 OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com19 Q&A Bài tập: 1. Đọc lại bài giảng 2. Làm bài tập 3. Đọc tiếp bài: Lớp & đối tượng 4. Buổi tới thảo luận & kiểm tra bài cũ 19 OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com20 int uscln(int a,int b) { while(a*b) { if(a>b) a%=b; else b%=a; } return (a+b); } int UCLN(int a,int b) { a=abs(a); b=abs(b); if(a==b) return (a); else if(a>b) return(UCLN(a-b,b)); else return(UCLN(a,b-a)); } int BCNN(int a, int b) { return ((a*b)/UCLN(a,b)); }
File đính kèm:
- 02_Class_Object_1.pdf