Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 73 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
73
Dung lượng
2,33 MB
Nội dung
Lớp đối tượng v 3.0 - 09/2018 Lê Viết Mẫn - lvman@hce.edu.vn Lớp đối tượng học Programs = Data Structure + Algorithms Cấu trúc chương trình Tuần tự Rẽ nhánh Hàm Lặp Tổ chức liệu Kiểu liệu bool char short int long Lê Viết Mẫn - lvman@hce.edu.vn float double string array Lớp đối tượng học Programs = Object-Oriented Programming Cấu trúc chương trình Tuần tự Rẽ nhánh Hàm Lặp Tổ chức liệu Kiểu liệu bool char short int long Lê Viết Mẫn - lvman@hce.edu.vn float double string array class Lớp đối tượng cụ thể Bank Account chuyển mơ hình Lê Viết Mẫn - lvman@hce.edu.vn - nameCustomer : string - accountBalance : int = + deposit() + withdraw() + transfer() thành code sử dụng C# Lớp đối tượng Nội dung Primitives vs Objects Lập trình Hướng đối tượng Lớp đối tượng Một số vấn đề khác 4.1 Từ khoá this 4.2 Cấu tử 4.3 Các thành phần static 4.4 Thuộc tính, thuộc tính tự động 4.5 Biến thành phần đọc Lê Viết Mẫn - lvman@hce.edu.vn Lớp đối tượng Primitives vs Objects Lê Viết Mẫn - lvman@hce.edu.vn Lớp đối tượng Primitive data • Dạng liệu nhất, lưu trữ trực tiếp nhớ bool char • sbyte short int long byte ushort uint ulong float double decimal Thuộc vào kiểu trị int x = 17; x 17 int y = x; y 17 “value semantics” stack • • Tốn tử: +, -, /, * Tốn tử kết hợp: ++, , +=, *= Lê Viết Mẫn - lvman@hce.edu.vn Lớp đối tượng Object data • Cách lưu trữ nhiều liệu xử lý cho liệu thành phần string • Array List “reference semantics” Thuộc vào kiểu tham chiếu int[] x = new int[3]; x 0x0a10 int[] y = x; y 0x0a10 stack • 0 heap Hàm/Phương thức “hello”.Equals(“world”) [1, 2, 3].Reverse() Lê Viết Mẫn - lvman@hce.edu.vn Lớp đối tượng null • • Có nghĩa “no object” “giá trị 0” cho object string[] strArr = new string[5]; strArr 0x0a1b null null null null null heap stack • NullReferenceException strArr[0].Length • “” khơng phải null “”.Length // trả Lê Viết Mẫn - lvman@hce.edu.vn Lớp đối tượng Lập trình Hướng đối tượng Lê Viết Mẫn - lvman@hce.edu.vn 10 Lớp đối tượng Các thành phần static • Các thành phần static thành phần thuộc cấp lớp • Được triệu gọi trực tiếp từ lớp, hay dùng để chia sẻ cho tất đối tượng • Hàm thành phần static khơng có trỏ this, truy vấn thành phần static khác SavingAccount.cs class SavingAccount { double currBalance; static double currInterestRate = 0.04; public SavingAccount(double balance) { currBalance = balance; } public static void SetInterestRate(double newRate) { currInterestRate = newRate; } } Lê Viết Mẫn - lvman@hce.edu.vn 59 sa1 currInterestRate 0.04 sa2 sa3 Dù có tạo đối tượng giá trị biến static currInterestRate không đổi, thay đổi sử dụng hàm static SetInterestRate Lớp đối tượng Cấu tử static • Dùng để khởi gán giá trị cho biến thành phần static Giải pháp class SavingAccount { double currBalance; static double currInterestRate; class SavingAccount { double currBalance; static double currInterestRate; public SavingAccount(double balance) { currBalance = balance; } static SavingAccount() { currInterestRate = 0.04; } public SavingAccount(double balance) { currInterestRate = 0.04; currBalance = balance; } } } Giá trị biến tĩnh currInterestRate gán lại giá trị 0.04 đối tượng tạo Lê Viết Mẫn - lvman@hce.edu.vn class SavingAccount { static double currInterestRate = 0.04; 60 Lớp đối tượng Phép gán cấu tử chép Virus v = new Virus(0.1, 5); Virus v1 = v; v 0x0a10 0.1 v1 0x0a10 • C# không cung cấp cấu tử chép (chuyển đổi), nên bạn phải cài đặt cấu tử • chép giá trị biến thành phần cho public Virus(Virus virus) { reproductionRate = virus.reproductionRate; resistance = virus.resistance; } Lê Viết Mẫn - lvman@hce.edu.vn 61 Lớp đối tượng Cấu tử private • Là cấu tử đặc biệt, thuộc cấp lớp • • Dùng cho lớp có thành phần static • • Ngăn chặn việc tạo đối tượng lớp dạng Ví dụ : lớp Math Thường cài đặt dạng hàm cấu tử mặc định • Để ngăn chặn C# tự động tạo cấu tử mặc định public class Counter { private Counter() { } public static int currentCount; public static int IncrementCount() { return ++currentCount; } } Lê Viết Mẫn - lvman@hce.edu.vn 62 Lớp đối tượng Truy xuất biến thành phần • • Sử dụng từ khố public cho biến thành phần • Vi phạm tính chất an tồn liệu • Thay đổi liệu mà chưa qua kiểm tra tính hợp lý liệu (business rules) cài đặt sẵn lớp Sử dụng từ khoá private cho biến thành phần • • Định nghĩa cặp hàm lấy liệu (get) gán liệu (set) Định nghĩa thuộc tính (.NET Property) Lê Viết Mẫn - lvman@hce.edu.vn 63 Lớp đối tượng Hàm get hàm set class Employee { private string empName; public string GetName() { return empName; } } public void SetName(string name) { if (name.Length 15) empName = “”; else empName = value; } } Employee joe = new Employee(); joe.Name = “Joe”; • • • • Khơng có cặp dấu ngoặc, khơng có tham số Tên thuộc tính đặt theo ký pháp Pascal Kiểu trả thể kiểu liệu mà thuộc tính đóng gói Token value để thể giá trị truyền vào Vẫn thực kiểm tra tính hợp lý liệu trước thực gán liệu Lợi thuộc tính joe.Age++; Lê Viết Mẫn - lvman@hce.edu.vn 65 Lớp đối tượng Thuộc tính cấu tử • Cấu tử thường có kiểm tra hợp lý liệu • Có thể tận dụng thuộc tính public Employee(string name, int age, string ssn, float pay) { Name = name; Age = age; empSSN = ssn; Pay = pay; } Lê Viết Mẫn - lvman@hce.edu.vn 66 Lớp đối tượng Một số vấn đề thuộc tính • • • Điều khiển khả truy xuất thuộc tính public string SocialSecurityNumber { get { return empSSN; } protected set { empSSN = value; } } Thuộc tính đọc viết public string SocialSecurityNumber { get { return empSSN; } } Thuộc tính static class Employee { private static string companyName; public static string CompanyName { get { return companyName; } set { companyName = value; } } } Lê Viết Mẫn - lvman@hce.edu.vn 67 Lớp đối tượng Thuộc tính tự động • • • Đối với biến thành viên khơng cần kiểm tra tính hợp lệ liệu (business rules) dùng cú pháp thuộc tính tự động class Car { public string Name { get; set; } public int Speed { get; set; } public string Color { get; set; } } Trình biên dịch tự động định nghĩa biến thành phần ẩn tương ứng thời điểm biên dịch • Khơng thể sử dụng trực tiếp biến thành phần Thuộc tính tự động không hỗ trợ đọc ghi, giới hạn khả truy xuất public string OtherProperty{ get; protected set; } Lê Viết Mẫn - lvman@hce.edu.vn 68 Lớp đối tượng T.tính tự động g.trị mặc định • Mặc định, trình biên dịch gán giá trị mặc định cho biến thành phần ẩn • Lỗi với kiểu tham chiếu class Garage { public int NumberOfCars { get; set; } public Car MyAuto { get; set; } } Garage g = new Garage(); // cấu tử mặc định gọi // Lỗi MyAuto null Console.WriteLine(g.MyAuto.PetName); • Cần định nghĩa lại cấu tử mặc định Lê Viết Mẫn - lvman@hce.edu.vn 69 Lớp đối tượng Cú pháp khởi gán đối tượng • Cú pháp cho phép khởi gán giá trị cho thuộc tính mà khơng phụ thuộc vào cấu tử cài đặt • Điều kiện : Lớp có biến public thuộc tính public class Point { public int X { get; set; } public int Y { get; set; } public Point(int xVal, int yVal) { X = xVal; Y = yVal; } public Point() {} } Lê Viết Mẫn - lvman@hce.edu.vn 70 Lớp đối tượng Cú pháp khởi gán đối tượng static void Main() { Point firstPoint = new Point(); firstPoint.X = 10; firstPoint.Y = 10; Point anotherPoint = new Point(20, 20); // gọi không tường minh cấu tử mặc định Point finalPoint = new Point { X = 30, Y = 30 }; } • Gọi tường minh cấu tử mặc định Point finalPoint = new Point() { X = 30, Y = 30 }; • gọi Point finalPoint = new Point(10, 10) { X = 30, Y = 30 }; Lê Viết Mẫn - lvman@hce.edu.vn 71 Lớp đối tượng Biến thành phần đọc • Sử dụng từ khoá readonly class MyMathClass { public readonly double PI; public MyMathClass() { PI = 3.14; } } • • Giống : giá trị thay đổi sau khởi gán • Sử dụng : giá trị số bạn khơng biết trước, mà xác định • Biến thành phần đọc khơng phải static Khác : giá trị gán thời gian chạy (runtime), nên gán giá trị hàm cấu tử (và cấu tử) thời gian chạy (vd : đọc từ file) • muốn static phải thêm tường minh từ khố static Lê Viết Mẫn - lvman@hce.edu.vn 72 Lớp đối tượng Cảm ơn ý Câu hỏi ? Lê Viết Mẫn - lvman@hce.edu.vn 73 Lớp đối tượng ... lvman@hce.edu.vn 32 Lớp đối tượng Định nghĩa lớp Sử dụng lớp ` Virus.cs private - truy xuất bên lớp public - truy xuất private public Lê Viết Mẫn - lvman@hce.edu.vn 33 Lớp đối tượng private vs public... lvman@hce.edu.vn 27 Lớp đối tượng Định nghĩa lớp Sử dụng lớp Cài đặt lớp Virus (1/7) Virus.cs Lê Viết Mẫn - lvman@hce.edu.vn 28 Lớp đối tượng Định nghĩa lớp Sử dụng lớp Cài đặt lớp Virus (2/ 7) Virus.cs... Bitmap bm = new Bitmap (20 , 20 ); bm.Save("bitmap.png"); • Hàm tĩnh (từ khố static) - Gọi từ lớp Console.Write("Please enter a number :"); Lê Viết Mẫn - lvman@hce.edu.vn 12 Lớp đối tượng Định nghĩa