際際滷

際際滷Share a Scribd company logo
息2004,HONGMINHSN
Ch動董ng1
K畛 thu畉t l畉p tr狸nh
010101010101010110000101010101010101011000010101010101010101100001
010101010010101010010101010101001010101001010101010100101010100101
101001100011001001001010100110001100100100101010011000110010010010
110010110010001000001011001011001000100000101100101100100010000010
010101010101010110000101010101010101011000010101010101010101100001
010101010010101010010101010101001010101001010101010100101010100101
101001100011001001001010100110001100100100101010011000110010010010
110010110010001000001011001011001000100000101100101100100010000010
010101010101010110000101010101010101011000010101010101010101100001
010101010010101010010101010101001010101001010101010100101010100101
101001100011001001001010100110001100100100101010011000110010010010
110010110010001000001011001011001000100000101100101100100010000010
8/14/2006
y = A*x + B*u;
x = C*x + d*u;
StateController
start()
stop()
LQGController
start()
stop()
Ch動董ng 1: M畛 畉u
2
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
N畛i dung bi gi畉ng
1.1 Gi畛i thi畛u n畛i dung m担n h畛c
1.2 Gi畛i thi畛u chung v畛 k畛 thu畉t l畉p tr狸nh
1.3 Ph動董ng ph叩p lu畉n
1.4 Qui tr狸nh ph叩t tri畛n ph畉n m畛m
1.5 S董 l動畛c v畛 ng担n ng畛 C/C++
3
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
1.1 N畛i dung m担n h畛c
C叩c k畛 thu畉t l畉p tr狸nh c董 b畉n, th畛c hi畛n minh ho畉
tr棚n c叩c ng担n ng畛 l畉p tr狸nh C v C++:
 L畉p tr狸nh c坦 c畉u tr炭c (structured programming)
 L畉p tr狸nh h動畛ng 畛i t動畛ng (object-oriented programming)
 L畉p tr狸nh th畛i gian th畛c (real-time programming)
 L畉p tr狸nh t畛ng qu叩t (generic programming)
T畉i sao ch畛n C/C++:
 Hai ng担n ng畛 l畉p tr狸nh ti棚u bi畛u nh畉t, 畛 畛 th畛c hi畛n c叩c
k畛 thu畉t l畉p tr狸nh quan tr畛ng
 Hai ng担n ng畛 l畉p tr狸nh quan tr畛ng nh畉t 畛i v畛i k畛 s動
i畛n/k畛 s動 i畛u khi畛n
4
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Quan i畛m v畛 m担n h畛c
畛 cao ki畉n th畛c c董 b畉n, n畛n t畉ng:
 Thi棚n v畛 t動 duy v ph動董ng ph叩p l畉p tr狸nh
 T畉o kh畉 nng d畛 th鱈ch 畛ng v畛i c叩c 畛ng d畛ng kh叩c nhau
 T畉o kh畉 nng d畛 th鱈ch 畛ng v畛i c叩c ng担n ng畛 l畉p tr狸nh
kh叩c (Java, Visual Basic, C#, MATLAB)
 Nh畉n m畉nh t鱈nh chuy棚n nghi畛p trong l畉p tr狸nh: hi畛u
qu畉 + ch畉t l動畛ng
Nh畛ng n畛i dung kh担ng c坦 trong ch動董ng tr狸nh:
 L畉p tr狸nh h畛 th畛ng (low-level system programming)
 L畉p tr狸nh 畛 h畛a
 L畉p tr狸nh giao ti畉p v畛i c叩c thi畉t b畛 ngo畉i vi ( c畛ng n畛i ti畉p,
song song)
 L畉p tr狸nh c董 s畛 d畛 li畛u
 L畉p tr狸nh thnh ph畉n, l畉p tr狸nh ph但n t叩n (m畉ng, Internet)
5
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Ph動董ng ph叩p h畛c t畉p
C叩ch th畛 nh畉t: Nghe gi畉ng lm th畛 畛c ti
li畛u th畉o lu畉n luy畛n t畉p
C叩ch th畛 hai: 畛c ti li畛u lm th畛 nghe gi畉ng
th畉o lu畉n luy畛n t畉p
Nguy棚n t畉c c董 b畉n: Ch畛 畛ng h畛c th動畛ng xuy棚n!
Nh畛ng i畛u kh担ng n棚n lm:
 Ch辿p nhi畛u tr棚n l畛p
 H畛c thu畛c l嘆ng, h畛c chay
 Mong 畛i nhi畛u vo 担n t畉p
 D畛a d畉m vo c叩c bi t畉p m畉u trong s叩ch
6
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
C担ng c畛 h畛c t畉p
M叩y t鱈nh PC
M担i tr動畛ng l畉p tr狸nh: Visual C++ 6.0 (Visual
Studio 6.0), Visual C++ .NET, Borland C++ Builder
N畛n 畛ng d畛ng: Win32 Console Application
Ti li畛u tham kh畉o.
7
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
1.2 T畛ng quan v畛 k畛 thu畉t l畉p tr狸nh
K畛 thu畉t l畉p tr狸nh l g狸: K畛 thu畉t th畛c thi m畛t gi畉i ph叩p
ph畉n m畛m (c畉u tr炭c d畛 li畛u + gi畉i thu畉t) d畛a tr棚n n畛n t畉ng m畛t
ph動董ng ph叩p lu畉n (methodology) v m畛t ho畉c nhi畛u ng担n ng畛 l畉p
tr狸nh ph湛 h畛p v畛i y棚u c畉u 畉c th湛 c畛a 畛ng d畛ng.
K畛 thu畉t l畉p tr狸nh
= T動 t動畛ng thi畉t k畉 + K畛 thu畉t m達 h坦a
= C畉u tr炭c d畛 li畛u + Gi畉i thu畉t + Ng担n ng畛 l畉p tr狸nh
K畛 thu畉t l畉p tr狸nh
 Ph動董ng ph叩p ph但n t鱈ch & thi畉t k畉 (A&D)
8
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Th畉 no l l畉p tr狸nh?
Vi畉t ch動董ng tr狸nh in ra
100 s畛 nguy棚n t畛
畉u ti棚n!
Vi畉t ch動董ng tr狸nh t鱈nh
giai th畛a c畛a 100!
L畉p tr狸nh gi畉i bi to叩n:
"V畛a g v畛a ch坦,
ba m動董i s叩u con,
b坦 l畉i cho tr嘆n,
m畛t trm ch但n ch畉n"
KHNG PH畉I L L畉P TRNH!
Vi畉t m畛t hm t鱈nh
giai th畛a!
Vi畉t ch動董ng tr狸nh in ra
N s畛 nguy棚n t畛
畉u ti棚n!
L畉p tr狸nh gi畉i bi to叩n:
"V畛a g v畛a ch坦,
v畛a v畉n X con,
b坦 l畉i cho tr嘆n,
畛 Y ch但n ch畉n"
Y L L畉P TRNH!
9
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Th畉 no l l畉p tr狸nh t畛t?
炭ng/Ch鱈nh x叩c
 Tho畉 m達n 炭ng c叩c nhi畛m v畛 bi to叩n l畉p tr狸nh 畉t ra, 動畛c
kh叩ch hng ch畉p nh畉n
畛n 畛nh v b畛n v畛ng
 Ch動董ng tr狸nh ch畉y 畛n 畛nh trong c畉 nh畛ng tr動畛ng h畛p kh畉c
nghi畛t
 Ch畉y 鱈t l畛i (s畛 l動畛ng l畛i 鱈t, c動畛ng 畛 l畛i th畉p)
 M畛c 畛 l畛i nh畉 c坦 th畛 ch畉p nh畉n 動畛c
Kh畉 nng ch畛nh s畛a
 D畛 dng ch畛nh s畛a trong qu叩 tr狸nh s畛 d畛ng v ph叩t tri畛n
 D畛 dng thay 畛i ho畉c n但ng c畉p 畛 th鱈ch 畛ng v畛i i畛u ki畛n
bi to叩n l畉p tr狸nh thay 畛i
Kh畉 nng t叩i s畛 d畛ng
 C坦 th畛 動畛c s畛 d畛ng ho畉c 動畛c k畉 th畛a cho c叩c bi to叩n l畉p
tr狸nh kh叩c
10
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Th畉 no l l畉p tr狸nh t畛t?
畛 t動董ng th鱈ch
 Kh畉 nng th鱈ch 畛ng v ch畉y t畛t trong c叩c i畛u ki畛n m担i
tr動畛ng kh叩c nhau
Hi畛u su畉t
 Ch動董ng tr狸nh nh畛 g畛n, s畛 d畛ng 鱈t b畛 nh畛
 T畛c 畛 nhanh, s畛 d畛ng 鱈t th畛i gian CPU
Hi畛u qu畉:
 Th畛i gian l畉p tr狸nh ng畉n,
 Kh畉 nng b畉o tr狸 d畛 dng
 Gi叩 tr畛 s畛 d畛ng l畉i l畛n
 S畛 d畛ng 董n gi畉n, th但n thi畛n
 Nhi畛u ch畛c nng ti畛n 鱈ch
11
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
V鱈 d畛 minh h畛a: T鱈nh giai th畛a
Vi畉t ch動董ng tr狸nh hay x但y d畛ng hm?
 Hm t鱈nh giai th畛a c畛a m畛t s畛 nguy棚n
int factorial(int N);
Gi畉i thu畉t:
 Ph動董ng ph叩p 畛 quy (recursive)
 Ph動董ng ph叩p l畉p (iterative)
if (N > 1)
return N*factorial(N-1);
return 1;
int kq = 1;
while (N > 1)
kq *= N--;
return kq;
財to iterate is human,
to recurse is device!
12
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Lm th畉 no 畛 l畉p tr狸nh t畛t?
H畛c c叩ch t動 duy v ph動董ng ph叩p l畉p tr狸nh
 T動 duy to叩n h畛c, t動 duy logic, t動 duy c坦 c畉u tr炭c, t動 duy
h動畛ng 畛i t動畛ng, t動 duy t畛ng qu叩t
 T狸m hi畛u v畛 c畉u tr炭c d畛 li畛u v gi畉i thu畉t
Hi畛u s但u v畛 m叩y t鱈nh
 T動董ng t叩c gi畛a CPU, ch動董ng tr狸nh v b畛 nh畛
 C董 ch畉 qu畉n l箪 b畛 nh畛
N畉m v畛ng ng担n ng畛 l畉p tr狸nh
 Bi畉t r探 c叩c kh畉 nng v h畉n ch畉 c畛a ng担n ng畛
 K畛 nng l畉p tr狸nh (畛c th担ng, vi畉t th畉o)
T畛 r竪n luy畛n tr棚n m叩y t鱈nh
 Hi畛u s但u 動畛c c叩c i畛m n棚u tr棚n
 R竪n luy畛n k畛 nng l畉p tr狸nh
 Th炭c 畉y s叩ng t畉o
13
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
C叩c nguy棚n t畉c c董 b畉n
Tr畛u t動畛ng h坦a
Ch畉t l畛c ra nh畛ng y畉u t畛 quan tr畛ng, b畛 qua nh畛ng chi
ti畉t k辿m quan tr畛ng
坦ng g坦i
Che gi畉u v b畉o v畛 c叩c d畛 li畛u quan tr畛ng qua m畛t giao
di畛n c坦 ki畛m so叩t
Module h坦a
Chia nh畛 畛i t動畛ng/v畉n 畛 thnh nhi畛u module nh畛 畛 d畛
can thi畛p v gi畉i quy畉t
Ph但n c畉p
Ph但n h畉ng ho畉c s畉p x畉p tr畉t t畛 畛i t動畛ng theo c叩c quan
h畛 tr棚n d動畛i
14
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Nguy棚n t畉c t畛i cao
Keep it simple:
as simple as possible,
but no simpler!
(Albert Einstein)
15
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
C叩c bi to叩n l畉p tr狸nh cho k畛 s動 i畛n
L畉p tr狸nh ph畉n m畛m i畛u khi畛n (袖C, PC, PLC, DCS)
L畉p tr狸nh ph畉n m畛m thu th畉p/qu畉n l箪 d畛 li畛u qu叩
tr狸nh
L畉p tr狸nh ph畉n m畛m giao di畛n ng動畛i-m叩y (畛 h畛a)
L畉p tr狸nh ph畉n m畛m t鱈ch h畛p h畛 th畛ng (COM,
OPC,...)
L畉p tr狸nh ph畉n m畛m t鱈nh to叩n, thi畉t k畉
L畉p tr狸nh ph畉n m畛m m担 ph畛ng
L畉p tr狸nh ph畉n m畛m t畛i 動u h坦a
...
16
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
1.3 Ph動董ng ph叩p lu畉n
Ph動董ng ph叩p: C叩ch th畛c ti畉n hnh m畛t c担ng vi畛c 畛 c坦 hi畛u
qu畉 cao
Ph動董ng ph叩p lu畉n: M畛t t畉p h畛p c叩c ph動董ng ph叩p 動畛c s畛
d畛ng ho畉c b畛 m担n khoa h畛c nghi棚n c畛u c叩c ph動董ng ph叩p 坦
Ph動董ng ph叩p lu畉n ph畛c v畛:
 Ph但n t鱈ch h畛 th畛ng
 Thi畉t k畉 h畛 th畛ng
 Th畛c hi畛n
 Th畛 nghi畛m
 ...
17
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh tu畉n t畛 (Sequential Programming)
Ph動董ng ph叩p c畛 i畛n nh畉t, b畉ng c叩ch li畛t k棚 c叩c l畛nh
k畉 ti畉p, m畛c tr畛u t動畛ng th畉p
Ki畛m so叩t d嘆ng m畉ch th畛c hi畛n ch動董ng tr狸nh b畉ng
c叩c l畛nh r畉 nh叩nh, l畛nh nh畉y, l畛nh g畛i ch動董ng tr狸nh
con (subroutines)
V鱈 d畛 ng担n ng畛 畉c th湛:
 Ng担n ng畛 m叩y,
 ASSEMBLY
 BASIC
 IL (Instruction List), STL (Statement List)
 LD, LAD (Ladder Diagram)
18
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh tu畉n t畛: V鱈 d畛 t鱈nh giai th畛a
1: MOV AX, n
2: DEC n
3: CMP n, 1
4: JMPI
5: MUL AX, n
6: JMP 2
7: MOV n, AX
8: RET
19
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh tu畉n t畛: 働u i畛m v nh動畛c i畛m
働u i畛m:
 T動 duy 董n gi畉n
 L畉p tr狸nh 畛 m畛c tr畛u t動畛ng th畉p, n棚n d畛 ki畛m so叩t s畛 d畛ng
ti nguy棚n
 C坦 th畛 c坦 hi畛u su畉t cao
 C坦 th畛 th鱈ch h畛p v畛i bi to叩n nh畛, l畉p tr狸nh nh炭ng, l畉p tr狸nh
h畛 th畛ng
Nh動畛c i畛m:
 Ch動董ng tr狸nh kh坦 theo d探i -> d畛 m畉c l畛i
 Kh坦 s畛 d畛ng l畉i
 Hi畛u qu畉 l畉p tr狸nh th畉p
 Kh担ng th鱈ch h畛p v畛i 畛ng d畛ng qui m担 l畛n
20
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh c坦 c畉u tr炭c (structured programming)
C畉u tr炭c h坦a d畛 li畛u (x但y d畛ng ki畛u d畛 li畛u) v c畉u
tr炭c h坦a ch動董ng tr狸nh 畛 tr叩nh c叩c l畛nh nh畉y.
Ph但n t鱈ch v thi畉t k畉 theo c叩ch t畛 tr棚n xu畛ng (top-
down)
Th畛c hi畛n t畛 d動畛i l棚n (bottom-up)
Y棚u c畉u c畛a ch動董ng tr狸nh c坦 c畉u tr炭c: ch畛 s畛 d畛ng c叩c
c畉u tr炭c i畛u khi畛n tu畉n t畛, tuy畛n ch畛n ( if then
else), l畉p (while) v tho叩t ra (exit).
V鱈 d畛 c叩c ng担n ng畛 畉c th湛:
 PASCAL, ALGO, FORTRAN, C,...
 SFC (Sequential Funtion Charts)
 ST (Structured Text)
21
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh c坦 c畉u tr炭c: V鱈 d畛 t鱈nh giai th畛a (PASCAL)
FUNCTION Factorial(n: INTEGER) : INTEGER
VAR X: INTERGER;
BEGIN
X := n;
WHILE (n > 1) DO
BEGIN
DEC(n);
X := X * n;
END
Factorial := X;
END
END;
22
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh c坦 c畉u tr炭c: V鱈 d畛 qu畉n l箪 sinh vi棚n
struct Date { int Day, Month, Year; };
struct Student
{
string name;
Date dob;
int code;
};
typedef Student* Students; // c畉u tr炭c m畉ng
Students create(int max_items, int item_size );
void destroy(Students lop);
void add(Students lop, Student sv);
void delete(Students lop, Student sv);
Student find(Students lop, int code);
23
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh module (modular programming)
L畉p tr狸nh module l m畛t d畉ng c畉i ti畉n c畛a l畉p tr狸nh c坦 c畉u tr炭c.
Ch動董ng tr狸nh 動畛c c畉u tr炭c nghi棚m ng畉t h董n, d湛ng 董n v畛 c畉u
tr炭c l module.
Module:
 M畛t 董n v畛 c畉u tr炭c 畛c l畉p, 動畛c chu畉n h坦a d湛ng 畛 t畉o l畉p
m畛t h畛 th畛ng.
 M畛i module bao g畛m ph畉n giao di畛n (m畛) v ph畉n th畛c hi畛n
(che gi畉u)
 C叩c module giao ti畉p v畛i nhau th担ng qua c叩c giao di畛n 動畛c
畉c t畉 r畉t ch鱈nh x叩c.
V鱈 d畛 ng担n ng畛 ti棚u bi畛u:
 Modula-2, x但y d畛ng tr棚n c董 s畛 PASCAL, do Niclaus Wirth
thi畉t k畉 nm 1977.
24
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh h動畛ng 畛i t動畛ng (Object-Oriented Programming)
X但y d畛ng ch動董ng tr狸nh 畛ng d畛ng theo quan i畛m d畛a tr棚n c叩c
c畉u tr炭c d畛 li畛u tr畛u t動畛ng (l畛p), c叩c th畛 nghi畛m c畛a c叩c c畉u tr炭c
坦 (畛i t動畛ng) v quan h畛 gi畛a ch炭ng (quan h畛 l畛p, quan h畛 畛i
t動畛ng).
Nguy棚n l箪 c董 b畉n:
 Tr畛u t動畛ng (abstraction)
 坦ng g坦i d畛 li畛u (data encapsulation)
 D畉n xu畉t/th畛a k畉 (subtyping/inheritance)
 a h狸nh/a x畉 (polymorphism)
V鱈 d畛 ng担n ng畛 h畛 tr畛 ti棚u bi畛u:
 C++, C#
 Java,
 ADA,
 ...
25
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
V鱈 d畛 minh h畛a: Qu畉n l箪 sinh vi棚n (C++)
class Date {
int Day, Month, Year;
public:
void setDate(int, int, int);
...
};
class Student {
string name;
Date dob;
int code;
public:
Student(string n, Date d, int c);
...
};
class StudentList {
Student* list;
public:
void addStudent(Student*);
...
};
26
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
V鱈 d畛 minh h畛a: T鱈nh to叩n ki畛u MATLAB
Vector a(10, 1.0), b(10, 0.5);
Vector c = a + b;
...
Vector d = a - b + 2*c;
Matrix A(4,4), B(4,2), C(2,4), D(2,2);
Vector x(4),u(2),y(2);
...
while (true) {
// 畛c 畉u vo u
y = C*x + D*u;
x = A*x + B*u;
// 動a 畉u ra y
}
...
CTFMatrix G = ss2tf(A,B,C,D);
...
27
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh t畛ng qu叩t (generic programming)
M畛t t動 duy l畉p tr狸nh m畛, tr棚n quan i畛m t畛ng qu叩t
h坦a t畉t c畉 nh畛ng g狸 c坦 th畛 nh畉m 動a ra m畛t khu担n
m畉u gi畉i ph叩p cho nhi畛u bi to叩n l畉p tr狸nh c畛 th畛.
働u i畛m:
 Gi畉m t畛i a l動畛ng m達 ngu畛n
 Tng nhi畛u l畉n gi叩 tr畛 s畛 d畛ng l畉i c畛a ph畉n m畛m
 C坦 th畛 k畉t h畛p t湛y 箪 v畛i c叩c ph動董ng ph叩p lu畉n kh叩c
 T鱈nh kh畉 chuy畛n cao
C叩c h狸nh th畛c t畛ng qu叩t h坦a:
 Ki畛u d畛 li畛u
 Ph辿p to叩n c董 b畉n
 C畉u tr炭c d畛 li畛u
 Qu畉n l箪 b畛 nh畛,...
28
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
V鱈 d畛 minh h畛a: C叩c c畉u tr炭c to叩n h畛c
typedef TMatrix<double> Matrix;
typedef TMatrix<complex<double> > ComplexMatrix;
Matrix a(4,4), b(4,4);
Matrix c = a*b;
ComplexMatrix a1(4,4), b1(4,4);
ComplexMatrix c1 = a1*b1;
typedef TPoly<double> Poly;
typedef TMatrix<Poly> PolyMatrix;
typedef TPoly<ComplexMatrix> ComplexMatrixPoly;
TRational<int> IntRational;
TRational<Poly> PolyRational;
...
29
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh thnh ph畉n (component-based programming)
Ph動董ng ph叩p x但y d畛ng ph畉n m畛m d畛a tr棚n c叩c
thnh ph畉n "IC" c坦 s畉n, ho畉c t畉o ra c叩c IC 坦.
Ti畉n h坦a t畛 l畉p tr狸nh h動畛ng 畛i t動畛ng
H畉u h畉t c叩c 畛ng d畛ng Windows v 畛ng d畛ng Internet
ngy nay 動畛c x但y d畛ng theo ph動董ng ph叩p lu畉n ny
C叩c ng担n ng畛 ti棚u bi畛u
 C/C++, C#
 Delphi, Visual Basic
 Script, HMTL, XML,...
 FBD
30
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh th畛i gian th畛c (real-time programming)
X但y d畛ng ph畉n m畛m 叩p 畛ng t鱈nh nng th畛i gian
th畛c c畛a h畛 th畛ng, v鱈 d畛 c叩c h畛 th畛ng i畛u khi畛n
畉c th湛:
 L畉p tr狸nh c畉nh tranh (a nhi畛m, a lu畛ng)
 C董 ch畉 x畛 l箪 s畛 ki畛n
 C董 ch畉 畛nh th畛i
 畛ng b畛 h坦a qu叩 tr狸nh
 Hi畛u su畉t cao
Ng担n ng畛 l畉p tr狸nh: ASM, C/C++, ADA,...
C畉n s畛 h畛 tr畛 c畛a n畛n ci 畉t
 H畛 i畛u hnh
 N畛n ph畉n c畛ng
 M畉ng truy畛n th担ng
31
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
1.4 Qui tr狸nh ph叩t tri畛n ph畉n m畛m
M HNH
PHN TCH
Ph但n t鱈ch
M HNH
THI畉T K畉
Thi畉t k畉
M達 h坦a
Th畛 nghi畛m
TH畉 GI畛I
THI畉T K畉
TH畉 GI畛I
TH畛C
BI TON GI畉I PHP?
32
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
T畉p h畛p v ph但n t鱈ch y棚u c畉u
B畛i v狸: Kh叩ch hng th動畛ng bi畉t 動畛c l h畛 mu畛n g狸,
nh動ng kh担ng bi畉t l畉p ho畉ch c叩c y棚u c畉u
Cho n棚n: C畉n ph畉i c湛ng v畛i kh叩ch hng ph但n ho畉ch
v lm r探 nh畛ng y棚u c畉u v畛 ph畉m vi ch畛c nng c畛a
bi to叩n
K畉t qu畉: M担 h狸nh 畉c t畉 (Specification Model) 畉n 畛nh
v ch畛 r探 y棚u c畉u c畛a bi to叩n m畛t c叩ch t動畛ng minh
theo m畛t ng担n ng畛 m担 h狸nh h坦a r探 rng, d畛 hi畛u 畛
nh坦m ph但n t鱈ch thi畉t k畉 l畉p tr狸nh th畛c hi畛n
Tr畉 l畛i c但u h畛i: Kh叩ch hng c畉n nh畛ng g狸 v n棚n
lm g狸?
33
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Ph但n t鱈ch h畛 th畛ng (System analysis)
Ph但n t鱈ch m畛i li棚n h畛 c畛a h畛 th畛ng v畛i m担i tr動畛ng
xung quanh
T狸m ra c畉u tr炭c h畛 th畛ng v c叩c thnh ph畉n quan
tr畛ng
畛nh ngh挑a ch畛c nng c畛 th畛 c畛a c叩c thnh ph畉n
Nh畉n bi畉t c叩c 畉c i畛m c畛a t畛ng thnh ph畉n
Ph但n lo畉i c叩c thnh ph畉n, t畛ng qu叩t h坦a, 畉c bi畛t h坦a
Nh畉n bi畉t m畛i li棚n h畛 gi畛a c叩c thnh ph畉n
K畉t qu畉: M担 h狸nh h畛 th畛ng (System model)
C畉n m畛t ng担n ng畛 m担 h狸nh h坦a 畛 trao 畛i gi畛a c叩c
thnh vi棚n trong nh坦m ph但n t鱈ch v v畛i nh坦m thi畉t k畉
Tr畉 l畛i c但u h畛i: Nh畛ng g狸 s畉 ph畉i lm?
34
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Thi畉t k畉 h畛 th畛ng (System Design)
D畛a tr棚n m担 h狸nh h畛 th畛ng, x但y d畛ng c叩c m担 h狸nh chi
ti畉t ph畛c v畛 s畉n sng m達 h坦a/ci 畉t
Bao g畛m:
 Thi畉t k畉 c畉u tr炭c (structured design): ch動董ng tr狸nh, ki畛u d畛
li畛u, 畛i t動畛ng, quan h畛 c畉u tr炭c gi畛a c叩c 畛i t動畛ng v ki畛u)
 Thi畉t k畉 t動董ng t叩c (interaction design): quan h畛 t動董ng t叩c
gi畛a c叩c 畛i t動畛ng
 Thi畉t k畉 hnh vi (behaviour design): s畛 ki畛n, tr畉ng th叩i, ph辿p
to叩n, ph畉n 畛ng
 Thi畉t k畉 ch畛c nng (funtional design): ti畉n tr狸nh hnh 畛ng,
hm, th畛 t畛c)
K畉t qu畉: M担 h狸nh thi畉t k畉 (c叩c b畉n v畉 v l畛i vn m担 t畉)
Tr畉 l畛i c但u h畛i: Lm nh動 th畉 no?
35
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
C叩c b動畛c kh叩c
M達 h坦a/ci 畉t (Coding/Implementation): Th畛 hi畛n m担
h狸nh thi畉t k畉 v畛i m畛t ng担n ng畛 l畉p tr狸nh c畛 th畛
Th畛 nghi畛m (Testing, Verification): Ch畉y th畛, ph但n t鱈ch
v ki畛m ch畛ng:
 Th畛 董n v畛 (Unit Test)
 Th畛 t鱈ch h畛p (Integration Test)
G畛 r畛i (Debugging): T狸m ra v s畛a c叩c l畛i ch動董ng tr狸nh
ch畉y (c叩c l畛i logic)
X但y d畛ng ti li畛u (Documenting): X但y d畛ng ti li畛u ph叩t
tri畛n, ti li畛u h動畛ng d畉n s畛 d畛ng
o t畉o, chuy畛n giao
B畉o tr狸, b畉o d動畛ng
36
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Chu tr狸nh c畛 i畛n: Waterfall Model
Nghi棚n c畛u
kh畉 thi
Nghi棚n c畛u
kh畉 thi
Ph但n t鱈ch
y棚u c畉u
Ph但n t鱈ch
y棚u c畉u
Thi畉t k畉Thi畉t k畉
M達 h坦aM達 h坦a
Th畛 nghi畛m
董n v畛
Th畛 nghi畛m
董n v畛
Th畛 nghi畛m
t鱈ch h畛p
Th畛 nghi畛m
t鱈ch h畛p
o t畉oo t畉o
Chuy畛n giaoChuy畛n giao
B畉o tr狸B畉o tr狸
37
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Xu th畉 hi畛n nay: Song song v l畉p
38
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L畉p tr狸nh l g狸, n畉m 畛 但u?
L畉p tr狸nh > M達 h坦a
L畉p tr狸nh  T動 t動畛ng thi畉t k畉 + M達 h坦a + Th畛
nghi畛m + G畛 r畛i
39
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
C叩c b動畛c ph叩t tri畛n ch動董ng tr狸nh
Bi棚n d畛ch
M達 ngu畛n
Li棚n k畉t
M達 鱈ch
N畉p v ch畉y
CT ch畉y 動畛c
Th動 vi畛n
40
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
M担i tr動畛ng/c担ng c畛 ph叩t tri畛n
IDE (Integrated Development Environment)
 H畛 tr畛 ton b畛 c叩c b動畛c ph叩t tri畛n ch動董ng tr狸nh
 V鱈 d畛: MS Visual C++, Borland C++ (Builder), Keil-C
C叩c c担ng c畛 ti棚u bi畛u
 Tr狸nh so畉n th畉o (Editor)
 Tr狸nh bi棚n d畛ch (Compiler)
 Tr狸nh li棚n k畉t (Linker)
 Tr狸nh n畉p (Loader)
 Tr狸nh g畛 r畛i (Debugger)
 Tr狸nh qu畉n l箪 d畛 叩n (Project Manager)
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
M担i tr動畛ng ph叩t tri畛n
42
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
1.5 S董 l動畛c v畛 C/C++
L動畛c s畛 ng担n ng畛 C
Ti畉n h坦a t畛 hai ng担n ng畛 l畉p tr狸nh
 BCPL v B: C叩c ng担n ng畛 phi ki畛u
Dennis Ritchie (Bell Laboratories, AT&T)
 B畛 sung ki畛u h坦a d畛 li畛u v c叩c y畉u t畛 kh叩c
Ng担n ng畛 ph叩t tri畛n h畛 i畛u hnh UNIX
Kh担ng ph畛 thu畛c ph畉n c畛ng
 T鱈nh kh畉 chuy畛n
1989: ANSI chu畉n h坦a (ANSI-C)
1990: C担ng b畛 chu畉n ANSI v ISO
 ANSI/ISO 9899: 1990
43
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
L動畛c s畛 ng担n ng畛 C++
M畛 r畛ng, ti畉n h坦a t畛 C
Bjarne Stroustrup (Bell Laboratories)
 畉u nh畛ng nm 1980: C with classes
 1984: T棚n C++
 1987: The C++ Programming Language 1st Edition
 1997: The C++ Programming Language 3rd Edition
 Chu畉n h坦a qu畛c t畉: ANSI/ISO 1996
B畛 sung c叩c 畉c t鱈nh h畛 tr畛:
 L畉p tr狸nh h動畛ng 畛i t動畛ng
 L畉p tr狸nh t畛ng qu叩t
 L畉p tr狸nh to叩n h畛c,...
Ng担n ng畛 lai
44
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
T畉i sao ch畛n C/C++
叩p 畛ng c叩c y棚u c畉u:
 G畉n g滴i v畛i ph畉n c畛ng
 Hi畛u su畉t cao
 T動董ng 畛i th但n thi畛n v畛i ng動畛i l畉p tr狸nh
 Kh畉 chuy畛n
 Chu畉n h坦a qu畛c t畉 (t動董ng lai v畛ng ch畉c)
Th畉 m畉nh tuy畛t 畛i c畛a ANSI-C:
 Ph畛 bi畉n cho h畉u h畉t c叩c n畛n vi x畛 l箪, vi i畛u khi畛n, DSP
 Ph畛 bi畉n cho m畛i ng動畛i l畉p tr狸nh tr棚n th畉 gi畛i
Th畉 m畉nh tuy畛t 畛i c畛a ANSI/ISO C++:
 L畉p tr狸nh h動畛ng 畛i t動畛ng
 L畉p tr狸nh t畛ng qu叩t (template)
 L畉p tr狸nh to叩n h畛c (d畛 li畛u tr畛u t動畛ng v n畉p ch畛ng to叩n t畛)
45
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Visual C++, .NET & C#
Visual C++:
 M担i tr動畛ng/c担ng c畛 l畉p tr狸nh C++ c畛a Microsoft
 M畛 r畛ng m畛t s畛 y畉u t畛
 Th動 vi畛n l畉p tr狸nh Windows: Microsoft Foundation Classes
(MFC), Active Template Library (ATL)
 C叩c th動 vi畛n chung: GUI, graphics, networking,
multithreading, 
.NET (dot net)
 Ki畉n tr炭c n畛n t畉ng ph畉n m畛m l畉p tr狸nh ph但n t叩n
 H動畛ng t畛i c叩c 畛ng d畛ng Web, ph但n t叩n tr棚n nhi畛u ch畛ng
lo畉i thi畉t b畛 kh叩c nhau
 C叩c 畛ng d畛ng tr棚n nhi畛u ng担n ng畛 kh叩c nhau c坦 th畛 giao
ti畉p m畛t c叩ch 董n gi畉n tr棚n m畛t n畛n chung
 Ph動董ng ph叩p lu畉n: L畉p tr狸nh thnh ph畉n
46
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Visual C++, .NET & C#
C#
 Anders Hejlsberg v Scott Wiltamuth (Microsoft)
 Thi畉t k畉 ri棚ng cho n畛n .NET
 Ngu畛n g畛c t畛 C, C++ v Java
 i畛u khi畛n theo s畛 ki畛n, hon ton h動畛ng 畛i t動畛ng, ng担n
ng畛 l畉p tr狸nh hi畛n th畛
 Integrated Development Environment (IDE)
 T動董ng t叩c gi畛a c叩c ng担n ng畛
47
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Ch炭ng ta 達 h畛c 動畛c nh畛ng g狸?
Bi畉t 動畛c nh畛ng g狸 s畉 ph畉i h畛c, h畛c 畛 lm g狸 v
ph畉i h畛c nh動 th畉 no
Hng lo畉t kh叩i ni畛m m畛i xung quanh k畛 thu畉t l畉p
tr狸nh v qui tr狸nh c担ng ngh畛 ph畉n m畛m
T畛ng quan v畛 c叩c k畛 thu畉t l畉p tr狸nh
L動畛c s畛 ng担n ng畛 C/C++, th畉 m畉nh c畛a ch炭ng so
v畛i c叩c ng担n ng畛 kh叩c
48
息2004,HONGMINHSN
Ch動董ng 1: M畛 畉u
Ch畛 畛 ti畉p theo: C/C++ c董 s畛
T畛 ch畛c ch動董ng tr狸nh/b畛 nh畛
D畛 li畛u v bi畉n
To叩n t畛, bi畛u th畛c v c但u l畛nh
i畛u khi畛n ch動董ng tr狸nh: v嘆ng l畉p, r畉 nh叩nh
M畉ng v con tr畛
C畉u tr炭c

More Related Content

C1 introduction

  • 1. 息2004,HONGMINHSN Ch動董ng1 K畛 thu畉t l畉p tr狸nh 010101010101010110000101010101010101011000010101010101010101100001 010101010010101010010101010101001010101001010101010100101010100101 101001100011001001001010100110001100100100101010011000110010010010 110010110010001000001011001011001000100000101100101100100010000010 010101010101010110000101010101010101011000010101010101010101100001 010101010010101010010101010101001010101001010101010100101010100101 101001100011001001001010100110001100100100101010011000110010010010 110010110010001000001011001011001000100000101100101100100010000010 010101010101010110000101010101010101011000010101010101010101100001 010101010010101010010101010101001010101001010101010100101010100101 101001100011001001001010100110001100100100101010011000110010010010 110010110010001000001011001011001000100000101100101100100010000010 8/14/2006 y = A*x + B*u; x = C*x + d*u; StateController start() stop() LQGController start() stop() Ch動董ng 1: M畛 畉u
  • 2. 2 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u N畛i dung bi gi畉ng 1.1 Gi畛i thi畛u n畛i dung m担n h畛c 1.2 Gi畛i thi畛u chung v畛 k畛 thu畉t l畉p tr狸nh 1.3 Ph動董ng ph叩p lu畉n 1.4 Qui tr狸nh ph叩t tri畛n ph畉n m畛m 1.5 S董 l動畛c v畛 ng担n ng畛 C/C++
  • 3. 3 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u 1.1 N畛i dung m担n h畛c C叩c k畛 thu畉t l畉p tr狸nh c董 b畉n, th畛c hi畛n minh ho畉 tr棚n c叩c ng担n ng畛 l畉p tr狸nh C v C++: L畉p tr狸nh c坦 c畉u tr炭c (structured programming) L畉p tr狸nh h動畛ng 畛i t動畛ng (object-oriented programming) L畉p tr狸nh th畛i gian th畛c (real-time programming) L畉p tr狸nh t畛ng qu叩t (generic programming) T畉i sao ch畛n C/C++: Hai ng担n ng畛 l畉p tr狸nh ti棚u bi畛u nh畉t, 畛 畛 th畛c hi畛n c叩c k畛 thu畉t l畉p tr狸nh quan tr畛ng Hai ng担n ng畛 l畉p tr狸nh quan tr畛ng nh畉t 畛i v畛i k畛 s動 i畛n/k畛 s動 i畛u khi畛n
  • 4. 4 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Quan i畛m v畛 m担n h畛c 畛 cao ki畉n th畛c c董 b畉n, n畛n t畉ng: Thi棚n v畛 t動 duy v ph動董ng ph叩p l畉p tr狸nh T畉o kh畉 nng d畛 th鱈ch 畛ng v畛i c叩c 畛ng d畛ng kh叩c nhau T畉o kh畉 nng d畛 th鱈ch 畛ng v畛i c叩c ng担n ng畛 l畉p tr狸nh kh叩c (Java, Visual Basic, C#, MATLAB) Nh畉n m畉nh t鱈nh chuy棚n nghi畛p trong l畉p tr狸nh: hi畛u qu畉 + ch畉t l動畛ng Nh畛ng n畛i dung kh担ng c坦 trong ch動董ng tr狸nh: L畉p tr狸nh h畛 th畛ng (low-level system programming) L畉p tr狸nh 畛 h畛a L畉p tr狸nh giao ti畉p v畛i c叩c thi畉t b畛 ngo畉i vi ( c畛ng n畛i ti畉p, song song) L畉p tr狸nh c董 s畛 d畛 li畛u L畉p tr狸nh thnh ph畉n, l畉p tr狸nh ph但n t叩n (m畉ng, Internet)
  • 5. 5 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Ph動董ng ph叩p h畛c t畉p C叩ch th畛 nh畉t: Nghe gi畉ng lm th畛 畛c ti li畛u th畉o lu畉n luy畛n t畉p C叩ch th畛 hai: 畛c ti li畛u lm th畛 nghe gi畉ng th畉o lu畉n luy畛n t畉p Nguy棚n t畉c c董 b畉n: Ch畛 畛ng h畛c th動畛ng xuy棚n! Nh畛ng i畛u kh担ng n棚n lm: Ch辿p nhi畛u tr棚n l畛p H畛c thu畛c l嘆ng, h畛c chay Mong 畛i nhi畛u vo 担n t畉p D畛a d畉m vo c叩c bi t畉p m畉u trong s叩ch
  • 6. 6 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u C担ng c畛 h畛c t畉p M叩y t鱈nh PC M担i tr動畛ng l畉p tr狸nh: Visual C++ 6.0 (Visual Studio 6.0), Visual C++ .NET, Borland C++ Builder N畛n 畛ng d畛ng: Win32 Console Application Ti li畛u tham kh畉o.
  • 7. 7 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u 1.2 T畛ng quan v畛 k畛 thu畉t l畉p tr狸nh K畛 thu畉t l畉p tr狸nh l g狸: K畛 thu畉t th畛c thi m畛t gi畉i ph叩p ph畉n m畛m (c畉u tr炭c d畛 li畛u + gi畉i thu畉t) d畛a tr棚n n畛n t畉ng m畛t ph動董ng ph叩p lu畉n (methodology) v m畛t ho畉c nhi畛u ng担n ng畛 l畉p tr狸nh ph湛 h畛p v畛i y棚u c畉u 畉c th湛 c畛a 畛ng d畛ng. K畛 thu畉t l畉p tr狸nh = T動 t動畛ng thi畉t k畉 + K畛 thu畉t m達 h坦a = C畉u tr炭c d畛 li畛u + Gi畉i thu畉t + Ng担n ng畛 l畉p tr狸nh K畛 thu畉t l畉p tr狸nh Ph動董ng ph叩p ph但n t鱈ch & thi畉t k畉 (A&D)
  • 8. 8 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Th畉 no l l畉p tr狸nh? Vi畉t ch動董ng tr狸nh in ra 100 s畛 nguy棚n t畛 畉u ti棚n! Vi畉t ch動董ng tr狸nh t鱈nh giai th畛a c畛a 100! L畉p tr狸nh gi畉i bi to叩n: "V畛a g v畛a ch坦, ba m動董i s叩u con, b坦 l畉i cho tr嘆n, m畛t trm ch但n ch畉n" KHNG PH畉I L L畉P TRNH! Vi畉t m畛t hm t鱈nh giai th畛a! Vi畉t ch動董ng tr狸nh in ra N s畛 nguy棚n t畛 畉u ti棚n! L畉p tr狸nh gi畉i bi to叩n: "V畛a g v畛a ch坦, v畛a v畉n X con, b坦 l畉i cho tr嘆n, 畛 Y ch但n ch畉n" Y L L畉P TRNH!
  • 9. 9 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Th畉 no l l畉p tr狸nh t畛t? 炭ng/Ch鱈nh x叩c Tho畉 m達n 炭ng c叩c nhi畛m v畛 bi to叩n l畉p tr狸nh 畉t ra, 動畛c kh叩ch hng ch畉p nh畉n 畛n 畛nh v b畛n v畛ng Ch動董ng tr狸nh ch畉y 畛n 畛nh trong c畉 nh畛ng tr動畛ng h畛p kh畉c nghi畛t Ch畉y 鱈t l畛i (s畛 l動畛ng l畛i 鱈t, c動畛ng 畛 l畛i th畉p) M畛c 畛 l畛i nh畉 c坦 th畛 ch畉p nh畉n 動畛c Kh畉 nng ch畛nh s畛a D畛 dng ch畛nh s畛a trong qu叩 tr狸nh s畛 d畛ng v ph叩t tri畛n D畛 dng thay 畛i ho畉c n但ng c畉p 畛 th鱈ch 畛ng v畛i i畛u ki畛n bi to叩n l畉p tr狸nh thay 畛i Kh畉 nng t叩i s畛 d畛ng C坦 th畛 動畛c s畛 d畛ng ho畉c 動畛c k畉 th畛a cho c叩c bi to叩n l畉p tr狸nh kh叩c
  • 10. 10 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Th畉 no l l畉p tr狸nh t畛t? 畛 t動董ng th鱈ch Kh畉 nng th鱈ch 畛ng v ch畉y t畛t trong c叩c i畛u ki畛n m担i tr動畛ng kh叩c nhau Hi畛u su畉t Ch動董ng tr狸nh nh畛 g畛n, s畛 d畛ng 鱈t b畛 nh畛 T畛c 畛 nhanh, s畛 d畛ng 鱈t th畛i gian CPU Hi畛u qu畉: Th畛i gian l畉p tr狸nh ng畉n, Kh畉 nng b畉o tr狸 d畛 dng Gi叩 tr畛 s畛 d畛ng l畉i l畛n S畛 d畛ng 董n gi畉n, th但n thi畛n Nhi畛u ch畛c nng ti畛n 鱈ch
  • 11. 11 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u V鱈 d畛 minh h畛a: T鱈nh giai th畛a Vi畉t ch動董ng tr狸nh hay x但y d畛ng hm? Hm t鱈nh giai th畛a c畛a m畛t s畛 nguy棚n int factorial(int N); Gi畉i thu畉t: Ph動董ng ph叩p 畛 quy (recursive) Ph動董ng ph叩p l畉p (iterative) if (N > 1) return N*factorial(N-1); return 1; int kq = 1; while (N > 1) kq *= N--; return kq; 財to iterate is human, to recurse is device!
  • 12. 12 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Lm th畉 no 畛 l畉p tr狸nh t畛t? H畛c c叩ch t動 duy v ph動董ng ph叩p l畉p tr狸nh T動 duy to叩n h畛c, t動 duy logic, t動 duy c坦 c畉u tr炭c, t動 duy h動畛ng 畛i t動畛ng, t動 duy t畛ng qu叩t T狸m hi畛u v畛 c畉u tr炭c d畛 li畛u v gi畉i thu畉t Hi畛u s但u v畛 m叩y t鱈nh T動董ng t叩c gi畛a CPU, ch動董ng tr狸nh v b畛 nh畛 C董 ch畉 qu畉n l箪 b畛 nh畛 N畉m v畛ng ng担n ng畛 l畉p tr狸nh Bi畉t r探 c叩c kh畉 nng v h畉n ch畉 c畛a ng担n ng畛 K畛 nng l畉p tr狸nh (畛c th担ng, vi畉t th畉o) T畛 r竪n luy畛n tr棚n m叩y t鱈nh Hi畛u s但u 動畛c c叩c i畛m n棚u tr棚n R竪n luy畛n k畛 nng l畉p tr狸nh Th炭c 畉y s叩ng t畉o
  • 13. 13 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u C叩c nguy棚n t畉c c董 b畉n Tr畛u t動畛ng h坦a Ch畉t l畛c ra nh畛ng y畉u t畛 quan tr畛ng, b畛 qua nh畛ng chi ti畉t k辿m quan tr畛ng 坦ng g坦i Che gi畉u v b畉o v畛 c叩c d畛 li畛u quan tr畛ng qua m畛t giao di畛n c坦 ki畛m so叩t Module h坦a Chia nh畛 畛i t動畛ng/v畉n 畛 thnh nhi畛u module nh畛 畛 d畛 can thi畛p v gi畉i quy畉t Ph但n c畉p Ph但n h畉ng ho畉c s畉p x畉p tr畉t t畛 畛i t動畛ng theo c叩c quan h畛 tr棚n d動畛i
  • 14. 14 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Nguy棚n t畉c t畛i cao Keep it simple: as simple as possible, but no simpler! (Albert Einstein)
  • 15. 15 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u C叩c bi to叩n l畉p tr狸nh cho k畛 s動 i畛n L畉p tr狸nh ph畉n m畛m i畛u khi畛n (袖C, PC, PLC, DCS) L畉p tr狸nh ph畉n m畛m thu th畉p/qu畉n l箪 d畛 li畛u qu叩 tr狸nh L畉p tr狸nh ph畉n m畛m giao di畛n ng動畛i-m叩y (畛 h畛a) L畉p tr狸nh ph畉n m畛m t鱈ch h畛p h畛 th畛ng (COM, OPC,...) L畉p tr狸nh ph畉n m畛m t鱈nh to叩n, thi畉t k畉 L畉p tr狸nh ph畉n m畛m m担 ph畛ng L畉p tr狸nh ph畉n m畛m t畛i 動u h坦a ...
  • 16. 16 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u 1.3 Ph動董ng ph叩p lu畉n Ph動董ng ph叩p: C叩ch th畛c ti畉n hnh m畛t c担ng vi畛c 畛 c坦 hi畛u qu畉 cao Ph動董ng ph叩p lu畉n: M畛t t畉p h畛p c叩c ph動董ng ph叩p 動畛c s畛 d畛ng ho畉c b畛 m担n khoa h畛c nghi棚n c畛u c叩c ph動董ng ph叩p 坦 Ph動董ng ph叩p lu畉n ph畛c v畛: Ph但n t鱈ch h畛 th畛ng Thi畉t k畉 h畛 th畛ng Th畛c hi畛n Th畛 nghi畛m ...
  • 17. 17 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh tu畉n t畛 (Sequential Programming) Ph動董ng ph叩p c畛 i畛n nh畉t, b畉ng c叩ch li畛t k棚 c叩c l畛nh k畉 ti畉p, m畛c tr畛u t動畛ng th畉p Ki畛m so叩t d嘆ng m畉ch th畛c hi畛n ch動董ng tr狸nh b畉ng c叩c l畛nh r畉 nh叩nh, l畛nh nh畉y, l畛nh g畛i ch動董ng tr狸nh con (subroutines) V鱈 d畛 ng担n ng畛 畉c th湛: Ng担n ng畛 m叩y, ASSEMBLY BASIC IL (Instruction List), STL (Statement List) LD, LAD (Ladder Diagram)
  • 18. 18 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh tu畉n t畛: V鱈 d畛 t鱈nh giai th畛a 1: MOV AX, n 2: DEC n 3: CMP n, 1 4: JMPI 5: MUL AX, n 6: JMP 2 7: MOV n, AX 8: RET
  • 19. 19 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh tu畉n t畛: 働u i畛m v nh動畛c i畛m 働u i畛m: T動 duy 董n gi畉n L畉p tr狸nh 畛 m畛c tr畛u t動畛ng th畉p, n棚n d畛 ki畛m so叩t s畛 d畛ng ti nguy棚n C坦 th畛 c坦 hi畛u su畉t cao C坦 th畛 th鱈ch h畛p v畛i bi to叩n nh畛, l畉p tr狸nh nh炭ng, l畉p tr狸nh h畛 th畛ng Nh動畛c i畛m: Ch動董ng tr狸nh kh坦 theo d探i -> d畛 m畉c l畛i Kh坦 s畛 d畛ng l畉i Hi畛u qu畉 l畉p tr狸nh th畉p Kh担ng th鱈ch h畛p v畛i 畛ng d畛ng qui m担 l畛n
  • 20. 20 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh c坦 c畉u tr炭c (structured programming) C畉u tr炭c h坦a d畛 li畛u (x但y d畛ng ki畛u d畛 li畛u) v c畉u tr炭c h坦a ch動董ng tr狸nh 畛 tr叩nh c叩c l畛nh nh畉y. Ph但n t鱈ch v thi畉t k畉 theo c叩ch t畛 tr棚n xu畛ng (top- down) Th畛c hi畛n t畛 d動畛i l棚n (bottom-up) Y棚u c畉u c畛a ch動董ng tr狸nh c坦 c畉u tr炭c: ch畛 s畛 d畛ng c叩c c畉u tr炭c i畛u khi畛n tu畉n t畛, tuy畛n ch畛n ( if then else), l畉p (while) v tho叩t ra (exit). V鱈 d畛 c叩c ng担n ng畛 畉c th湛: PASCAL, ALGO, FORTRAN, C,... SFC (Sequential Funtion Charts) ST (Structured Text)
  • 21. 21 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh c坦 c畉u tr炭c: V鱈 d畛 t鱈nh giai th畛a (PASCAL) FUNCTION Factorial(n: INTEGER) : INTEGER VAR X: INTERGER; BEGIN X := n; WHILE (n > 1) DO BEGIN DEC(n); X := X * n; END Factorial := X; END END;
  • 22. 22 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh c坦 c畉u tr炭c: V鱈 d畛 qu畉n l箪 sinh vi棚n struct Date { int Day, Month, Year; }; struct Student { string name; Date dob; int code; }; typedef Student* Students; // c畉u tr炭c m畉ng Students create(int max_items, int item_size ); void destroy(Students lop); void add(Students lop, Student sv); void delete(Students lop, Student sv); Student find(Students lop, int code);
  • 23. 23 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh module (modular programming) L畉p tr狸nh module l m畛t d畉ng c畉i ti畉n c畛a l畉p tr狸nh c坦 c畉u tr炭c. Ch動董ng tr狸nh 動畛c c畉u tr炭c nghi棚m ng畉t h董n, d湛ng 董n v畛 c畉u tr炭c l module. Module: M畛t 董n v畛 c畉u tr炭c 畛c l畉p, 動畛c chu畉n h坦a d湛ng 畛 t畉o l畉p m畛t h畛 th畛ng. M畛i module bao g畛m ph畉n giao di畛n (m畛) v ph畉n th畛c hi畛n (che gi畉u) C叩c module giao ti畉p v畛i nhau th担ng qua c叩c giao di畛n 動畛c 畉c t畉 r畉t ch鱈nh x叩c. V鱈 d畛 ng担n ng畛 ti棚u bi畛u: Modula-2, x但y d畛ng tr棚n c董 s畛 PASCAL, do Niclaus Wirth thi畉t k畉 nm 1977.
  • 24. 24 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh h動畛ng 畛i t動畛ng (Object-Oriented Programming) X但y d畛ng ch動董ng tr狸nh 畛ng d畛ng theo quan i畛m d畛a tr棚n c叩c c畉u tr炭c d畛 li畛u tr畛u t動畛ng (l畛p), c叩c th畛 nghi畛m c畛a c叩c c畉u tr炭c 坦 (畛i t動畛ng) v quan h畛 gi畛a ch炭ng (quan h畛 l畛p, quan h畛 畛i t動畛ng). Nguy棚n l箪 c董 b畉n: Tr畛u t動畛ng (abstraction) 坦ng g坦i d畛 li畛u (data encapsulation) D畉n xu畉t/th畛a k畉 (subtyping/inheritance) a h狸nh/a x畉 (polymorphism) V鱈 d畛 ng担n ng畛 h畛 tr畛 ti棚u bi畛u: C++, C# Java, ADA, ...
  • 25. 25 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u V鱈 d畛 minh h畛a: Qu畉n l箪 sinh vi棚n (C++) class Date { int Day, Month, Year; public: void setDate(int, int, int); ... }; class Student { string name; Date dob; int code; public: Student(string n, Date d, int c); ... }; class StudentList { Student* list; public: void addStudent(Student*); ... };
  • 26. 26 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u V鱈 d畛 minh h畛a: T鱈nh to叩n ki畛u MATLAB Vector a(10, 1.0), b(10, 0.5); Vector c = a + b; ... Vector d = a - b + 2*c; Matrix A(4,4), B(4,2), C(2,4), D(2,2); Vector x(4),u(2),y(2); ... while (true) { // 畛c 畉u vo u y = C*x + D*u; x = A*x + B*u; // 動a 畉u ra y } ... CTFMatrix G = ss2tf(A,B,C,D); ...
  • 27. 27 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh t畛ng qu叩t (generic programming) M畛t t動 duy l畉p tr狸nh m畛, tr棚n quan i畛m t畛ng qu叩t h坦a t畉t c畉 nh畛ng g狸 c坦 th畛 nh畉m 動a ra m畛t khu担n m畉u gi畉i ph叩p cho nhi畛u bi to叩n l畉p tr狸nh c畛 th畛. 働u i畛m: Gi畉m t畛i a l動畛ng m達 ngu畛n Tng nhi畛u l畉n gi叩 tr畛 s畛 d畛ng l畉i c畛a ph畉n m畛m C坦 th畛 k畉t h畛p t湛y 箪 v畛i c叩c ph動董ng ph叩p lu畉n kh叩c T鱈nh kh畉 chuy畛n cao C叩c h狸nh th畛c t畛ng qu叩t h坦a: Ki畛u d畛 li畛u Ph辿p to叩n c董 b畉n C畉u tr炭c d畛 li畛u Qu畉n l箪 b畛 nh畛,...
  • 28. 28 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u V鱈 d畛 minh h畛a: C叩c c畉u tr炭c to叩n h畛c typedef TMatrix<double> Matrix; typedef TMatrix<complex<double> > ComplexMatrix; Matrix a(4,4), b(4,4); Matrix c = a*b; ComplexMatrix a1(4,4), b1(4,4); ComplexMatrix c1 = a1*b1; typedef TPoly<double> Poly; typedef TMatrix<Poly> PolyMatrix; typedef TPoly<ComplexMatrix> ComplexMatrixPoly; TRational<int> IntRational; TRational<Poly> PolyRational; ...
  • 29. 29 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh thnh ph畉n (component-based programming) Ph動董ng ph叩p x但y d畛ng ph畉n m畛m d畛a tr棚n c叩c thnh ph畉n "IC" c坦 s畉n, ho畉c t畉o ra c叩c IC 坦. Ti畉n h坦a t畛 l畉p tr狸nh h動畛ng 畛i t動畛ng H畉u h畉t c叩c 畛ng d畛ng Windows v 畛ng d畛ng Internet ngy nay 動畛c x但y d畛ng theo ph動董ng ph叩p lu畉n ny C叩c ng担n ng畛 ti棚u bi畛u C/C++, C# Delphi, Visual Basic Script, HMTL, XML,... FBD
  • 30. 30 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh th畛i gian th畛c (real-time programming) X但y d畛ng ph畉n m畛m 叩p 畛ng t鱈nh nng th畛i gian th畛c c畛a h畛 th畛ng, v鱈 d畛 c叩c h畛 th畛ng i畛u khi畛n 畉c th湛: L畉p tr狸nh c畉nh tranh (a nhi畛m, a lu畛ng) C董 ch畉 x畛 l箪 s畛 ki畛n C董 ch畉 畛nh th畛i 畛ng b畛 h坦a qu叩 tr狸nh Hi畛u su畉t cao Ng担n ng畛 l畉p tr狸nh: ASM, C/C++, ADA,... C畉n s畛 h畛 tr畛 c畛a n畛n ci 畉t H畛 i畛u hnh N畛n ph畉n c畛ng M畉ng truy畛n th担ng
  • 31. 31 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u 1.4 Qui tr狸nh ph叩t tri畛n ph畉n m畛m M HNH PHN TCH Ph但n t鱈ch M HNH THI畉T K畉 Thi畉t k畉 M達 h坦a Th畛 nghi畛m TH畉 GI畛I THI畉T K畉 TH畉 GI畛I TH畛C BI TON GI畉I PHP?
  • 32. 32 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u T畉p h畛p v ph但n t鱈ch y棚u c畉u B畛i v狸: Kh叩ch hng th動畛ng bi畉t 動畛c l h畛 mu畛n g狸, nh動ng kh担ng bi畉t l畉p ho畉ch c叩c y棚u c畉u Cho n棚n: C畉n ph畉i c湛ng v畛i kh叩ch hng ph但n ho畉ch v lm r探 nh畛ng y棚u c畉u v畛 ph畉m vi ch畛c nng c畛a bi to叩n K畉t qu畉: M担 h狸nh 畉c t畉 (Specification Model) 畉n 畛nh v ch畛 r探 y棚u c畉u c畛a bi to叩n m畛t c叩ch t動畛ng minh theo m畛t ng担n ng畛 m担 h狸nh h坦a r探 rng, d畛 hi畛u 畛 nh坦m ph但n t鱈ch thi畉t k畉 l畉p tr狸nh th畛c hi畛n Tr畉 l畛i c但u h畛i: Kh叩ch hng c畉n nh畛ng g狸 v n棚n lm g狸?
  • 33. 33 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Ph但n t鱈ch h畛 th畛ng (System analysis) Ph但n t鱈ch m畛i li棚n h畛 c畛a h畛 th畛ng v畛i m担i tr動畛ng xung quanh T狸m ra c畉u tr炭c h畛 th畛ng v c叩c thnh ph畉n quan tr畛ng 畛nh ngh挑a ch畛c nng c畛 th畛 c畛a c叩c thnh ph畉n Nh畉n bi畉t c叩c 畉c i畛m c畛a t畛ng thnh ph畉n Ph但n lo畉i c叩c thnh ph畉n, t畛ng qu叩t h坦a, 畉c bi畛t h坦a Nh畉n bi畉t m畛i li棚n h畛 gi畛a c叩c thnh ph畉n K畉t qu畉: M担 h狸nh h畛 th畛ng (System model) C畉n m畛t ng担n ng畛 m担 h狸nh h坦a 畛 trao 畛i gi畛a c叩c thnh vi棚n trong nh坦m ph但n t鱈ch v v畛i nh坦m thi畉t k畉 Tr畉 l畛i c但u h畛i: Nh畛ng g狸 s畉 ph畉i lm?
  • 34. 34 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Thi畉t k畉 h畛 th畛ng (System Design) D畛a tr棚n m担 h狸nh h畛 th畛ng, x但y d畛ng c叩c m担 h狸nh chi ti畉t ph畛c v畛 s畉n sng m達 h坦a/ci 畉t Bao g畛m: Thi畉t k畉 c畉u tr炭c (structured design): ch動董ng tr狸nh, ki畛u d畛 li畛u, 畛i t動畛ng, quan h畛 c畉u tr炭c gi畛a c叩c 畛i t動畛ng v ki畛u) Thi畉t k畉 t動董ng t叩c (interaction design): quan h畛 t動董ng t叩c gi畛a c叩c 畛i t動畛ng Thi畉t k畉 hnh vi (behaviour design): s畛 ki畛n, tr畉ng th叩i, ph辿p to叩n, ph畉n 畛ng Thi畉t k畉 ch畛c nng (funtional design): ti畉n tr狸nh hnh 畛ng, hm, th畛 t畛c) K畉t qu畉: M担 h狸nh thi畉t k畉 (c叩c b畉n v畉 v l畛i vn m担 t畉) Tr畉 l畛i c但u h畛i: Lm nh動 th畉 no?
  • 35. 35 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u C叩c b動畛c kh叩c M達 h坦a/ci 畉t (Coding/Implementation): Th畛 hi畛n m担 h狸nh thi畉t k畉 v畛i m畛t ng担n ng畛 l畉p tr狸nh c畛 th畛 Th畛 nghi畛m (Testing, Verification): Ch畉y th畛, ph但n t鱈ch v ki畛m ch畛ng: Th畛 董n v畛 (Unit Test) Th畛 t鱈ch h畛p (Integration Test) G畛 r畛i (Debugging): T狸m ra v s畛a c叩c l畛i ch動董ng tr狸nh ch畉y (c叩c l畛i logic) X但y d畛ng ti li畛u (Documenting): X但y d畛ng ti li畛u ph叩t tri畛n, ti li畛u h動畛ng d畉n s畛 d畛ng o t畉o, chuy畛n giao B畉o tr狸, b畉o d動畛ng
  • 36. 36 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Chu tr狸nh c畛 i畛n: Waterfall Model Nghi棚n c畛u kh畉 thi Nghi棚n c畛u kh畉 thi Ph但n t鱈ch y棚u c畉u Ph但n t鱈ch y棚u c畉u Thi畉t k畉Thi畉t k畉 M達 h坦aM達 h坦a Th畛 nghi畛m 董n v畛 Th畛 nghi畛m 董n v畛 Th畛 nghi畛m t鱈ch h畛p Th畛 nghi畛m t鱈ch h畛p o t畉oo t畉o Chuy畛n giaoChuy畛n giao B畉o tr狸B畉o tr狸
  • 37. 37 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Xu th畉 hi畛n nay: Song song v l畉p
  • 38. 38 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L畉p tr狸nh l g狸, n畉m 畛 但u? L畉p tr狸nh > M達 h坦a L畉p tr狸nh T動 t動畛ng thi畉t k畉 + M達 h坦a + Th畛 nghi畛m + G畛 r畛i
  • 39. 39 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u C叩c b動畛c ph叩t tri畛n ch動董ng tr狸nh Bi棚n d畛ch M達 ngu畛n Li棚n k畉t M達 鱈ch N畉p v ch畉y CT ch畉y 動畛c Th動 vi畛n
  • 40. 40 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u M担i tr動畛ng/c担ng c畛 ph叩t tri畛n IDE (Integrated Development Environment) H畛 tr畛 ton b畛 c叩c b動畛c ph叩t tri畛n ch動董ng tr狸nh V鱈 d畛: MS Visual C++, Borland C++ (Builder), Keil-C C叩c c担ng c畛 ti棚u bi畛u Tr狸nh so畉n th畉o (Editor) Tr狸nh bi棚n d畛ch (Compiler) Tr狸nh li棚n k畉t (Linker) Tr狸nh n畉p (Loader) Tr狸nh g畛 r畛i (Debugger) Tr狸nh qu畉n l箪 d畛 叩n (Project Manager)
  • 41. 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u M担i tr動畛ng ph叩t tri畛n
  • 42. 42 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u 1.5 S董 l動畛c v畛 C/C++ L動畛c s畛 ng担n ng畛 C Ti畉n h坦a t畛 hai ng担n ng畛 l畉p tr狸nh BCPL v B: C叩c ng担n ng畛 phi ki畛u Dennis Ritchie (Bell Laboratories, AT&T) B畛 sung ki畛u h坦a d畛 li畛u v c叩c y畉u t畛 kh叩c Ng担n ng畛 ph叩t tri畛n h畛 i畛u hnh UNIX Kh担ng ph畛 thu畛c ph畉n c畛ng T鱈nh kh畉 chuy畛n 1989: ANSI chu畉n h坦a (ANSI-C) 1990: C担ng b畛 chu畉n ANSI v ISO ANSI/ISO 9899: 1990
  • 43. 43 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u L動畛c s畛 ng担n ng畛 C++ M畛 r畛ng, ti畉n h坦a t畛 C Bjarne Stroustrup (Bell Laboratories) 畉u nh畛ng nm 1980: C with classes 1984: T棚n C++ 1987: The C++ Programming Language 1st Edition 1997: The C++ Programming Language 3rd Edition Chu畉n h坦a qu畛c t畉: ANSI/ISO 1996 B畛 sung c叩c 畉c t鱈nh h畛 tr畛: L畉p tr狸nh h動畛ng 畛i t動畛ng L畉p tr狸nh t畛ng qu叩t L畉p tr狸nh to叩n h畛c,... Ng担n ng畛 lai
  • 44. 44 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u T畉i sao ch畛n C/C++ 叩p 畛ng c叩c y棚u c畉u: G畉n g滴i v畛i ph畉n c畛ng Hi畛u su畉t cao T動董ng 畛i th但n thi畛n v畛i ng動畛i l畉p tr狸nh Kh畉 chuy畛n Chu畉n h坦a qu畛c t畉 (t動董ng lai v畛ng ch畉c) Th畉 m畉nh tuy畛t 畛i c畛a ANSI-C: Ph畛 bi畉n cho h畉u h畉t c叩c n畛n vi x畛 l箪, vi i畛u khi畛n, DSP Ph畛 bi畉n cho m畛i ng動畛i l畉p tr狸nh tr棚n th畉 gi畛i Th畉 m畉nh tuy畛t 畛i c畛a ANSI/ISO C++: L畉p tr狸nh h動畛ng 畛i t動畛ng L畉p tr狸nh t畛ng qu叩t (template) L畉p tr狸nh to叩n h畛c (d畛 li畛u tr畛u t動畛ng v n畉p ch畛ng to叩n t畛)
  • 45. 45 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Visual C++, .NET & C# Visual C++: M担i tr動畛ng/c担ng c畛 l畉p tr狸nh C++ c畛a Microsoft M畛 r畛ng m畛t s畛 y畉u t畛 Th動 vi畛n l畉p tr狸nh Windows: Microsoft Foundation Classes (MFC), Active Template Library (ATL) C叩c th動 vi畛n chung: GUI, graphics, networking, multithreading, .NET (dot net) Ki畉n tr炭c n畛n t畉ng ph畉n m畛m l畉p tr狸nh ph但n t叩n H動畛ng t畛i c叩c 畛ng d畛ng Web, ph但n t叩n tr棚n nhi畛u ch畛ng lo畉i thi畉t b畛 kh叩c nhau C叩c 畛ng d畛ng tr棚n nhi畛u ng担n ng畛 kh叩c nhau c坦 th畛 giao ti畉p m畛t c叩ch 董n gi畉n tr棚n m畛t n畛n chung Ph動董ng ph叩p lu畉n: L畉p tr狸nh thnh ph畉n
  • 46. 46 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Visual C++, .NET & C# C# Anders Hejlsberg v Scott Wiltamuth (Microsoft) Thi畉t k畉 ri棚ng cho n畛n .NET Ngu畛n g畛c t畛 C, C++ v Java i畛u khi畛n theo s畛 ki畛n, hon ton h動畛ng 畛i t動畛ng, ng担n ng畛 l畉p tr狸nh hi畛n th畛 Integrated Development Environment (IDE) T動董ng t叩c gi畛a c叩c ng担n ng畛
  • 47. 47 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Ch炭ng ta 達 h畛c 動畛c nh畛ng g狸? Bi畉t 動畛c nh畛ng g狸 s畉 ph畉i h畛c, h畛c 畛 lm g狸 v ph畉i h畛c nh動 th畉 no Hng lo畉t kh叩i ni畛m m畛i xung quanh k畛 thu畉t l畉p tr狸nh v qui tr狸nh c担ng ngh畛 ph畉n m畛m T畛ng quan v畛 c叩c k畛 thu畉t l畉p tr狸nh L動畛c s畛 ng担n ng畛 C/C++, th畉 m畉nh c畛a ch炭ng so v畛i c叩c ng担n ng畛 kh叩c
  • 48. 48 息2004,HONGMINHSN Ch動董ng 1: M畛 畉u Ch畛 畛 ti畉p theo: C/C++ c董 s畛 T畛 ch畛c ch動董ng tr狸nh/b畛 nh畛 D畛 li畛u v bi畉n To叩n t畛, bi畛u th畛c v c但u l畛nh i畛u khi畛n ch動董ng tr狸nh: v嘆ng l畉p, r畉 nh叩nh M畉ng v con tr畛 C畉u tr炭c