• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Nơi trao đổi, hỏi đáp về hướng đối tượng (OOP - Object-Oriented Programming), không giới hạn về ngôn ngữ lập trình
Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

[Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » T.Hai 16/06/2008 5:06 pm

Tên bài viết: Lập trình hướng đối tượng (OOP) With VB.Net & C#
Tác giả: Nguyễn Anh Tuyên
Cấp độ bài viết: From Basic To Advance



Lập trình hướng đối tượng (OOP) With VB.Net & C#

Hiện nay, thì lập trình dùng ngôn ngữ .Net mạnh mẽ ngày càng thâm nhập sâu hơn vào caulacbovb của chúng ta. Nhưng mình nhận thấy các bạn vẫn chưa tận dụng được thế mạnh của Net là lập trình OOP (object-oriented programming) nên mình đã dành lấy cơ hội trước viết ra bài này (do chưa ai viết :D ). Do OOP có rất nhiều vấn đề cần quan tâm nên mình chỉ đề cập đến những vấn đề chính yếu nhất với cách tiếp cận nhanh nhất để các bạn có thể ứng dụng được vào các soft mình sắp viết. Nếu bạn nào muốn tìm hiểu sâu hơn thì có thể tham khảo trong các cuốn sách về OOP. :)
Ở bài này mình sẽ trình bày việc ứng dụng OOP With VB.Net & C#.

Part I : Bước đầu nhập môn


1. Các khái niệm liên quan tới OOP
Trong thời đại CNTT phát triển như vũ bão hiên nay với sự xuất hiện của rất nhiều ngôn ngữ lập trình mới hỗ trợ OOP thì lập trình hướng đối tượng OOP đã trở thành một chuẩn chung ko thể thiếu được.
1.1 Các đặc điểm của OOP:
Mấy các đặc điểm này quả thật hơi khó nhai, nhưng ko sao qua các bước thực hành các bạn sẽ quen thôi.
Abstraction (tính trừu tượng) : đặc tính này thể hiện ở chỗ nó chỉ quan tâm đến các chi tiết cần thiết của đối tượng và phớt lờ đi những cái ko cần thiết, là khả năng của ngôn ngữ nhằm tạo ra một đại diện trừu tượng chứa các khái niệm ẩn chứa bên trong chương trình, bao gồm các thuộc tính hành vi của một đối tượng. Ví dụ đối tượng Customer là một thể hiện của một đại diện trừu tượng của một customer trong thế giới thực. (Hơi khó hiểu nhỉ).
Encapsulation (tính bao đóng) nhằm tạo thuận lời cho user, user chỉ cần biết kết quả mà ko cần biết những chi tiết xử lý rắc rối bên trong nó.
Polymorphism (tính đa hình) : Cho phép ta đối xử với các đối tượng (thể hiện của các class khác nhau thừa kế từ class nên tảng) theo một cách giống nhau mà ko cần biết đối tượng đó là thuộc class nào.
Inheritance (tính thừa kế) : đây là trái tim của OOP, cho phép bạn sử dụng lại code. Nó cho phép ta tạo ra một class mới dựa trên một class sẵn có từ đó có thể mở rộng class.

1.2 Class
Xác định các đặc điểm trừu tượng của một đối tượng, bao gồm thuộc tính (fields hay Properties), hành vi của nó (Method).
Ví dụ: Lớp Dog sẽ chứa đựng tính chất như màu lông, chiều cao... hành vi là sủa, ngồi...
1.3 Object
Là 1 thể hiện cụ thể của một class. Ví dụ object chó Luto là 1 thể thiện của Class Dog.
1.4 Namespace : đây là một khái niệm mới trong Net
Chúng ta chẳng cần suy nghĩ cho nhiều làm gì, nó chỉ là một nơi trừu tượng chứa đựng các class và Namespace khác trong nó mà thôi, tạo ra cho ta một cách quản lý chúng khoa học hơn.
Sửa lần cuối bởi anhtuyenbk vào ngày CN 27/07/2008 9:35 pm với 6 lần sửa.


Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**Lập trình hướng đối tượng (OOP) With VB.Net & C#

Gửi bàigửi bởi anhtuyenbk » T.Hai 16/06/2008 6:01 pm

II. Xây dựng 1 class
Các thành phần chủ yếu của 1 class bao gồm : Contructor, Fields, Properties, Method...
1. Khai báo 1 class

Mã: Chọn hết

  1. Public Class Person
  2. ‘Code ở đây
  3. End Class
  4.    


Mã: Chọn hết

  1. public class Person
  2. {
  3.     //Code ở đây
  4. }




2. Access Modifier (Tầm vực truy xuất)
Các keyword liên quan tới tầm vực
VB.Net : Public, Private, Friend, Protected, Protected Friend.
Tương ứng theo thứ tự
C# : public, protected, internal, protected, protected internal.

Mô tả VB.Net
- Public : truy cập ở đâu cũng được
- Private : chỉ truy cập được ở trong class mà nó được khai báo
- Friend : Chỉ truy cập được ở bên trong một Assembly. (assembly là 1 project, 1 dll...).
- Protected : chỉ truy cập được ở bên trong class mà nó được khai báo và các class con thừa kế từ nó.
- Protected Friend : phối hợp giữa Protected và Friend.

3. Fields:
Hay còn gọi là biến thành viên của 1 class, được khai báo bên trong class và có sẵn cho mỗi đối tượng.
Khai báo 1 field như sau

Mã: Chọn hết

  1. Public Class Person
  2.     Private mName As String
  3.     Private mBirthDate As Date
  4. End Class


Mã: Chọn hết

  1. public class Person
  2. {
  3.     private string mName;
  4.     private System.DateTime mBirthDate;
  5. }
  6.  


4. Properties
Đây là một kiểu đặc biệt trong net. Thuộc tính cho phép ta đọc và gán giá trị

Mã: Chọn hết

  1. ‘Cho phép đọc và gán
  2. Public Property Name() As String
  3.         Get
  4.             Return mName
  5.         End Get
  6.         Set(ByVal Value As String)
  7.             mName = Value
  8.         End Set
  9.     End Property
  10. ‘Chỉ cho đọc thôi
  11.     Public ReadOnly Property NameReadOnly() As String
  12.         Get
  13.             Return mName
  14.         End Get
  15.  
  16.     End Property
  17. ‘Chỉ gán thôi
  18.     Public WriteOnly Property NameWriteOnly() As String
  19.         Set(ByVal Value As String)
  20.             mName = Value
  21.         End Set
  22.  
  23.     End Property
  24.  


Mã: Chọn hết

  1. //Cho phép đọc và gán
  2.     public string Name {
  3.         get
  4.         {
  5.             return mName;
  6.         }
  7.         set
  8.         {
  9.             mName = value;
  10.         }
  11.     }
  12.     //Chỉ cho đọc
  13.     public string NameReadOnly {
  14.         get
  15.         {
  16.             return mName;
  17.         }
  18.     }
  19. //Chỉ cho gán
  20.     public string NameWriteOnly {
  21.         set
  22.         {
  23.             mName = value;
  24.         }
  25.     }
  26.  


5. Method
5.1 Method ko trả về giá trị
Vb.net còn gọi là thủ tục - Sub.

Mã: Chọn hết

  1. Private mTotalDistance As Integer
  2.     Public Sub Walk(ByVal distance As Integer)
  3.         mTotalDistance += distance
  4.     End Sub

C# dùng từ khóa void để mô tả method ko trả về giá trị nào cả.

Mã: Chọn hết

  1. private int mTotalDistance;
  2.     public void Walk(int distance)
  3.     {
  4.         mTotalDistance += distance;
  5.     }


5.2 Method có trả về giá trị
Vb.Net

Mã: Chọn hết

  1. Public Function Age() As Integer
  2.         Return 25
  3.     End Function

C# : chú ý cấu trúc khai báo kiểu dữ liệu đứng trước tên Method

Mã: Chọn hết

  1. public int Age()
  2.     {
  3.         return 25;
  4.     }
Sửa lần cuối bởi anhtuyenbk vào ngày T.Sáu 04/07/2008 4:06 pm với 1 lần sửa.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » T.Ba 17/06/2008 10:10 pm

Ko ai quan tâm đến cái này cả sao. :( :(
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

bong_dem
Bài viết: 4
Ngày tham gia: T.Ba 17/06/2008 9:11 pm
Đến từ: Đà Nẵng

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi bong_dem » T.Ba 17/06/2008 10:11 pm

Tiếp đi , vẫn đang đọc đây , thấy chưa viết hết nên ko dám reply >:)
trong mục hướng dẫn tham khảo có cả đống bài ko reply kìa ?
Bóng đêm đã trở lại và nợi hại gấp trăm lần >:)

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » T.Ba 17/06/2008 10:20 pm

bong_dem đã viết:trong mục hướng dẫn tham khảo có cả đống bài ko reply kìa ?

Đó là tính hình của box hướng dẫn hiện nay nên nhiều lúc thấy chán quá chẳng muốn viết gì cả. :(
Sửa lần cuối bởi anhtuyenbk vào ngày T.Tư 18/06/2008 11:26 am với 2 lần sửa.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

bong_dem
Bài viết: 4
Ngày tham gia: T.Ba 17/06/2008 9:11 pm
Đến từ: Đà Nẵng

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi bong_dem » T.Ba 17/06/2008 11:13 pm

à , mà cái này phải trình độ từ cơ bản lên nâng cao chứ , OOP đâu phải dành cho advance đâu , cái này là cái cân thiết nhất mà
Bóng đêm đã trở lại và nợi hại gấp trăm lần >:)

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » T.Tư 18/06/2008 9:36 am

bong_dem đã viết:à , mà cái này phải trình độ từ cơ bản lên nâng cao chứ , OOP đâu phải dành cho advance đâu , cái này là cái cân thiết nhất mà

Ghi thế để gây sự chú ý, mà bây giờ bận rồi, khi nào rảnh post tiếp. :D
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » T.Sáu 04/07/2008 3:55 pm

6. Constructor :
Bộ khởi tạo đối tượng có nhiệm vụ tạo ra đối tượng (hay nói cách khác nó sẽ được gọi khi dối tượng được tạo ra) và đây là 1 cách rất tốt để ta có thể truyền các giá trị ban đầu cho dối tượng của mình.
Class mô tả phân số
6.1 Nó gồm 2 bộ khởi tạo New chính:
- Phân số bao gồm tử số và mấu số
- Phân số bao gồm tử số và mẫu số =1.
- Bên trong class này có chứa một Method phụ cục bộ trong Class để tìm USCLN.

Mã: Chọn hết

  1. Public Class Phanso
  2.     'Biến cục bộ trong Class
  3.     Private _TuSo, _MauSo As Integer
  4. #Region "Constructor"
  5.     'PHan so co mau so #1
  6.     Public Sub New(ByVal pTuSo As Integer, ByVal pMauSo As Integer)
  7.         'Tử số =0
  8.         If pTuSo = 0 Then
  9.             Me._TuSo = pTuSo
  10.             Me._MauSo = 1
  11.         Else 'Tử số khác 0
  12.             'Xử lý dấu
  13.             If (pTuSo < 0 And pMauSo < 0) Or (pTuSo > 0 And pMauSo < 0) Then
  14.                 pTuSo = -pTuSo
  15.                 pMauSo = -pMauSo
  16.             End If
  17.             Dim _USCLN As Integer = USCLN(pTuSo, pMauSo)
  18.             Me._TuSo = pTuSo / _USCLN
  19.             Me._MauSo = pMauSo / _USCLN
  20.         End If
  21.  
  22.     End Sub
  23.     'Phanso co mau so =1
  24.     Public Sub New(ByVal pTuSo As Integer)
  25.         Me._TuSo = pTuSo
  26.         Me._MauSo = 1
  27.     End Sub
  28.  
  29. #End Region
  30. #Region "Method phu tro"
  31.     Private Function USCLN(ByVal a As Integer, ByVal b As Integer) As Integer
  32.         Dim r As Integer
  33.         Dim x As Integer
  34.         Dim y As Integer
  35.  
  36.         If a = 0 And b <> 0 Then Return Math.Abs(b)
  37.         If b = 0 And a <> 0 Then Return Math.Abs(a)
  38.  
  39.         If Math.Abs(a) > Math.Abs(b) Then
  40.             x = Math.Abs(a)
  41.             y = Math.Abs(b)
  42.         Else
  43.             x = Math.Abs(b)
  44.             y = Math.Abs(a)
  45.         End If
  46.         While y > 0
  47.             r = x Mod y
  48.             x = y
  49.             y = r
  50.         End While
  51.         Return x
  52.     End Function
  53.  
  54. #End Region
  55. End Class
  56.  

Mã C#

Mã: Chọn hết

  1. public class Phanso
  2. {
  3.     //Bi?n c?c b? trong Class
  4.     private int _TuSo;
  5.     private int _MauSo;
  6.     #region "Constructor"
  7.     //PHan so co mau so #1
  8.     public Phanso(int pTuSo, int pMauSo)
  9.     {
  10.         //T? s? =0
  11.         if (pTuSo == 0)
  12.         {
  13.             this._TuSo = pTuSo;
  14.             this._MauSo = 1;
  15.         }
  16.         else
  17.         {
  18.             //T? s? khác 0
  19.             //X? lý d?u
  20.             if ((pTuSo < 0 & pMauSo < 0) | (pTuSo > 0 & pMauSo < 0))
  21.             {
  22.                 pTuSo = -pTuSo;
  23.                 pMauSo = -pMauSo;
  24.             }
  25.             int _USCLN = USCLN(pTuSo, pMauSo);
  26.             this._TuSo = pTuSo / _USCLN;
  27.             this._MauSo = pMauSo / _USCLN;
  28.         }
  29.  
  30.     }
  31.     //Phanso co mau so =1
  32.     public Phanso(int pTuSo)
  33.     {
  34.         this._TuSo = pTuSo;
  35.         this._MauSo = 1;
  36.     }
  37.     #endregion
  38. #region "Method phu tro"
  39.     private int USCLN(int a, int b)
  40.     {
  41.         int r;
  42.         int x;
  43.         int y;
  44.  
  45.         if (a == 0 & b != 0) return Math.Abs(b);
  46.         if (b == 0 & a != 0) return Math.Abs(a);
  47.  
  48.         if (Math.Abs(a) > Math.Abs(b))
  49.         {
  50.             x = Math.Abs(a);
  51.             y = Math.Abs(b);
  52.         }
  53.         else
  54.         {
  55.             x = Math.Abs(b);
  56.             y = Math.Abs(a);
  57.         }
  58.         while (y > 0) {
  59.             r = x % y;
  60.             x = y;
  61.             y = r;
  62.         }
  63.         return x;
  64.     }
  65.  
  66.     #endregion
  67. }
  68.  



6.2 Các thuộc tính chính của Class Phân số
Giúp ta truy xuất được giá trị của tử số và mẫu số.

Mã: Chọn hết

  1. #Region "Properties"
  2.     Public ReadOnly Property TuSo() As Integer
  3.         Get
  4.             Return _TuSo
  5.         End Get
  6.     End Property
  7.     Public ReadOnly Property MauSo() As Integer
  8.         Get
  9.             Return _MauSo
  10.         End Get
  11.     End Property
  12. #End Region
  13.  


Mã: Chọn hết

  1. #region "Properties"
  2.     public int TuSo {
  3.         get { return _TuSo; }
  4.     }
  5.     public int MauSo {
  6.         get { return _MauSo; }
  7.     }
  8.     #endregion
  9.  

7. Overload Method (quá tải hàm):
Nó cho phép ta tạo ra nhiều hàm có tên giống nhau nhưng chức năng hay cách thực hiện cụ thể lại khác nhau.
Ví dụ

Mã: Chọn hết

  1. Public Overloads Function Nhan(ByVal a As Integer) As Integer
  2.         Return a * 5
  3.     End Function
  4.     Public Overloads Function Nhan(ByVal a As Integer, ByVal b As Integer) As Integer
  5.         Return a * b
  6.     End Function

Trong đoạn code trên Overloads keyword các bạn có thể bỏ nó đi, nhưng nếu có một function dùng nó thì tất cả các function còn lại đều phải dùng cả

Mã: Chọn hết

  1. public int Nhan(int a)
  2.     {
  3.         return a * 5;
  4.     }
  5.     public int Nhan(int a, int b)
  6.     {
  7.         return a * b;
  8.     }
  9.  
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » T.Sáu 11/07/2008 10:20 pm

8. Mô tả đối tượng Method ToString()
Đây là một method có sẵn cho mọi class, kế thừa từ lớp cha của nó là lớp Object.
Nó có nhiệm vụ mô tả đối tượng, trong trương hợp này ta cho nó xuất ra dạng phân số ví dụ 2/3, 4/5......

Mã: Chọn hết

  1. Public Overrides Function ToString() As String
  2.         Return Me._TuSo & "/" & Me._MauSo
  3.     End Function
  4.  

Mã: Chọn hết

  1. public override string ToString()
  2.     {
  3.         return this._TuSo + "/" + this._MauSo;
  4.     }
  5.  

Ở trên có từ khóa Overrides hay override chúng ta sẽ tìm hiểu trong các phần tới

9. Overloading Operator:
9.1 Các toán tử toán học
Các toán tử toán học bao gồm : +-*/, % (lấy số dư), ++,--
Đây là một trong những chiêu thức võ công cực mạnh của OOP nó cho phép ta đối xử với các đối tượng giống như với các kiểu giá trị bình thường như Integer : có phép +-*/.
Ta sẽ áp dụng điều này để tạo ra các phép toán +-*/ cho các đối tượng phân số đã tạo ra ở trên.
Quy định: Các method loại này phải được khai báo là Public Shared (VB.Net) hay public static (C#).
Dưới đây là các method quá tải các toán tử +-*/ đối với 2 đối tượng phân số.
Cú pháp chung là: VB.Net
Public Shared Operator <toán tử> (đối tượng 1, đối tượng 2) As <kiểu trả về>
End Operator

Mã: Chọn hết

  1. #Region "Method chuc nang"
  2.     Public Shared Operator +(ByVal PS1 As Phanso, ByVal PS2 As Phanso) As Phanso
  3.         Dim result As Phanso
  4.         result = New Phanso(PS1.TuSo * PS2.MauSo + PS1.MauSo * PS2.TuSo, PS1.MauSo * PS2.MauSo)
  5.         Return result
  6.     End Operator
  7.     Public Shared Operator -(ByVal PS1 As Phanso, ByVal PS2 As Phanso) As Phanso
  8.         Dim result As New Phanso(-PS2.TuSo, PS2.MauSo)
  9.         result = PS1 + result
  10.         Return result
  11.     End Operator
  12.     Public Shared Operator *(ByVal PS1 As Phanso, ByVal PS2 As Phanso) As Phanso
  13.         Dim result As Phanso
  14.         result = New Phanso(PS1.TuSo * PS2.TuSo, PS1.MauSo * PS2.MauSo)
  15.         Return result
  16.     End Operator
  17.     Public Shared Operator /(ByVal PS1 As Phanso, ByVal PS2 As Phanso) As Phanso
  18.         Dim result As New Phanso(PS2.MauSo, PS2.TuSo)
  19.         result = result * PS1
  20.         Return result
  21.     End Operator
  22.  
  23. #End Region

Mã C#

Cú pháp chung là:
public static <kiểu trả về> operator <toán tử> (đối tượng 1, đối tượng 2)

Mã: Chọn hết

  1. #region "Method chuc nang"
  2.     public static Phanso operator +(Phanso PS1, Phanso PS2)
  3.     {
  4.         Phanso result;
  5.         result = new Phanso(PS1.TuSo * PS2.MauSo + PS1.MauSo * PS2.TuSo, PS1.MauSo * PS2.MauSo);
  6.         return result;
  7.     }
  8.     public static Phanso operator -(Phanso PS1, Phanso PS2)
  9.     {
  10.         Phanso result = new Phanso(-PS2.TuSo, PS2.MauSo);
  11.         result = PS1 + result;
  12.         return result;
  13.     }
  14.     public static Phanso operator *(Phanso PS1, Phanso PS2)
  15.     {
  16.         Phanso result;
  17.         result = new Phanso(PS1.TuSo * PS2.TuSo, PS1.MauSo * PS2.MauSo);
  18.         return result;
  19.     }
  20.     public static Phanso operator /(Phanso PS1, Phanso PS2)
  21.     {
  22.         Phanso result = new Phanso(PS2.MauSo, PS2.TuSo);
  23.         result = result * PS1;
  24.         return result;
  25.     }
  26.    
  27.     #endregion

9.2 Các toán tử so sánh: dùng để so sánh các đối tượng
Đôi với các toán tử này ta phải viết theo cặp, nếu chỉ có một thì compiler sẽ báo lỗi.
VB.Net
= và <>
>= và <=
> và <
C#
== và !=
>= và <=
> và <
Ví dụ ta so sánh xem các phân số này bằng nhau, khác nhau...........

Mã: Chọn hết

  1. #Region "Toán tử so sánh"
  2.     Public Shared Operator =(ByVal PS1 As Phanso, ByVal PS2 As Phanso) As Boolean
  3.         If (PS1.TuSo = PS2.TuSo) And (PS1.MauSo = PS2.MauSo) Then
  4.             Return True
  5.         Else
  6.             Return False
  7.         End If
  8.     End Operator
  9.     Public Shared Operator <>(ByVal PS1 As Phanso, ByVal PS2 As Phanso) As Boolean
  10.         Return Not (PS1 = PS2)
  11.     End Operator
  12.  
  13. #End Region
  14.  


Mã: Chọn hết

  1. #region "Toán t? so sánh"
  2.     public static bool operator ==(Phanso PS1, Phanso PS2)
  3.     {
  4.         if ((PS1.TuSo == PS2.TuSo) && (PS1.MauSo == PS2.MauSo))
  5.         {
  6.             return true;
  7.         }
  8.         else
  9.         {
  10.             return false;
  11.         }
  12.     }
  13.     public static bool operator !=(Phanso PS1, Phanso PS2)
  14.     {
  15.         return !(PS1 == PS2);
  16.     }
  17. #endregion
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
manhtung
Thành viên tích cực
Thành viên tích cực
Bài viết: 109
Ngày tham gia: T.Bảy 12/04/2008 2:16 pm
Đến từ: huế
Liên hệ:

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi manhtung » T.Năm 17/07/2008 2:06 pm

cám ơn nhé. viết rất chuẩn đó. khi nào có gì khó thì post lên giúp cho với nhé
More Simple More Good -- cÀNG đƠN gIẢN cÀNG tỐT

Hình đại diện của người dùng
Trinh_thuy
Bài viết: 1
Ngày tham gia: T.Hai 19/05/2008 3:03 pm
Đến từ: Quảng ngãi

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi Trinh_thuy » T.Tư 23/07/2008 4:19 pm

Bạn nên post thêm về abstract class, interface, Polimorphic method cho vài người biết luôn đi.

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » CN 27/07/2008 12:38 pm

Tên bài viết: I. Interface
Tác giả: Nguyễn Anh Tuyên
Cấp độ bài viết: Advance



Part II : Inheritance (Thừa kế)


Qua phần đầu, chúng ta đã học được các khái niệm nền tảng của OOP cũng như cách xây dựng 1 class như thế nào. Nhưng qua đó nó cũng chỉ thể hiện được Tính trừu tượng ( qua thiết kế class) và Tính bao đóng (qua tầm vực biến).
Phần này chúng ta học thêm 1 khái niệm mới hết sức quan trọng đó là Tính Thừa kế.
I. Interface

1. Khái niệm
Interface chẳng có gì nhiều hơn là tập hợp nhưng thành viên trừu tượng, chúng chỉ có phần định nghĩa chứ ko có phần nội dung (phần code thực thi). Nó cung cấp nhưng thành viên trừu tượng cho các class hay structure muốn implement nó
Nó được dùng để thực hiện việc thừa kế đa giao diện trong Net.
Những lưu ý với Interfaces:
1. Trong interface bạn ko được dùng các từ khóa khai báo tầm vực.
2. Interface chỉ chứa các phần định nghĩa của method, properties, event, delegate, enum.

2. Khai báo một interface
Để khai báo một interface từ dùng từ khóa inter face.
Ví dụ ta có Interface Ipointy có chưa một thuộc tính chỉ cho phép đọc Points trả về kiểu byte.

Mã: Chọn hết

  1. public interface IPointy
  2.     {
  3.         byte Points { get;}
  4.     }

Ta hiện thực 2 class implement Interface Ipointy trên.

Mã: Chọn hết

  1. // Hexagon now implements IPointy.
  2.     public class Hexagon : IPointy
  3.     {
  4.         // IPointy Implementation.
  5.         public byte Points
  6.         {
  7.             get { return 6; }
  8.         }
  9.     }
  10.     // New Shape derived class named Triangle.
  11.     public class Triangle :  IPointy
  12.     {
  13.        
  14.         // IPointy Implementation.
  15.         public byte Points
  16.         {
  17.             get { return 3; }
  18.         }
  19.     }
  20.  

Như ta đã nói ở trên ta có thể thực hiện thừa kế đa interface
Ví dụ giờ nếu ta có thêm một interface là IChuviDientich

Mã: Chọn hết

  1. public interface IChuviDientich
  2.     {
  3.         int Chuvi{get;}
  4.         int Dientich{ get;}
  5.  
  6.     }

Class Hexagon thừa kế 2 giao diện được viết lại như sau

Mã: Chọn hết

  1. // Hexagon now implements IPointy vaf IChuviDientich
  2.     public class Hexagon : IPointy,IChuviDientich
  3.     {
  4.         // IPointy Implementation.
  5.         public byte Points
  6.         {
  7.             get { return 6; }
  8.         }
  9.  
  10.         #region IChuviDientich Members
  11.  
  12.         public int Chuvi
  13.         {
  14.             get {return 10; }
  15.         }
  16.  
  17.         public int Dientich
  18.         {
  19.             get { return 20; }
  20.         }
  21.  
  22.         #endregion
  23.     }

Để Implement một interface nhanh chóng ta có thể tận dụng khả năng Hộ trợ Của IDE VS

implement Interface.jpg


3. Implement Interface để hiện thực lệnh foreach cho một class tập hợp tự tạo.

Ví dụ ta có class clsItem sau dùng để mô tả một item đơn lẻ

Mã: Chọn hết

  1. public class clsItem
  2.     {
  3.         public int x, y;
  4.         public clsItem(int px, int py)
  5.         {
  6.             x = px;
  7.             y = py;
  8.         }
  9.     }

Bây giờ ta tạo ra một class tập hợp quanlyitem để quản lý các item đơn lẻ trên. Cách đơn giản nhất là tạo một đối tượng thuộc lớp List bên trong class này.

Mã: Chọn hết

  1. public class quanlyitem
  2.     {
  3. //lớp quản lý các item
  4.         List<clsItem> lst = new List<clsItem>();
  5.         public void Add(clsItem item)
  6.         {
  7.             lst.Add(item);
  8.         }
  9.     }
  10.  
Để có thể dùng lệnh foreach cho class quanlyitem ta cần phải implement Interface Ienumerable

Class quanlyitem được viết lại như sau

Mã: Chọn hết

  1. public class quanlyitem:IEnumerable
  2.     {
  3.         List<clsItem> lst = new List<clsItem>();
  4.         public void Add(clsItem item)
  5.         {
  6.             lst.Add(item);
  7.         }
  8.     //Lệnh foreach được hiện thực bằng method sau trả về Ienumerator.
  9.         public IEnumerator GetEnumerator()
  10.         {
  11.             return lst.GetEnumerator();
  12.         }
  13.     }

Sử dụng như sau : yêu cầu có một listbox và một button

Mã: Chọn hết

  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             quanlyitem ql = new quanlyitem();
  4.             ql.Add(new clsItem(1, 1));
  5.             ql.Add(new clsItem(2, 2));
  6.             ql.Add(new clsItem(3, 3));
  7.             ql.Add(new clsItem(4, 4));
  8.             ql.Add(new clsItem(5, 5));
  9.             foreach (clsItem item in ql)
  10.             {
  11.                 listBox1.Items.Add(item.x + " ; " + item.y);
  12.             }
  13.         }
  14.  
Sửa lần cuối bởi anhtuyenbk vào ngày T.Hai 28/07/2008 11:53 am với 1 lần sửa.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » T.Hai 28/07/2008 11:52 am

Tên bài viết: II. Abstract class
Tác giả: Nguyễn Anh Tuyên
Cấp độ bài viết: Advance


II. Abstract class
Lớp trừu tượng là một lớp bao gồm một tập hợp các thành viên trừu tượng (nghe có vẻ giống Interface quá nhỉ) nhưng nó làm được nhiều việc hơn Interface.
Lớp trừu tượng được tạo ra nhằm mục đích tạo ra một khuôn mẫu chung để các lớp con thừa kế nó, do đó ta có thể xủ lý được các đối tượng liên quan theo một cách giống nhau.
Các lưu ý
1. Không thể tạo được một đối tượng từ Abstract class
2. Lớp trừu tượng chứa các thành viên trừu tượng (method, properties) được khai báo với abstract keyword.
3. Vì là lớp nên nó chứa được các thành viên ko phải trừu tượng khác như field, properties, method, event, enum, delegate….
4. Một lớp con chỉ được thừa kế từ 1 Abstract class duy nhất và nhiều Interface.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

dllcoder
Bài viết: 9
Ngày tham gia: T.Hai 20/10/2008 10:39 pm

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi dllcoder » T.Hai 20/10/2008 10:52 pm

Bài viết hay lắm, thanks anhtuyenbk. Hy vọng bạn sẽ tiếp tục hoàn thiện bài tut này :)

Hình đại diện của người dùng
tiger86love102
Thành viên danh dự
Thành viên danh dự
Bài viết: 610
Ngày tham gia: CN 19/10/2008 1:10 am
Đến từ: http://ready.vn
Has thanked: 4 time
Been thanked: 21 time
Liên hệ:

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi tiger86love102 » T.Bảy 20/12/2008 12:42 am

Vừa đọc vừa thực hành xem sao chứ cứ đọc lý thuyết một hồi đầu óc nhảy loạn xạ hết cả lên. (:|
Anh Tuyên cẩn thận giải thích chi tiết thật =D>
Bài viết ý nghĩa thật, đọc hiểu bài này có lẽ áp dụng với một số ngôn ngữ khác như C... đc đấy.
Thanks muck :)
@anhtuyenbk: anh dùng mấy cái ví dụ dễ hiểu lắm (Dog chẳng hạn ;) ) Dễ hiểu mà lại có hứng ;;)
Đội bóng Ready
facebook.com/tiger86love102

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi vo_minhdat2007 » T.Bảy 20/12/2008 7:49 am

Thế này là tốt rồi. Em chỉ không hiểu phần Interface và Abstract Class thôi! :D

MrB
Thành viên tích cực
Thành viên tích cực
Bài viết: 158
Ngày tham gia: T.Tư 26/03/2008 7:03 pm
Been thanked: 1 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi MrB » T.Bảy 20/12/2008 9:44 am

vo_minhdat2007 đã viết:Thế này là tốt rồi. Em chỉ không hiểu phần Interface và Abstract Class thôi! :D
Lớp trừu tượng chứa các thành viên trừu tượng nên không thể tạo được đối tượng của lớp đó mà phải viết lớp khác kế thừa. Nhưng lớp trừu tượng cũng có thể chứa các thành viên không trừu tượng nên không thể thực hiện đa kế thừa, vì vậy phải viết các giao diện chỉ chứa các thành viên trừu tượng.

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi anhtuyenbk » T.Bảy 20/12/2008 10:03 am

Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

Hình đại diện của người dùng
ntquy_it
Bài viết: 1
Ngày tham gia: T.Ba 23/12/2008 7:37 am
Đến từ: Hà Nội
Liên hệ:

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi ntquy_it » T.Ba 23/12/2008 7:59 am

anhtuyenbk đã viết:Ko ai quan tâm đến cái này cả sao. :( :(

OK, hướng dẫn tỷ mỉ thế này hay đấy, cứ lý thuyết suông nghe không thuyết phục lắm. hì hì, đặc thù Programming mà. Nhưng mình thấy ADO hơi khó nhớ, ai có thủ thuật gì dễ nhớ thì support giùm nhé :-/
"Sai đâu sửa đấy, sai đấy sửa đâu, sửa đâu sai đấy, sửa đấy sai đâu"

Support mobile: 0945.71.79.77. Y!m: BillGate_dhkh0408

thanh.bob
Bài viết: 9
Ngày tham gia: CN 07/12/2008 3:32 pm

Re: [Net]**OOP - Hướng đối tượng với VB.Net & C# - Extremely

Gửi bàigửi bởi thanh.bob » T.Sáu 23/01/2009 6:36 pm

bài viết hay quá, anh tuyenbk có lẽ hợp với nghề giáo viên đấy :D


Quay về “Lập trình hướng đối tượng (OOP)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách