Bài giảng Lập trình hướng đối tượng - Chương 4: Properties - Đại học Ngoại ngữ - Tin học, TP.HCM

pptx 30 trang ngocly 3160
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 4: Properties - Đại học Ngoại ngữ - Tin học, TP.HCM", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptxbai_giang_lap_trinh_huong_doi_tuong_chuong_4_properties_dai.pptx

Nội dung text: Bài giảng Lập trình hướng đối tượng - Chương 4: Properties - Đại học Ngoại ngữ - Tin học, TP.HCM

  1. Click to editCHƯƠNG Master subtitle 4: style PROPERTIES Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM 1
  2. NỘI DUNG Lý do dùng properties Tạo properties Auto – Implemented properties Object Initializer 2
  3. LÝ DO DÙNG PROPERTIES 3
  4. Lý do dùng properties Ví dụ: class Time { private int seconds; } Nhu cầu: Bên ngoài lớp có thể truy cập giá trị seconds 4
  5. Lý do dùng properties Giải pháp “cổ điển”: Tạo method trả về giá trị second và method gán giá trị cho second class Time { private int seconds; public int GetSeconds() { return seconds; } public void SetSeconds(int seconds) { this.seconds = seconds; if (this.seconds < 0) this.seconds = 0; } } 5
  6. Lý do dùng properties Nhận xét Nhu cầu dùng method get và set cực kỳ nhiều Cách viết trên có một chút “cồng kềnh” class Program { public static void Main() { Time time = new Time(); int x = time.GetSeconds(); time.SetSeconds(90); } } 6
  7. Lý do dùng properties Một cách cực kỳ “thuận lợi” nhưng không ai dùng class Time { public int seconds; } class Program { public static void Main() { Time time = new Time(); int s = time.seconds; time.seconds = 90; } } C# cung cấp 1 giải pháp cho vấn đề này là Property 7
  8. TẠO PROPERTIES 8
  9. Tạo properties class Time class Time { { private int seconds; private int seconds; public int Seconds public int GetSeconds() { { get return seconds; { } return seconds; } public void SetSeconds(int seconds) set { { this.seconds = seconds; this.seconds = value; if (this.seconds < 0) if (this.seconds < 0) this.seconds = 0; this.seconds = 0; } } } } } 9
  10. Tạo properties Khai báo property: có 3 phần Từ khóa ‘public’: Ai cũng có thể dùng property Kiểu của property Tên property Thân của property get: thực thi khi ai đó đọc giá trị của property set: thực thi khi ai đó gán giá trị cho property 10
  11. Tạo properties Nội dung của get và set giống hàm GetSeconds và SetSeconds Hàm SetSeconds có tham số còn set không có tham số mà dùng từ khóa value đại diện cho giá trị gán cho property 11
  12. Tạo properties class Program class Program { { public static void Main() public static void Main() { { Time time = new Time(); Time time = new Time(); time.Seconds = 90; time.SetSeconds(90); } } } } 12
  13. Tạo properties Tóm tắt { get { return ; } set { } } 13
  14. Tạo properties Backing field Property có get hay set giá trị cho field thì field đó gọi là backing field của property Một property không nhất thiết có backing field 14
  15. Tạo properties class Time public int Minutes { { private int seconds; get { public int Seconds return seconds/60; { } get } { return seconds; public int Hours } { set get { { seconds = value; return seconds/3600; } } } } } 15
  16. Bài tập thực hành 4.1 Trong lớp TaiKhoan ở bài tập 3.1 thay thế các phương thức Get/Set thành các properties. Và kiểm tra tính hợp lệ trước khi thay đổi dữ liệu của field. Số tiền phải là số dương (Sotien > 0) 16
  17. Bài tập thực hành 4.2 Trong lớp Sach ở bài tập 3.4 thay thế các phương thức Get/Set thành các properties. Và kiểm tính hợp lệ trước khi thay đổi dữ liệu của field. Tên sách không được là chuỗi rỗng. Giá sách phải là số dương. 17
  18. Bài tập thực hành 4.3 Trong lớp SinhVien ở bài tập 3.2 thay thế các phương thức Get/Set thành các properties. Và kiểm tính hợp lệ trước khi thay đổi dữ liệu của field. Họ tên không được là chuỗi rỗng. Năm sinh phải là số dương. Địa chỉ không được là chuỗi rỗng. 18
  19. Bài tập thực hành 4.4 Trong lớp Circle ở bài tập 3.3 thay thế các phương thức Get/Set thành các properties. Và kiểm tính hợp lệ trước khi thay đổi dữ liệu của field. Bán kính phải lớn hơn không. 19
  20. AUTO – IMPLEMENTED PROPERTIES 20
  21. Auto – Implemented properties class Time class Time { { private int seconds; public int Seconds { get; set; } } public int Seconds { get Nhận xét { return seconds; AIP tự động tạo backing } field và Property set { seconds = value; } } } 21
  22. OBJECT INITIALIZER 22
  23. Object Initializer Khi tạo đối tượng, có thể dùng các properties để khởi tạo giá trị class Book { private string title; private string author; public string Author public int Pages private int pages; { { get get public string Title { { { return author; return pages; get } } { set set return title; { { } set author = value; pages = value; { } } title = value; } } } } } 23
  24. Object Initializer class Program { static void Main(string[] args) { Book book = new Book() { Title = "Don't Make Me Think", Author= "Steve Krug" }; } } class Program { static void Main(string[] args) { Book book = new Book(); book.Title = “Don't Make Me Think”; book.Author = “Steve Krug”; } } 24
  25. Điểm chính Lý do dùng properties Truy cập field Code dễ đọc Một field không nhất thiết chỉ có 1 property Auto – Implemented properties Vừa tạo properties vừa tạo fields Object Initializer Dùng field khi tạo đối tượng Book book = new Book() { Title = "Don't Make Me Think", Author= "Steve Krug" }; 25
  26. Bài tập thực hành 4.5 Trong lớp Circle ở bài tập 4.4 vừa cài đặt ở trên. Tạo mảng đối tượng của lớp Circle. Trong phương thức Main() thực hiện các yêu cầu sau: Khai báo và nhập n hình tròn. Xuất thông tin n hình tròn ra màn hình. Tính và xuất diện tích của từng hình tròn. Tìm diện tích lớn nhất trong n hình tròn đó. 26
  27. Bài tập thực hành 4.6 Tạo lớp Color được biểu diễn bằng các giá trị red, green, blue (có giá trị từ 0 đến 255) và alpha (transparency – trong suốt – từ 0 đến 255: 0 là trong suốt, 255 là đậm đặc). Thêm các instance variables (fields). Thêm default constructor (255,255,255: white). Thêm constructor có tham số. Thêm copy constructor. Thêm properties. Thêm phương thức tính giá trị xám của màu (tính trung bình cộng 3 màu). 27
  28. Bài tập thực hành 4.7 Tạo lớp Ball, sử dụng lớp Color làm field. Gồm các fields: kích thước (size hay radius), màu sắc (color) và số lần ném banh (timeOfThrown). Khai báo các fields cho Ball (field color nên dùng kiểu Color đã tạo từ bài trước). Thêm default constructor: size=0, soLanNem=0, màu mặc địn. Thêm constructor có tham số. Thêm copy constructor. Thêm properties (có kiểm tra ràng buộc). Thêm phương thức Pop (banh nổ => size=0). 28
  29. Bài tập thực hành 4.7 (tt) Tạo lớp Ball (tt) Thêm phương thức Throw (cộng thêm 1 khi banh chưa bị nổ). Thêm phương thức Input() để nhập thông tin trái banh. Thêm phương thức Output() để xuất thông tin trái banh. Viết phương thức Main() • Khai báo và tạo n trái banh có giá trị mặc định (n nhập từ bàn phím). • Nhập lại thông tin trái banh thứ 0. • Xuất ra n trái banh. • Ném trái banh thứ 1, 2. • Cho nổ trái thứ 1 và ném trái thứ 1. • In số lần ném các trái banh. 29
  30. Tài liệu tham khảo bài tập Bài tập OOP của ThS. Tôn Quang Toại, Khoa CNTT, Huflit, 2016. 30