



















Preview text:
lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 1 MỤC LỤC
MỤC LỤC ......................................................................................................... 1
Bài 1: Các khái niệm cơ bản về lập trình hướng ối tượng ................................ 4
1.1. Lịch sử phát triển của phương pháp lập trình ................................................................................. 4
1.1.1 Lập trình không có cấu trúc (hay lập trình tuyến tính) ............................................................... 4
1.1.2 Lập trình hướng chức năng(lập trình cấu trúc) .......................................................................... 5
1.1.3 Lập trình module ........................................................................................................................ 6
1.1.4 Lập trình hướng ối tượng ........................................................................................................... 8
1.2 Một số khái niệm trong lập trình hướng ối tượng ............................................................................ 9
1.2.1 Trừu tượng hóa dữ liệu (Data Abstraction) ................................................................................ 9
1.2.2 Lớp (Class) ................................................................................................................................ 12
1.2.3 Đối tượng (Object) ................................................................................................................... 14
1.2.4 Thuộc tính ................................................................................................................................ 15
1.2.5 Hoạt ộng (Operation) ............................................................................................................... 16
1.2.6 Phương thức (Method) ............................................................................................................ 17
1.2.7 Thông iệp (Message) ................................................................................................................ 17
1.2.8 Sự kiện (Event) ......................................................................................................................... 18
1.2.8 Phân biệt giữa lớp và ối tượng ................................................................................................. 18
1.2.9 Thiết lập (Construction) và Hủy (Destruction) ......................................................................... 19
1.2.10 Tính Bền vững (Persistence) ................................................................................................... 20
1.2.11 Tính Đóng gói dữ liệu ............................................................................................................. 21
1.2.12 Tính thừa kế ........................................................................................................................... 22
1.2.13 Tính Đa Thừa kế ..................................................................................................................... 24
1.2.14 Tính Đa hình ........................................................................................................................... 25
1.3 Các ưu iểm của lập trình hướng ối tượng ....................................................................................... 27
1.3.1. Các ưu iểm của lập trình hướng ối tượng ............................................................................... 27
1.3.2. Mốt số ngôn ngữ lập trình hướng ối tượng ............................................................................ 27
1.3.3. Ngôn ngữ lập trình C# ............................................................................................................. 29
Bài 2: Lớp và ối tượng(1) ............................................................................... 31
2.1. Lớp ................................................................................................................................................. 31
2.1.1. Định nghĩa lớp ......................................................................................................................... 31
2.1.2 Thành phần dữ liệu .................................................................................................................. 35
2.1.3 Phương thức ............................................................................................................................ 37
2.1.4. Các từ khoá ặc tả truy cập ....................................................................................................... 37
2.1.5. Khai báo ối tượng, mảng ối tượng .......................................................................................... 40 lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 2
2.1.6. Định nghĩa chồng phương thức .............................................................................................. 41
2.1.7. Thuộc tính và thủ tục thuộc tính ............................................................................................. 43
2.1.8. Từ khoá this ............................................................................................................................. 47
Bài 3: Lớp và ối tượng(2) ............................................................................... 50
3.1. Phép gán các ối tượng .................................................................................................................... 50
3.2. Phương thức thiết lập và sao chép ................................................................................................ 51
3.2.1. Phương thức thiết lập ............................................................................................................ 51
3.2.2. Phương thức sao chép ............................................................................................................ 58
3.3. Huỷ bỏ ối tượng, cơ chế gom rác trong .Net ................................................................................. 59
Bài 4: Lớp và ối tượng(3) ............................................................................... 62
4.1. Thành phần tĩnh và cách sử dụng .................................................................................................. 62
4.1.1. Thành phần dữ liệu tĩnh .......................................................................................................... 62
4.1.2. Phương thức tĩnh .................................................................................................................... 65
4.2. Lớp bao và cách sử dụng ................................................................................................................ 68
Bài 5: Kế thừa và a hình(1) ............................................................................ 70
5.1. Giới thiệu chung về thừa kế ........................................................................................................... 70
5.2. Xây dựng lớp dẫn xuất thừa kế từ lớp cơ sở .................................................................................. 73
5.3. Mức truy cập trong lớp dẫn xuất ................................................................................................... 76
5.4. Gọi phương thức khởi tạo của lớp cơ sở ....................................................................................... 77
5.5. Truy xuất các thành phần của lớp cơ sở ......................................................................................... 78
5.6. Boxing và Unboxing dữ liệu ............................................................................................................ 78
5.7. Các lớp lồng nhau ........................................................................................................................... 81
Bài 6: Kế thừa và a hình(2) ............................................................................ 83
6.1. Giới thiệu chung về a hình ............................................................................................................. 84
6.2. Phương thức a hình ....................................................................................................................... 84
6.3. Từ khoá new và override ................................................................................................................ 88
Bài 7: Kế thừa và a hình(3) ............................................................................ 91
7.1 Lớp trừu tượng ............................................................................................................................... 91
7.1.1. Xây dựng lớp cơ sở trừu tượng .............................................................................................. 91
7.1.2. Kế thừa từ lớp trừu tượng ..................................................................................................... 94
7.1.3. Hạn chế của lớp trừu tượng ................................................................................................... 98
7.2. Lớp cô lập (sealed class) ................................................................................................................. 99
7.3. Lớp Object .................................................................................................................................... 100
Bài 8: Giao diện ........................................................................................... 103
8.1. Giao diện ................................................................................................... 103
8.1.1. Xây dựng giao diện................................................................................................................ 103 lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 3
8.1.2. Khai báo thuộc tính của giao diện ........................................................................................ 104
8.1.3. Khai báo phương thức của giao diện .................................................................................... 105
8.2. Thực thi giao diện ......................................................................................... 106
8.2.1. Thực thi giao diện ................................................................................................................. 106
8.2.2. Toán tử is ............................................................................................................................... 110
8.2.3. Toán tử as .............................................................................................................................. 112
8.3. Thực thi giao diện ......................................................................................... 113
8.3.1. Thực thi giao diện ................................................................................................................. 113
8.3.2. Mở rộng giao diện ................................................................................................................ 123
8.3.3. Tham chiếu ối tượng của lớp con qua giao diện................................................................... 124
8.3.4. Giao diện ối lập với lớp trừu tượng ...................................................................................... 125
8.4 Kỹ thuật xử lý ngoại lệ ..................................................................................... 126
8.4.1 Khái niệm xử lý ngoại lệ ......................................................................................................... 126
8.4.2. Các lớp ngoại lệ của .Net ................................................................................................... 132
8.4.3 Ném ngoại lệ ..................................................................................................................... 133 lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 4
Bài 1: Các khái niệm cơ bản về lập trình hướng ối tượng
1.1. Lịch sử phát triển của phương pháp lập trình
Phần này trình bày về một số kỹ thuật hay phương pháp lập trình ược phát triển ể giải quyết
các vấn ề trong Tin học kể từ khi máy tính ra ời. Sự phát triển của các kỹ thuật lập trình liên
quan chặt chẽ tới sự phát triển phần cứng của máy vi tính cũng như việc ứng dụng máy tính
vào giải quyết các vấn ề trong thực tế. Chúng ta có thể chia các phương pháp lập trình thành các kiểu sau:
• Lập trình không có cấu trúc
• Lập trình hướng thủ tục
• Lập trình theo kiểu module hóa Lập trình hướng ối tượng
Chúng ta sẽ lần lượt xem xét các kỹ thuật lập trình này.
1.1.1 Lập trình không có cấu trúc (hay lập trình tuyến tính)
Thông thường mọi người bắt ầu học lập trình bằng cách viết các chương trình nhỏ và ơn
giản chỉ chứa một “chương trình chính”. Ở ây một chương trình chính có nghĩa là một tập
các lệnh hoặc câu lệnh làm việc với các dữ liệu toàn cục trong cả chương trình (các biến
dùng trong chương trình là các biến toàn cục). Chúng ta có thể minh hoạ bằng hình vẽ sau ây:
Lập trình không có cấu trúc. Chương trình chính thao
tác trực tiếp trên các dữ liệu toàn cục
Một số nhược iểm của lập trình không có cấu trúc:
+ Lập trình không có cấu trúc không có khả năng kiểm soát tính thấy ược của dữ liệu.
Mọi dữ liệu trong chương trình ều là biến toàn cục do ó có thể bị thay ổi bởi bất kỳ
phần nào ó của chương trình. lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 5
+ Việc không kiểm soát ược tính thấy ược của dữ liệu dẫn ến các khó khăn trong việc
gỡ lỗi chương trình, ặc biệt là các chương trình lớn.
+ Kỹ thuật lập trình không có cấu trúc có rất nhiều bất lợi lớn khi chương trình ủ lớn.
Ví dụ nếu chúng ta cần thực hiện lại một oạn câu lệnh trên một tập dữ liệu khác thì
buộc phải copy oạn lệnh ó tới vị trí trong chương trình mà chúng ta muốn thực hiện.
Điều này làm nảy sinh ý tưởng trích ra các oạn lệnh thường xuyên cần thực hiện ó,
ặt tên cho chúng và ưa ra một kỹ thuật cho phép gọi và trả về các giá trị từ các thủ tục này.
1.1.2 Lập trình hướng chức năng(lập trình cấu trúc)
Những ngôn ngữ lập trình truyền thống như: Pascal, C, Foxpro.. ược gọi chung là ngôn ngữ
lập trình hướng thủ tục. Theo cách tiếp cận hướng thủ tục thì hệ thống phần mềm ược xem
như là dãy các công việc cần thực hiện như ọc dữ liệu, tính toán, xử lý, lập báo cáo và in ấn
kết quả...Mỗi công việc ó sẽ dược thực hiện bởi một hàm hay thủ tục nhất ịnh. Như vậy
trọng tâm của cách tiếp cận này là các hàm chức năng. Nói rõ hơn theo cách tiếp cận này,
chương trình ược tổ chức thành các chương trình con. Mỗi chương trình con ảm nhận xử
lý một công việc nhỏ trong toàn bộ hệ thống. Mỗi chương trình con này lại có thể chia nhỏ
thành các chương trình con nhỏ hơn. Quá trình phân chia như vậy tiếp tục diễn ra cho ến
khi các chương trình con nhận ược ủ ơn giản. Người ta gọi ó là quá trình làm mịn dần.
Khi tập trung vào trọng tâm phát triển các hàm thì chúng ta lại ít chú ý ến dữ liệu ( Nghĩa là
lập trình hướng thủ tục thì dữ liệu không ược coi trọng) những cái mà các hàm sử dụng ể
thực hiện công việc của mình.
Cái gì sẽ xẩy ra ối với dữ liệu và gắn dữ liệu với các hàm như thế nào? Trong chương trình
có nhiều hàm, thường thì có nhiều thành phần dữ liệu quan trọng sẽ ược khai báo tổng thể
ể cho nhiều hàm có thể truy nhập, ọc và làm thay ổi giá trị của biến tổng thể. Ngoài ra mỗi
hàm có thể có các vùng dữ liệu riêng.
Để liên kết giữa các hàm thành một ơn vị chương trình thông qua biến toàn cục. lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 6
Điều này có nghĩa là nhiều hàm có thể truy nhập, sử dụng dữ liệu chung , làm thay ổi giá trị
của chúng và vì vậy rất khó kiểm soát. Nhất là ối với các chương trình lớn, phức tạp thì vấn
ề càng trở nên khó khăn hơn.
Điều gì sẽ xẩy ra nếu như chúng ta muốn thay ổi, bổ xung cấu trúc dữ liệu của biến toàn
cục. Đó là phải viết lại hầu như toàn bộ các hàm có liên quan...
Tóm lại những ặc tính chính của phương pháp lập trình hướng thủ tục là:
+ Tập chung vào công việc cần thực hiện (thuật toán)
+ Chương trình lớn ược chia thành các hàm nhỏ hơn
+ Phần lớn các hàm sử dụng dữ liệu chung
+ Dữ liêu trong hệ thống ược chuyển ộng từ hàm này sang hàm khác.
+ Hàm biến ổi dữ liệu từ dạng này sang dạng khác
+ Sử dụng cách tiếp cận top-down trong thiết kế chương trình 1.1.3 Lập trình module
Trong lập trình module các thủ tục có cùng một chức năng chung sẽ ược nhóm lại với
nhau tạo thành một module riêng biệt. Một chương trình sẽ không chỉ bao gồm một phần
ơn lẻ. Nó ược chia thành một vài phần nhỏ hơn tương tác với nhau qua các lời gọi thủ tục
và tạo thành toàn bộ chương trình. lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 7
Lập trình module. Chương trình chính là sự kết hợp giữa các lời
gọi tới các thủ tục trong các module riêng biệt với các dữ liệu thích hợp
Mỗi module có dữ liệu riêng của nó. Điều này cho phép các module có thể kiểm soát các dữ
liệu riêng của nó bằng các lời gọi tới các thủ tục trong module ó. Tuy nhiên mỗi module chỉ
xuất hiện nhiều nhất một lần trong cả chương trình.
Yếu iểm của lập trình thủ tục và lập trình module hóa:
+ Khi ộ phức tạp của chương trình tăng lên sự phụ thuộc của nó vào các kiểu dữ liệu cơ
bản mà nó xử lý cũng tăng theo. Vấn ề trở nên rõ ràng rằng cấu trúc dữ liệu sử dụng
trong chương trình cũng quan trọng không kém các phép toán thực hiện trên chúng.
Điều này càng lộ rõ khi kích thước chương trình tăng. Các kiểu dữ liệu ược xử lý nhiều
trong các thủ tục của một chương trình có cấu trúc. Do ó khi thay ổi cài ặt của một kiểu
dữ liệu sẽ dẫn ến nhiều thay ổi trong các thủ tục sử dụng nó.
+ Một nhược iểm nữa là khi cần dùng nhiều nhóm làm việc ể xây dựng một chương trình
chung. Trong lập trình có cấu trúc mỗi người sẽ ược giao xây dựng một số thủ tục và
kiểu dữ liệu. Những lập trình viên xử lý các thủ tục khác nhau nhưng lại có liên quan tới
các kiểu dữ liệu dùng chung nên nếu một người thay ổi kiểu dữ liệu thì sẽ làm ảnh hưởng
tới công việc của nhiều người khác, ặc biệt là khi có sai sót trong việc liên lạc giữa các thành viên của nhóm.
+ Việc phát triển các phầm mềm mất nhiều thời gian tập trung xây dựng lại các cấu trúc
dữ liệu cơ bản. Khi xây dựng một chương trình mới trong lập trình có cấu trúc lập trình lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 8
viên thường phải xây dựng lại các cấu trúc dữ liệu cơ bản cho phù hợp với bài toán và
iều này ôi khi rất mất thời gian.
1.1.4 Lập trình hướng ối tượng
Phong cách của phương pháp lập trình hướng ối tượng (OOP - Object Oriented
Programming) là tập chung vào dữ liệu. Theo cách tiếp cận này thì một câu hỏi thường ược
ặt ra là dữ liệu nào thì ược các phương thức(hay các hàm) nào xử lý và người ta em gói tất
cả dữ liệu và các phương thức có liên quan với nhau thành một nhóm giống như một lọ
thuốc bao giờ cũng có hai thứ: Các viên thuốc(dữ liệu) và tờ giấy trên ó ghi cách dùng các
viên thuốc ó(phương thức). Hai thứ ó gộp lại thành một kiểu dữ liệu gọi là dữ liệu ối
tượng(Object). Lập trình có sử dụng kiểu dữ liệu loại này gọi là lập trình hướng ối tượng.
Lập trình hướng ối tượng ặt trọng tâm vào ối tượng. Yếu tố quan trong quá trình phát triển
chương trình và không cho phép dữ liệu biến ộng tự do trong hệ thống. Trong một ối tương
dữ liệu gắn chặt với các hàm thành viên thành các vùng riêng mà chỉ có các hàm ó tác ộng
nên và cấm các hàm bên ngoài truy nhập tới tuỳ tiện.
Lập trình hướng ối tượng cho phép phân tích bài toán thành các thực thể ược gọi là ối
tượng và sau ó xây dựng các dữ liệu cùng các hàm xung quanh các ối tượng ó.
Các ối tựng có thể tác ộng, trao ổi thông tin với nhau thông qua cơ chế thông báo(mesage)
thông qua các phương thưc(hàm).
Lập trình hướng ối tượng có các ặc tính sau:
+ Tập chung vào dữ liệu thay cho các hàm
+ Chương trình ược chia thành các ối tượng lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 9
+ Cấu trúc dữ liệu ược thiết kế sao cho ặc tả ược ối tượng gắn với cấu trúc dữ liệu ó.
+ Dữ liệu ược óng gói lại, ược che giấu và không cho phép các hàm ngoại lai truy nhập tự do.
+ Các ối tượng tác ộng và trao ổi thông tin với nhau qua các hàm.
+ Có thể dẽ dàng bổ sung dữ liệu và các hàm mới vào ối tượng nào ó khi cần thiết.
+ Chương trình ược thiết kế theo cách tiếp cận từ dưới lên(bottom- up).
1.2 Một số khái niệm trong lập trình hướng ối tượng
1.2.1 Trừu tượng hóa dữ liệu (Data Abstraction)
Khi một lập trình viên phải phát triển một chương trình ứng dụng thì không có nghĩa
là người ấy lập tức viết mã cho ứng dụng ấy. Trước hết, người ấy phải nghiên cứu ứng dụng
và xác ịnh những thành phần tạo nên ứng dụng. Kế tiếp, người ấy phải xác ịnh những thông
tin cần thiết về mỗi thành phần.
Hãy khảo sát chương trình ứng dụng cho việc mua bán xe hơi nói trên. Chương trình phải
xuất hóa ơn cho những xe hơi ã bán cho khách hàng. Để xuất một hóa ơn, chúng ta cần
những thông tin chi tiết về khách hàng. Vậy bước thứ nhất là xác ịnh những ặc tính của khách hàng.
Một vài ặc tính gắn kết với khách hàng là: Tên. Địa chỉ. Tuổi. Chiều cao. Màu tóc.
Từ danh sách kể trên, chúng ta xác ịnh những ặc tính thiết yếu ối với ứng dụng. Bởi vì chúng
ta ang ề cập ến những khách hàng mua xe, vì thế những chi tiết thiết yếu là: Tên. Địa chỉ.
Còn những chi tiết khác (chiều cao, màu tóc …) là không quan trọng ối với ứng dụng. Tuy
nhiên, nếu chúng ta phát triển một ứng dụng hỗ trợ cho việc iều tra tội phạm thì những
thông tin chẳng hạn như màu tóc là thiết yếu. lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 10
Bên cạnh những chi tiết về khách hàng, những thông tin sau cũng cần thiết: Kiểu xe ược bán. Nhân viên nào bán xe.
Bên cạnh những ặc tính của khách hàng, xe hơi và nhân viên bán hàng, chúng ta cũng cần
liệt kê những hành ộng ược thực hiện.
Công việc xuất hóa ơn òi hỏi những hành ộng sau:
Nhập tên của khách hàng.
Nhập ịa chỉ của khách hàng. Nhập kiểu xe.
Nhập tên của nhân viên bán xe.
Xuất hóa ơn với ịnh dạng òi hỏi.
Khung thông tin bên dưới cho thấy những thuộc tính và những hành ộng liên quan ến một hóa ơn: Các thuộc tính Tên của khách hàng
Địa chỉ của khách hàng Kiểu xe bán Nhân viên bán xe Các hành ộng Nhập tên Nhập ịa chỉ Nhập kiểu xe
Nhập tên nhân viên bán xe Xuất hóa ơn lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 11 Định nghĩa
Sự trừu tượng hóa dữ liệu là quá trình xác ịnh và nhóm các thuộc tính và các hành ộng liên
quan ến một thực thể cụ thể, xét trong mối tương quan với ứng dụng ang phát triển.
Tiếp theo, chúng ta muốn ứng dụng tính toán tiền hoa hồng cho nhân viên bán hàng.
Những thuộc tính liên kết với nhân viên bán hàng có tương quan với ứng dụng này là: Tên.
Số lượng xe bán ược. Tiền hoa hồng.
Những hành ộng òi buộc ối với công việc này là:
Nhập tên nhân viên bán xe.
Nhập số lượng xe bán ược.
Tính tiền hoa hồng kiếm ược. Những thuộc tính Tên Số lượng xe bán ược Tiền hoa hồng Những hành ộng Nhập tên
Nhập số lượng xe bán ược Tính tiền hoa hồng
Như thế, việc trừu tượng hóa dữ liệu tra ặt ra câu hỏi ‘Đâu là những thuộc tính và những
hành ộng cần thiết cho một vấn ề ặt ra?’ Những ưu iểm của việc Trừu tượng hóa: Tập trung vào vấn ề.
Xác ịnh những ặc tính thiết yếu và những hành ộng cần thiết. lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 12
Giảm thiểu những chi tiết không cần thiết.
Việc trừu tượng hóa dữ liệu là cần thiết, bởi vì không thể mô phỏng tất cả các hành ộng và
các thuộc tính của một thực thể. Vấn ề mấu chốt là tập trung ến những hành vi cốt yếu và
áp dụng chúng trong ứng dụng.
Chẳng hạn như khách hàng hoặc nhân viên bán hàng cũng có thể thực hiện những hành ộng sau: Người ấy i lại. Người ấy nói chuyện.
Tuy nhiên, những hành ộng này không liên quan ến ứng dụng. Việc trừu tượng hóa dữ liệu sẽ loại bỏ chúng. 1.2.2 Lớp (Class)
Trong ứng dụng mua bán xe, chúng ta ã xác ịnh các thuộc tính và các hành ộng cần
có ể xuất một hóa ơn cho một khách hàng.
Các hành ộng và các thuộc tính này là chung cho mọi khách hàng mua xe. Ví thể, chúng có
thể ược nhóm lại trong một thực thể ơn nhất gọi là một ‘lớp’.
Hãy khảo sát lớp có tên là ‘khách hàng’ dưới ây. Lớp này bao gồm mọi thuộc tính và hành
ộng òi hỏi ối với một khách hàng. Lớp Khách hàng Tên khách hàng Địa chỉ khách hàng Kiểu xe ược bán Nhân viên bán xe Nhập tên Nhập ịa chỉ Nhập kiểu xe ược bán
Nhập tên nhân viên bán xe Xuất hóa ơn lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 13 Định nghĩa
Một lớp ịnh nghĩa một thực thể theo những thuộc tính và những hành ộng chung. Hoặc
Những thuộc tính và những hành ộng chung của một thực thể ược nhóm lại ể tạo nên một
ơn vị duy nhất gọi là một lớp. Hoặc Một lớp là một sự xác ịnh cấp chủng loại của các thực thể giống nhau.
Một lớp là một mô hình khái niệm về một thực thể. Nó mang tính cách tổng quát chứ không mang tính cách ặc thù.
Khi ịnh nghĩa một lớp, chúng ta muốn phát biểu rằng một lớp sẽ phải có một tập hợp các
thuộc tính và các hành ộng riêng. Chẳng hạn như một ịnh nghĩa lớp dưới ây: Lớp Con người Tên Chiều cao Màu tóc Viết Nói
Lớp này ịnh nghĩa thực thể ‘Con người’. Mọi thực thể thuộc kiểu ‘Con người’ sẽ ều có những
ặc tính và những hành ộng như ã ược ịnh nghĩa.
Một khi một lớp ã ược ịnh nghĩa, chúng ta biết ược những thuộc tính và những hành ộng
của những thực thể ‘trông giống’ như lớp này. Vì thế, tự bản chất một lớp là một nguyên mẫu (prototype).
Một ví dụ khác về một lớp liên quan ến việc mua bán xe hơi như sau: Lớp Nhân viên bán hàng Tên Số lượng xe bán ược Tiền hoa hồng Nhập tên lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 14
Nhập số lượng xe bán ược Tính tiền hoa hồng
Lớp trên ịnh nghĩa các thuộc tính và các hành ộng ặc trưng cho mọi nhân viên bán xe hơi.
1.2.3 Đối tượng (Object)
Một lớp là một nguyên mẫu phác họa những thuộc tính và những hành ộng có thể của
một thực thể. Để có thể sử dụng thực thể mà lớp ịnh nghĩa, chúng ta phải tạo một ‘ ối tượng’ từ lớp ó.
Lớp là một khái niệm, còn ối tượng là một thể hiện ược ịnh nghĩa bởi lớp.
Hãy khảo sát lớp ‘Khách hàng’ ược ịnh nghĩa trên. Lớp này ịnh nghĩa mọi thuộc tính và
hành ộng gắn liền với một khách hàng.
Khi một người mua một xe hơi ở một cửa hàng, cửa hàng ấy có một khách hàng mới.
Vào thời iểm ấy, một ối tượng giống như lớp ‘Khách hàng’ ược tạo ra. Đối tượng này sẽ phải
có những giá trị thực ối với các thuộc tính ‘Tên’, ‘Địa chỉ’, ‘Kiểu xe’ …
Chẳng hạn như một khách hàng có tên là ‘Mark’, sống ở ‘London’ ã mua một xe kiểu
‘Honda Civic’ từ nhân viên bán hàng tên là ‘Tom’. Như thế, ‘Mark’ là một ối tượng của kiểu ‘Khách hàng’.
Định nghĩa: Đối tượng là sự kết hợp giữa dữ liệu và thủ tục ( hay còn gọi là các
phương thức – method) thao tác trên dữ liệu ó. Có thể ưa ra công thức phản ánh bản chất
kỹ thuật lập trình hướng ối tượng như sau:
Đối tượng=Dữ liệu + Phương thức
Một ối tượng là một thực thể cụ thể (thông thường bạn có thể sờ chạm, xem thấy và cảm nhận).
Kể từ lúc một ối tượng hiện hữu, những thuộc tính của nó là những giá trị xác ịnh, và những
hành ộng ược ịnh nghĩa cho ối tượng này ược thực thi.
Trong mỗi một ối tượng, các khía cạnh sau ây ược xác ịnh rõ: Tình trạng (state). Thái ộ (behavior). Chân tính (identity). lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 15
Hình: Trình bày hai ối tượng.
Mỗi ối tượng có những ặc tính riêng mô tả ối tượng ấy là gì, hoặc hành ộng ra sao.
Chẳng hạn như những thuộc tính của một ối tượng ‘Con người’ sẽ là: Tên. Tuổi. Trọng lượng.
Những thuộc tính của một ối tượng ‘Xe hơi’ sẽ là: Màu sắc. Kiểu xe. Năm.
Một ối tượng cũng thực hiện một số hành ộng. Một xe hơi có khả năng thực hiện những hành ộng sau: Khởi ộng. Ngưng. Chuyển ộng.
Để chuyển ổi giữa các ối tượng lập trình và các ối tượng ời thực, cần phải kết hợp các thuộc
tính và các hành ộng của một ối tượng. 1.2.4 Thuộc tính
Chúng ta xác ịnh các thuộc tính và các hành ộng ể ịnh nghĩa một lớp. Một khi các thuộc tính
ược gán cho các giá trị, chúng mô tả một ối tượng. Hãy khảo sát lớp sau: lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 16
Các thuộc tính của lớp Khách hàng Tên của khách hàng
Địa chỉ của khách hàng Kiểu xe ược bán Nhân viên ã bán xe
Khi thuộc tính ‘Tên’ ược gán cho giá trị ‘Mark’ thì nó mô tả một ối tượng xác ịnh ược tạo từ lớp ‘Khách hàng’. Định nghĩa
Một thuộc tính là một ặc tính mô tả một ối tượng.
Như thế, các thuộc tính nắm giữ các giá trị dữ liệu trong một ối tượng, chúng ịnh nghĩa một ối tượng cụ thể.
Bởi vì một lớp là một nguyên mẫu cho nên các thuộc tính trong một lớp không thể nắm giữ
các giá trị. Một thuộc tính có thể ược gán một giá trị chỉ sau khi một ối tượng dựa trên lớp ấy ược tạo ra.
Để có thể lưu giữ những chi tiết của một khách hàng, một thể hiện( ối tượng) của lớp ‘Khách
hàng’ phải ược tạo ra. Các thuộc tính của một ối tượng hiện hữu chỉ khi ối tượng ấy ược tạo ra.
Mọi ối tượng của một lớp phải có cùng các thuộc tính. Khảo sát ví dụ sau:
Các thuộc tính của lớp Con người
Đối tượng ược tạo từ lớp Con người Tên Mark Chiều cao = 6 ft. 1 in. Màu tóc Black
1.2.5 Hoạt ộng (Operation)
Các hành ộng khả thi, như ược ịnh nghĩa trong một lớp, ược gọi là ‘các hoạt ộng’. lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 17 Định nghĩa:
Một hoạt ộng là một dịch vụ ược yêu cầu của một ối tượng.
Các hoạt ộng xác ịnh các hành ộng cần phảit thực hiện của một ối tượng ược tạo ra từ một
lớp. Chẳng hạn như chúng ta không thể yêu cầu một hoạt ộng ‘Mua một xe hơi khác’ của
một ối tượng ược tạo ra từ lớp ‘Khách hàng’.
Một lớp chỉ là một nguyên mẫu. Vì thế, trong một lớp một hoạt ộng chỉ ược ịnh nghĩa. Còn
việc áp dụng hoạt ộng ấy chỉ xảy ra nơi các ối tượng riêng rẽ. Chẳng hạn như hoạt ộng ‘Nhập
Tên’ mà lớp “Khách hàng’ ịnh nghĩa có thể ược thực hiện nơi một ối tượng nào ó.
Tập hợp các hoạt ộng ược yêu cầu cho tất cả các ối tượng trong cùng một lớp là như nhau.
1.2.6 Phương thức (Method)
Các hoạt ộng ịnh nghĩa các hành ộng khả thi có thể ược yêu cầu của một ối tượng.
Một phương thức là sự thực thi thực tế của một hoạt ộng. Định nghĩa
Phương thức là sự xác ịnh về cách thức thực thi một hoạt ộng ược yêu cầu.
Các phương thức xác ịnh cách thức thao tác trên các dữ liệu của một ối tượng. Bởi vì phương
thức là sự thực thi thực tế một hoạt ộng, cho nên nó có thể ược áp dụng cho một ối tượng.
Một phương thức là một thuật toán, từng bước từng bước (step-by-step) xác ịnh iều gì ược
thực hiện khi hoạt ộng ấy ược yêu cầu.
Hãy khảo sát những hoạt ộng chung của một thực thể thuộc loại ‘Con người’: Đi, Nói.
Chỉ khi một ối tượng cụ thể của loại ‘Con người’ ược tạo ra thì các hành ộng ‘Đi’, ‘Nói’ mới ược thực thi. 1.2.7 Thông iệp (Message)
Để yêu cầu một hoạt ộng cụ thể nào ó ược thực hiện, một thông iệp ược gởi tới ối tượng
nơi hoạt ộng này ược ịnh nghĩa. Định nghĩa
Một thông iệp là một lời yêu cầu một hoạt ộng.
Khi một ối tượng nhận ược một thông iệp, nó thực hiện một phương thức tương ứng. lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 18
Chẳng hạn, một ối tượng ược tạo từ lớp ‘Khách hàng’ ể nhập tên của người sử dụng. Khi ối
tượng nhận ược thông iệp, nó tìm và thực thi phương thức ‘Nhập tên’.
Trong trường hợp một công ty, mỗi bộ phận ược coi là một ối tượng. Những thông tin ược
chuyển tới và ược ón nhận từ mỗi bộ phận (hoặc qua thông báo liên bộ phận, hoặc qua
những chỉ thị miệng) tạo nên những thông iệp giữa các ối tượng. Những chỉ thị này có thể
ược chuyển dịch thành những lời gọi hàm trong một chương trình.
Các đối tượng gởi thông điệp cho nhau
Trong hình trên ‘Kinh doanh’ và ‘Kế toán’ là hai bộ phận khác nhau trong một công ty. Hai
bộ phận này ược coi là hai ối tượng khác nhau. Thông tin ược truyền i và ược ón nhận giữa
các bộ phận tạo nên các thông iệp giữa các ối tượng. 1.2.8 Sự kiện (Event)
Một sự kiện là một sự việc xảy ra cho một ối tượng tại một thời iểm. Để áp ứng lại sự kiện
ấy, ối tượng sẽ thực hiện một hoặc nhiều phương thức.
Nói cách khác, một sự kiện là một tác nhân mà ối tượng này gây ra cho một ối tượng khác.
Chẳng hạn như click chuột trái trên một nút.
Để hiểu rõ hơn các sự kiện, hãy khảo sát ví dụ sau từ thực tế:
‘Một người sẽ thét lên khi bị thọc bằng một vật nhọn’.
‘Thọc’ là sự kiện gây ra sự phản ứng là ‘thét lên’.
Trong máy tính, một người sử dụng nhấn một nút trên bàn phím là một sự kiện chung. Sự
phản hồi ối với sự kiện này là việc hiển thị ký tự tương ứng trên màn hình.
1.2.8 Phân biệt giữa lớp và ối tượng
Có một sự khác biệt thực sự giữa một lớp và một ối tượng. Cần nhận thức rõ sự khác biệt này. lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 19
Một lớp ịnh nghĩa một thực thể, trong khi ó một ối tượng là một trường hợp của thực thể ấy.
Đối tượng là một mô hình thực, trong khi lớp là một mô hình khái niệm - ịnh nghĩa tất cả
các thuộc tính và các phương thức cần thiết của một ối tượng.
Tất cả các ối tượng thuộc về cùng một lớp có cùng các thuộc tính và các phương thức.
Một lớp là một nguyên mẫu của một ối tượng. Nó xác ịnh các hành ộng khả thi và các thuộc
tính cần thiết cho một nhóm các ối tượng cụ thể.
1.2.9 Thiết lập (Construction) và Hủy (Destruction) 1.2.9.1 Thiết lập
Một lớp chỉ cung cấp những ịnh nghĩa về các thuộc tính và các phương thức khả thi.
Các thuộc tính và các phương thức có thể ược truy cập chỉ khi một ối tượng dựa trên một lớp ược tạo ra.
Khi một ối tượng mới ược tạo, các thuộc tính của nó trở nên hiện thực và có thể ược gán
giá trị. Tương tự, các phương thức ã ược ịnh nghĩa cũng ược áp dụng. Định nghĩa
Thiết lập là một tiến trình hiện thực hóa một ối tượng.
Hàm thiết lập là một phương thức ặc biệt phải ược gọi trước khi sử dụng bất kỳ phương
thức nào trong một lớp. Hàm Thiết lập khởi tạo các thuộc tính, và cấp phát bộ nhớ nếu cần.
Mỗi một lớp có một hàm thiết lập.
Khảo sát lại trường hợp cửa hàng bán xe hơi. Ngay từ lúc ầu chỉ ịnh nghĩa các lớp. Cho ến
khi một khách hàng mua một xe hơi tại cửa hàng thì một ối tượng mới giống như lớp ‘Khách hàng’ mới ược tạo.
Khi ối tượng này ược tạo, một số khoảng trống bộ nhớ ược cấp phát cho những thuộc tính
của nó ể lưu trữ các giá trị ược gán cho các thuộc tính ấy (‘Tên’, ‘Địa chỉ’ …). Hàm thiết lập
thực hiện việc cấp phát này. Vào lúc này, mọi thuộc tính và phương thức của ối tượng sẵn sàng ể sử dụng.
Tương tự như trường hợp một học sinh nhập học tại một trường học. Khi một học sinh
nhập học, một vài hành ộng ược thực hiện ể nhận học sinh ấy vào trường. Đó là: lOMoAR cPSD| 23136115
Đề cương Lập trình hướng ối tượng với C# Trang 20
Xếp lớp cho học sinh ấy.
Ghi tên học sinh ấy vào danh sách. Xếp chỗ ngồi.
Đây là những hành ộng ồng loạt ược thực hiện ngay lúc bắt ầu nhập học. Chúng tương tự
với những hành ộng mà hàm thiết lập của một ối tượng thực hiện. 1.2.9.2 Hủy
Khi một ối tượng không còn cần thiết nữa thì nó sẽ bị hủy bỏ. Sẽ lãng phí tài nguyên, chẳng
hạn như bộ nhớ, nếu như tiếp tục ể cho một ối tượng tồn tại một khi nó không còn cần thiết. Định nghĩa
Hàm Hủy là một phương thức ặc biệt ược dùng ể hủy bỏ một ối tượng. Tiến trình Hủy tiêu
hủy một ối tượng và giải phóng khoảng trống bộ nhớ mà hàm thiết lập ã cấp phát cho nó.
Hàm Hủy cũng triệt tiêu khả năng truy cập ến ối tượng ấy.
Một khi một ối tượng bị hủy thì các thuộc tính của nó không thể ược truy cập, cũng như
không một phương thức nào có thể ược thực thi.
Chẳng hạn, trong trường hợp bán xe hơi, một khi nhân viên bán hàng bỏ nghề, những chi
tiết của người ấy không còn liên hệ. Vì thế, ối tượng tương ứng sẽ bị hủy. Điều này giải
phóng bộ nhớ ã cấp phát cho nhân viên bán hàng ấy. Khoảng trống này giờ ây có thể ược tái sử dụng.
Hãy xem xét ví dụ về trường học trên ây. Khi một học sinh thôi học, tên của học sinh ấy bị
loại ra khỏi danh sách, và khoảng trống ược giải phóng có thể ược tái cấp phát.
Các hành ộng ồng loạt này tương tự với công việc của hàm hủy ối với một ối tượng.
1.2.10 Tính Bền vững (Persistence)
Hãy khảo sát trường hợp bán xe hơi. Những chi tiết của khách hàng ược lưu trữ ngay khi xe
hơi ã ược phân phối.Việc duy trì dữ liệu vẫn cần thiết cho ến khi dữ liệu ược chỉnh sửa hoặc hủy bỏ chính thức.