MỤC LỤC
H
U
TE
C
H
LỜI NÓI ĐẦU
CHƯƠNG 1 : TỔNG QUAN ........................................................................ 1
1.1 GIỚI THIỆU ................................................................................ 2
1.2 THỰC TẾ NHỮNG PHẦN MỀN ĐANG SỬ DỤNG .............. 2
1.3 MỤC TIÊU CỦA PHẦN MỀM ................................................. 2
CHƯƠNG 2 : CƠ SỞ LÝ THUYẾT ............................................................ 4
2.1 NGÔN NGỮ LẬP TRÌNH C ...................................................... 5
2.1.1 Lịch sử ngôn ngữ C ............................................................. 5
2.1.2.Tìm hiểu tổng quan về ngôn ngữ C ..................................... 5
2.1.2.1 Các kiểu dữ liệu ................................................... 4
2.1.2.2 Toán tử .................................................................. 5
2.1.2.3 Con trỏ (Pointer) ................................................... 5
2.1.2.4 Hàm (Function) ..................................................... 5
2.2 CÔNG NGHỆ & CÔNG CỤ ĐƯỢC SỬ DỤNG ...................... 6
2.2.1 Bộ visual studio.net ............................................................. 6
2.2.2 Tổng quan về C# ................................................................. 9
2.2.2.1 Các thành phần mở rộng C# ................................. 9
2.2.2.2 Các kiểu dữ liệu trong C# ..................................... 10
2.2.2.3 Biểu thức toán tử ................................................... 11
2.2.2.4 Phát biểu điều kiện và vòng lặp ............................ 12
2.2.2.5 Lớp và thừa kế ...................................................... 13
2.2.2.6 Đa hình .................................................................. 17
2.2.2.7 Giao diện ............................................................... 19
2.2.3 SƠ LƯỢC VỀ UML .......................................................... 21
2.2.3.1 Giới thiệu .............................................................. 21
2.2.3.2 Nguồn gốc của UML ............................................ 22
2.2.3.3 Biểu đồ usecase ..................................................... 22
2.2.3.4 Biểu đồ lớp ............................................................ 23
2.2.3.5 Biểu đồ cộng tác.................................................... 27
2.2.3.6 Biểu đồ họat động ................................................. 28
2.2.4 Mô hình 3 lớp (Data Access Layer) ................................... 30
2.2.5 Microsoft Visual C++ Toolkit 2003 .................................. 31
2.2.6 Các công cụ được sử dụng ................................................. 32
CHƯƠNG 3 : PHÂN TÍCH VÀ THIẾT KẾ .............................................. 35
3.2 NHỮNG CHỨC NĂNG CHÍNH ................................................ 35
3.3 PHÂN TÍCH UML ....................................................................... 36
3.3.1. Mô hình usecase ................................................................. 36
3.3.2. Mô hình họat động ............................................................. 39
3.3.2.1 Chọn cách học ....................................................... 39
3.3.2.2 Chọn làm bài tập ................................................... 40
3.3.2.3 Chọn làm bài tập ................................................... 41
3.3.2.4 Đăng ký thành viên ............................................... 42
3.3.2.5 Đăng nhập ............................................................. 43
3.3.2.6 Tạo thành viên ....................................................... 44
CHƯƠNG 4 : THỰC HIỆN VÀ KẾT QUẢ ............................................... 46
4.1 LỚP TRỪU TƯỢNG (ABSTRACT)............................................. 46
4.1.1 Business Layer .................................................................... 46
4.1.2 Data Layer ........................................................................... 49
4.2 Mô hình lớp .................................................................................... 49
4.2.1 Business Layer .................................................................... 50
4.2.2 Data Layer ........................................................................... 57
H
U
TE
C
H
4.3 Mô hình cộng tác ............................................................................ 61
4.3.1 Lấy danh sách bài hoc ......................................................... 61
4.3.2 Lấy danh sách chương......................................................... 62
4.3.3 Lấy bài tập ........................................................................... 63
4.3.4 Lấy bài hoc .......................................................................... 63
4.3.5 Lấy một chương .................................................................. 64
4.3.6 Thêm người dùng ............................................................... 65
4.3.7 Kiểm tra người dùng ........................................................... 66
4.3.8 Thêm thư viện ..................................................................... 67
4.3.9 Cập nhật thư viện ................................................................ 68
4.3.10 Lấy dữ liệu ........................................................................ 68
4.4 DESIGN PATTERN..................................................................... 69
4.4.1 Singleton pattern ................................................................. 69
4.4.2 Adapter pattern .................................................................... 69
4.4.3 Factory Method pattern ....................................................... 71
4.4.4 Proxy pattern ....................................................................... 72
4.5 THIẾT KẾ CƠ SỞ DỮ LIỆU, GIAO DIỆN PHẦN MỀM ..... 73
4.5.1 Thiết kế cơ sở dữ liệu .......................................................... 73
4.5.1.1 Mô hình thực thể ERD .......................................... 73
4.5.1.2 Mô hình quan hệ trong SQL Server ...................... 79
4.5.2 Giao diện phần mền ............................................................ 79
4.5.2.1 Giao diện chính ..................................................... 80
4.5.2.2 Khi chạy debug ..................................................... 81
4.5.2.3 Bài tập ................................................................... 82
CHƯƠNG 5 : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ........................... 84
5.1 NHỮNG ĐIỀU ĐÃ LÀM ĐƯỢC ....................................... 84
5.2 NHỮNG ĐIỂU CHƯA LÀM ĐƯỢC ................................. 85
5.3 HƯỚNG PHÁT TRIỂN....................................................... 85
TÀI LIỆU THAM KHẢO............................................................................. 86
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
1
CHƯƠNG 1
TỔNG QUAN
1.1 GIỚI THIỆU
H
Xây dựng phần mềm hỗ trợ học môn kỹ thuật lập trình C, nhằm giúp đỡ một
phần nhỏ cho các bạn mới làm quen với lập trình có thể tiếp cận ngôn ngữ C một cách
C
dể dàng, hứng thú. Chương trình bao gồm việc hiển thị nôi dụng bài học, làm bài tập,
tạo thư viện riêng và debug những ví dụ mẫu, biên dịch và chạy bài tập do người viết.
TE
1.2. THỰC TẾ NHỮNG PHẦN MỂM ĐANG SỬ DỤNG
Việc sử dụng tin học tạo ra những phần mềm hổ trợ học tập đã được phát triển
rất nhiều nhất là từ khi máy vi tính đã trở nên một thiết bị cần thiết trong mỗi gia đình.
U
Từ những phần mềm cho thiếu nhi đến những phần mềm dạy học cao cấp. Những
H
phần mềm về học tập cũng rất phong phú học anh văn, toán, lý, hóa, …
Hiện nay nhu cầu học lập trình rất lớn. Có rất nhiều bạn muốn tìm hiểu nhưng
không biết bắt đầu từ đâu và sử dụng ngôn ngữ nào cho thích hợp.
Trên thị trường hiện nay cũng có rất nhiều phần mềm hỗ trợ học ngôn ngữ lập
trình. Nhưng hầu hết là những ngôn ngữ bậc cao (ví dụ Visual Basic, Visual Studio
.NET, …) trong khi đó ại
l rất ít phần mềm hỗ trợ học các ngôn ngữ lập trình C/C++
hay Pascal.
Hầu hết các phần mềm dạng dạy những ngôn ngữ lập trình C/C++ đều không
được đầu tư nhiều.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
2
1.3 MỤC TIÊU CỦA PHẦN MỀM
1.3.1 Giúp đỡ người bắt đầu học lập trình
Một khóa học sẽ bao gồm nhiều chương. Mỗi chương sẽ có bài lý thuyết và
những bài tập nhỏ nhằm giúp người dùng quen với lập trình.
Kết thúc mỗi chương sẽ có bài kiểm tra kiến thức dưới dạng trắc nghiệm.
Ngoài ra người dùng cũng có thể chọn:
Làm một bài kiểm tra tổng hợp về một phần nào đó.
H
Chọn một bài học hoặc một chương nào đó trong chương trình.
C
1.3.4 Thiết kế sao cho dể dàng thay đổi/nâng cấp/bảo trì
Thiết kế và cài đặt bắt buộc phải theo mô hình lớp.
TE
Hướng phát triển:
Đưa lên website
U
Cho phép người dùng tự soạn thảo một chương trình học
(VD: Học toán, …).
H
1.3.5 Giải pháp xây dựng phần mềm
Sử dụng môi trường Visual Studio .NET 2003, ngôn ngữ lập trình C# một
trong những ngôn ngữ lập trình cấp cao mạnh hiện nay. Tận dụng khả năng lập trình
hướng đối tượng và công cụ ADO của Microsoft.
Phần mềm sử dụng hệ quản trị cơ sở dữ liệu SQL Server 2000.
Sử dụng ngôn ngữ UML thiết kế chương trình.
Phần mềm được thiết kế theo mô hình 3 lớp.
Ứng dụng Design Pattern vào thiết kế mô hình lớp.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
3
Để hỗ trợ việc chạy phần bài tập của người dùng, chương trình có sử dụng thêm
công cụ Microsoft Visual C++ Toolkit 2003 của Microsoft.
Sử dụng những control mã nguồn mở trên mạng internet.
Trong thiết kế giao diện phần mềm hạn chế sử dụng form, chuyển sang tạo và
sử dụng user control.
Xây dựng CSDL (Dùng hệ quản trị CSDL).
Xây dựng mô hình lớp.
H
Hiển thị dữ liệu (Toàn bộ sử dụng class-object)
Xây dựng module cho phép làm kiểm tra.
H
U
TE
C
Thân thiện và dể sử dụng đối với người dùng.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
4
CHƯƠNG 2
CƠ SỞ LÝ THUYẾT
2.1 NGÔN NGỮ LẬP TRÌNH C
2.1.1 Lịch sử ngôn ngử C
Ngôn ngữ C được phát triển từ hai ngôn ngữ trước đó là BCPL và B. BCPL
H
được phát triển bởi Martin Richards năm 1967 và là ngôn ngữ dành để viết các phần
C
mềm hệ điều hành và các trình biên dịch. Ken Thomspon phát triển ngôn ngữ B, có
nhiều điểm bắt chước BCPL. Và B được dùng để viết phiên bản đầu tiên của hệ điều
TE
hành UNIX tại Bell Laboratories năm 1970.
Ngôn ngữ C được Dennis Ritchie ở Bell Laboratories được phát triển từ B vào
năm 1972. C được phổ b iến ban đầu do việc là ngôn ngữ phát triển cho hệ điều hành
U
UNIX. Ngày nay hầu như tất cả hệ điều hành chủ chốt đều được viết bằng C hay C++.
H
2.1.2 Tìm hiểu tổng quan về ngôn ngữ C
2.1.2.1 Các kiểu dữ liệu
Chương trình C, cũng giống như những ngôn ngữ kh ác, chúng ta cung cấp dữ
liệu (số, chữ, …) và mô tả cách thực hiện công việc. Và chúng ta trong đợi kết quả từ
những dữ liệu trên. Do đó, điều cần thiết trong chương trình C là phải phân loại tất cả
các dữ liệu bằng cách chia chúng theo kiểu dữ liệu (data type). C có 4 kiểu dữ liệu căn
bản là : ký tự (character), dấu chấm động (floating point number), tinh xác đôi (double
precision). Trong C dùng 7 ừt khóa để phân biệt kiểu dữ liệu khác nhau : int, long,
short, unsigned, char, float và double.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
5
2.1.2.2. Toán tử
Ngoài những toán tử số học thường, C còn hỗ trợ thêm những tóan tử mới như :
Toán tử tăng/giảm : ++/-Toán tử phức hợp : +=, -=, *=, /=, %=
2.1.2.3. Con trỏ (Pointer)
Con trỏ là một đặc trưng rất mạnh, tinh vi của ngôn ngữ C. Nhưng việc sử dụng
con trỏ khá phức tạp.
một biến nào đó.
Khai báo
TE
Kieu_du_lieu * ten_con_tro;
C
H
Con trỏ củng là một biến, nhưng nó không chứa giá trị mà nó chứa địa chỉ của
Ví dụ:
int *p;
U
Các thao tác chính trên con trỏ: &, *;
H
& lấy địa chỉ của con trỏ
* lấy nội dung của vùng nhớ mà con trỏ đang trỏ tới.
2.1.2.4 Hàm (Function)
Một chương trình C gồm một hoặc nhiều đơn thể chương trình được gọi dưới
tên là hàm (function).
Trong C, hàm cho phép chia những chương trình lớn thành những chương trình
nhỏ và một lợi thế là một hàm được áp dụng thành công ở chương trình này thì củng
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
6
có thể sử dụng tốt với cùng mục đích ở chương trình khác. Chương trình viết theo C
thường là một phối hợp sử dụng hai lọai hàm:
Hàm do người sử dụng viết.
Hàm trong thư viện chuẩn của C (ví dụ như printf (), scanf ()).
2.2 CÔNG NGHỆ & CÔNG CỤ ĐƯỢC SỬ DỤNG
2.2.1 Bộ VISUAL STUDIO.NET
.NET là gì?
H
.NET không chỉ là một cái tên gọi mà nó còn đại diện cho tòan bộ các công
nghệ và các khái niệm cấu thành một nền tảng để người lập trình xây dựng các dứng
C
dụng trên nó. Visual Basic .NET có một số phiên bản thực sự là 7.0 nhưng số này ít
TE
được sử dụng.
Có thể hiểu .NET là một lớp tồn tại bên dưới các ứng dụng và cung cấp một tập
các chức năng và các dịch vụ cơ bản. Lớp này chứa một tập các ứng dụng và các hệ
điều hành gọi là các .NET server; một tập các đối tượng cơ sở gọi là .NET Framework,
U
và một tập các dịch vụ hỗ trợ cho tất cả các ngôn ngữ .NET là Common Language
H
Runtime (CLR). Các phần này được tách biệt như trong hình:
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
7
User Application
⋅NET Framework
.NET Servers
Windows, BizTalk, Exchange, SQL, App Center …
H
.NET Devices
TE
.NET server
C
Hardware Componets
Mục đích lớn của .NET là thuận tiện trong việc xây dựng các hệ thống phân
tán, hệ thống phân tán có nghĩa là công việc được thực hiện ở nhiều vị trí khác nhau.
U
Phần lớn các hệ thống kiểu này thực hiện công việc của chúng ở phần hậu (back end),
ở cấp độ server Microsoft cung cấp một tập các sản phẩm phần mềm mà chúng được
H
biết như là .NET Enterprise Servers. Chúng được thiết kế để hỗ trợ các tính năng xử lý
phần hậu cần thiết của một hệ thống phân tán.Các sản phẩm này bao gồm:
Hệ điều hành server, Microsoft Windows (Server, Advanced Server, và
Datacenter Server)
Các phầm mềm như là Microsoft App Center và Microsoft Cluster Server
Một hệ thống lưu trữ thư điện tử, thông tin tự do, …, Microsoft Exchange
Server
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
8
Một động cơ chuyển đổi dạng dữ liệu (data-transformation engine) dựa trên
XML gọi là Microsoft BizTalk Server
…
.NET Framework
Khi chuyển qua Visual Basic .NET, nhiều thứ đã được thay đổi một cách triệt
để; một trong chúng là sự phát triển của một nền tảng mới cho tất cả các công cụ phát
triển của .NET. Nền tảng cơ sở này, gọi là .NET Framework, cung cấp hai thứ chính:
môi trường thực thi cơ sở (base runtime environment) và một tập các lớp nền tảng
H
(foundation class). Base Environmet cung ấcp một lớp nằm giữa các chương trình và
phần còn lại của hệ thống, thực hiện các dịch vụ cho các ứng dụng của người lập trình
C
và đơn giản hóa việc xử lý đến chức năng của các lớp thấp hơn. Các lớp nền tảng cung
TE
cấp một tập lớn các chức năng xây dựng sẵn, như xử lý tập tin, thao tác với XML, …
.NET Framework cũng cung cấp một tập các hàm API của riêng nó để giúp cho
người lập trình tận dụng được hết các khả năng của nó.
U
.NET Service
.NET có các khái niệm mà vượt xa hơn các chi tiết của lập trình để mô tả cách
H
các hệ thống được xây dựng và cách chúng có thể tương tác. Một trong các khái niệm
trên là ý tưởng Web Services, chức năng được phân theo một quy luật nhất quán thông
qua Internet. Các dịch vụ này cho phép một công ty hay tổ chức cung cấp chức năng
mà chức năng này được thực hiện hoàn toàn bên trong môi trường của họ. Một ví dụ
của các dịch vụ này là dịch vụ thanh tóan hóa đơn, một công ty có các sever và các ứng
dụng trong chính công ty của họ mà có thể thực hiện và quản lý được việc thanh toán
hóa đơn. Công ty này cung ấp
c dịch vụ đó cho các công ty khác thông qua dịch vụ
Web. Dịch vụ này khác với việc cung cấp một trang Web thông thường; đây là một
giao tiếp mà các ứng dụng hay các trang Web khác có thể sử dụng chức năng được
cung cấp.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
9
.NET Device
Ngày nay có ấrt nhiều hệ thống có thể truy xuất Internet, như là máy tính cá
nhân, các ầu
đ cuối TV -Based Internet, thin-client, hay PDA (Personal Digital
Assistants), … Tất cả các thiết bị này có thể là công cụ được phân vào lớp .NET
Devices - một sự kết hợp phần cứng và các tính năng phần mềm được thiết kế để làm
việc với các dịch vụ và các ứng dụng xây dựng trên .NET. Các thiết bị .NET bao gồm
các máy tính chạy trên Windows và các thiết bị chạy Windows CE (Framework tương
thích cho loại thiết bị này có sẵn, cho phép hỗ trợ các tính năng .NET).
H
2.2.2.Tổng quan về C#
Ngôn ngữ C# được thiết kế bởi Anders Hfsberg của Microsoft. C# là một ngôn
C
ngữ lập trình hướng đối tượng hiện đại có thể tương tác với các phần tử của các ngôn
ngữ khác như C, C++, Pascal, Java, và ngay cả Basic. C# là một sản phẩm của bộ sản
TE
phẩm Visual Studio.NET. Ngoài ra, bộ Visual Studio.NET còn có các sản phẩm khác
như Visual Basic.NET…
Về phương diện lập trình, ngôn ngữ C# có phong cách lập trình giống những
U
ngôn ngữ lập trình hướng đối tượng khác như Visual C++, Java.
H
Sau đây là những cải tiến hoặc mở rộng của ngôn ngữ lập trình C# so với
C/C++.
2.2.2.1. Các thành phần mở rộng C#
Tập tin viết bằng ngôn ngữ C# cũng như các tập tin khác nhưng chúng có tên
mở rộng là .cs, và tên mở rộng của project là .csproj.
Ngoài ra, để biên dịch và sử dụng được chương trình viết bằng ngôn ngữ C# cần
phải có môi trường gọi là FrameWork Software Development Kit (SDK),ũng
c như
chương trình viết bằng ngôn ngữ Java cũng cần phải có môi trường là Java
Development Kit (JDK).
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
10
Từ khóa using dùng tham chiếu đến những thư viện có sẵn trong .NET
Framework (tương tự như trong C là include, hoặc trong Java là import).
System là tên của một không gian tên (Namespace), có đến 90 không gian tên sử dụng
bắt đầu bằng tên System trong .NET Framework, các không gian tên quan trọng như
System.Drawing, System.Windows.Forms,….
2.2.2.2.Các kiểu dữ liệu C#
Kiểu
Mô tả
Lớp cơ sở của tất cả các đối tượng trong C#
string
Dãy các ký tự ở dạng Unicode
sbyte
Nguyên có dấu 8-bit
short
Nguyên có dấu 16-bit
Int
Nguyên có dấu 32-bit
TE
C
H
object
nguyên có dấu 62-bit
Long
Nguyên không dấu 16-bit
H
Ushort
Nguyên không dấu 8-bit
U
Byte
Uint
Nguyên không dấu 32-bit
Ulong
Nguyên không dấu 64-bit
Float
Số chấm động có độ chính xác đơn
Double
Số chấm động có độ chính xác đôi
Bool
Kiểu logic – true hay false
Char
Ký tự Unicode
decimal
Số thập phân có 28 chữ số nguyên
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
11
2.2.2.3. Biểu thức toán tử
Loại toán tử
Toán tử
Primary
(), [], f(), x++, y++, new, typeof,
sizeof, checked, unchecked
+, -, !, ~, ++x, --x
Multipliacte
*, %
Additive
=, -
Shift (dịch chuyển bit)
<<, >>
<>, <=, >=
C
Relational
Logical OR
&
|
^
Lcondition AND
&&
H
U
Logical XOR
= =, !=
TE
Equallity
Logical AND
H
Unary(toán tử một ngôi)
Condition OR
||
Condition
?:
Assigment (phép gán)
=, +=, -=, *=, ?=, %=, <<=, >>=, |=,
&=, ^=
Trong ngôn ngữ C, toán tử && và || là hai toán tử luận lý, nhưng trong ngôn ngữ
C# thì hai toán tử này chỉ được định nghĩa cho kiểu dữ liệu luận lý và cả trong phép
toán so sánh điều kiện.
C# cũng sử dụng hai toán tử && và || giống như trong trường hợp của ngôn ngữ C, và
những toán tử này được gọi là toán tử điều kiện, biểu thức thứ hai chỉ xét khi cần thiết.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
12
2.2.2.4 . Phát biểu điều kiện và vòng lặp
Câu lệnh lặp foreach
Vòng lặp foreach cho phép tạo vòng lặp thông qua một tập hợp hay một mảng.
Đây là một câu lệnh lặp mới không có trong ngôn ngữ C/C++. Câu lệnh foreach có
cú pháp chung như sau:
foreach ( in < tên tập hợp>)
H
Do lặp dựa trên một mảng hay tập hợp nên toàn bộ vòng lặp sẽ duyệt qua tất cả các
thành phần của tập hợp theo thứ tự được sắp. Khi duyệt đến phần tử cuối cùng trong
C
tập hợp thì chương trình sẽ thoát ra khỏi vòng lặp foreach.
TE
Namespace
Như chúng ta đã biết .NET cung cấp một thư viện các lớp đồ sộ và thư viện
này có tên là FCL (Framework Class Library). Trong đó Console ch
ỉ là một lớp nhỏ
trong hàng ngàn ớ
l p trong thư viện. Mỗi lớp có một tên riêng, vì vậy FCL có hàng
U
ngàn tên như ArrayList, Dictionary, FileSelector,…
H
Điều này làm nảy sinh vấn đề, người lập trình không thể nào nhớ hết được tên
của các lớp trong .NET Framework. Tệ hơn nữa là sau này có thể ta tạo lại một lớp
trùng với lớp đã có chẳng hạn. Ví dụ trong quá trình phát triển một ứng dụng ta cần
xây dựng một lớp từ điển và lấy tên là Dictionary, và điều này dẫn đến sự tranh chấp
khi biên dịch vì C# chỉ cho phép một tên duy nhất.
Chắc chắn rằng khi đó chúng ta phải đổi tên của lớp từ điển mà ta vừa tạo
thành một cái tên khác chẳng hạn như myDictionary. Khi đó sẽ làm cho việc phát
triển các ứng dụng trở nên phức tạp, cồng kềnh. Đến một sự phát triển nhất định nào
đó thì chính là cơn ác mộng cho nhà phát triển.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
13
Giải pháp để giải quyết vấn đề này là việc tạo ra một namespace, namsespace
sẽ hạn chế phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong vùng đã định
nghĩa.
Tương tự như vậy ta cứ tạo các namespace để phân thành các vùng cho các lớp
trùng tên không tranh chấp với nhau.
Tương tự như vậy, .NET Framework có xây dựng một lớp Dictionary bên
trong namespace System.Collections, và tươngứng ta có thể tạo một lớp Dictionary
khác nằm trong namespace ProgramCSharp.DataStructures, điều này hoà n toàn
H
không dẫn đến sự tranh chấp với nhau.
Mảng
C
Ngôn ngữ C# cung cấp cú pháp chuẩn cho việc khai báo những đối tượng
TE
Array. Tuy nhiên, cái thật sự được tạo ra là đối tượng của kiểu System.Array. Mảng
trong ngôn ngữ C# kết hợp cú pháp khai báo mảng the o kiểu ngôn ngữ C và kết hợp
với định nghĩa lớp do đó thể hiện của mảng có thể truy cập những phương thức và
System.Array
U
thuộc tính của System.Array. Một số các thuộc tính và phương thức của lớp
H
2.2.2.5 Lớp và thừa kế
Thừa kế là khái niệm then chốt của thiết kế trong các ngôn ngữ hướng đối
tượng , thừa kế cho phép những chức năng và thuộc tính dùng chung ở lớp cơ sở và
những lớp chỉ định có thể kế thừa những chức năng của lớp cơ sở. C# chỉ hỗ trợ thừa
kế đơn. C++ cho phép đa thừa kế và nếu được sử dụng đúng cách đây thật sự là điểm
rất mạnh. Tuy nhiên, phải thừa nhận là đa thừa kế rất khó quản lý và khó áp dụng.
Đây là một trong những lý do C# chỉ phát triển đa thừa kế.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
14
Thu
Cho
Meo
Lớp cơ sở Dog sẽ chứa thuộc tính và phương thức chung cho tất cả các giống
chó. Mỗi lớp dẫn xuất có thể cài đặt cá biệt hóa thêm nếu thấy cần thiết. Điều rất quan
{
TE
public void Keu();
C
public class Thu
H
trọng nên chú ý rằng C# chỉ kế thừa dạng public.
}
H
{
U
public class Meo: Thu
}
public class Cho : Thu
{
}
Phương thức
Hai thành phần chính cấu thành một lớp là thuộc tính hay tính chất và phương
thức hay còn gọi là hành động ứng xử của đối tượng. Trong C# hành vi được định
nghĩa như một phương thức thành viên của lớp.
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
15
Phương thức chính là các hàm được định nghĩa trong lớp. Do đó, ta còn có thể
gọi các phương thức thành viên là các hàm thành viên trong một lớp. Các phương
thức này chỉ ra rằng các hành động mà lớp có thể làm được cùng với cách thức làm
hành động đó.
Điều khiển truy xuất
Khả năng hiện hữu của một lớp và các thành viên của nó có thể được hạn chế
thông qua việc sử dụng các bổ sung truy cập: public, private, protected, internal, và
protected internal.
H
Từ khoá public cho phép một thành viên có thể được truy cập bởi một phương
thức thành viên của những lớp khác. Trong khi đó private chỉ cho phép các phương
C
thức thành viên trong lớp đó truy xuất. Từ khóa protected thì mở rộng thêm khả năng
của private cho phép truy xuất từ các lớp dẫn xuất của lớp đó. Internal mở rộng khả
TE
năng cho phép ấtb cứ phương thức c ủa lớp nào trong cùng một khối kết hợp
(assembly) có thể truy xuất được. Một khối kết hợp được hiểu như là một khối chia
xẻ và dùng lại trong CLR. Thông thường, khối này là tập hợp các tập tin vật lý được
U
lưu trữ trong một thư mục bao gồm các tập tin tài nguyên, chương trình thực thi theo
H
ngôn ngữ IL,...
Từ khóa internal protected đi cùng với nhau cho phép các thành viên của cùng
một khối assembly hoặc các lớp dẫn xuất của nó có thể truy cập. Chúng ta có thể xem
sự thiết kế này giống như là internal hay protected.
Các lớp cũng như những thành viên của lớp có thể được thiết kế với bất cứ
mức độ truy xuất nào. Một lớp thường có mức độ truy xuất mở rộng hơn cách thành
viên của lớp, còn các thành viên thì mức độ truy xuất thường có nhiều hạn chế. Do
đó, ta có thể định nghĩa một lớp MyClass như sau:
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
16
public class MyClass
{
protected int myValue;
}
Như trên biến thành viên myValue được khai báo truy xuất protected mặc dù
bản thân lớp được khai báo là public. Một lớp public là một lớp sẵn sàng cho bất cứ
lớp nào khác muốn tương tác với nó. Đôi khi một lớp được tạo ra chỉ để trợ giúp cho
khóa internal hơn là khóa public.
C
Truyền tham số
H
những lớp khác trong một khối assemply, khi đó những lớp này nên được khai báo
Như đã thảo luận trong chương trước, tha m số có kiểu dữ liệu là giá trị thì sẽ
TE
được truyền giá trị vào cho phương thức. Điều này có nghĩa rằng khi một đối tượng
có kiểu là giá trị được truyền vào cho một phương thức, thì có một bản sao chép đối
tượng đó được tạo ra bên trong phương thức. Một khi phương thức được thực hiện
U
xong thì đối tượng sao chép này sẽ được hủy. Tuy nhiên, đây chỉ là trường hợp bình
thường, ngôn ngữ C# còn cung cấp khả năng cho phép ta truyền các đối tượng có kiểu
H
giá trị dưới hình thức là tham chiếu. Ngôn ngữ C# đưa ra một bổ sung tham số là ref
cho phép truyền các đối tượng giá trị vào trong phương thức theo kiểu tham chiếu. Và
tham số bổ sung out trong trường hợp muốn truyền dưới dạng tham chiếu mà không
cần phải khởi tạo giá trị ban đầu cho tham số truyền. Ngoài ra ngôn ngữ C# còn hỗ
trợ bổ sung params cho phép phương thức chấp nhận nhiều số lượng các tham số.
Truyền tham chiếu
Những phương thức chỉ có thể trả về duy nhất một giá trị, mặc dù giá trị này
có thể là một tập hợp các giá trị. Nếu chúng ta muốn phương thức trả về nhiều hơn
một giá trị thì cách thực hiện là tạo các tham số dưới hình thức tham chiếu. Khi đó
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
17
trong phương thức ta sẽ xử lý và gán các giá trị mới cho các tham số tham chiếu này,
kết quả là sau khi phương thức thực hiện xong ta dùng các tham số truyền vào như là
các kết quả trả về.
2.2.2.6. Đa hình
Trong thuật ngữ lập trình hướng đối tượng, khả năng ghi đè phương thức của
lớp cơ sở và cung cấp một phát triển khác ở trong lớp dẫn xuất là một hình thức cơ
bản của khái niệm đa hình.
Xem ví dụ trước, trong đó Cho và Meo được dẫn xuất từ lớp cơ sở chung Thu.
H
Lớp cơ sở Thu cung cấp phương thức Keu được các lớp dẫn xuất thừa kế.
Tuy nhiên, nếu bạn đã từng nghe thì giống Cho sủa sẽ khác với giống Meo,
C
chúng sủa không giống nhau. Vì vậy, lớp cơ sở Thu phải cho phép các lớp dẫn xuất
TE
cung cấp phát triển phương thức Keu của riêng chúng.
C# cung cấp từ khóa virtual để chỉ rõ là phương thức có thể bị các lớp dẫn xuất
ghi đè. Một lớp dẫn xuất có thể ghi đè phương thức virtual bằng cách sử dụng từ khóa
U
override.
H
class Thu
{
public virtual void Keu();
}
class Meo : Thu
{
public override void Keu();
}
SV thực hiện: Nguyễn Hoàng Vũ
Luận văn tốt nghiệp
GVHD:ThS. Trương Thị Minh Châu
18
Từ khóa override
Trong ngôn ngữ C#, người lập trình có thể quyết định phủ quyết một phương
thức ảo bằng cách khai báo tường minh từ khóa override. Điều này giúp cho ta đưa
ra một phiên bản mới của chương trình và sự thay đổi của lớp cơ sở sẽ không làm ảnh
hưởng đến chương trình viết trong các lớp dẫn xuất. Việc yêu cầu sử dụng từ khóa
override sẽ giúp ta ngăn ngừa vấn đề này.
Lớp trừu tượng
Để yêu cầu các lớp con (lớp dẫn xuất) phải thực thi một phương thức của lớp
H
cơ sở, chúng ta phải thiết kế một phương thức một cách trừu tượng.
Những lớp trừu tượng được thiết lập như là cơ sở cho những lớp dẫn xuất,
C
nhưng việc tạo các thể hiện hay các đối tượng cho các lớp trừu tượng được xem là
TE
không hợp lệ. Một khi chúng ta khai báo một phương thức là trừu tượng, thì chúng ta
phải ngăn cấm bất cứ việc tạo thể hiện cho lớp này.
Phương thức trừu tượng được thiết lập bằng cách thêm từ khóa abstract vào
U
đầu của phần định nghĩa phương thức, cú pháp thực hiện như sau:
abstract public void DrawWindow( );
H
Đối với lớp trừ tượng, cú pháp
abstract public class Window
{
}
Lớp cô lập (sealed class)
Ngược với các lớp trừu tượng là các lớp cô lập. Một lớp trừu tượng được thiết
kế cho các lớp dẫn xuất và cung cấp các khuôn mẫu cho các lớp con theo sau. Trong
khi một lớp cô lập thì không cho phép các lớp dẫn xuất từ nó. Để khai báo một lớp cô
SV thực hiện: Nguyễn Hoàng Vũ
- Xem thêm -