Tải bản đầy đủ (.pdf) (88 trang)

xây dựng phần mềm hỗ trợ môn học kỹ thuật lập trình c

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.31 MB, 88 trang )

HUTECH
MC LC

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
HUTECH
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

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




HUTECH
Lun vn tt nghip 1 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V


CHNG 1
TNG QUAN


1.1 GII THIU
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
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.
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.
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
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 đó li 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.
HUTECH
Lun vn tt nghip 2 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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 đó.
Chn mt bài hc hoc mt chng nào đó trong chng trình.
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.
Hng phát trin:
a lên website
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, …).
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.
HUTECH

Lun vn tt nghip 3 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

 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.
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.
Thân thin và d s dng đi vi ngi dùng.












HUTECH
Lun vn tt nghip 4 GVHD:ThS. Trng Th Minh Châu



SV thc hin: Nguyn Hoàng V


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
đ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
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
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
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++.
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.
HUTECH

Lun vn tt nghip 5 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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.
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
mt bin nào đó.
Khai báo
Kieu_du_lieu * ten_con_tro;
Ví d:
int *p;
Các thao tác chính trên con tr: &, *;
& 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


HUTECH
Lun vn tt nghip 6 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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ì?
.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
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
đ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,
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
Runtime (CLR). Các phn này đc tách bit nh trong hình:








HUTECH
Lun vn tt nghip 7 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

User Application

⋅NET Framework

.NET Servers
Windows, BizTalk, Exchange, SQL, App Center …
.NET Devices

Hardware Componets

.NET server
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.
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
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

HUTECH

Lun vn tt nghip 8 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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
(foundation class). Base Environmet cung cp 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
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
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ó.
.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
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 cp 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.
HUTECH
Lun vn tt nghip 9 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

.NET Device
Ngày nay có rt 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).
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
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
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
ngôn ng lp trình hng đi tng khác nh Visual C++, Java.
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), cng 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).
HUTECH
Lun vn tt nghip 10 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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<tên th vin>, 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
object 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
Long nguyên có du 62-bit
Byte Nguyên không du 8-bit
Ushort Nguyên không du 16-bit
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
HUTECH
Lun vn tt nghip 11 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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.
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
Unary(toán t mt ngôi) +, -, !, ~, ++x, x
Multipliacte *, %
Additive =, -
Shift (dch chuyn bit) <<, >>
Relational <>, <=, >=
Equallity = =, !=
Logical AND &
Logical OR |
Logical XOR ^
Lcondition AND &&
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.
HUTECH
Lun vn tt nghip 12 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V


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 ( <kiu tp hp> <tên truy cp thành phn > in < tên tp hp>)
<Các câu lnh thc hin>
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
tp hp thì chng trình s thoát ra khi vòng lp foreach.
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
ngàn tên nh ArrayList, Dictionary, FileSelector,…
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.
HUTECH
Lun vn tt nghip 13 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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
không dn đn s tranh chp vi nhau.
Mng
Ngôn ng C# cung cp cú pháp chun cho vic khai báo nhng đi tng
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 theo 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à
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
System.Array
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.


HUTECH
Lun vn tt nghip 14 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V


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
trng nên chú ý rng C# ch k tha dng public.
public class Thu
{
public void Keu();
}

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.
HUTECH
Lun vn tt nghip 15 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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.
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
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
nng cho phép bt 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
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
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:


HUTECH
Lun vn tt nghip 16 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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
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
khóa internal hn là khóa public.
Truyn tham s
Nh đã tho lun trong chng trc, tham s có kiu d liu là giá tr thì s
đ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
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
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 đó
HUTECH
Lun vn tt nghip 17 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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.
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,
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
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

override.
class Thu
{
public virtual void Keu();
}
class Meo : Thu
{
public override void Keu();
}
HUTECH
Lun vn tt nghip 18 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

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
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,
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à
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 ca phn đnh ngha phng thc, cú pháp thc hin nh sau:

abstract public void DrawWindow( );
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ô
HUTECH
Lun vn tt nghip 19 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

lp ta dùng t khóa sealed đt trc khai báo ca lp không cho phép dn xut. Hu
ht các lp thng đc đánh du sealed nhm ngn chn các tai nn do s k tha
gây ra.
2.2.2.7 GIAO DIN

Giao din cung cp hình thc tru tng hóa s rt thun tin cho vic phát
trin theo phong cách xây dng theo thành phn c s. Giao din cung cp nhng
tha thun chung cho phép các thành phn làm vic vi nhau.
Mt giao din không phi là mt lp và do đó cng không có bt c mã cài đt
nào. Mt giao din cha các khai báo ca các thành phn ca các phng thc, trong
đó tt c đu phi khai báo public. C# cho phép struct và lp cài đt mt hay nhiu
giao din, điu này khác hn vi tha k. Tha k là vic cài đt mt lp t lp c s,
còn cài đt giao din thì ch xác đnh ra rng lp s phát trin mt giao din đt bit
và cam đoan s hoàn thành giao din nh đã đ ra.
Thc thi mt giao din

Cú pháp đ đnh ngha mt giao din nh sau:
[thuc tính] [b sung truy cp] interface <tên giao din> [: danh sách c s]
{
<phn thân giao din>
}
Phn thuc tính chúng ta s đ cp sau. Thành phn b sung truy cp bao gm:
public, private, protected, internal, và protected internal đã đc đ cp.
Theo sau t khóa interface là tên ca giao din. Thông thng tên ca giao
din đc bt đu vi t I hoa (điu này không bt buc nhng vic đt tên nh vy
rt rõ ràng và d hiu, tránh nhm ln vi các thành phn khác).
HUTECH
Lun vn tt nghip 20 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

Ví d:
interface Alarm
{
void SetTime ();
}
public class AlarmClock : Alarm
{
}
M rng giao din
C# cung cp chc nng cho chúng ta m rng mt giao din đã có bng cách
thêm các phng thc và các thành viên hay b sung cách làm vic cho các thành
viên.
Ví d
Interface Clock : Alarm

{}
Toán t is
Chúng ta mun kim tra mt đi tng xem nó có h tr giao din, đ sau đó
thc hin các phng thc tng ng. Trong ngôn ng C# có hai cách đ thc hin
điu này. Phng pháp đu tiên là s dng toán t is. Cú pháp ca toán t is là:
<biu thc> is <kiu d liu>



HUTECH
Lun vn tt nghip 21 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

Toán t is tr v giá tr true nu biu thc thng là kiu tham chiu có th
đc gán an toàn đn kiu d liu cn kim tra mà không phát sinh ra bt c ngoi l
nào.
Toán t as
Toán t as kt hp toán t is và phép gán bng cách đu tiên kim tra hp l
phép gán (kim tra toán t is tr v true) ri sau đó phép gán đc thc hin. Nu
phép gán không hp l (k hi phép gán tr  giá tr false), thì toán t as tr v giá tr
null.
Ghi chú: T khóa null th hin mt tham chiu không tham chiu đn đâu c
(null
reference). i tng có giá tr null tc là không tham chiu đn bt k đi tng
nào.
S dng toán t as đ loi b vic thc hin các x lý ngoi l. ng thi cng
né tránh vic thc hin kim tra d tha hai ln. Do vy, vic s dng ti u ca phép
gán cho giao din là s dng as. Cú pháp s dng toán t as nh sau:

<biu thc> as <kiu d liu>
2.2.3 S LC V UML
2.2.3.1 Gii thiu
Ngôn ng hp nht UML (Unified Modeling Language) là mt ngôn ng trc
quan cung cp cho các nhà phân tích thit k hng đi tng mt cách hình dung ra
các h thng phn mm, mô hình hóa các t chc nghip v s dng các h thng
phn mm này; cng nh xây dng chúng và làm tài liu v chúng.
UML là ngôn ng trc quan đc dùng trong quy trình phát trin các h thng
phn mm, là ngôn ng đc t hình thc
HUTECH
Lun vn tt nghip 22 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

2.2.3.2 Ngun gc UML

K thut phát trin phn mm hng đi tng đã tri qua 3 giai đon:
Các ngôn ng lp trình hng đi tng đc phát trin và bt đu đc s
dng.
Các k thut và phân tích thit k hng đi tng đc to ra nhm giúp đ
công vic mô hình hóa nghip v, phân tích yêu cu và thit k các h thng phn
mm.
UML đc thit k nhm kt hp các đc đim tt nht ca mt s k thut và
ký hiu trong phân tích thit k đ to ra mt tiêu chun công nghip.
2.2.3.3 Biu đ use case
Use case cung cp mt bc tranh tòan cnh v nhng gì đang xy r a trong h
thng hin ti hoc nhng gì s xy ra trong h thng mi, do đó có rt nhiu d án tin
hc đc bt đu t các use case.
Biu đ use case đa ra các use cae (tình hung s dng) và các actor (tác

nhân) và các mi kt hp gia chúng. Use case b iu din mt chui hành đng mà h
thng thc hin, actor biu din ngi hoc h thng khác tng tác vi h thng đang
đc mô hình hóa.
Mc đích ca biu đ use case
Mô hình hóa chui hành đng mà h thng s thc hin, và nhm cung cp mt
kt qu có ý ngha cho mt ngi nào đó hay cho mt h thng khác bên ngòai.
Cung cp mt cái nhìn tng th v nhng gì h thng s làm và ai dùng nó.



HUTECH
Lun vn tt nghip 23 GVHD:ThS. Trng Th Minh Châu


SV thc hin: Nguyn Hoàng V

Ký hiu



Use case 1
Actor
Admin
Use case 2

2.2.3.4 Biu đ lp
Biu đ lp mô t các lp, là nhng thành phn c bn nht đ làm nên bt k
h thng nào. Kh nng cng tác bng cách truyn thông đip, đc ch ra trong các
mi quan h gia chúng.
Biu đ lp ch cho ta thy khung nhìn tnh ca các lp trong mô hình hoc mt

phn ca mô hình. Nó ch cho ta thy các thuc tính và các thao tác ca lp, cng nh
lai quan h ca các lp.
Các tng tác và cng tác thc s xy ra đ h tr cho bt k mt yêu cu cha
nng nào, biu din mt tuyn nào đó nào đó trên s đ. Tuyn này s len li
(navigate) t lp này sang lp khác thông qua các mi quan h gia chúng. Lu ý là
ch có th thông thng gia hai đim bng cách xut phát t đim đu đi qua các
đim trung gian hp l và ti đim đích.
Tên use case

×