Bài giảng Cơ sở Lập trình 1 - Chương 3: Lập trình hướng đối tượng trong C#

pptx 28 trang huongle 3110
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cơ sở Lập trình 1 - Chương 3: Lập trình hướng đối tượng trong C#", để 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_co_so_lap_trinh_1_chuong_3_lap_trinh_huong_doi_tuo.pptx

Nội dung text: Bài giảng Cơ sở Lập trình 1 - Chương 3: Lập trình hướng đối tượng trong C#

  1. Chương 3 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG C#
  2. Nội dung 1 Lớp và đối tượng 2 Tạo và huỷ đối tượng 3 Truyền tham số 4 Nạp chồng hàm 5 Đóng gói dữ liệu với thuộc tính 6 Kế thừa và đa hình 7 Lớp trừu tượng và giao diện 8 Xử lý ngoại lệ 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 2/28
  3. 5. Đóng gói dữ liệu với thuộc tính (property) Thuộc tính (property) là đặc tính mới trong C#. Thuộc tính là các phương thức lấy giá trị (get) và gán giá trị (set). Cho phép truy cập đến các thành phần dữ liệu của đối tượng ở mức độ đọc hoặc ghi hoặc cả 2 và che giấu cài đặt thực sự bên trong lớp. Mỗi thuộc tính thường quản lý một biến dữ liệu của lớp. 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 3/38
  4. Thuộc tính (property) Các thuộc tính ◼ Chỉ đọc (read only): chỉ có phương thức get (chỉ đọc giá trị của thuộc tính) ◼ Chỉ ghi (write only): chỉ có phương thức set (chỉ ghi giá trị cho thuộc tính) ◼ Vừa đọc vừa ghi (read/write): có cả 2 phương thức get và set. Được phép đọc và ghi giá trị 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 4/38
  5. Thuộc tính (property) Cú pháp public { //Phương thức lấy giá trị get { //các lệnh return ; } set { //các lệnh = value; } } Chú ý ◼ value: từ khoá chỉ giá trị dùng để gán 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 5/38
  6. Ví dụ - Thuộc tính Khai báo lớp Student //Thuộc tính DiemToan (read/write) class Student public float DiemToan { { get { return _DiemToan; } //Tên các property không có dấu _, tên set // các thành phần dữ liệu có dấu _ { string _Ten; _DiemToan = value; float _DiemToan, _DiemTin, _DiemTB; _DiemTB = (_DiemToan + //Hàm tạo _DiemTin) / 2; public Student() } { } _Ten = ""; //Thuộc tính DiemTin (read/write) _DiemToan = 0; public float DiemTin _DiemTin = 0; { _DiemTB = 0; get { return _DiemTin; } } set //Thuộc tính Ten (read/write) { _DiemTin = value; public string Ten _DiemTB = (_DiemToan + { _DiemTin) / 2; get { return _Ten; } } set { _Ten = value; } } 15/06/2021} Chương 3. Lập trình hướng đối tượng trong C# 6/38
  7. Ví dụ - Thuộc tính (tiếp) //Thuoc tinh DiemTrungBinh- (read only) public float DiemTrungBinh { get { return _DiemTB; } } static void Main(string[] args) { Student s1 = new Student(); Console.Write("Nhap ho ten: "); s1.Ten = Console.ReadLine(); Console.Write("Nhap diem Toan: "); s1.DiemToan = float.Parse(Console.ReadLine()); Console.Write("Nhap diem Tin: "); s1.DiemTin = float.Parse(Console.ReadLine()); Console.WriteLine("Ten: {0}, diem Toan: {1}, diem Tin: {2}, diem Trung binh: {3}", s1.Ten, s1.DiemToan, s1.DiemTin, s1.DiemTrungBinh); Console.ReadLine(); } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 7/38
  8. 6. Kế thừa và đa hình Kế thừa ◼ Là cơ chế cho phép định nghĩa một lớp mới (lớp dẫn xuất - drived class) dựa trên một lớp có sẵn (lớp cơ sở - base class) ◼ Lớp dẫn xuất kế thừa hầu hết các thành phần của lớp cơ sở (biến thành viên, phương thức), ngoại trừ Các thành phần private Phương thức tạo lập Phương thức huỷ Các thành phần tĩnh ◼ Lớp dẫn xuất chỉ có thể kế thừa trực tiếp từ một lớp cơ sở 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 8/28
  9. Kế thừa Cú pháp định nghĩa: class : { // Thân lớp dẫn xuất } Ví dụ: ◼ Khai báo lớp Nguoi gồm Các thuộc tính: HoTen, NgaySinh, QueQuan Phương thức: Xuat ◼ Khai báo lớp SinhVien kế thừa từ lớp Nguoi Bổ sung thêm thuộc tính MaSV 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 9/28
  10. Ví dụ - Kế thừa class Nguoi { public string HoTen; public DateTime NgaySinh; public string QueQuan; public void Xuat() { Console.WriteLine("Ho va ten: " +HoTen); Console.WriteLine("Ngay sinh: {0}/{1}/{2}", NgaySinh.Day,NgaySinh.Month,NgaySinh.Year); Console.WriteLine("Que quan: " +QueQuan); } } class SinhVien:Nguoi { public string MaSV; } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 10/28
  11. Ví dụ - Kế thừa class Program { static void Main(string[] args) { Nguoi P1 = new Nguoi(); P1.HoTen = "Nguyen Van A"; P1.NgaySinh = Convert.ToDateTime("3/9/1994"); P1.QueQuan = "Ha Noi"; Console.WriteLine("Thong tin cua nguoi: "); P1.Xuat(); SinhVien sv1 = new SinhVien(); sv1.HoTen = "Nguyen Van B"; sv1.NgaySinh = Convert.ToDateTime("30/9/1994"); sv1.QueQuan = "Thai Binh"; sv1.MaSV = "15A4040011"; Console.WriteLine("\nThong tin cua sinh vien: "); sv1.Xuat(); Console.WriteLine("Ma sinh vien: " + P1.MaSV); Console.ReadLine(); } } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 11/28
  12. Gọi phương thức tạo lập Phương thức tạo lập trong lớp dẫn xuất ◼ Nếu lớp cơ sở không có phương thức tạo lập hoặc có phương thức tạo lập không có tham số thì phương thức tạo lập ở lớp dẫn xuất được định nghĩa như cách thông thường ◼ Nếu lớp cơ sở phương thức tạo lập có tham số thì phương thức tạo lập của lớp dẫn xuất cũng phải có tham số ◼ Cú pháp: (Tham số lớp dẫn xuất): base(tham số lớp cơ sở) ◼ Truy xuất đến các thành phần của lớp cơ sở: base.TênThànhPhần 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 12/28
  13. Ví dụ - Phương thức tạo lập Xây dựng phương thức tạo lập cho lớp Nguoi và lớp SinhVien class Nguoi { public string HoTen; public DateTime NgaySinh; public string QueQuan; public void Xuat() { Console.WriteLine("Ho va ten: " +HoTen); Console.WriteLine("Ngay sinh: {0}/{1}/{2}", NgaySinh.Day,NgaySinh.Month,NgaySinh.Year); Console.WriteLine("Que quan: " +QueQuan); } public Nguoi(string ht, DateTime dt, string qq) { this.HoTen = ht; this.NgaySinh = dt; this.QueQuan = qq; } } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 13/28
  14. Ví dụ - Phương thức tạo lập class SinhVien:Nguoi { public string MaSV; public SinhVien(string ht, DateTime dt, string qq, string ma): base(ht, dt, qq) { this.MaSV=ma; } } class Program { static void Main(string[] args) { Nguoi P1 = new Nguoi("Nguyen Van A", Convert.ToDateTime("3/8/1994"),"Ha Noi"); Console.WriteLine("Thong tin cua nguoi: "); P1.Xuat(); SinhVien sv1 = new SinhVien("Nguyen Thi B",Convert.ToDateTime("12/9/1994"),"Ha Tay","15A4040012"); Console.WriteLine("\nThong tin cua sinh vien: "); sv1.Xuat(); Console.WriteLine("Ma sinh vien: " +sv1.MaSV); Console.ReadLine(); } } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 14/28
  15. Ghi đè phương thức của lớp cha Ghi đè phương thức lớp cha: Dùng từ khoá override ◼ Ví dụ: public override void Xuat() { //Nội dung phương thức } Che phương thức lớp cha: Dùng từ khoá new ◼ Ví dụ: public new Xuat() { //Nội dung phương thức } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 15/28
  16. Cấm kế thừa lớp Dùng từ khoá sealed Ví dụ: using System; public sealed class MyClass { public MyClass(){} } public class MyNewClass:MyClass //Định nghĩa lỗi { } class Test { public static void Main() { } } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 16/28
  17. Đa hình (polymorphism) Ý tưởng: “Sử dụng một giao diện chung cho nhiều phương thức khác nhau” Dựa trên phương thức ảo (Virtual method) và liên kết động (late binding) Cho phép gửi một loại thông điệp tới nhiều đối tượng khác nhau mà đối tượng lại có cách xử lý riêng theo ngữ cảnh tương ứng. 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 17/28
  18. Đa hình Các bước thực hiện ◼ Bước 1: Đánh dấu phương thức ảo (virtual) trong lớp cơ sở Ví dụ: public virtual void Draw( ) { //Nội dung phương thức } ◼ Bước 2: Đánh dấu phương thức ghi đè (override) trong lớp dẫn xuất public override void Draw( ) { //Nội dung phương thức 15/06/2021 } Chương 3. Lập trình hướng đối tượng trong C# 18/28
  19. Đa hình Ví dụ: ◼ Khai báo lớp Nguoi gồm Các thuộc tính: HoTen, NgaySinh, QueQuan Phương thức: Xuat (virtual) ◼ Khai báo lớp SinhVien kế thừa từ lớp Nguoi Bổ sung thêm thuộc tính MaSV Phương thức: Xuat (override) 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 19/28
  20. Ví dụ - Đa hình class Nguoi { public string HoTen; public DateTime NgaySinh; public string QueQuan; public Nguoi(string ht, DateTime dt, string qq) { this.HoTen = ht; this.NgaySinh = dt; this.QueQuan = qq; } public virtual void Xuat() //Khai báo phương thức ảo { Console.WriteLine("Ho va ten: " + HoTen); Console.WriteLine("Ngay sinh: {0}/{1}/{2}", NgaySinh.Day, NgaySinh.Month, NgaySinh.Year); Console.WriteLine("Que quan: " + QueQuan); } } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 20/28
  21. Ví dụ - Đa hình class SinhVien : Nguoi { public string MaSV; public SinhVien(string ht, DateTime dt, string qq, string ma) : base(ht, dt, qq) { this.MaSV = ma; } public override void Xuat() //Ghi đè phương thức { Console.WriteLine("Ma sinh vien: " + MaSV); base.Xuat(); //Kế thừa lại phương thức } } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 21/28
  22. Ví dụ - Đa hình class Program { static void Main(string[] args) { Nguoi P1 = new Nguoi("Nguyen Van A", Convert.ToDateTime("3/8/1994"), "Ha Noi"); Console.WriteLine("Thong tin cua nguoi: "); P1.Xuat(); //Phương thức Xuat của lớp Nguoi SinhVien sv1 = new SinhVien("Nguyen Thi B", Convert.ToDateTime("12/9/1994"), "Ha Tay", "15A4040012"); Console.WriteLine("\nThong tin cua sinh vien: "); sv1.Xuat(); //Phương thức Xuat của lớp SinhVien Console.ReadLine(); } } 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 22/28
  23. Bài tập về nhà Bài 1. Tam giác ◼ Xây dựng lớp TamGiac gồm: Dữ liệu: Độ dài 3 cạnh Phương thức: ◼ Phương thức tạo không và 3 tham số ◼ Phương thức nhập ◼ Phương thức hiện ◼ Phương thức tính diện tích ◼ Xây dựng lớp TuDien kế thừa từ lớp TamGiac Bổ sung dữ liệu: chiều cao Điều chỉnh lại các phương thức nhập, hiện Bổ sung thêm phương thức tính thể tích (Công thức: V= 1/3h * S, S là diện tích đáy tứ diện (tam giác) 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 23/28
  24. Bài tập về nhà Bài 2. Tiền điện ◼ Xây dựng lớp TienDien Dữ liệu: ◼ Họ tên chủ hộ ◼ Địa chỉ ◼ Số công tơ tháng trước ◼ Số công tơ tháng này Phương thức ◼ Phương thức tạo không và 4 tham số ◼ Phương thức nhập ◼ Phương thức hiện ◼ Thuộc tính (property) số công tơ đã dùng (=Số công tơ tháng này - Số công tơ tháng trước) ◼ Phương thức tính tiền điện: (= Số điện đã dùng * 500) 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 24/28
  25. Bài tập về nhà ◼ Xây dựng lớp TienDienMoi (Tiền điện mới) kế thừa từ lớp TienDien (Tính theo định mức quy định, trong định mức là 500, ngoài là 600) Bổ sung thêm thành phần dữ liệu Định mức Điều chỉnh lại phương thức Nhập, Hiện và Tính tiền điện 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 25/28
  26. Bài tập về nhà Bài 3. Quản lý nhân viên ◼ Quản lý thông tin nhân viên ◼ Tính lương cho nhân viên. Biết có 3 loại nhân viên Nhân viên sản xuất: Số sản phẩm * 30000đ Nhân viên công nhật: Số ngày công * 90000đ Nhân viên quản lý: Hệ số lương * Lương cơ bản ◼ Hướng dẫn: Xây dựng 5 lớp Xây dựng lớp NhanVien ◼ Dữ liệu: Họ tên, Địa chỉ, ngày sinh ◼ Phương thức: Nhập, Xuất, Tính lương Xây dựng lớp NhanVienSanXuat ◼ Kế thừa lớp NhanVien ◼ Bổ sung thêm thành phần dữ liệu: Số sản phẩm ◼ Điều chỉnh lại phương thức Nhập, Xuất, Tính lương 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 26/28
  27. Bài tập về nhà ◼ Hướng dẫn: Xây dựng 5 lớp Xây dựng lớp NhanVienCongNhat ◼ Kế thừa lớp NhanVien ◼ Bổ sung thêm thành phần dữ liệu: Số ngày công ◼ Điều chỉnh lại phương thức Nhập, Xuất, Tính lương Xây dựng lớp NhanVienQuanLy ◼ Kế thừa lớp NhanVien ◼ Bổ sung thêm thành phần dữ liệu: Hệ số lương, Lương cơ bản ◼ Điều chỉnh lại phương thức Nhập, Xuất, Tính lương Xây dựng lớp DanhSachNhanVien ◼ Dữ liệu: class DanhSachNhanVien { int SoLuongNhanVien; //Số lượng nhân viên NhanVien [] DS; //Danh sách nhân viên 15/06/2021 } Chương 3. Lập trình hướng đối tượng trong C# 27/28
  28. Bài tập về nhà Xây dựng lớp DanhSachNhanVien ◼ Phương thức: ▪ Nhập danh sách, In danh sách, Xuất lương ◼ Chú ý: Xây dựng lớp tính lương ở lớp cơ sở (NhanVien) là phương thức ảo (virtual) Ở các lớp dẫn xuất (NhanVienSanXuat, NhanVienCongNhat, NhanVienQuanLy) kế thừa lại phương thức tính lương bằng cách ghi đè (override) 15/06/2021 Chương 3. Lập trình hướng đối tượng trong C# 28/28