Bài giảng Lập trình hướng đối tượng trong C #: Chương 3 - GV. Phạm Mạnh Cương
CHƯƠNG 3: Lớp và đối tượng Nội dung chính Định nghĩa lớp Tạo đối tượng Sử dụng các thành viên tĩnh Truyền tham số Hàm dựng và nạp chồng phương thức Đóng gói dữ liệu với property 1. Định nghĩa lớp Lớp trong C# cho phép người lập trình tự định nghĩa các kiểu dữ liệu phức tạp (user-defined types) và được sử dụng tương tự như kiểu dữ liệu có sẵn (built-in data types). Lớp thường được sử dụng để định nghĩa các vấn đề trừu tượng như: ngày tháng, vector … Lớp cho phép tách rời phần cài đặt (implementation) và phần giao diện (interface). 1.Định nghĩa lớp (tt) Một lớp có chứa dữ liệu (member data) và hàm (member function). Class data1 data2 data3 functiona() functionb() functionc() Ví dụ class Employee // khai báo tên lớp { // từ khóa cho biết không thể truy nhập từ ngoài lớp private int EmpID ; // member data private char EmpName[30]; private float EmpSalary; // từ khóa cho biết có thể truy nhập từ ngoài lớp public void AddEmployee(); // member function }; Bổ từ truy xuất Từ khoá Giải thích public Truy xuất mọi nơi protected Truy xuất trong nội bộ lớp hoặc trong các lớp con private (mặc định) Chỉ được truy xuất trong nội bộ lớp Ví dụ using System; public class Time { // phương thức public public void DisplayCurrentTime() { Console.WriteLine("stub for DisplayCurrentTime"); } // các biến private private int Year; int Month; int Date; public int Hour,Minute, Second; } public class Tester { static void Main() { Time t = new Time(); t.DisplayCurrentTime(); } } Điều khiển truy nhập Class private public data1 data2 functiond() functiona() functionb() functionc() Phần được khai báo với từ khóa private chỉ được truy nhập bởi các hàm thành phần của cùng class Phần được khai báo với từ khóa public có thể được truy nhập tại bất kỳ nơi nào trong chương trình 2.Tạo đối tượng Cú pháp khai báo đối tượng và cấp phát vùng nhớ cho đối tượng: TênLớp TênBiếnĐốiTượng; TênBiếnĐốiTượng = new TênLớp(DanhSáchĐốiSố); hoặc TênLớp TênBiếnĐốiTượng = new TênLớp(DanhSáchĐốiSố); Chú ý: • Sau khi khai báo biến đối tượng thì biến đó chỉ là một con trỏ. • Sau khi cấp phát bắng từ khóa new thì biến trỏ tới một đối tượng thực sự. public void Xuat() { Console.WriteLine("Hinh chu nhat: Dai = {0}, Rong = {1}", Dai, Rong); } } class Application { static void Main(string[] args) { HCN h; h = new HCN(); h.Nhap(); h.Xuat(); Console.WriteLine("Chu vi hinh chu nhat: {0}", h.ChuVi()); Console.WriteLine("Dien tich hinh chu nhat: {0}", h.DienTich()); Console.ReadLine(); } } } 2.Tạo đối tượng Ví dụ: Chương trình nhập chiều dài, chiều rộng của hình chữ nhật và xuất ra diện tích, chu vi của hình chữ nhật. using System; namespace LopDoiTuongHCN { class HCN { protected float Dai, Rong; public float ChuVi() { return (Dai + Rong )*2; } public float DienTich() { return Dai* Rong; } public void Nhap() { Console.WriteLine("Nhap chieu dai: "); Dai = float.Parse(Console.ReadLine()); Console.WriteLine("Nhap chieu rong: "); Rong = float.Parse(Console.ReadLine()); } [...]... public class Cat { public Cat() { instances++; } public static void HowManyCats() { Console.WriteLine("{0} cats adopted",instances); } public void HowManyCats1() { Console.WriteLine("{0} cats adopted", instances); } private static int instances = 0; public static int instances1 = 0; } 3 Sử dụng c c trường tĩnh (tt) public class Tester { static void Main() { Cat c = new Cat(); //Truy cap vao phuong thuc... đư c dùng để tham chiếu đến chính bản thân c a đối tượng đó Ví dụ: public void SomeMethod (int hour) { this.hour = hour; } 3. Sử dụng c c thành viên tĩnh Phương th c tĩnh (static) đư c nói là hoạt động trong lớp Do đó, nó không thể đư c tham chiếu this chỉ tới Phương th c static c ng không truy c p tr c tiếp vào c c phương th c không static đư c mà phải dùng qua thể hiện c a đối tượng Vi c truy c p... existingTimeObject.Date; Hour = existingTimeObject.Hour; Minute = existingTimeObject.Minute; Second = existingTimeObject.Second; } Nạp chồng phương th c Ta muốn c nhiều phương th c cùng tên mà mỗi phương th c lại c c c tham số kh c nhau, số lượng tham số c ng c thể kh c nhau Như vậy, ý nghĩa c a c c phương th c đư c trong sáng hơn và c c phương th c linh động hơn trong nhiều trường hợp Nạp chồng cho phép... ko Static phải tạo 1 đối tượng c. HowManyCats1(); //Khong the truy cap vao phuong thuc Static //bang this, hay the hien //đoi tuong ma Tendoituong.phuongthuc_static Cat.HowManyCats(); Cat frisky = new Cat(); Cat.HowManyCats(); Cat whiskers = new Cat(); Cat.HowManyCats(); } } 4 Truyền tham số Trong C# , ta c thể truyền tham số cho phương th c theo kiểu tham chiếu ho c tham trị Truyền bằng tham chiếu... Second = dt.Second; Kết quả: } 11/16/2000 16:21:40 Hàm tạo sao chép Hàm tạo sao chép khởi tạo đối tượng dựa trên một đối tượng kh c thu c cùng lớp Mỗi lớp c một hàm tạo sao chép m c định – c một tham số là đối tượng c a c ng một lớp Ta c thể định nghĩa lại hàm tạo sao chép Một hàm dựng sao chép public Time(Time existingTimeObject) { Year = existingTimeObject.Year; Month = existingTimeObject.Month;... public class Tester { static void Main( ) { int howManyPeople = 5; float pi = 3. 14f; MyClass mc = new MyClass( ); mc.SomeMethod(howManyPeople, pi); } } Trong ví dụ trên phương th c Main() là tĩnh và phương th c SomeMethod() không là tĩnh 3. Sử dụng c c trường tĩnh (tt) C ch dùng chung c c biến thành viên tĩnh là giữ vết c a một số c c thể hiện mà hiện tại nó đang tồn tại trong lớp đó using... Property không c tham số và c p ngo c Trong thân property dùng hai từ khóa get/set tương ứng cho hai hành động lấy/thiết đặt giá trị thu c tính Phương th c get Thân c a phương th c truy c p get c ng giống như c c phương th c kh c nhưng phương th c này trả về một đối tượng kiểu là một đ c tính c a lớp Ví dụ muốn lấy Hour như sau: get { return hour; } Phương th c set Phương th c set thiết lập giá trị... tham chiếu Một hàm chỉ c thể trả về một giá trị Trong trường hợp muốn nhận về nhiều kết quả, ta sử dụng chính c c tham số truyền cho hàm như c c tham số c đầu ra (chứa trị trả về) Ta gọi tham số truyền theo kiểu này là tham chiếu Ví dụ Trị trả về trong tham số public class Time { // một phương th c public public void DisplayCurrentTime() { System.Console.WriteLine("{0}/{1}/{2} {3} :{4}:{5}“, Month,... phép ta làm đư c vi c này Ví dụ Nạp chồng hàm dựng public class Time { // public accessor methods public void DisplayCurrentTime( ) { System.Console.WriteLine("{0}/{1}/{2} {3} : {4}:{5}", Month, Date, Year, Hour, Minute, Second); } // constructors public Time(System.DateTime dt) { Year = dt.Year; Month = dt.Month; Date = dt.Day; Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second; } public Time(int... đến thành viên tĩnh (static) 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) theo c pháp: TênLớp.TênThànhViênTĩnh Ví dụ Ví dụ 4‑6 C ch sử dụng phương th c tĩnh using System; public class MyClass { public void SomeMethod(int firstParam, float secondParam) { Console.WriteLine("Here are the parameters received: {0}, {1}", firstParam, secondParam); } } . dt.Minute; Second = dt.Second; } // biến thành viên private private int Year; private int Month; private int Date; private int Hour; private int Minute; private int Second; } Ví dụ (tt) public class Tester { static. Cat(); //Truy cap vao phuong thuc ko Static phải tạo 1 đối tượng c.HowManyCats1(); //Khong the truy cap vao phuong thuc Static //bang this, hay the hien //đoi tuong ma Tendoituong.phuongthuc_static . tên lớp { // từ khóa cho biết không thể truy nhập từ ngoài lớp private int EmpID ; // member data private char EmpName[30]; private float EmpSalary; // từ khóa cho biết có thể truy nhập từ ngoài