Bài giảng Lập trình ngôn ngữ C# - Chương 3: Lập trình hướng đối tượng trong C#
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
}
28 trang |
Chia sẻ: vutrong32 | Lượt xem: 1783 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình ngôn ngữ C# - Chương 3: Lập trình hướng đối tượng trong C#, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGTRONG C#Nội dung02/03/2015Chương 3. Lập trình hướng đối tượng trong C#Lớp và đối tượng1Tạo và huỷ đối tượng2Truyền tham số3Nạp chồng hàm4Đóng gói dữ liệu với thuộc tính5Kế thừa và đa hình6Lớp trừu tượng và giao diện7Xử lý ngoại lệ82/285. Đó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.02/03/2015Chương 3. Lập trình hướng đối tượng trong C#3/38Thuộc tính (property)Các thuộc tínhChỉ đọ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ị02/03/2015Chương 3. Lập trình hướng đối tượng trong C#4/38Thuộc tính (property)Cú pháppublic { //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 02/03/2015Chương 3. Lập trình hướng đối tượng trong C#5/38Ví dụ - Thuộc tínhKhai báo lớp Studentclass Student { //Tên các property không có dấu _, tên // các thành phần dữ liệu có dấu _ string _Ten; float _DiemToan, _DiemTin, _DiemTB; //Hàm tạo public Student() { _Ten = ""; _DiemToan = 0; _DiemTin = 0; _DiemTB = 0; } //Thuộc tính Ten (read/write) public string Ten { get { return _Ten; } set { _Ten = value; } } 02/03/2015Chương 3. Lập trình hướng đối tượng trong C# //Thuộc tính DiemToan (read/write) public float DiemToan { get { return _DiemToan; } set { _DiemToan = value; _DiemTB = (_DiemToan + _DiemTin) / 2; } }//Thuộc tính DiemTin (read/write) public float DiemTin { get { return _DiemTin; } set { _DiemTin = value; _DiemTB = (_DiemToan + _DiemTin) / 2; } }6/38Ví dụ - Thuộc tính (tiếp)02/03/2015Chương 3. Lập trình hướng đối tượng trong C# //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(); }7/386. Kế thừa và đa hìnhKế thừaLà 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 privatePhương thức tạo lậpPhương thức huỷCác thành phần tĩnhLớp dẫn xuất chỉ có thể kế thừa trực tiếp từ một lớp cơ sở02/03/2015Chương 3. Lập trình hướng đối tượng trong C#8/28Kế thừaCú 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, QueQuanPhương thức: XuatKhai báo lớp SinhVien kế thừa từ lớp NguoiBổ sung thêm thuộc tính MaSV02/03/2015Chương 3. Lập trình hướng đối tượng trong C#9/28Ví dụ - Kế thừaclass 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; }02/03/2015Chương 3. Lập trình hướng đối tượng trong C#10/28Ví dụ - Kế thừaclass 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(); } }02/03/2015Chương 3. Lập trình hướng đối tượng trong C#11/28Gọi phương thức tạo lậpPhương thức tạo lập trong lớp dẫn xuấtNế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ườngNế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ần02/03/2015Chương 3. Lập trình hướng đối tượng trong C#12/28Ví dụ - Phương thức tạo lậpXây dựng phương thức tạo lập cho lớp Nguoi và lớp SinhVienclass 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; } }02/03/2015Chương 3. Lập trình hướng đối tượng trong C#13/28Ví dụ - Phương thức tạo lậpclass 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(); } }02/03/2015Chương 3. Lập trình hướng đối tượng trong C#14/28Ghi đè phương thức của lớp chaGhi đè phương thức lớp cha: Dùng từ khoá overrideVí dụ:public override void Xuat(){ //Nội dung phương thức}Che phương thức lớp cha: Dùng từ khoá newVí dụ:public new Xuat(){ //Nội dung phương thức}02/03/2015Chương 3. Lập trình hướng đối tượng trong C#15/28Cấm kế thừa lớpDùng từ khoá sealedVí dụ:using System;public sealed class MyClass{ public MyClass(){}}public class MyNewClass:MyClass //Định nghĩa lỗi{}class Test{ public static void Main() { }}02/03/2015Chương 3. Lập trình hướng đối tượng trong C#16/28Đ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.02/03/2015Chương 3. Lập trình hướng đối tượng trong C#17/28Đa hìnhCác bước thực hiệnBướ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ấtpublic override void Draw( ){ //Nội dung phương thức}02/03/2015Chương 3. Lập trình hướng đối tượng trong C#18/28Đa hình Ví dụ:Khai báo lớp Nguoi gồm Các thuộc tính: HoTen, NgaySinh, QueQuanPhương thức: Xuat (virtual)Khai báo lớp SinhVien kế thừa từ lớp NguoiBổ sung thêm thuộc tính MaSVPhương thức: Xuat (override)02/03/2015Chương 3. Lập trình hướng đối tượng trong C#19/28Ví dụ - Đa hìnhclass 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); } }02/03/2015Chương 3. Lập trình hướng đối tượng trong C#20/28Ví dụ - Đa hìnhclass 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 } }02/03/2015Chương 3. Lập trình hướng đối tượng trong C#21/28Ví dụ - Đa hìnhclass 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(); } } 02/03/2015Chương 3. Lập trình hướng đối tượng trong C#22/28Bài tập về nhàBài 1. Tam giácXây dựng lớp TamGiac gồm:Dữ liệu: Độ dài 3 cạnhPhương thức:Phương thức tạo không và 3 tham sốPhương thức nhậpPhương thức hiệnPhương thức tính diện tíchXây dựng lớp TuDien kế thừa từ lớp TamGiacBổ sung dữ liệu: chiều caoĐiều chỉnh lại các phương thức nhập, hiệnBổ 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)02/03/2015Chương 3. Lập trình hướng đối tượng trong C#23/28Bài tập về nhàBài 2. Tiền điệnXây dựng lớp TienDienDữ liệu:Họ tên chủ hộĐịa chỉSố công tơ tháng trướcSố công tơ tháng nàyPhương thứcPhương thức tạo không và 4 tham sốPhương thức nhậpPhương thức hiệnThuộ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)02/03/2015Chương 3. Lập trình hướng đối tượng trong C#24/28Bà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ện02/03/2015Chương 3. Lập trình hướng đối tượng trong C#25/28Bài tập về nhàBài 3. Quản lý nhân viênQuản lý thông tin nhân viênTính lương cho nhân viên. Biết có 3 loại nhân viênNhâ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ảnHướng dẫn: Xây dựng 5 lớpXây dựng lớp NhanVienDữ liệu: Họ tên, Địa chỉ, ngày sinhPhương thức: Nhập, Xuất, Tính lươngXây dựng lớp NhanVienSanXuatKế thừa lớp NhanVienBổ 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ương02/03/2015Chương 3. Lập trình hướng đối tượng trong C#26/28Bài tập về nhàHướng dẫn: Xây dựng 5 lớp Xây dựng lớp NhanVienCongNhatKế thừa lớp NhanVienBổ 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ươngXây dựng lớp NhanVienQuanLyKế thừa lớp NhanVienBổ 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ươngXây dựng lớp DanhSachNhanVienDữ liệu:class DanhSachNhanVien{ int SoLuongNhanVien; //Số lượng nhân viên NhanVien [] DS; //Danh sách nhân viên}02/03/2015Chương 3. Lập trình hướng đối tượng trong C#27/28Bài tập về nhàXây dựng lớp DanhSachNhanVienPhương thức:Nhập danh sách, In danh sách, Xuất lươngChú ý: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)02/03/2015Chương 3. Lập trình hướng đối tượng trong C#28/28
Các file đính kèm theo tài liệu này:
- c03_lap_trinh_huong_doi_tuong_trong_c_part_2_9436.pptx