Định nghĩa lớp Định nghĩa lớp Bởi: Khuyet Danh Người lập trình tạo kiểu liệu cách xây dựng lớp đối tượng vấn đề cần thảo luận chương Đây khả để tạo kiểu liệu mới, đặc tính quan trọng ngôn ngữ lập trình hướng đối tượng Chúng ta xây dựng kiểu liệu ngôn ngữ C# cách khai báo định nghĩa lớp Ngoài ta định nghĩa kiểu liệu với giao diện (interface) bàn Chương sau Thể lớp gọi đối tượng (object) Những đối tượng tạo nhớ chương trình thực Sự khác lớp đối tượng giống khác khái niệm loài mèo mèo Mun nằm bên chân ta Chúng ta đụng chạm hay đùa giỡn với khái niệm mèo thực điều với mèo Mun, thực thể sống động, không trừu tượng khái niệm họ loài mèo Một họ mèo mô tả mèo có đặc tính: có trọng lượng, có chiều cao, màu mắt, màu lông, chúng có hành động ăn ngủ, leo trèo, mèo, ví dụ mèo Mun chẳng hạn, có trọng lượng xác định kg, chiều cao 15 cm, màu mắt đen, lông đen Nó có khả ăn ngủ leo trèo, Lợi ích to lớn lớp ngôn ngữ lập trình khả đóng gói thuộc tính tính chất thực thể khối đơn, tự có nghĩa, tự khả trì Ví dụ muốn nội dung thể hay đối tượng lớp điều khiển ListBox Windows, cần gọi đối tượng chúng tự xếp, việc chúng làm ta không quan tâm, cần biết nhiêu Đóng gói với đa hình (polymorphism) kế thừa (inheritance) thuộc tính yếu ngôn ngữ lập trình hướng đối tượng Chương trình bày đặc tính ngôn ngữ lập trình C# để xây dựng lớp đối tượng Thành phần lớp, hành vi thuộc tính, xem thành viên lớp (class member) Tiếp theo chương trình khái niệm phương thức (method) dùng để định nghĩa hành vi lớp, trạng thái biến 1/8 Định nghĩa lớp thành viên hoạt động lớp Một đặc tính mà ngôn ngữ C# đưa để xây dựng lớp khái niệm thuộc tính (property), thành phần thuộc tính hoạt động giống cách phương thức để tạo lớp, chất phương thức tạo lớp giao diện cho bên tương tác với biến thành viên cách gián tiếp, ta bàn sâu vấn đề chương Định nghĩa lớp Để định nghĩa kiểu liệu hay lớp phải khai báo sau định nghĩa thuộc tính phương thức kiểu liệu Khai báo lớp cách sử dụng từ khoá class Cú pháp đầy đủ khai báo lớp sau: [Thuộc tính] [Bổ sung truy cập] class [: Lớp sở] { } Thành phần thuộc tính đối tượng trình bày chi tiết chương sau, thành phần bổ sung truy cập trình bày tiếp mục Định danh lớp tên lớp người xây dựng chương trình tạo Lớp sở lớp mà đối tượng kế thừa để phát triển ta bàn sau Tất thành viên lớp định nghĩa bên thân lớp,phần thân bao bọc hai dấu ({}) Trong ngôn ngữ C# phần kết thúc lớp đấu chấm phẩy giống khai báo lớp ngôn ngữ C/C++ Tuy nhiên người lập trình thêm vào trình biên dịch C# chấp nhận mà không đưa cảnh báo lỗi Trong C#, chuyện xảy lớp Như ví dụ mà tìm hiểu chương 3, hàm điều đưa vào lớp, kể hàm đầu vào chương trình (hàm Main()): public class Tester { public static int Main() { // } } Điều cần nói chưa tạo thể lớp, tức tạo đối tượng cho lớp Tester Điều khác lớp thể lớp? để trả lới cho câu hỏi bắt đầu xem xét khác kiểu liệu int biến kiểu int Ta có viết sau: int var1 = 10; nhiên ta viết int = 10; 2/8 Định nghĩa lớp Ta gán giá trị cho kiểu liệu, thay vào ta gán liệu cho đối tượng kiểu lịêu đó, trường hợp đối tượng biến var1 Khi tạo lớp mới, việc định nghĩa thuộc tính hành vi tất đối tượng lớp Giả sử lập trình để tạo điều khiển ứng dụng Windows, điều khiển giúp cho người dùng tương tác tốt với Windows, ListBox, TextBox, ComboBox, Một điều khiển thông dụng ListBox, điều khiển cung cấp danh sách liệt kê mục chọn cho phép người dùng chọn mục tin ListBox có thuộc tính khác nhu: chiều cao, bề dày, vị trí, màu sắc thể hành vi chúng như: chúng thêm bới mục tin, xếp, Ngôn ngữ lập trình hướng đối tượng cho phép tạo kiểu liệu lớp ListBox, lớp bao bọc thuộc tính khả như: thuộc tính height, width, location, color, phương thức hay hành vi Add(), Remove(), Sort(), Chúng ta gán liệu cho kiểu ListBox, thay vào ta phải tạo đối tượng cho lớp đó: ListBox myListBox; Một tạo thể lớp ListBox ta gán liệu cho thể Tuy nhiên đoạn lệnh chưa thể tạo đối tượng nhớ được, ta bàn tiếp Bây ta tìm hiểu cách tạo lớp tạo thể thông qua ví dụ minh họa 4.1 Ví dụ tạo lớp có chức hiểu thị thời gian ngày Lớp có hành vi thể ngày, tháng, năm, giờ, phút, giây hành Để làm điều lớp có thuộc tính hay gọi biến thành viên, với phương thức sau: Tạo lớp Thoigian đơn giản sau using System; public class ThoiGian { public void ThoiGianHienHanh() { 3/8 Định nghĩa lớp Console.WriteLine("Hien thi thoi gian hien hanh"); } // Các biến thành viên int Nam; int Thang; int Ngay; int Gio; int Phut; int Giay; } public class Tester { static void Main() { ThoiGian t = new ThoiGian(); t.ThoiGianHienHanh(); } } Kết quả: Hien thi thoi gian hien hanh - 4/8 Định nghĩa lớp Lớp ThoiGian có phương thức hàm ThoiGianHienHanh(), phần thân phương thức định nghĩa bên lớp ThoiGian Điều khác với ngôn ngữ C++, C# không đòi hỏi phải khai báo trước định nghĩa phương thức, không hỗ trợ việc khai báo phương thức tập tin sau định nghĩa tập tin khác C# tập tin tiêu đề, tất phương thức định nghĩa hoàn toàn bên lớp Phần cuối định nghĩa lớp phần khai báo biến thành viên: Nam, Thang, Ngay, Gio, Phut, va Giay Sau định nghĩa xong lớp ThoiGian, phần định nghĩa lớp Tester, lớp có chứa hàm thân thiện với hàm Main() Bên hàm Main có thể lớp ThoiGian tạo gán giá trị cho đối tượng t Bởi t thể đối tượng ThoiGian, nên hàm Main() sử dụng phương thức t: t.ThoiGianHienHanh(); Thuộc tính truy cập Thuộc tính truy cập định khả phương thức lớp bao gồm việc phương thức lớp khác nhìn thấy sử dụng biến thành viên hay phương thức bên lớp Bảng 4.1 tóm tắt thuộc tính truy cập lớp C# Thuộc tính truy cập Thuộc tính Giới hạn truy cập public Không hạn chế Những thành viên đánh dấupublic dùng phương thức lớp bao gồm lớp khác private Thành viên lớp A đánh dấu privatethì truy cập phương thức lớp A Thành viên lớp A đánh dấu protectedthì protected phương thức bên lớp A phương thức dẫn xuất từ lớp A truy cập internal Thành viên lớp A đánh dấu internal truy cập phương thức lớpnào khối hợp ngữ với A Thành viên lớp A đánh dấu protected internal truy cập protected phương thức lớp A, phương thức lớp dẫn xuất A, internal lớpnào khối hợp ngữ A 5/8 Định nghĩa lớp Mong muốn chung thiết kế biến thành viên lớp thuộc tính private Khi có phương thức thành viên lớp truy cập giá trị biến C# xem thuộc tính private mặc định nên ta không khai báo thuộc tính truy cập cho biến nên mặc định chúng private: // Các biến thành viên private int Nam; int Thang; int Ngay; int Gio; int Phut; int Giay; Do lớp Tester phương thức thành viên ThoiGianHienHanh lớp ThoiGian khai báo public nên lớp truy cập Ghi chú: Thói quen lập trình tốt khai báo tường minh thuộc tính truy cập biến thành viên hay phương thức lớp Mặc dù biết chắn thành viên lớp khai báo private mặc định Việc khai báo tường minh làm cho chương trình dễ hiểu, rõ ràng tự nhiên Tham số phương thức Trong ngôn ngữ lập trình tham số đối mục xem nhau, tương tự nói ngôn ngữ hướng đối tượng ta gọi hàm phương thức hay hành vi Tất tên điều tương đồng với Một phương thức lấy số lượng tham số nào, Các tham số theo sau tên phương thức bao bọc bên dấu ngoặc tròn () Mỗi tham số phải khai báo kèm với kiểu liệu ví dụ ta có khai báo định nghĩa phương thức có tên Method, phương thức không trả giá trị (khai báo giá trị trả void), có hai tham số kiểu int button: void Method( int param1, button param2) { // } Bên thân phương thức, tham số xem biến cục bộ, giống ta khai báo biến bên phương thức khởi tạo giá trị giá trị tham số truyền vào Ví dụ 4.2 minh họa việc truyền tham số vào phương thức, trường hợp hai tham số kiểu int float Truyền tham số cho phương thức using System; public class Class1 6/8 Định nghĩa lớp { public void SomeMethod(int p1, float p2) { Console.WriteLine("Ham nhan duoc hai tham so: {0} va {1}", p1,p2); } } public class Tester { static void Main() { int var1 = 5; float var2 = 10.5f; Class1 c = new Class1(); c.SomeMethod( var1, var2 ); } } Kết quả: Ham nhan duoc hai tham so: va 10.5 - 7/8 Định nghĩa lớp Phương thức SomeMethod lấy hai tham số int float hiển thị hình việc dùng hàm Console.WriteLine() Những tham số có tên p1 p2 xem biến cục bên phương thức Trong phương thức gọi Main, có hai biến cục tạo var1 var2 Khi hai biến truyền cho phương thức SomeMethod chúng ánh xạ thành hai tham số p1 p2 theo thứ tự danh sách biến đưa vào 8/8 ... phương thức tạo lớp giao diện cho bên tương tác với biến thành viên cách gián tiếp, ta bàn sâu vấn đề chương Định nghĩa lớp Để định nghĩa kiểu liệu hay lớp phải khai báo sau định nghĩa thuộc tính... cập trình bày tiếp mục Định danh lớp tên lớp người xây dựng chương trình tạo Lớp sở lớp mà đối tượng kế thừa để phát triển ta bàn sau Tất thành viên lớp định nghĩa bên thân lớp, phần thân bao bọc... 4/8 Định nghĩa lớp Lớp ThoiGian có phương thức hàm ThoiGianHienHanh(), phần thân phương thức định nghĩa bên lớp ThoiGian Điều khác với ngôn ngữ C++, C# không đòi hỏi phải khai báo trước định nghĩa