Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 2 : Kiểu dữ liệu - Nguyễn Văn Hòa
Chương 2 : Kiꢀu dꢁ liꢂu
Giꢀng viên: Ph.D Nguyꢁn Văn Hòa
Khoa KT-CN-MT – ðH An Giang
1
Bits và giá trꢃ (values)
10010101010011101101001110101011
Signed Integer
Unsigned Integer
Address
10010101010011101101001110101011
10010101010011101101001110101011
10010101010011101101001110101011
10010101010011101101001110101011
String
Single Float
10010101010011101101001110101011
2
Nꢄi dung chính cꢅa chương
ꢀ Giꢂi thiꢃu kiꢄu dꢅ liꢃu
ꢀ Kiꢄu dꢅ liꢃu cơ bꢀn
ꢀ Kiꢄu do ngưꢆi dùng ñꢇnh nghĩa
ꢀ Kiꢄu dꢅ liꢃu có cꢈu trúc
3
Dꢁ liꢂu (data)
ꢀ Dꢅ liꢃu / máy tính
ꢁ ðưꢉc lưu trꢅ ꢊ bꢋ nhꢂ
ꢁ ðưꢉc tꢌ chꢍc thành dꢎng bits, bytes, words
ꢀ Dꢅ liꢃu / NNLT
ꢁ ðưꢉc tꢌ chꢍc phꢍc tꢎp: sꢏ, chuꢐi ký tꢑ, các mꢀng,
ngăn xꢒp, …
ꢁ Thuꢓt ngꢅ ñꢀi tưꢁng dꢂ liꢃu (data objects) là mꢋt tꢓp
hꢉp (set) cꢔa mꢋt hoꢕc nhiꢖu mꢗu dꢅ liꢃu
ꢁ VD Int = {- 231 … 0 … 231 }
4
ðꢆi tưꢇng dꢁ liꢂu
ꢀ Mꢋt ñꢏi tưꢉng dꢅ liꢃu là mꢋt chꢐ chꢍa các giá trꢇ
cꢔa dꢅ liꢃu – mꢋt vꢇ trí trong bꢋ nhꢂ máy tính,
ñưꢉc ñꢕt tên và có thꢄ lưu trꢅ giá trꢇ cꢔa dꢅ liꢃu
ꢀ Có 1 tꢓp các thuꢋc tính xác ñꢇnh sꢏ lưꢉng và kiꢄu
cꢔa các giá trꢇ mà ñꢏi tưꢉng dꢅ liꢃu có thꢄ lꢈy, tꢌ
chꢍc luꢓn lý cꢔa các giá trꢇ này
5
Phân loꢈi ñꢆi tưꢇng dꢁ liꢂu
ꢀ Phân loꢎi dꢑa trên cꢈu trúc: 2 loꢎi
ꢁ ðTDL sơ cꢈp: chꢍa mꢋt giá trꢇ dꢅ liꢃu ñơn
ꢁ ðTDL có cꢈu trúc: tꢓp hꢉp cꢔa các dꢅ liꢃu khác
ꢁ VD!
ꢀ Phân loꢎi trên nguꢘn gꢏc: 2 loꢎi
ꢁ ðTDL tưꢆng minh: do ngưꢆi dùng khai báo như biꢒn,
hꢙng…)
ꢁ ðTDL ꢚn: ñưꢉc ñꢇnh nghĩa bꢊi hꢃ thꢏng như các ngăn
xꢒp lưu trꢅ các giá trꢇ trung gian, các ô nhꢂ ñꢃm
6
Thuꢄc tính cꢅa ðTDL
ꢀ Thuꢋc tính cꢔa mꢋt ðTDL là mꢋt tính chꢈt ñꢕc
trưng cꢔa ðTDL ñó
ꢀ Mꢐi ÐTDL có mꢋt tꢓp hꢉp các thuꢋc tính ñꢄ phân
biꢃt ðTDL này vꢂi ðTDL khác.
ꢀ Các ðTDL sơ cꢈp có mꢋt thuꢋc tính duy nhꢈt là
kiꢄu dꢅ liꢃu
ꢁ VD Int: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ꢀ Các ðTDL có cꢈu trúc có thêm các thuꢋc tính
nhꢙm xác ñꢇnh sꢏ lưꢉng, kiꢄu dꢅ liꢃu cꢔa các
phꢛn tꢜ. VD Struct, Union
7
Giá trꢃ dꢁ liꢂu (GTDL)
ꢀ GTDL cꢔa mꢋt ðTDL sơ cꢈp có thꢄ là mꢋt sꢏ,
mꢋt ký tꢑ hoꢕc là mꢋt giá trꢇ logic tùy thuꢋc vào
kiꢄu cꢔa ðTDL ñó.
ꢀ GTDL ñưꢉc biꢄu diꢁn bꢊi 1 dãy các bits, ðTDL
ñưꢉc biꢄu diꢁn bꢊi mꢋt khꢏi ô nhꢂ.
ꢁ VD mꢋt ðTDL A chꢍa GTDL B ~ khꢏi ô nhꢂ biꢄu
diꢁn A chꢍa dãy bits biꢄu diꢁn B
ꢀ GTDL cꢔa mꢋt ðTDL có cꢈu trúc là mꢋt tꢓp hꢉp
các GTDL cꢔa các phꢛn tꢜ cꢔa ðTDL ñó.
8
Thꢉi gian tꢊn tꢈi cꢅa ðTDL
ꢀ Thꢆi gian tꢘn tꢎi (lifetime) cꢔa mꢋt ÐTDL là
khoꢀng thꢆi gian ðTDL chiꢒm giꢅ bꢋ nhꢂ cꢔa
máy tính
ꢀ Thꢆi gian này ñưꢉc tính tꢝ khi ÐTDL ñưꢉc tꢎo ra
cho ñꢒn khi nó bꢇ hꢔy bꢞ
9
Biꢋn và hꢌng
ꢀ Biꢒn
ꢁ ÐTDL ñưꢉc ñꢇnh nghĩa và ñꢕt tên mꢋt cách tưꢆng
minh
ꢁ Biꢒn là cách trù tưꢉng hóa mꢋt hoꢕc nhiꢖu ô nhꢂ
ꢁ Thuꢋc tính : name, address, value, type, lifetime, scope
ꢀ Hꢙng
ꢁ ÐTDL có tên và giá trꢇ cꢔa hꢙng không thay ñꢌi trong
thꢆi gian tꢘn tꢎi cꢔa nó
ꢁ VD!
10
Phꢈm vi cꢅa biꢋn (Scope)
ꢀ
ꢀ
Phꢎm vi cꢔa biꢒn là vùng mà biꢒn có thꢄ trông thꢈy ñưꢉc
Phꢎm vi tĩnh (static scope or block) : C, C++, Java & C#
void sub(){
int count;
…
while (…) {
int count;
count++;
}
}
11
int main(){
int count;
count = 10;
printf("count %d\n",count);
{
int count;
count = 2;
count++;
printf("count %d\n",count);
}
count = count -5;
printf("count %d\n",count);
}
12
Phꢈm vi cꢅa biꢋn (tt)
ꢀ
Phꢎm vi ñꢋng (dynamic scope): Perl, COMMON, LISP cho phép khai
báo phꢎm vi ñꢋng
Procedure Big is
X : integer;
Procedure Sub1 is
Begin
… X …
End;
Procedure Sub2 is
X: integer;
Begin
…
End
Begin
…
End
13
Phꢈm vi cꢅa biꢋn: ví dꢍ
x : integer;
procedure setX(n : integer)
x := n;
procedure printX()
write integer(x);
procedure first()
setX(4); printX();
procedure second()
x : integer; setX(2); printX();
// bꢀt ñꢁu chương trình chính
setX(1);
second();
printX();
first();
printX();
14
int x = 2
procedure f(){ x = x * x;}
procedure g(){ h(f) }
procedure h(P){
int x = 4
P()
}
// bꢟt ñꢛu chương trình chính
g()
print(x)
15
Scope VS Lifetime cꢅa biꢋn
ꢀ ðôi khi scope và lifetime là tương tꢑ nhau
ꢁ Java: 1 biꢒn ñưꢉc khai báo trong 1 hàm (no method
calls), scope ñưꢉc bꢟt ñꢛu tꢝ vꢇ trí khai báo ñꢒn cuꢏi
hàm và lifetime là thꢆi gian thꢑc hiꢃn cꢔa hàm
ꢀ Nhưng scope và lifetime hoàn toàn không tương
tꢑ nhau
ꢁ Scope là khái niꢃn liên quan ñꢒn không gian
ꢁ Lifetime là khái niꢃn liên quan ñꢒn thꢆi gian
16
Các liên kꢋt (binding)
ꢀ Mꢋt ÐTDL có thꢄ tham gia vào nhiꢖu mꢏi liên kꢒt
trong thꢆi gian tꢘn tꢎi cꢔa nó
ꢀ Các mꢏi liên kꢒt phꢌ biꢒn
ꢁ ðTDL vꢂi GTDL: phép gán
ꢁ ðTDL vꢂi 1 hoꢕc nhiꢖu tên tham chiꢒu: khai báo, gꢠi
và trꢀ CT con
ꢁ ðTDL vꢂi ðTDL (component): giá trꢇ cꢔa pointer và
pointer có thꢄ bꢇ thay ñꢌi do thay ñꢌi pointer
ꢁ ðTDL và ô nhꢂ: trình quꢀn lý bꢋ nhꢂ (routine) thiꢒt lꢓp
17
ðꢎt tên (names)
ꢀ Cách ñꢕt tên : biꢒn, hꢙng và hàm
ꢁ Có phân biꢃt ký tꢑ HOA và thưꢆng không?
ꢁ Tꢝ khóa gꢘm nhꢅng tꢝ nao?
ꢀ Chiꢖu dài tꢏi ña cꢔa tên
ꢁ Fortran cho phép tꢏi ña 31
ꢁ C99 chꢈp nhꢓn 63 ký tꢑ ñꢛu tiên
ꢁ Java không giꢂi hꢎn ñꢋ dài
ꢀ Hꢛu hꢒt các NNLT ñꢖu cho phép dùng các chꢅ
cái, các sꢏ và «_» ñꢄ ñꢕt tên
18
ðꢎt tên (names) (tt)
ꢀ Vài NNLT dùng khái niꢃn «camel» : ký tꢑ HOA
giꢅa 2 tꢝ. VD myStack
ꢀ C, C++, Java phân biꢃt giꢅa chꢅ hoa chꢅ thưꢆng
(case sensitive). VD rose, ROSE và Rose
ꢀ Tꢝ khóa trong tꢝng NNLT ñưꢉc dùng trong các
tình huꢏng ñꢕc biꢃt
ꢀ Không ñưꢉc dùng tꢝ khóa ñꢄ ñꢕt tên, chꢡng hꢎn
tên biꢒn, tên hꢙng, tên hàm, etc
19
ðꢎc tꢏ kiꢀu dꢁ liꢂu
ꢀ ðꢕc tꢀ kiꢄu dꢅ liꢃu bao gꢘm ba yꢒu tꢏ sau:
ꢁ Các thuꢋc tính: xác ñꢇnh các ñꢏi tưꢉng dꢅ liꢃu thuꢋc
kiꢄu
ꢁ Các giá trꢇ: mà các ñꢏi tưꢉng dꢅ liꢃu thuꢋc kiꢄu có thꢄ
ñưꢉc gán cho
ꢁ Các tác vꢢ: các thao tác có thꢄ có trên các ñꢏi tưꢉng dꢅ
liꢃu thuꢋc kiꢄu
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 2 : Kiểu dữ liệu - Nguyễn Văn Hòa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_nguyen_ly_ngon_ngu_lap_trinh_chuong_2_kieu_du_lieu.pdf

