lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
1
MỤC LC
Chương 1. Tổng quan về lập trình hướng đối tượng ......................................................... 7
Phương pháp tiếp cận của lập trình truyền thống ....................................... 7
Lập trình tuyến tính .................................................................................... 7
Lập trình cấu trúc ....................................................................................... 8
Phương pháp tiếp cận lập trình hướng đối tượng ....................................... 9
Các ặc trưng của lập trình hướng đối tượng ........................................... 10
Tính óng gói dữ liệu ............................................................................... 10
Tính kế thừa .............................................................................................. 10
Tính a hình ............................................................................................. 11
Tru tưng hóa ............................................................................................. 11
Tổ chức trừu tượng theo sự phân cấp lớp ................................................ 11
Tru tưng hóa cơ sở của phát triển phần mềm ................................... 13
Xu hướng phát triển của lập trình hướng đối tượng ................................. 14
Lập trình hướng thành phần .................................................................... 14
Lập trình hướng tác nhân ......................................................................... 14
Lập trình hướng khía cạnh ....................................................................... 15
Chương 2. Ngôn ngữ lập trình C# ..................................................................................... 17
Tổng quan Ngôn ngữ C# .............................................................................. 17
Ngôn ngữ ra đời cùng với .NET ............................................................... 17
C# mạnh mẽ & bền vững ....................................................................... 17
Vai trò C# trong .NET Framework .................................... ................... ... 18
Quá trình dịch CT C# ............................................................................... 18
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 2
Quá trình dịch chương trình C# ............................................................... 18
Các loại ứng dụng C#.................................................................................... 19
Ứng dụng Console .................................................................................... 19
Ứng dụng Windows Form ........................................................................ 20
Ứng dụng Web .......................................................................................... 20
Cấu trúc một chương trình C# .................................................................... 21
Cú pháp C# cơ bản ....................................................................................... 24
Kiểu dữ liệu của C# ....................................................................................... 27
Kiểu giá trị value type ........................................................................... 27
Kiểu tham chiếu reference type ............................................................. 28
Kiểu con trỏ pointer type ....................................................................... 29
Cách chuyển kiểu dữ liệu (Type Conversion) trong C# ........................... 30
Một số phương thức chuyển kiểu được xây dựng sẵn .............................. 31
Biến trong C# ................................................................................................. 31
Khai báo biến ........................................................................................... 32
Khởi tạo biến ............................................................................................ 33
Nhận giá trị dữ liệu từ việc nhập liệu của user: ...................................... 34
Hằng trong C# ............................................................................................... 34
Định nghĩa hằng trong C# ....................................................................... 35
Hằng số nguyên trong C# ........................................................................ 36
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
3
Hằng số thực trong C# ............................................................................. 36
Hằng ký tự trong C# ................................................................................. 37
Hằng chuỗi trong C# ................................................................................ 38
Toán t trong C# ........................................................................................... 38
Toán t s hc .......................................................................................... 38
Toán t quan h ........................................................................................ 39
Toán t logic ............................................................................................ 41
Toán t trên bit ......................................................................................... 42
Toán t gán .............................................................................................. 43
Toán t hn hp ....................................................................................... 45
Độ ưu tiên của toán tử .............................................................................. 46
Các câu lệnh iều kiện trong C# .................................................................. 47
Cấu trúc rẽ nhánh .................................................................................... 48
Vòng lặp ................................................................................................... 53
Lệnh iều khiển break và continue ........................................................... 60
Chương 3. Lớp và đối tượng .............................................................................................. 62
Class, trừu tượng hóa, lập trình hướng đối tượng ..................................... 62
Class và trừu tượng hóa ........................................................................... 62
Object và cụ thể hóa ................................................................................. 62
Class trong lập trình hướng đối tượng và C# ............................................. 63
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 4
Khai báo lớp ............................................................................................. 63
Biến thành viên ......................................................................................... 66
Một số vấn ề khi sử dụng biến thành viên .............................................. 70
Phương thức thành viên ........................................................................... 72
Tham số của phương thức trong C#: value type và reference type ......... 75
Tham số out .............................................................................................. 78
Tham số tùy chọn...................................................................................... 81
Tham số params ....................................................................................... 83
Nạp chồng phương thức (method overloading) trong C# ......................... 85
Nạp chồng phương thức trong C# là gì? ................................................. 85
Signature của phương thức trong C# ....................................................... 86
Một số vấn ề khác của phương thức trong C# ......................................... 87
Phương thức với Expression body ........................................................... 87
Named Arguments .................................................................................... 88
Properties ....................................................................................................... 89
Property trong C# là gì? .......................................................................... 89
Auto property trong C# ............................................................................ 93
Full property trong C# ............................................................................. 96
Hàm dựng trong C# và khởi tạo đối tượng ................................................ 99
Xây dựng hàm dựng cho class C# .......................................................... 100
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
5
Khởi tạo object với constructor.............................................................. 102
Khởi tạo object với property .................................................................. 102
Một số vấn ề khác với constructor trong C# .......................................... 104
Default constructor trong class C# ........................................................ 104
Chuỗi constructor trong class C#, constructor initializer ..................... 104
Vấn ề khởi tạo và sử dụng object ............................................................ 106
Quan hệ class và object .......................................................................... 106
Khai báo và khởi tạo object ................................................................... 106
Truy xut các thành viên ca object ...................................................... 107
Từ khóa this ............................................................................................ 108
Lớp lồng nhau.............................................................................................. 109
Nested types ................................................................................................. 112
Thành viên Static ........................................................................................ 114
Biến tĩnh (static field) .................................................................................. 114
Phương thức tĩnh (static method) .............................................................. 117
Hàm dựng tĩnh (static constructor) ........................................................... 120
Đặc tính tĩnh (static property) ................................................................... 121
Lớp tĩnh (static class) .................................................................................. 122
Extension method ........................................................................................ 124
Chương 4. Kế thừa và a hình trong C# ........................................................................ 127
Kế thừa ......................................................................................................... 127
Đặc iểm của kế thừa ............................................................................. 129
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 6
Lớp Object và kế thừa ............................................................................ 131
Quan hệ giữa kế thừa và a hình ........................................................... 132
Che giấu phương thức ................................................................................ 134
Ghi è phương thức .................................................................................... 136
Lớp trừu tượng và kế thừa ......................................................................... 138
Lớp và trừu tượng hóa ........................................................................... 138
Lớp trừu tượng ....................................................................................... 139
Phương thức trừu tượng ......................................................................... 140
Interface trong C# ....................................................................................... 141
Quan hệ phụ thuộc giữa các class ......................................................... 141
Khái niệm interface ................................................................................ 142
Kỹ thuật lập trình với Interface .............................................................. 145
Thực thi interface ................................................................................... 146
Sử dụng interface ................................................................................... 148
Partial class trong C# .................................................................................. 151
Khái niệm partial class .......................................................................... 151
Sử dụng partial class trong C# project .................................................. 152
Một số vấn ề khi sử dụng partial class trong C# ................................. 153
Partial method trong C# ............................................................................. 154
Khái niệm partial method
....................................................................... 154
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
7
Sử dụng partial method .......................................................................... 155
Các lưu ý khi sử dụng partial method .................................................... 157
Chương 5.
Nạp chồng toán tử .......................................................................................... 159
Khái niệm nạp chồng toán t ................................................................. 159
Cách nạp chồng toán tử ......................................................................... 159
Một số lưu ý khi nạp thực hiện chồng toán tử ........................................ 162
Nạp chồng phép toán indexer ................................................................ 163
Cú pháp nạp chồng indexer ................................................................... 164
Nạp chồng toán tử indexer cho lớp Vector ............................................ 165
Chương 6.
Xử lý ngoại lệ .................................................................................................. 168
Khái niệm exception ................................................................................... 168
Cơ chế xử lý exception trong C# ............................................................ 168
Kỹ thuật xử lý ngoại lệ (Exception Handling) trong C# ........................ 169
Exception và chế ộ Debug trong C# .................................................... 169
Xử lý ngoại lệ ở chế ộ Release ............................................................. 171
Cấu trúc try catch - finally ...................................................................... 171
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 8
CHƯƠNG 1. TỔNG QUAN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Nội dung chương này nhằm giới thiệu một cách tổng quan về cách tiếp cận hướng
đối tượng. Nội dung trình bày bao gồm:
Giới thiệu về cách tiếp cận của lập trình truyền thống.
Giới thiệu cách tiếp cận của lập trình hướng đối tượng.
Sự trừu tượng hóa là cơ sở của phát triển phần mềm hướng đối tượng.
Nêu các ặc trưng của lập trình hướng đối tượng.
Xu hướng hiện nay của lập trình hướng đối tượng. Phương pháp tiếp
cận của lập trình truyền thống
Lập trình truyền thống ã trải qua hai giai oạn:
Giai oạn sơ khai, khi khái niệm lập trình mới ra ời, là lập trình tuyến tính.
Giai oạn tiếp theo, là lập trình hướng cấu trúc. Lập trình tuyến tính
Đặc trưng cơ bản của lập trình tuyến tính là tư duy theo lối tuần tự. Chương trình
sẽ được thực hiện tuần tự từ ầu ến cuối, lệnh này kế tiếp lệnh kia cho ến khi kết thúc
chương trình.
Đặc trưng
Lập trình tuyến tính có hai ặc trưng:
Đơn giản: chương trình được tiến hành ơn giản theo lối tuần tự, không phức
tạp.
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
9
Đơn luồng: chỉ một luồng (thread) công việc duy nhất, các công việc được
thực hiện tuần tự trong luồng ó.
Tính chất
Ưu iểm: Do tính ơn giản, lập trình tuyến tính ưu iểm chương trình ơn giản,
dễ hiểu. Lập trình tuyến tính được ứng dụng cho các chương trình ơn giản.
Nhược iểm: Với các ứng dụng phức tạp, người ta không thể dùng lập trình tuyến
tính ể giải quyết.
Ngày nay, lập trình tuyến tính chỉ tồn tại trong phạm vi các mô un nhỏ nhất của
các phương pháp lập trình khác. Ví dụ trong một chương trình con của lập trình
cấu trúc, các lệnh cũng được thực hiện theo tuần tự từ ầu ến cuối chương trình
con.
Lập trình cu trúc
Trong lập trình hưng cu trúc, chương trình chính được chia nhỏ thành các
chương trình con mỗi chương trình con thực hiện một công việc xác ịnh. Chương
trình chính sẽ gọi ến chương trình con theo một giải thuật, hoặc một cấu trúc được xác
ịnh trong chương trình chính.
Các ngôn ngữ lập trình cấu trúc phổ biến Pascal, C C++. Riêng C++ ngoài
việc ặc trưng của lập trình cấu trúc do kế thừa từ C, còn ặc trưng của lập trình
hướng đối tượng. Cho nên C++ còn được gọi ngôn ngữ lập trình nửa cấu trúc, nửa
hướng đối tượng.
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 10
Đặc trưng
Đặc trưng cơ bản nhất của lập trình cấu trúc thể hiện ở mối quan hệ:
Chương trình = CTDL + Giải thuật
Trong ó:
CTDL cách tổ chức dữ liệu, cách tả bài toán dưới dạng ngôn ngữ lập trình
Giải thuật một quy trình thực hiện một công việc xác ịnh Trong chương
trình, giải thuật có quan hệ phụ thuộc vào CTDL:
Một CTDL chỉ phù hợp với một số hạn chế các giải thuật.
Nếu thay ổi CTDL thì phải thay ổi giải thuật cho phù hợp.
Một giải thuật thường phải i kèm với một CTDL nhất ịnh.
Tính chất
Mỗi chương trình con thể được gọi thực hiện nhiều lần trong một chương
trình chính.
Các chương trình con có thể được gọi ến thực hiện theo một thứ tự bất kỳ, tuỳ
thuộc vào giải thuật trong chương trình chính không phụ thuộc vào thứ tự
khai báo của các chương trình con.
Các ngôn ngữ lập trình cấu trúc cung cấp một số cấu trúc lệnh iều khiển chương
trình.
Ưu iểm
Chương trình sáng sủa, dễ hiểu, dễ theo dõi.
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
11
Tư duy giải thuật rõ ràng.
Nhược iểm
Lập trình cấu trúc không hỗ trợ việc sử dụng lại mã nguồn: Giải thuật luôn phụ
thuộc chặt chẽ vào CTDL, do ó, khi thay ổi CTDL, phải thay ổi giải thuật, nghĩa
là phải viết lại chương trình.
Không phù hợp với các phần mềm lớn: duy cấu trúc với các giải thuật chỉ
phù hợp với các bài toán nhỏ, nằm trong phạm vi một mô un của chương trình.
Với dự án phần mềm lớn, lập trình cấu trúc tỏ ra không hiệu quả trong việc giải
quyết mối quan hệ vĩ mô giữa các mô un của phần mềm.
Vấn ề
Vấn bản của lập trình cấu trúc bằng cách nào phân chia chương trình
chính thành các chương trình con cho phù hợp với yêu cầu, chức năng mục ích của
mỗi bài toán.
Phương pháp tiếp cận lập trình hướng đối tượng
Xuất phát từ hai hạn chế chính của phương pháp lập trình cấu trúc:
Không quản lý được sự thay ổi dữ liệu khi có nhiều chương trình cùng thay ổi
một biến chung. Vấn này ặc biệt nghiêm trọng khi các ứng dụng ngày càng
lớn, người ta không thể kiểm soát được sự truy nhập ến các biến dữ liệu chung.
Không tiết kiệm được tài nguyên con người: Giải thuật gắn liền với CTDL, nếu
thay ổi CTDL, sẽ phải thay ổi giải thuật, và do ó, phải viết lại mã chương trình
từ ầu.
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 12
Để khắc phục được hai hạn chế này khi giải quyết các bài toán lớn, người ta xây
dựng một phương pháp tiếp cận mới, phương pháp lập trình hướng đối tượng, với hai
mục ích chính:
Đóng gói dữ liệu ể hạn chế sự truy nhập tự do vào dữ liệu, không quản lý ược.
Cho phép sử dụng lại nguồn, hạn chế việc phải viết lại từ ầu cho các
chương trình.
Ngôn ngữ lập trình hướng đối tượng phổ biến hiện nay là Java và C++. Tuy nhiên,
C++ mặc cũng những ặc trưng bản của lập trình hướng đối tượng nhưng vẫn
không phải là ngôn ngữ lập trình thuần hướng đối tượng. Java thật sự một ngôn ngữ
lập trình thuần hướng đối tượng.
Các ặc trưng của lập trình hướng đối tượng
Tính óng gói dữ liệu
Dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối tượng. Việc truy nhập
ến dữ liệu phải thông qua các phương thức của đối tượng lớp.
Trong mt đối tượng, dữ liệu hay thao tác hay cả hai có thể là riêng (private) hoặc
chung (public) của đối tượng ó. Thao tác hay dữ liệu riêng thuộc về đối tượng ó chỉ
được truy cập bởi các thành phần của đối tượng, iều này nghĩa thao tác hay dữ liệu
riêng không thể truy cập bởi các phần khác của chương trình tồn tại ngoài đối tượng.
Khi thao tác hay dữ liệu chung, các phần khác của chương trình thể truy cập
mặc được ịnh nghĩa trong một đối tượng. Các thành phần chung của một đối
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
13
tượng dùng cung cấp một giao tiếp iều khiển cho các thành thành riêng của đối
tượng.
chế óng gói (encapsulation) phương thức tốt thực hiện chế che dấu
thông tin so với các ngôn ngữ lập trình cấu trúc. Tính kế thừa
Một thế mạnh khác của lập trình hướng đối tượng cho phép sử dụng lại
nguồn. Việc cho phép sử dụng lại nguồn được thực hiện thông qua chế kế thừa
trong lập trình hướng đối tượng. Theo ó, các lớp thể được kế thừa nhau tận dụng
các thuộc tính, các phương thức của nhau. Trong lớp dẫn xuất (lớp kế thừa) thể sử
dụng lại các phương thức của lớp sở (lớp bị lớp khác kế thừa) không cần thiết
phải cài ặt lại nguồn. Ngay cả khi lớp dẫn xuất ịnh nghĩa lại các phương thức cho
mình, lớp sở cũng không bị ảnh hưởng không phải sửa lại bất kỳ một oạn
nguồn nào.
Tính a hình
Khả năng ể cho một thông iệp có thể thay ổi cách thực hiện của nó theo lớp cụ thể
của đối tượng nhận thông iệp. Khi một lớp dẫn xuất được tạo ra, nó có thể thay ổi cách
thực hiện các phương thức nào ó mà nó thừa hưởng từ lớp cơ sở của nó. Một thông iệp
khi được gởi ến một đối tượng của lớp sở, sẽ dùng phương thức ã ịnh nghĩa cho
trong lớp cơ sở. Nếu một lớp dẫn xuất ịnh nghĩa lại một phương thức thừa hưởng từ lớp
sở của thì một thông iệp có cùng tên với phương thức này, khi được gởi tới một
đối tượng của lớp dẫn xuất sẽ gọi phương thức ã ịnh nghĩa cho lớp dẫn xuất.
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 14
Như vậy a hình (polymorphism) là khả năng cho phép gởi cùng một thông iệp ến
những đối tượng khác nhau cùng chung một ặc iểm, nói cách khác thông iệp được
gởi i không cần biết thực thể nhận thuộc lớp nào, chỉ biết rằng tập hợp các thực thể nhận
chung một tính chất nào ó. Chẳng hạn, thông iệp vẽ hình được gởi ến cả hai đối tượng
hình hộp hình tròn. Trong hai đối tượng này ều chung phương thức vẽ hình, tuy
nhiên tuỳ theo thời iểm mà đối tượng nhận thông iệp, hình tương ứng sẽ được vẽ lên.
Tru tưng hóa
Tổ chc trừu tượng theo sphân cp lp
Thậm chí mặc dù con người giỏi ở sự trừu tượng các khái niệm như bản ồ ường i
và cảnh quan, vẫn còn số lượng rất lớn các công việc trừu tượng hoá riêng lẻ mà chúng
ta thường gặp trong cuộc sống. Đ đối phó sự phức tạp này con người phải sắp xếp
thông tin một cách có hệ thống theo các tiêu chuẩn nào ó; Xử lý này gọi là sự phân lớp
(classification).
dụ như khoa học ã phân cấp theo lớp tất c đối tượng tự nhiên thuộc về ộng vật,
hoặc cây, hoặc khoáng sản. Để được phân là ộng vật, nó phải thoả iều kiện sau:
Vật thể sống.
Tự di chuyển.
Phản ứng khi bị kích thích.
Qui luật cho một đối tượng là cây thì hơi khác:
Vật thể sống (như ộng vật).
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
15
Không có hệ thần kinh.
Có màn cellulose.
Sau khi phân lớp ơn giản như trên ta có thể thêm vài qui luật ể có các loại ộng vật
cụ thể hơn cho ến khi có một sự phân cấp theo sự trừu tượng từ cao ( ỉnh) xuống thấp (
áy). Sơ ồ phân cấp trừu tượng của các đối tượng tự nhiên được thể hiện như
hình 1.1.
Hình 1-1. Sơ ồ phân cấp trừu tượng các đối tượng tự nhiên
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 16
Trừu tượng hóa cơ sở của phát trin phn mm
Khi ghi nhận các yêu cầu cho một dự án phần mềm, chúng ta thường bắt ầu bằng
cách thu thập thông tin chi tiết về tình hình thực tế trên ó hệ thống sẽ hoạt ộng.
Những chi tiết này thường là một sự tổng hợp của
Thông tin từ những người sử dụng hệ thống được chúng ta phỏng vấn.
Những hoạt ộng chúng ta quan sát từ nghiệp vụ hàng ngày của người sử
dụng hệ thống.
Kế ến chúng ta phải chọn lọc ra những chi tiết nào liên quan tới mục ích sử dụng
hệ thống. Việc này là cần thiết vì chúng ta không thể tự ộng hoá tất cả hệ thống nghiệp
vụ bằng phần mềm! Việc bao gồm quá nhiều chi tiết sẽ làm hệ thống phức tạp khó
khăn hơn trong việc thiết kế, kiểm tra chương trình, dò lỗi, tạo sưu liệu, bảo trì mở
rộng chương trình sau này.
Sự trừu tưởng hoá sẽ giúp người phân tích hệ thống được các nét ặc trưng của
hệ thống trong miền (domain) bài toán, tập trung vào vấn của hệ thống dự ịnh phát
triển. Như khi thể hiện một người trong chương trình, màu mắt của họ quan trọng
không? Về gen ? Lương ? Sở thích ? Câu trả lời bất kỳ ặc tính nào của người thể
liên quan hay không liên quan tuỳ thuộc vào hệ thống mà ta ịnh phát triển là:
Chương trình tính lương
Chương trình tiếp thị theo tuổi tác
CSDL bệnh nhân nhãn khoa
Hệ thống theo dõi những kẻ bị truy nã
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
17
Một khi ã xác ịnh các ặc trưng quan trọng của một tình huống, ta cần chuẩn bị một
mô hình hoá cho nó. Mô hình hoá xử lý nhằm phát triển một khuôn mẫu ể tạo ra một
thứ gì ó; ví dụ như bản thiết kế ngôi nhà, sơ ồ mạch iện, một khuôn bánh. Một mô hình
đối tượng của hệ thống phần mềm một mẫu như vậy. Mô hình hoá và trừu tượng hoá
luôn i với nhau một hình stả hoạ hay vật của trừu tượng; Trước khi
mô hình vật gì ó một cách có hiệu quả, ta phải xác ịnh các chi tiết cần thiết của chủ thể
cần được mô hình.
Xu hướng phát triển của lập trình hướng đối tượng
Lập trình hướng thành phần
Lập trình hướng thành phần (Component-oriented programming-COP) xuất phát
từ lập trình hướng đối tượng, tư duy lập trình hướng thành phần theo ý tưởng:
Giải quyết bài toán bằng cách xây dựng một tập các thành phần (component)
tính ộc lập tương đối với nhau. Mỗi thành phần ảm nhiệm một phần công
việc nhất ịnh.
Sau ó, người ta ghép các thành phần với nhau thu được một phần mềm thoả
mãn một tập các yêu cầu xác ịnh.
Với lập trình hướng thành phần, người ta có thể tiến hành lập trình theo phương
pháp sau:
Xây dựng một thư viện c thành phần, mỗi thành phần thực hiện một công
việc xác ịnh.
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 18
Khi cần phát triển một phần mềm cụ thể, người ta chỉ cần chọn những thành
phần sẵn trong thư viện ghép lại với nhau. Người lập trình chỉ phải phát
triển thêm các thành phần mình cần mà chưa có trong thư viện.
Phương pháp này có những ưu iểm rất lớn:
Lập trình viên có thể chia sẻ với nhau những thành phần mình ã xây dựng cho
nhiều người khác dùng chung.
Khi cần, lập trình viên thể lắp ghép các thành phần sẵn khác nhau tạo
thành các chương trình chức năng khác nhau. Tất cả chỉ cần dựa trên công
nghệ lắp ghép thành phần, tiết kiệm được rất nhiều công sức lập trình.
Trong xu hưng lp trình hưng thành phn, mt s phương pháp lp trình khác ã
nảy sinh và ang phát triển mạnh mẽ:
Lập trình hướng tác nhân (Agent-Oriented Programming)
Lập trình hướng khía cạnh (Aspect-Oriented Programming-AOP) Lập
trình hướng tác nhân
Lập trình hướng agent thể xem một mức trừu tượng cao hơn của lập trình
hướng thành phần.
Trong ó, các agent là các thành phn có kh năng hot ng c lp, t ch hoàn
thành công việc của mình. Hơn nữa, các agent khả năng chủ ộng liên lạc với các
agent khác ể có thể phối hợp, cộng tác hay cạnh tranh nhau ể hoàn thành nhiệm vụ.
Lập trình hướng agent có hai ặc trưng cơ bản:
lOMoARcPSD|5073087 6
Lập trình Hướng đối tượng
Trang
19
Thứ nhất là khả năng tự chủ của mỗi agent hoàn thành nhiệm vụ riêng của nó.
Thứ hai tính tổ chức hội giữa các agent, cho phép các agent phối hợp,
cộng tác, cạnh tranh nhau hoàn thành nhiệm vụ chung của toàn hệ thống.
Lập trình hướng khía cạnh
Phương pháp lập trình hướng khía cạnh là phương pháp lập trình phát triển tư duy
tách biệt các mối quan tâm khác nhau thành các mô un khác nhau. Ở ây, một mối quan
tâm thường không phải một chức năng nghiệp vụ cụ thể thể óng gói một
khía cạnh (thuộc tính) chung mà nhiều mô un phần mềm trong cùng hệ thống nên có, ví
dụ lưu vết thao tác và lỗi (error logging).
Với AOP, chúng ta có thể cài ặt các mối quan tâm chung cắt ngang hệ thống bằng
các un ặc biệt gọi aspect thay dàn trải chúng trên các un nghiệp vụ liên
quan. Các aspect sau ó được tự kết hợp với các mô un nghiệp vụ khác bằng quá trình
gọi là an (weaving) bằng bộ biên dịch ặc biệt.
AspectJ là một công cụ AOP cho ngôn ngữ lập trình Java. Trình biên dịch AspectJ
sẽ an xen chương trình Java chính với các aspect thành các tập tin bytecode chạy trên
máy ảo Java.
TỔNG KẾT CHƯƠNG 1
Nội dung chương 1 ã trình bày các vấn ề tổng quan liên quan ến phương pháp tiếp
cận hướng đối tượng trong lập trình:
lOMoARcPSD|5073087 6
Trung tâm Tin hc Ngoại ngữ
Trang 20
Các phương pháp tiếp cận truyền thống: lập trình tuyến tính lập trình cấu
trúc.
Phương pháp tiếp cận hướng đối tượng với các ặc trưng bản: óng gói dữ liệu,
tính a hình và sử dụng lại mã nguồn.
Lập trình hướng đối tượng trên nền tảng trừu tượng hsở lập trình
hiện ại.
Hiện nay, lập trình hướng thành phần, lập trình hướng agent và lập trình hướng
aspect tiến hoá từ lập trình hướng đối tượng ang xu hướng phát triển mạnh
mẽ.
BÀI TẬP
1. Vẽ một sơ ồ phân cấp lớp cho các lớp sau ây: táo, chuối, thịt bò, nước giải khát, phó
mát, thứ có thể ăn uống, sản phẩm bơ sửa, ồ ăn, trái cây, ậu xanh, thịt, sửa, thịt heo,
rau muống, rau.
2. Những ặc iểm nào của tivi mà chúng cần thiết ể được trừu tượng từ góc nhìn của
Một khách hàng?
Một kỹ sư thiết kế?
Người bán?
Nhà sản xuất?
CHƯƠNG 2. NGÔN NGỮ LẬP TRÌNH C#
Tổng quan Ngôn ngữ C#
C # một ngôn ngữ lập trình hiện ại được phát triển bởi Microsoft được phê
duyệt bởi European Computer Manufacturers Association (ECMA) International

Preview text:

lOMoARcPSD|50730876
Lập trình Hướng đối tượng MỤC LỤC
Chương 1. Tổng quan về lập trình hướng đối tượng ......................................................... 7
Phương pháp tiếp cận của lập trình truyền thống ....................................... 7
Lập trình tuyến tính .................................................................................... 7
Lập trình cấu trúc ....................................................................................... 8
Phương pháp tiếp cận lập trình hướng đối tượng ....................................... 9
Các ặc trưng của lập trình hướng đối tượng ........................................... 10
Tính óng gói dữ liệu ............................................................................... 10
Tính kế thừa .............................................................................................. 10
Tính a hình ............................................................................................. 11
Trừu tượng hóa ............................................................................................. 11
Tổ chức trừu tượng theo sự phân cấp lớp ................................................ 11
Trừu tượng hóa – cơ sở của phát triển phần mềm ................................... 13
Xu hướng phát triển của lập trình hướng đối tượng ................................. 14
Lập trình hướng thành phần .................................................................... 14
Lập trình hướng tác nhân ......................................................................... 14
Lập trình hướng khía cạnh ....................................................................... 15
Chương 2. Ngôn ngữ lập trình C# ..................................................................................... 17
Tổng quan Ngôn ngữ C# .............................................................................. 17
Ngôn ngữ ra đời cùng với .NET ............................................................... 17
C# – mạnh mẽ & bền vững ....................................................................... 17
Vai trò C# trong .NET Framework .......................................................... 18
Quá trình dịch CT C# ............................................................................... 18 Trang 1 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ
Quá trình dịch chương trình C# ............................................................... 18
Các loại ứng dụng C#.................................................................................... 19
Ứng dụng Console .................................................................................... 19
Ứng dụng Windows Form ........................................................................ 20
Ứng dụng Web .......................................................................................... 20
Cấu trúc một chương trình C# .................................................................... 21
Cú pháp C# cơ bản ....................................................................................... 24
Kiểu dữ liệu của C# ....................................................................................... 27
Kiểu giá trị – value type ........................................................................... 27
Kiểu tham chiếu – reference type ............................................................. 28
Kiểu con trỏ – pointer type ....................................................................... 29
Cách chuyển kiểu dữ liệu (Type Conversion) trong C# ........................... 30
Một số phương thức chuyển kiểu được xây dựng sẵn .............................. 31
Biến trong C# ................................................................................................. 31
Khai báo biến ........................................................................................... 32
Khởi tạo biến ............................................................................................ 33
Nhận giá trị dữ liệu từ việc nhập liệu của user: ...................................... 34
Hằng trong C# ............................................................................................... 34
Định nghĩa hằng trong C# ....................................................................... 35
Hằng số nguyên trong C# ........................................................................ 36 Trang 2 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
Hằng số thực trong C# ............................................................................. 36
Hằng ký tự trong C# ................................................................................. 37
Hằng chuỗi trong C# ................................................................................ 38
Toán tử trong C# ........................................................................................... 38
Toán tử số học .......................................................................................... 38
Toán tử quan hệ ........................................................................................ 39
Toán tử logic ............................................................................................ 41
Toán tử trên bit ......................................................................................... 42
Toán tử gán .............................................................................................. 43
Toán tử hỗn hợp ....................................................................................... 45
Độ ưu tiên của toán tử .............................................................................. 46
Các câu lệnh iều kiện trong C# .................................................................. 47
Cấu trúc rẽ nhánh .................................................................................... 48
Vòng lặp ................................................................................................... 53
Lệnh iều khiển break và continue ........................................................... 60
Chương 3. Lớp và đối tượng .............................................................................................. 62
Class, trừu tượng hóa, lập trình hướng đối tượng ..................................... 62
Class và trừu tượng hóa ........................................................................... 62
Object và cụ thể hóa ................................................................................. 62
Class trong lập trình hướng đối tượng và C# ............................................. 63 Trang 3 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ
Khai báo lớp ............................................................................................. 63
Biến thành viên ......................................................................................... 66
Một số vấn ề khi sử dụng biến thành viên .............................................. 70
Phương thức thành viên ........................................................................... 72
Tham số của phương thức trong C#: value type và reference type ......... 75
Tham số out .............................................................................................. 78
Tham số tùy chọn...................................................................................... 81
Tham số params ....................................................................................... 83
Nạp chồng phương thức (method overloading) trong C# ......................... 85
Nạp chồng phương thức trong C# là gì? ................................................. 85
Signature của phương thức trong C# ....................................................... 86
Một số vấn ề khác của phương thức trong C# ......................................... 87
Phương thức với Expression body ........................................................... 87
Named Arguments .................................................................................... 88
Properties ....................................................................................................... 89
Property trong C# là gì? .......................................................................... 89
Auto property trong C# ............................................................................ 93
Full property trong C# ............................................................................. 96
Hàm dựng trong C# và khởi tạo đối tượng ................................................ 99
Xây dựng hàm dựng cho class C# .......................................................... 100 Trang 4 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
Khởi tạo object với constructor.............................................................. 102
Khởi tạo object với property .................................................................. 102
Một số vấn ề khác với constructor trong C# .......................................... 104
Default constructor trong class C# ........................................................ 104
Chuỗi constructor trong class C#, constructor initializer ..................... 104
Vấn ề khởi tạo và sử dụng object ............................................................ 106
Quan hệ class và object .......................................................................... 106
Khai báo và khởi tạo object ................................................................... 106
Truy xuất các thành viên của object ...................................................... 107
Từ khóa this ............................................................................................ 108
Lớp lồng nhau.............................................................................................. 109
Nested types ................................................................................................. 112
Thành viên Static ........................................................................................ 114
Biến tĩnh (static field) .................................................................................. 114
Phương thức tĩnh (static method) .............................................................. 117
Hàm dựng tĩnh (static constructor) ........................................................... 120
Đặc tính tĩnh (static property) ................................................................... 121
Lớp tĩnh (static class) .................................................................................. 122
Extension method ........................................................................................ 124
Chương 4. Kế thừa và a hình trong C# ........................................................................ 127
Kế thừa ......................................................................................................... 127
Đặc iểm của kế thừa ............................................................................. 129 Trang 5 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ
Lớp Object và kế thừa ............................................................................ 131
Quan hệ giữa kế thừa và a hình ........................................................... 132
Che giấu phương thức ................................................................................ 134
Ghi è phương thức .................................................................................... 136
Lớp trừu tượng và kế thừa ......................................................................... 138
Lớp và trừu tượng hóa ........................................................................... 138
Lớp trừu tượng ....................................................................................... 139
Phương thức trừu tượng ......................................................................... 140
Interface trong C# ....................................................................................... 141
Quan hệ phụ thuộc giữa các class ......................................................... 141
Khái niệm interface ................................................................................ 142
Kỹ thuật lập trình với Interface .............................................................. 145
Thực thi interface ................................................................................... 146
Sử dụng interface ................................................................................... 148
Partial class trong C# .................................................................................. 151
Khái niệm partial class .......................................................................... 151
Sử dụng partial class trong C# project .................................................. 152
Một số vấn ề khi sử dụng partial class trong C# ................................. 153
Partial method trong C# ............................................................................. 154
Khái niệm partial method ....................................................................... 154 Trang 6 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
Sử dụng partial method .......................................................................... 155
Các lưu ý khi sử dụng partial method .................................................... 157
Chương 5. Nạp chồng toán tử .......................................................................................... 159
Khái niệm nạp chồng toán tử ................................................................. 159
Cách nạp chồng toán tử ......................................................................... 159
Một số lưu ý khi nạp thực hiện chồng toán tử ........................................ 162
Nạp chồng phép toán indexer ................................................................ 163
Cú pháp nạp chồng indexer ................................................................... 164
Nạp chồng toán tử indexer cho lớp Vector ............................................ 165
Chương 6. Xử lý ngoại lệ .................................................................................................. 168
Khái niệm exception ................................................................................... 168
Cơ chế xử lý exception trong C# ............................................................ 168
Kỹ thuật xử lý ngoại lệ (Exception Handling) trong C# ........................ 169
Exception và chế ộ Debug trong C# .................................................... 169
Xử lý ngoại lệ ở chế ộ Release ............................................................. 171
Cấu trúc try – catch - finally ...................................................................... 171 Trang 7 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ CHƯƠNG 1.
TỔNG QUAN VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Nội dung chương này nhằm giới thiệu một cách tổng quan về cách tiếp cận hướng
đối tượng. Nội dung trình bày bao gồm:
• Giới thiệu về cách tiếp cận của lập trình truyền thống.
• Giới thiệu cách tiếp cận của lập trình hướng đối tượng.
• Sự trừu tượng hóa là cơ sở của phát triển phần mềm hướng đối tượng.
• Nêu các ặc trưng của lập trình hướng đối tượng.
• Xu hướng hiện nay của lập trình hướng đối tượng. Phương pháp tiếp
cận của lập trình truyền thống
Lập trình truyền thống ã trải qua hai giai oạn:
• Giai oạn sơ khai, khi khái niệm lập trình mới ra ời, là lập trình tuyến tính.
• Giai oạn tiếp theo, là lập trình hướng cấu trúc.
Lập trình tuyến tính
Đặc trưng cơ bản của lập trình tuyến tính là tư duy theo lối tuần tự. Chương trình
sẽ được thực hiện tuần tự từ ầu ến cuối, lệnh này kế tiếp lệnh kia cho ến khi kết thúc chương trình. Đặc trưng
Lập trình tuyến tính có hai ặc trưng:
• Đơn giản: chương trình được tiến hành ơn giản theo lối tuần tự, không phức tạp. Trang 8 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
• Đơn luồng: chỉ có một luồng (thread) công việc duy nhất, và các công việc được
thực hiện tuần tự trong luồng ó. Tính chất
• Ưu iểm: Do tính ơn giản, lập trình tuyến tính có ưu iểm là chương trình ơn giản,
dễ hiểu. Lập trình tuyến tính được ứng dụng cho các chương trình ơn giản.
• Nhược iểm: Với các ứng dụng phức tạp, người ta không thể dùng lập trình tuyến tính ể giải quyết.
• Ngày nay, lập trình tuyến tính chỉ tồn tại trong phạm vi các mô un nhỏ nhất của
các phương pháp lập trình khác. Ví dụ trong một chương trình con của lập trình
cấu trúc, các lệnh cũng được thực hiện theo tuần tự từ ầu ến cuối chương trình con.
Lập trình cấu trúc
Trong lập trình hướng cấu trúc, chương trình chính được chia nhỏ thành các
chương trình con và mỗi chương trình con thực hiện một công việc xác ịnh. Chương
trình chính sẽ gọi ến chương trình con theo một giải thuật, hoặc một cấu trúc được xác
ịnh trong chương trình chính.
Các ngôn ngữ lập trình cấu trúc phổ biến là Pascal, C và C++. Riêng C++ ngoài
việc có ặc trưng của lập trình cấu trúc do kế thừa từ C, còn có ặc trưng của lập trình
hướng đối tượng. Cho nên C++ còn được gọi là ngôn ngữ lập trình nửa cấu trúc, nửa hướng đối tượng. Trang 9 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ Đặc trưng
Đặc trưng cơ bản nhất của lập trình cấu trúc thể hiện ở mối quan hệ:
Chương trình = CTDL + Giải thuật Trong ó:
• CTDL là cách tổ chức dữ liệu, cách mô tả bài toán dưới dạng ngôn ngữ lập trình
• Giải thuật là một quy trình ể thực hiện một công việc xác ịnh Trong chương
trình, giải thuật có quan hệ phụ thuộc vào CTDL:
• Một CTDL chỉ phù hợp với một số hạn chế các giải thuật.
• Nếu thay ổi CTDL thì phải thay ổi giải thuật cho phù hợp.
• Một giải thuật thường phải i kèm với một CTDL nhất ịnh. Tính chất
• Mỗi chương trình con có thể được gọi thực hiện nhiều lần trong một chương trình chính.
• Các chương trình con có thể được gọi ến ể thực hiện theo một thứ tự bất kỳ, tuỳ
thuộc vào giải thuật trong chương trình chính mà không phụ thuộc vào thứ tự
khai báo của các chương trình con.
• Các ngôn ngữ lập trình cấu trúc cung cấp một số cấu trúc lệnh iều khiển chương trình. Ưu iểm
• Chương trình sáng sủa, dễ hiểu, dễ theo dõi. Trang 10 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
• Tư duy giải thuật rõ ràng. Nhược iểm
• Lập trình cấu trúc không hỗ trợ việc sử dụng lại mã nguồn: Giải thuật luôn phụ
thuộc chặt chẽ vào CTDL, do ó, khi thay ổi CTDL, phải thay ổi giải thuật, nghĩa
là phải viết lại chương trình.
• Không phù hợp với các phần mềm lớn: tư duy cấu trúc với các giải thuật chỉ
phù hợp với các bài toán nhỏ, nằm trong phạm vi một mô un của chương trình.
Với dự án phần mềm lớn, lập trình cấu trúc tỏ ra không hiệu quả trong việc giải
quyết mối quan hệ vĩ mô giữa các mô un của phần mềm. Vấn ề
Vấn ề cơ bản của lập trình cấu trúc là bằng cách nào ể phân chia chương trình
chính thành các chương trình con cho phù hợp với yêu cầu, chức năng và mục ích của mỗi bài toán.
Phương pháp tiếp cận lập trình hướng đối tượng
Xuất phát từ hai hạn chế chính của phương pháp lập trình cấu trúc:
• Không quản lý được sự thay ổi dữ liệu khi có nhiều chương trình cùng thay ổi
một biến chung. Vấn ề này ặc biệt nghiêm trọng khi các ứng dụng ngày càng
lớn, người ta không thể kiểm soát được sự truy nhập ến các biến dữ liệu chung.
• Không tiết kiệm được tài nguyên con người: Giải thuật gắn liền với CTDL, nếu
thay ổi CTDL, sẽ phải thay ổi giải thuật, và do ó, phải viết lại mã chương trình từ ầu. Trang 11 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ
Để khắc phục được hai hạn chế này khi giải quyết các bài toán lớn, người ta xây
dựng một phương pháp tiếp cận mới, là phương pháp lập trình hướng đối tượng, với hai mục ích chính:
• Đóng gói dữ liệu ể hạn chế sự truy nhập tự do vào dữ liệu, không quản lý ược.
• Cho phép sử dụng lại mã nguồn, hạn chế việc phải viết lại mã từ ầu cho các chương trình.
Ngôn ngữ lập trình hướng đối tượng phổ biến hiện nay là Java và C++. Tuy nhiên,
C++ mặc dù cũng có những ặc trưng cơ bản của lập trình hướng đối tượng nhưng vẫn
không phải là ngôn ngữ lập trình thuần hướng đối tượng. Java thật sự là một ngôn ngữ
lập trình thuần hướng đối tượng.
Các ặc trưng của lập trình hướng đối tượng
Tính óng gói dữ liệu
Dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối tượng. Việc truy nhập
ến dữ liệu phải thông qua các phương thức của đối tượng lớp.
Trong một đối tượng, dữ liệu hay thao tác hay cả hai có thể là riêng (private) hoặc
chung (public) của đối tượng ó. Thao tác hay dữ liệu riêng là thuộc về đối tượng ó chỉ
được truy cập bởi các thành phần của đối tượng, iều này nghĩa là thao tác hay dữ liệu
riêng không thể truy cập bởi các phần khác của chương trình tồn tại ngoài đối tượng.
Khi thao tác hay dữ liệu là chung, các phần khác của chương trình có thể truy cập nó
mặc dù nó được ịnh nghĩa trong một đối tượng. Các thành phần chung của một đối Trang 12 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
tượng dùng ể cung cấp một giao tiếp có iều khiển cho các thành thành riêng của đối tượng.
Cơ chế óng gói (encapsulation) là phương thức tốt ể thực hiện cơ chế che dấu
thông tin so với các ngôn ngữ lập trình cấu trúc. Tính kế thừa
Một thế mạnh khác của lập trình hướng đối tượng là cho phép sử dụng lại mã
nguồn. Việc cho phép sử dụng lại mã nguồn được thực hiện thông qua cơ chế kế thừa
trong lập trình hướng đối tượng. Theo ó, các lớp có thể được kế thừa nhau ể tận dụng
các thuộc tính, các phương thức của nhau. Trong lớp dẫn xuất (lớp kế thừa) có thể sử
dụng lại các phương thức của lớp cơ sở (lớp bị lớp khác kế thừa) mà không cần thiết
phải cài ặt lại mã nguồn. Ngay cả khi lớp dẫn xuất ịnh nghĩa lại các phương thức cho
mình, lớp cơ sở cũng không bị ảnh hưởng và không phải sửa lại bất kỳ một oạn mã nguồn nào. Tính a hình
Khả năng ể cho một thông iệp có thể thay ổi cách thực hiện của nó theo lớp cụ thể
của đối tượng nhận thông iệp. Khi một lớp dẫn xuất được tạo ra, nó có thể thay ổi cách
thực hiện các phương thức nào ó mà nó thừa hưởng từ lớp cơ sở của nó. Một thông iệp
khi được gởi ến một đối tượng của lớp cơ sở, sẽ dùng phương thức ã ịnh nghĩa cho nó
trong lớp cơ sở. Nếu một lớp dẫn xuất ịnh nghĩa lại một phương thức thừa hưởng từ lớp
cơ sở của nó thì một thông iệp có cùng tên với phương thức này, khi được gởi tới một
đối tượng của lớp dẫn xuất sẽ gọi phương thức ã ịnh nghĩa cho lớp dẫn xuất. Trang 13 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ
Như vậy a hình (polymorphism) là khả năng cho phép gởi cùng một thông iệp ến
những đối tượng khác nhau có cùng chung một ặc iểm, nói cách khác thông iệp được
gởi i không cần biết thực thể nhận thuộc lớp nào, chỉ biết rằng tập hợp các thực thể nhận
có chung một tính chất nào ó. Chẳng hạn, thông iệp vẽ hình được gởi ến cả hai đối tượng
hình hộp và hình tròn. Trong hai đối tượng này ều có chung phương thức vẽ hình, tuy
nhiên tuỳ theo thời iểm mà đối tượng nhận thông iệp, hình tương ứng sẽ được vẽ lên. Trừu tượng hóa
Tổ chức trừu tượng theo sự phân cấp lớp
Thậm chí mặc dù con người giỏi ở sự trừu tượng các khái niệm như bản ồ ường i
và cảnh quan, vẫn còn số lượng rất lớn các công việc trừu tượng hoá riêng lẻ mà chúng
ta thường gặp trong cuộc sống. Để đối phó sự phức tạp này con người phải sắp xếp
thông tin một cách có hệ thống theo các tiêu chuẩn nào ó; Xử lý này gọi là sự phân lớp (classification).
Ví dụ như khoa học ã phân cấp theo lớp tất cả đối tượng tự nhiên thuộc về ộng vật,
hoặc cây, hoặc khoáng sản. Để được phân là ộng vật, nó phải thoả iều kiện sau: • Vật thể sống. • Tự di chuyển.
• Phản ứng khi bị kích thích.
Qui luật cho một đối tượng là cây thì hơi khác:
• Vật thể sống (như ộng vật). Trang 14 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
• Không có hệ thần kinh. • Có màn cellulose.
Sau khi phân lớp ơn giản như trên ta có thể thêm vài qui luật ể có các loại ộng vật
cụ thể hơn cho ến khi có một sự phân cấp theo sự trừu tượng từ cao ( ỉnh) xuống thấp (
áy). Sơ ồ phân cấp trừu tượng của các đối tượng tự nhiên được thể hiện như hình 1.1.
Hình 1-1. Sơ ồ phân cấp trừu tượng các đối tượng tự nhiên Trang 15 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ
Trừu tượng hóa – cơ sở của phát triển phần mềm
Khi ghi nhận các yêu cầu cho một dự án phần mềm, chúng ta thường bắt ầu bằng
cách thu thập thông tin chi tiết về tình hình thực tế mà trên ó hệ thống sẽ hoạt ộng.
Những chi tiết này thường là một sự tổng hợp của
• Thông tin từ những người sử dụng hệ thống được chúng ta phỏng vấn.
• Những hoạt ộng mà chúng ta quan sát từ nghiệp vụ hàng ngày của người sử dụng hệ thống.
Kế ến chúng ta phải chọn lọc ra những chi tiết nào liên quan tới mục ích sử dụng
hệ thống. Việc này là cần thiết vì chúng ta không thể tự ộng hoá tất cả hệ thống nghiệp
vụ bằng phần mềm! Việc bao gồm quá nhiều chi tiết sẽ làm hệ thống phức tạp và khó
khăn hơn trong việc thiết kế, kiểm tra chương trình, dò lỗi, tạo sưu liệu, bảo trì và mở
rộng chương trình sau này.
Sự trừu tưởng hoá sẽ giúp người phân tích hệ thống có được các nét ặc trưng của
hệ thống trong miền (domain) bài toán, tập trung vào vấn ề của hệ thống dự ịnh phát
triển. Như khi thể hiện một người trong chương trình, màu mắt của họ có quan trọng
không? Về gen ? Lương ? Sở thích ? Câu trả lời là bất kỳ ặc tính nào của người có thể
liên quan hay không liên quan tuỳ thuộc vào hệ thống mà ta ịnh phát triển là:
• Chương trình tính lương
• Chương trình tiếp thị theo tuổi tác
• CSDL bệnh nhân nhãn khoa
• Hệ thống theo dõi những kẻ bị truy nã Trang 16 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
Một khi ã xác ịnh các ặc trưng quan trọng của một tình huống, ta cần chuẩn bị một
mô hình hoá cho nó. Mô hình hoá là xử lý nhằm phát triển một khuôn mẫu ể tạo ra một
thứ gì ó; ví dụ như bản thiết kế ngôi nhà, sơ ồ mạch iện, một khuôn bánh. Một mô hình
đối tượng của hệ thống phần mềm là một mẫu như vậy. Mô hình hoá và trừu tượng hoá
luôn i với nhau vì một mô hình là sự mô tả ồ hoạ hay vật lý của trừu tượng; Trước khi
mô hình vật gì ó một cách có hiệu quả, ta phải xác ịnh các chi tiết cần thiết của chủ thể
cần được mô hình.
Xu hướng phát triển của lập trình hướng đối tượng
Lập trình hướng thành phần
Lập trình hướng thành phần (Component-oriented programming-COP) xuất phát
từ lập trình hướng đối tượng, tư duy lập trình hướng thành phần theo ý tưởng:
• Giải quyết bài toán bằng cách xây dựng một tập các thành phần (component)
có tính ộc lập tương đối với nhau. Mỗi thành phần ảm nhiệm một phần công việc nhất ịnh.
• Sau ó, người ta ghép các thành phần với nhau ể thu được một phần mềm thoả
mãn một tập các yêu cầu xác ịnh.
Với lập trình hướng thành phần, người ta có thể tiến hành lập trình theo phương pháp sau:
• Xây dựng một thư viện các thành phần, mỗi thành phần thực hiện một công việc xác ịnh. Trang 17 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ
• Khi cần phát triển một phần mềm cụ thể, người ta chỉ cần chọn những thành
phần có sẵn trong thư viện ể ghép lại với nhau. Người lập trình chỉ phải phát
triển thêm các thành phần mình cần mà chưa có trong thư viện.
Phương pháp này có những ưu iểm rất lớn:
• Lập trình viên có thể chia sẻ với nhau những thành phần mình ã xây dựng cho
nhiều người khác dùng chung.
• Khi cần, lập trình viên có thể lắp ghép các thành phần có sẵn khác nhau ể tạo
thành các chương trình có chức năng khác nhau. Tất cả chỉ cần dựa trên công
nghệ lắp ghép thành phần, tiết kiệm được rất nhiều công sức lập trình.
Trong xu hướng lập trình hướng thành phần, một số phương pháp lập trình khác ã
nảy sinh và ang phát triển mạnh mẽ:
• Lập trình hướng tác nhân (Agent-Oriented Programming)
• Lập trình hướng khía cạnh (Aspect-Oriented Programming-AOP) Lập
trình hướng tác nhân
Lập trình hướng agent có thể xem là một mức trừu tượng cao hơn của lập trình hướng thành phần.
Trong ó, các agent là các thành phần có khả năng hoạt ộng ộc lập, tự chủ ể hoàn
thành công việc của mình. Hơn nữa, các agent có khả năng chủ ộng liên lạc với các
agent khác ể có thể phối hợp, cộng tác hay cạnh tranh nhau ể hoàn thành nhiệm vụ.
Lập trình hướng agent có hai ặc trưng cơ bản: Trang 18 lOMoARcPSD|50730876
Lập trình Hướng đối tượng
• Thứ nhất là khả năng tự chủ của mỗi agent ể hoàn thành nhiệm vụ riêng của nó.
• Thứ hai là tính tổ chức xã hội giữa các agent, cho phép các agent phối hợp,
cộng tác, cạnh tranh nhau ể hoàn thành nhiệm vụ chung của toàn hệ thống.
Lập trình hướng khía cạnh
Phương pháp lập trình hướng khía cạnh là phương pháp lập trình phát triển tư duy
tách biệt các mối quan tâm khác nhau thành các mô un khác nhau. Ở ây, một mối quan
tâm thường không phải một chức năng nghiệp vụ cụ thể và có thể óng gói mà là một
khía cạnh (thuộc tính) chung mà nhiều mô un phần mềm trong cùng hệ thống nên có, ví
dụ lưu vết thao tác và lỗi (error logging).
Với AOP, chúng ta có thể cài ặt các mối quan tâm chung cắt ngang hệ thống bằng
các mô un ặc biệt gọi là aspect thay vì dàn trải chúng trên các mô un nghiệp vụ liên
quan. Các aspect sau ó được tự kết hợp với các mô un nghiệp vụ khác bằng quá trình
gọi là an (weaving) bằng bộ biên dịch ặc biệt.
AspectJ là một công cụ AOP cho ngôn ngữ lập trình Java. Trình biên dịch AspectJ
sẽ an xen chương trình Java chính với các aspect thành các tập tin bytecode chạy trên máy ảo Java.
TỔNG KẾT CHƯƠNG 1
Nội dung chương 1 ã trình bày các vấn ề tổng quan liên quan ến phương pháp tiếp
cận hướng đối tượng trong lập trình: Trang 19 lOMoARcPSD|50730876
Trung tâm Tin học – Ngoại ngữ
• Các phương pháp tiếp cận truyền thống: lập trình tuyến tính và lập trình cấu trúc.
• Phương pháp tiếp cận hướng đối tượng với các ặc trưng cơ bản: óng gói dữ liệu,
tính a hình và sử dụng lại mã nguồn.
• Lập trình hướng đối tượng trên nền tảng là trừu tượng hoá là cơ sở lập trình hiện ại.
• Hiện nay, lập trình hướng thành phần, lập trình hướng agent và lập trình hướng
aspect tiến hoá từ lập trình hướng đối tượng ang là xu hướng phát triển mạnh mẽ.
BÀI TẬP
1. Vẽ một sơ ồ phân cấp lớp cho các lớp sau ây: táo, chuối, thịt bò, nước giải khát, phó
mát, thứ có thể ăn uống, sản phẩm bơ sửa, ồ ăn, trái cây, ậu xanh, thịt, sửa, thịt heo, rau muống, rau.
2. Những ặc iểm nào của tivi mà chúng cần thiết ể được trừu tượng từ góc nhìn của • Một khách hàng?
• Một kỹ sư thiết kế? • Người bán? • Nhà sản xuất? CHƯƠNG 2.
NGÔN NGỮ LẬP TRÌNH C#
Tổng quan Ngôn ngữ C#
C # là một ngôn ngữ lập trình hiện ại được phát triển bởi Microsoft và được phê
duyệt bởi European Computer Manufacturers Association (ECMA) và International Trang 20