Bài 5: Kế thừa – Đa hình

Chia sẻ: Tan Tan | Ngày: | Loại File: PPT | Số trang:21

0
135
lượt xem
37
download

Bài 5: Kế thừa – Đa hình

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Mục tiêu của bài: Nhằm trang bị cho người học: Kiến thức và kỹ năng về tính thừa kế. Kiến thức và kỹ năng về tính đa hình. Các kiến thức về lớp trừu tượng. Kiến thức và kỹ năng về các phương thức, các thành phần static. Kiến thức và kỹ năng về tham số và các phương thức nạp chồng. Kiến thức và kỹ năng về thuộc tính.

Chủ đề:
Lưu

Nội dung Text: Bài 5: Kế thừa – Đa hình

  1. Bài 5. Kế thừa – Đa hình Mục tiêu của bài: Nhằm trang bị cho người học: Kiến thức và kỹ năng về tính thừa kế. Kiến thức và kỹ năng về tính đa hình. Các kiến thức về lớp trừu tượng. Kiến thức và kỹ năng về các phương thức, các thành phần static. Kiến thức và kỹ năng về tham số và các phương thức nạp chồng. Kiến thức và kỹ năng về thuộc tính.
  2. 1. Sự kế thừa Một trong những ưu điểm nổi bật của lập trình  hướng đối tượng đó là thừa kế, đó là sự sử dụng lại  những thuộc tính và hành vi của một lớp. Có hai kiểu  kế thừa trong lập trình, đơn kế thừa và đa kế thừa.  C# cung cấp mô hình đơn kế thừa. Thực hiện kế thừa Trong C#, khi ta tạo một lớp kế thừa bằng cách  công một thêm dấu “:” và sau tên của lớp kế thừa và  theo sau đó là lớp cơ sở như sau: public class ListBox : Window có nghĩa là ta khai báo một lớp mới ListBox kế thừa từ  lớp Window.
  3. class Animal 1. Sự kế thừa     {         protected int ifoots;         protected string sName;           protected void setFoot(int ival)         {             ifoots = ival;         }         protected void setName(string sVal)         {             sName = sVal;         }         public void displayProperties()         {             Console.WriteLine(sName + " have " + ifoots.ToString()+ " foots");         }
  4. class Dog : Animal 1. Sự kế thừa     {         public Dog(int ival)         {             setName("Dog");             ifoots = ival;         }     }     class Chicken : Animal     {         public Chicken(int ival)         {             setName("Chicken");             setFoot(ival);         }
  5. 1. Sự kế thừa Ở ví dụ trên, Dog và Chicken là hai lớp kế thừa từ lớp Animal, do  đó các thuộc tính như số chân, ifoots và tên sName đương nhiên xuất  hiện trong hai lớp này và cho phép sử dụng. Tương tự, các hàm như  setName(), setFoot(), displayProperties()  tại lớp Animal cũng được kế  thừa xuống hai lớp Dog và Chicken. Do đó ta có thể gọi những hàm này,  và kết quả hiển thị khi gọi hàm displayProperties()  theo đối tượng  objDog và objChicken là khác nhau.
  6. 2. Đa hình class Parent     {         public int methodA()         {             return methodB() * methodC();         }         public virtual int methodB()         {             return 1;         }         public int methodC()         {             return 2;         }     }
  7.     class Child : Parent 2. Đa hình     {         public override int methodB()         {             return 3;         }     } class Program     {         static void Main(string[] args)         {             Child objchild = new Child();             Console.WriteLine("Result is " + objchild.methodA().ToString());             Console.Read();         }     }
  8. 2. Đa hình Kết quả chạy trương trình 6 
  9. 3. Lớp trừu tượng abstract class MyBaseC   // Abstract class     {         protected int x = 100;         protected int y = 150;         public abstract void MyMethod();   // Abstract method         public abstract int GetX   // Abstract property         {             get;         }         public abstract int GetY   // Abstract property         {             get;         }     }
  10. 3. Lớp trừu tượng class MyDerivedC : MyBaseC     {         public override void MyMethod()         {             x++;             y++;         }         public override int GetX   // overriding property         {             get             {                 return x + 10;             }         }         public override int GetY   // overriding property         {             get             {                 return y + 10;             }         }
  11. 3. Lớp trừu tượng  class Program     {         static void Main(string[] args)         {             MyDerivedC mC = new MyDerivedC();             mC.MyMethod();             Console.WriteLine("x = {0}, y = {1}", mC.GetX, mC.GetY);          }     } } ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Kết quả : x = 111, y = 161  ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Lớp niêm phong với ý nghĩa trái ngược hẳn với lớp trừu tượng. Lớp niêm phong  không cho bất kỳ lớp nào khác kế thừa nó. Ta dùng từ khoá sealed để thay cho từ khoá abstract để được lớp này.
  12. 4. Các lớp lồng nhau public class A     {         public class B         {         }     }     class Program     {         static void Main(string[] args)         {             A.B b = new A.B();         }   }
  13. 4. Các lớp lồng nhau class MyClass     {         class MyCounter         {             public int Count = 0;         }         private MyCounter counter;         public MyClass()         {             counter = new MyCounter();         }         public int Incr()         {             return counter.Count++;         }         public int GetValue()         {             return counter.Count;         }     }
  14. 4. Các lớp lồng nhau class Program     {         static void Main(string[] args)         {             MyClass mc = new MyClass();             mc.Incr();             mc.Incr();             mc.Incr();             mc.Incr();             mc.Incr();             mc.Incr();             Console.WriteLine("Total: {0}", mc.GetValue());         }   } //­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Kết quả : Total: 6 
  15. 4.1.1 Truyền tham trị + Truyền tham chiếu không khởi tạo public class ThamChieuref      {             static void Method(out int i, out string s1, out string s2)             {              i = 44;              s1 = "I've been returned";              s2 = null;             }             static void Main()             {              int value;              string str1, str2;              Method(out value, out str1, out str2);             }      }
  16. 4.1.1 Truyền tham trị Dùng tham chiếu out hay ref ? public class ThamChieu      {             static void swap(? int a,? int b)             {                 int temp;                 temp = a;                 a = b;                  b = temp;             }             static void Main()             {              int x = 3, y = 4;              Console.Write("Truoc khi goi ham swap()\n");              Console.Write("x = {0}, y = {1}\n", x, y);              swap(? x,? y);              Console.Write("Sau Khi goi ham swap()\n");              Console.Write("x = {0}, y = {1}\n", x, y);             }
  17. 4.2 Nạp chồng phương  thức(Overloading)  Nạp chồng phương thức xây dựng nhiều các phương thức cùng tên nhưng nhận các  tham số khác nhau. namespace ConsoleApplication2 {      class ClsA         {          public int Total(int a,int b)          {              return a + b;          }          public int Total(int a,int b,int c)          {              return a + b + c;          }         } }
  18. 4.2 Nạp chồng phương  thức(Overloading)  namespace ConsoleApplication2 {      public class NapChong         {          static void Main()          {              int a = 5, b = 6, c = 7;              ClsA A = new ClsA();              Console.Write("Tong a + b = {0}\n",A.Total(a,b));              Console.Write("Tong a + b + c = {0}\n", A.Total(a, b,c));          }         } }
  19. 5. Đóng gói dữ liệu với thuộc tính Đặc tính này cung cấp khả năng bảo vệ các trường dữ liệu bên trong một  lớp bằng việc đọc và viết chúng thông qua thuộc tính. Trong ngôn ngữ  khác, điều này có thể được thực hiện thông qua việc tạo các phương thức  lấy dữ liệu (getter method) và phương thức thiết lập dữ liệu (setter  method). 5.1 Thuộc tính đọc và ghi 5.2 Thuộc tính chỉ đọc 5.3 Thuộc tính chỉ ghi
  20. 5.1 Thuộc tính đọc và ghi public int PropertyName //Khai bao thuoc tinh Address          {         public string Address              get { return iValue; }         {              set { iValue = value; }             get { return sAddress; }          }             set { sAddress = value; }         } Ví dụ về thuộc tính đọc và ghi         //Khai bao thuoc tinh Age class ClsPeople         public int Age      {         {         //Khai bao bien cuc bo             get { return iAge; }             set {         private string sName;                 if (value > 100)         private string sAddress;                     iAge = 100;         private int iAge;                 else if (value 

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản