bạn biết bạn muốn lưu trữ bất cứ cái gì vào trong máy tính phải dùng các kiểu dữ liệu(data type) với các biến, nhưng nếu bạn muốn lưu những thứ thuộc về sinh viên thì sao int, float, string ... rồi bạn sử dụng bạn phải làm việc trực tiếp với nhiều biến mệt mỏi như vậy sao không quy chung về 1 kiểu dữ liệu sinh viên chúng ta chỉ cần dùng 1 biến quá khỏe không phải đau đầu
dữ liệu trừu tượng(như là struct dùng cho C hay class dùng cho C++ nhưng bạn phải tập hợp chúng lại thành 1 dữ liệu trừu tượng để dùng 1 cái thuật toán chứ, dữ liệu mà không làm gì thì dữ liệu để làm cảnh sao chúng ta phải tính toán nó hay làm gì đó chứ, data riêng rẽ thì sao mà bạn viết cấu trúc xử lý nó đây bạn có 1 triệu data loại struct sao), bạn muốn sử dụng lớp tring cũng chả cần biết nó được cài đặt ra sao chỉ cần gọi các phương thức của nó ra và chơi thôi
- nói chung là nó bao bọc lấy các data của chúng ta, và nó chỉ cho chúng ta các phương thức để thao tác với data mà nó muốn chứ không cho ta quyền sử dụng data của họ đâu nha, bạn có thể xem nó như là giao diện cũng được



là 1 loại(hoặc lớp) cho những đối tượng có cách hành xử bởi thành lập 1 giá trị và những cách hoạt động của nó
-nó chỉ đề cập đến những hoạt động nào sẽ được thực hiện, nó không chỉ định cách dữ liệu được tổ chức trong bộ nhớ và thuật toán nào được sử dụng để thực hiện hoạt động(link list, stack queue, tree, graph.... nó gắn liền với các cài đặt của nó nhưng không care các cài đặt(thêm xóa,,...)được thực hiện như thế nào). nó gọi là trừu tượng vì nó mang lại 1 cái nhìn độc lập khi thực hiện, quá trình chỉ cung cấp các yếu tố cần thiết che đi các yếu tố không cần thiết(che đi các hàm được thiết kế hay dữ liệu được lưu như thế nào nó đéo care, miễn người dùng sử dụng nó gọi phương thức ra thì miễn nó ra đúng như người dùng mong muốn người thiết kế làm là được) được gọi là trừu tượng hóa
Người dùng loại dữ liệu không cần biết cách thức loại dữ liệu đó được thực hiện, ví dụ, chúng tôi đã sử dụng các giá trị Nguyên thủy như kiểu dữ liệu int, float, char chỉ với kiến thức mà loại dữ liệu này có thể hoạt động và được thực hiện mà không cần bất kỳ ý tưởng về cách chúng được thực hiện. Vì vậy, người dùng chỉ cần biết loại dữ liệu có thể làm gì, chứ không phải cách thức triển khai. Hãy nghĩ về ADT như một hộp đen che giấu cấu trúc bên trong và thiết kế của kiểu dữ liệu. Bây giờ chúng ta sẽ định nghĩa ba ADT là List ADT, Stack ADT, Queue ADT.
và 1 điều quan trọng chúng ta nên phân biệt cấu trúc dữ liệu mình đã định nghĩa chi tiết như trên và định nghĩa đơn giản là như sau
-là tập hợp các dữ liệu được tổ chức lại với nhau thành cấu trúc(list, stack, queue ...)
còn dữ liệu cấu trúc: là chúng ta gom các loại dữ liệu thành 1 kiểu dữ liệu mới(class, struct)