Kiểu dữ liệu trừu tượng

•Kiểu dữliệu trừu tượng (ADT) giúp đóng gói

(encapsulation) dữliệu.

–Dữliệu được bảo vệ, không cho phép mã người dùng

truy xuất trực tiếp.

•Kiểu dữliệu trừu tượng gồm 3 thành phần:

–Dữliệu.

–Giao diện.

–Mã thực thi.

•Mã người dùng chỉ được thao tác với dữliệu thông qua

các hàm thành viên (hình thành nên giao diện).

•Sựthay đổi biểu diễn dữliệu hay mã thực thi không

ảnh hưởng đến giao diện.

→Mã người dùng không thay đổi.

pdf7 trang | Chuyên mục: Cấu Trúc Dữ Liệu & Giải Thuật | Chia sẻ: dkS00TYs | Lượt xem: 1737 | Lượt tải: 2download
Tóm tắt nội dung Kiểu dữ liệu trừu tượng, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
1Kiểu dữ liệ̣u trừu tượng 
(Abstract Data Type)
2
• Kiểu dữ liệu trừu tượng (ADT) giúp đóng gói 
(encapsulation) dữ liệu.
– Dữ liệu được bảo vệ, không cho phép mã người dùng 
truy xuất trực tiếp.
• Kiểu dữ liệu trừu tượng gồm 3 thành phần:
– Dữ liệu.
– Giao diện.
– Mã thực thi.
• Mã người dùng chỉ được thao tác với dữ liệu thông qua 
các hàm thành viên (hình thành nên giao diện).
• Sự thay đổi biểu diễn dữ liệu hay mã thực thi không 
ảnh hưởng đến giao diện.
→ Mã người dùng không thay đổi.
3Encapsulation
class Point {
public: 
int x, y; 
Point(int x1 = 0, int y1 = 0) { x = x1; y = y1; }
};
int main() {
Point p(20, 20); 
Point q; 
p.x++; // go right
p.x--; // go left
p.y++; // go up
p.y--; // go down
cout << "p: " << p.x << ' ' << p.y << endl; 
q.x = 30; q.y = 30; // move q
cout << "q: " << q.x << ' ' << q.y << endl; 
return 0; 
}
4
class Point {
private: 
int x, y; 
public: 
void up() { y++; }
void down() { y--; }
void right() { x++; }
void left() { x--; }
int getx() const { return x; }
int gety() const { return y; }
void move(int x1, int y1) { 
x = x1; y = y1; 
}
Point(int x1 = 0, int y1 = 0) { 
move(x1, y1); 
}
};
5int main() {
Point p(20, 20); 
Point q; 
p.right(); 
p.left(); 
p.up(); 
p.down();
cout << "p: " << p.getx() << ' ' << p.gety(); 
q.move(30, 30);
cout << "q: " << q.getx() << ' ' << q.gety();
return 0; 
}
6
class String {
private:
char *s;
int len;
void copy(const String &);
void free();
public:
…
String(const char * = "");
String(const String &a) {
copy(a);
}
~String() {
free();
}
7String & operator=(const String &a) {
if (this != &a) {
free();
copy(a);
}
return *this;
}
String & operator+=(const String &);
char & operator[](int);
const char & operator[](int) const;
int length() const {
return len;
}
};
8
String::String(const char *p) {
len = strlen(p);
s = new char [len + 1];
strcpy(s, p);
}
void String::copy(const String & a) {
len = strlen(a.s);
s = new char [len + 1];
strcpy(s, a.s);
}
void String::free() {
delete [] s;
}
9char & String::operator[](int idx) {
return s[(idx = len) ? len 
- 1 : idx)];
}
const char & String::operator[](int idx) const{
return s[(idx = len) ? len 
- 1 : idx)];
}
String & String::operator+=(const String & s1){
int newlen = len + s1.len + 1;
char *st = new char [newlen];
strcpy(st, s); strcpy(st + len, s1.s);
len = newlen; free();
s = st;
return *this;
}
10
friend ostream & operator<<(ostream &, const 
String &);
friend istream & operator>>(istream &, String
&);
…
ostream & operator<<(ostream &os, const String 
&a) {
os << a.s << endl;
return os;
}
istream & operator>>(istream &is, String &a) {
char st[256]; is.getline(st, 256); a = st;
return is;
}
11
friend bool operator==(const String &, 
const String &);
friend bool operator!=(const String &, 
const String &);
friend bool operator>(const String &, 
const String &);
friend bool operator>=(const String &, 
const String &);
friend bool operator<(const String &,
const String &);
friend bool operator<=(const String &, 
const String &);
12
// Nonmember function
String operator+(const String & s1, 
const String & s2) {
return String(s1) += s2;
}
bool operator==(const String & s1, 
const String & s2) {
return strcmp(s1.s, s2.s) == 0;
}
/*
bool operator==(const char * s1, 
const String & s2) {
return s2 == s1;
}
*/
13
bool operator!=(const String & s1, 
const String & s2) {
return !(s1 == s2);
}
bool operator>(const String & s1, 
const String & s2) {
return strcmp(s1.s, s2.s) > 0;
}
bool operator>=(const String & s1, 
const String & s2) {
return !(s1 < s2);
}
bool operator<(const String & s1, 
const String & s2) {
return strcmp(s1.s, s2.s) < 0;
}
bool operator<=(const String & s1, 
const String & s2) {
return !(s1 > s2);
}

File đính kèm:

  • pdfKieuDLTruuTuong.pdf