Giáo Trình Lập Trình Cho Thiết Bị Di Động

Giáo trình nghiên cứu lập trình cho thiết bị di động, trình bày lý thuyết rõ ràng, minh họa ví dụ thực tế, phù hợp sinh viên ., phục vụ nghiên cứu và ứng dụng thực tiễn

Trường đại học

Đại học Cần Thơ

Chuyên ngành

Công nghệ thông tin

Người đăng

Ẩn danh

Thể loại

Giáo trình

2016

231
30
0

Phí lưu trữ

55 Point

Mục lục chi tiết

LỜI GIỚI THIỆU

1. Chương 1: TỔNG QUAN VỀ LẬP TRÌNH THIẾT BỊ DI ĐỘNG

1.1. CÁC KHÁI NIỆM CƠ BẢN

1.1.1. Điện toán di động và thiết bị di động

1.2. SỰ PHÁT TRIỂN CỦA CÔNG NGHỆ PHẦN MỀM DI ĐỘNG

1.2.1. Sự cạnh tranh giữa các nền tảng di động

1.2.2. Những mốc đánh dấu sự phát triển của mobile platform

1.3. MẠNG DI ĐỘNG

1.3.1. Quá trình phát triển của mạng di động

1.3.2. Dịch vụ cá nhân và dịch vụ cộng đồng

1.3.3. Hệ thống truyền thông tế bào

1.3.4. Hệ thống truyền thông tầm ngắn

1.3.5. Bluetooth

1.4. CÁC VẤN ĐỀ LƯU Ý KHI XÂY DỰNG ỨNG DỤNG TRÊN ĐIỆN THOẠI DI ĐỘNG

1.5. TỔNG KẾT CHƯƠNG

1.6. CÂU HỎI ÔN TẬP

2. Chương 2: PHÁT TRIỂN ỨNG DỤNG TRÊN NỀN TẢNG ANDROID

2.1. TỔNG QUAN VỀ NỀN TẢNG ANDROID

2.1.1. Tóm tắt về quá trình hình thành và phát triển

2.1.2. Kiến trúc của Android

2.1.3. Cài đặt môi trường phát triển ứng dụng Android

2.2. CÁC THÀNH PHẦN TRONG ỨNG DỤNG ANDROID

2.2.1. Chu kỳ sống của ứng dụng

2.3. CÁC TIẾN TRÌNH TRONG MỘT ỨNG DỤNG ANDROID

2.4. CÁC THÀNH PHẦN TRONG MỘT DỰ ÁN ANDROID

2.4.1. Tạo ra một Android project

2.4.2. Cấu trúc thư mục của một Android project

2.4.3. Tạo ra giao diện (Layout) cho Activity HelloAndroidActivity

2.4.4. Tạo đáp ứng với Send Button

2.4.5. Tập tin AndroidManifest.xml

2.5. TỔNG KẾT CHƯƠNG

2.6. CÂU HỎI ÔN TẬP

2.7. THỰC HÀNH

3. Chương 3: LẬP TRÌNH GIAO DIỆN NGƯỜI DÙNG VỚI ANDROID

3.1. LẬP TRÌNH GIAO DIỆN NGƯỜI DÙNG VỚI XML (MỨC CAO)

3.1.1. View và ViewGroup

3.1.2. Các đối tượng View cơ bản

3.1.3. Nhóm hiển thị văn bản

3.1.4. Nhóm nút điều khiển

3.1.5. Nhóm hiển thị hình ảnh. Nhóm hộp thoại

3.1.6. Nhóm điều chỉnh thời gian

3.2. Xử lý sự kiện người dùng tương tác

3.2.1. Xử lý sự kiện tương tác trực tiếp

3.2.2. Xử lý sự kiện từ phím T9

3.3. LẬP TRÌNH GIAO DIỆN VỚI JAVA (MỨC THẤP)

3.3.1. Vẽ một đối tượng đơn giản

3.3.2. Làm cho đối tượng di chuyển

3.4. Xử lý sự kiện trong lập trình giao diện cấp thấp

3.5. Lập trình luồng trong giao điện mức thấp

3.6. Lập trình với SurfaceView

3.7. TỔNG KẾT CHƯƠNG

3.8. CÂU HỎI ÔN TẬP

3.9. THỰC HÀNH

4. Chương 4: LƯU TRỮ DỮ LIỆU TRONG ANDROID

4.1. LƯU TRỮ DỮ LIỆU VỚI SQLITE

4.1.1. Các lệnh cơ bản

4.1.2. Tạo mới CSDL

4.1.3. Tạo bảng/Xóa bảng

4.1.4. Thêm/Sữa/Xóa dữ liệu trong bảng

4.1.5. Ví dụ về SQLite

4.1.5.1. Tạo ra đối tượng SQLiteOpenHelper
4.1.5.2. Thêm dữ liệu vào bảng
4.1.5.3. Truy vấn dữ liệu
4.1.5.4. Cập nhật dữ liệu trong bảng
4.1.5.5. Xoá dữ liệu trong bảng
4.1.5.6. Cập nhật cơ sở dữ liệu
4.1.5.7. Tạo trước một cơ sở dữ liệu

4.2. LƯU TRỮ DỮ LIỆU BẰNG TẬP TIN

4.2.1. Lưu trừ dữ liệu trên bộ nhớ trong

4.2.2. Lưu trừ dữ liệu trên bộ nhớ ngoài (SD Card)

4.3. TRUY XUẤT DỮ LIỆU VỚI CONTENT PROVIDERS

4.3.1. Một ví dụ

4.4. TỔNG KẾT CHƯƠNG

4.5. CÂU HỎI ÔN TẬP

4.6. THỰC HÀNH

5. Chương 5: LẬP TRÌNH MẠNG VỚI ANDROID

5.1. Kiểm tra kết nối mạng

5.2. Lướt web với Android

5.3. THƯ VIỆN TELEPHONY

5.3.1. Lập trình gởi và nhận tin nhắn SMS

5.3.2. Lập trình gởi và nhận email

5.4. KHAI THÁC WEB SERVICES DÙNG GIAO THỨC HTTP

5.4.1. Thực hiện kết nối HTTP với GET Request

5.4.2. Thực hiện kết nối HTTP với POST Request

5.5. KẾT NỐI SOCKET

5.6. GOOGLE MAPS VÀ GPS

5.6.1. GPS

5.7. TỔNG KẾT CHƯƠNG

5.8. CÂU HỎI ÔN TẬP

5.9. THỰC HÀNH

6. Chương 6: GIỚI THIỆU MỘT VÀI NỀN TẢNG KHÁC

6.1. NỀN TẢNG IOS

6.1.1. Kiến trúc lớp của iOS

6.1.2. Tầng Core OS

6.1.3. Tầng Core Services

6.1.4. Tầng Cocoa Touch

6.1.5. Công cụ phát triển phần mềm

6.1.6. Giới thiệu ngôn ngữ lập trình Objcctive-C

6.1.7. Tìm hiểu bộ công cụ Xcode

6.1.8. Phát triển ứng dụng cho thiết bị di động iOS

6.2. NỀN TẢNG WINDOWS PHONE

6.2.1. Giới thiệu về Windows Phone (WP)

6.2.2. Lịch sử phát triễm

6.2.3. Các tính năng cla WP

6.2.4. Kiến trú của nền tảng WP

6.2.5. Môi trường phát triên ứng dụng - Ngôn ngữ trình và Framworks

6.2.6. Silverlightframework và XAML

6.2.7. Công cụ phát triển ứng dụng

6.2.8. Phát hành ứng dụng

6.3. NỀN TẢNG MOBILE WEB (MW)

6.3.1. Quá trình phát triển cia MW

6.3.2. Xây dựng ứng dụng di động thân thiện trên nền tảng MW

6.3.3. Các framework phát triển mobile web và công cụ phát triển ứng dụng

6.4. TỔNG KẾT CHƯƠNG

6.5. CÂU HỎI ÔN TẬP

6.6. THỰC HÀNH

TÀI LIỆU THAM KHẢO

DANH MỤC HÌNH

DANH MỤC BẢNG

CHỮ VIẾT TẮT

Tóm tắt

I. Tổng Quan Về Giáo Trình Lập Trình Cho Thiết Bị Di Động

Giáo trình lập trình cho thiết bị di động là tài liệu quan trọng cho sinh viên và những người yêu thích công nghệ. Tài liệu này cung cấp cái nhìn tổng quan về các khái niệm cơ bản trong lập trình di động, bao gồm các nền tảng, công nghệ và môi trường phát triển. Đặc biệt, giáo trình tập trung vào việc phát triển ứng dụng cho smartphone và tablet, hai thiết bị phổ biến nhất hiện nay.

1.1. Các Khái Niệm Cơ Bản Về Thiết Bị Di Động

Thiết bị di động bao gồm smartphone, tablet và các thiết bị khác có khả năng tính toán và kết nối mạng. Những khái niệm này là nền tảng để hiểu rõ hơn về lập trình di động.

1.2. Sự Phát Triển Của Công Nghệ Di Động

Công nghệ di động đã phát triển mạnh mẽ từ những năm 1990, với sự ra đời của nhiều nền tảng như Android và iOS. Sự cạnh tranh giữa các nền tảng này đã thúc đẩy sự đổi mới trong lĩnh vực lập trình.

II. Vấn Đề Và Thách Thức Trong Lập Trình Di Động

Lập trình di động đối mặt với nhiều thách thức, từ việc tối ưu hóa hiệu suất ứng dụng đến đảm bảo tính bảo mật. Những vấn đề này cần được giải quyết để phát triển ứng dụng hiệu quả và an toàn.

2.1. Tối Ưu Hóa Hiệu Suất Ứng Dụng

Hiệu suất ứng dụng là yếu tố quan trọng trong lập trình di động. Các lập trình viên cần chú ý đến việc tối ưu hóa mã nguồn và sử dụng tài nguyên hệ thống một cách hiệu quả.

2.2. Đảm Bảo Tính Bảo Mật Trong Ứng Dụng

Bảo mật là một trong những thách thức lớn nhất trong lập trình di động. Các lập trình viên cần áp dụng các biện pháp bảo mật để bảo vệ dữ liệu người dùng và ngăn chặn các cuộc tấn công.

III. Phương Pháp Lập Trình Trên Nền Tảng Android

Nền tảng Android là một trong những hệ điều hành phổ biến nhất cho thiết bị di động. Việc lập trình trên nền tảng này yêu cầu hiểu biết về kiến trúc và các công cụ phát triển.

3.1. Cài Đặt Môi Trường Phát Triển Android

Để bắt đầu lập trình trên Android, cần cài đặt Android Studio và các công cụ hỗ trợ. Quá trình này bao gồm việc cấu hình SDK và thiết lập các thư viện cần thiết.

3.2. Các Thành Phần Cơ Bản Trong Ứng Dụng Android

Một ứng dụng Android bao gồm nhiều thành phần như Activity, Service và Broadcast Receiver. Hiểu rõ các thành phần này giúp lập trình viên xây dựng ứng dụng hiệu quả hơn.

IV. Lập Trình Giao Diện Người Dùng Với Android

Giao diện người dùng là yếu tố quan trọng trong bất kỳ ứng dụng nào. Việc lập trình giao diện người dùng trên Android yêu cầu sự sáng tạo và kỹ năng thiết kế.

4.1. Sử Dụng XML Để Tạo Giao Diện

XML là ngôn ngữ được sử dụng để định nghĩa giao diện người dùng trong Android. Việc sử dụng XML giúp tách biệt mã nguồn và giao diện, tạo điều kiện cho việc bảo trì và phát triển.

4.2. Xử Lý Sự Kiện Người Dùng

Xử lý sự kiện là phần quan trọng trong lập trình giao diện. Các lập trình viên cần biết cách lắng nghe và xử lý các tương tác của người dùng để tạo ra trải nghiệm mượt mà.

V. Lưu Trữ Dữ Liệu Trong Ứng Dụng Android

Lưu trữ dữ liệu là một phần không thể thiếu trong phát triển ứng dụng di động. Android cung cấp nhiều phương pháp để lưu trữ dữ liệu, từ SQLite đến SharedPreferences.

5.1. Sử Dụng SQLite Để Lưu Trữ Dữ Liệu

SQLite là cơ sở dữ liệu nhẹ được tích hợp sẵn trong Android. Việc sử dụng SQLite giúp quản lý dữ liệu một cách hiệu quả và dễ dàng.

5.2. Lưu Trữ Dữ Liệu Trên Bộ Nhớ Ngoài

Ngoài SQLite, Android cũng cho phép lưu trữ dữ liệu trên bộ nhớ ngoài như thẻ SD. Điều này giúp người dùng dễ dàng truy cập và chia sẻ dữ liệu.

VI. Kết Luận Và Tương Lai Của Lập Trình Di Động

Lập trình di động đang phát triển nhanh chóng với nhiều cơ hội và thách thức. Tương lai của lĩnh vực này hứa hẹn sẽ mang đến nhiều đổi mới và sáng tạo.

6.1. Xu Hướng Phát Triển Trong Lập Trình Di Động

Các xu hướng như trí tuệ nhân tạo và thực tế ảo đang dần được tích hợp vào ứng dụng di động. Điều này mở ra nhiều cơ hội mới cho lập trình viên.

6.2. Tầm Quan Trọng Của Việc Cập Nhật Kiến Thức

Với sự phát triển không ngừng của công nghệ, việc cập nhật kiến thức là rất quan trọng. Các lập trình viên cần thường xuyên học hỏi và nâng cao kỹ năng để không bị lạc hậu.

11/07/2025
Giáo trình lập trình cho thiết bị di động

Trích đoạn nội dung tài liệu

Chương I TONG QUAN VE LAP TRINH THIET B] DI DON Chương này sẽ giới thiệu tổng quan vẻ lập trình cho thiết bị di động, bao gồm: > Các khái niệm cơ bản như điện toán di động, thiết bi di động, nền tảng, môi trường phát triển phần mềm, môi trường tích hợp, kiến trúc Client-Server. > Sự phát triển của công nghệ di động, sự cạnh tranh giữa các nền tảng di động, vai trò của lập trình di động trong kỹ thuật, công nghệ và đời sống. > Sự phát triển mạng di động. > Cae van dé cin lưuý khi xây dựng một ứng dụng cho thiết bị di động.1 CÁC KHÁI NIỆM CƠ BẢN 1.1 Điện toán di động và thiết bị di động [1] _.

Điện toán đi động (Mobile computing) là chức năng tính toán của hệ thống di động, chức năng tính toán được hiểu bao hàm cả việc lưu trữ và trao đổi thông tỉ “Thiết bị dĩ động (Mobile devices) là các hệ thống mà chúng có thể di chuyển dễ đảng và có khả năng tính toán trong khi chúng đang di động. Vi dy: Ultramobile PC, Mobile phone, Tablet, Phablet, TV set-top boxes, dụng cụ đo lường từ xa trên xe, iết bị nhúng,. ngay cả laptop cũng có thê được xem như là thiết bị di động. Giáo trình này sẽ tập trung vào điện thoại di động thông minh (smartphone).

Cơ sở phân biệt hệ thống tính toán đi động với các hệ thống tính toán khác là: — Sự khác nhau về công việc mà chúng được thiết kế đề thực hiện; — Cách mà chúng được thiết kế; — Cách chúng vận hành. Có nhiều việc một hệ thống cố định không thực hiện được nhưng hệ thống di động có thể thực hiện được. Một thiết bị di động cũng như bắt kỳ một hệ thống nào khác, nó có thể kết nối mạng. Tuy nhiên, một thiết bị di động có é ết nối mạng không dây (Ví dụ: e, máy hát nhạc PM3,.

inh và hệ thống di động cl sự khác biệt, nhưng di này không có nghĩa là chúng không có. it kỳ điểm chung nào. Có 4 khía cạnh liên quan đến lĩnh vực di động: người dùng di động; thiết bị di động; ứng dụng di động và mạng di động. Khuôn khố của sự di động (Dimensions of mobility) là tập hợp các tính chất dùng để phân biệt hệ thống tính toán di động với các hệ thống tính toán cố định.

Thường người ta sử dụng các tính chất sau nhận diện các hệ thống di động: (1) Sự nhận biết vị tri (Location awareness) (2) Chất lượng kết nối mạng của dịch vụ (Network connectivity quality of service, QOS) (3) Sự hạn chế về khả năng của thiết bị (Limited device capability - particularly storage and CPU) nguồn điện (Limited power supply) (5) Sự hỗ trợ về mặt đa dạng của giao diện người dùng (Support for a wide variety of user interfaces) (6) Sự tăng nhanh về số lượng platform. Mulimodal and Large Variety of Vara Us Pistons Lites ehavor Power Supply Umited Device Location Capabilities ‘Awareness Wireless Connectivity Hình 1.1 Các tính chất để đánh giá kích thước đi động [1] Điều kiện di động (Mobile condirion) là sự khác biệt giữa người dùng. di động với người dùng cô định, bao gồm: (1) Người dùng di động là có thể hoặc đang di chuyển giữa vị trí được. biết hay các vị trí không biết (2) Người ding di động không tập trung vào việc tính toán.

(3) Người dùng di động thường đòi hỏi ở mức cao sự tức thì và đáp ứng nhanh từ hệ thống. (4) Người dùng di động thay đổi công việc thường xuyên hoặc đột ngột. (5) Người dùng di động có thể ï hỏi truy xuất đến hệ thống mọi nơi và mọi lúc, Tóm lại, các thuộc tính của người dung di động là: thay đổi vị trí, không tập trung, đòi hỏi tức thì, thay đôi đột ngột trong công việc, mọi nơi và mọi lúc Điện thoại thông minh (Smartphone) là thiết bị di động mà nó kết hợp các chức năng của điện thoại thông thường với chức năng điện toán di động. Bạn dau ¢ thoại thô ò Điện thoại tệ mình ngày nay bao gồm hầu hết các chức năng cũa một mày tính cá nhân (PC), đặc biệt là có thé chạy các ứng dụng của bên thứ ba (third- party apps), bên cạnh đó, nó còn có các chức năng mà PC không thể có.2 Khai ni m lập trình di „._ Lập trình di động (Mobile programming) Ia mềm ting dụng hay một chức năng cho một phần mềm đi động k thử, gỡ lỗi/ sửa chữa, và bảo trì phần mị Sự khác nhau cơ bản 1g và lập trình di động là đi toán di động là một chị hiết bị di động trong khi lập trình di động là quá trình xây dựng chức năng cho thiết bị di động của người lập trình.3 Trừu tượng Trừu tượng (Abstraction) là những phần mềm nằm giữa phần cứng va môi trường phát triển ứng dụng hoặc ứng dụng, chẳng hạn như: các lớp trong giao diện lập trình ứng dụng (API-Application Programming Interface), trong các thực đơn (menu), có sở dữ liệu (database), hệ thống tập tin (fïle systems), các thư viện thực (runtime libraries), giao diện đồ họa người dùng (graphical user interface),.

Triru tượng là công cụ hữu hiệu cho việc phát triển phan mềm, là một trong những phương tiện được dùng phổ biến trong việc lập trình. Khi lập trình trong một môi trường xác định, người lập trình phải biết các trừu tượng cơ bản được áp dụng trong môi trường đó, và biết cách mà các trừu tượng dự định sẽ được dùng. Đây là một kỹ năng.4 Nền tảng Nền tảng (Platform) là cơ sở công nghệ của một hệ tính toán, trên đó người ta xây dựng các chương trình ứng dụng. Nền tảng là sự liên kết giữa cấu.

hình phần cứng thấp nhất, hệ điều hành. ngôn ngữ lập trình và các trừu tượng. Trong đó hệ điều hành là thành phần chính và thường trùng tên với nền tảng, nên nhiều khi người ta xem một nên tảng bằng chính hệ điều hành tương. Sự phát sinh nhanh chóng nl tảng có ý nghĩa rất quan trọng đến ú ủa thiết bị di động, sự thiết kế và phát triển các ứng mềm ứng dụng mong muốn sao cho việc phát triển tảng.

Nghĩa là khi xây dựng một ứng dụng không cần dựa trên một nền tảng cụ thể, nhưng lại có thể chạy trên mọi nên nhau, hoặc có sự thống nhất chung một nên tảng. Tuy nhiên, các nhà ng tạo ra cái riêng, đi ngược lại xu hướng này. Từ lúc điện ại di động ra đời, nó đã làm phát sinh nhiều nền tảng cạnh tranh với nhau, như: Java J2ME, Symbian, BREW, iOS cho iPhone của Apple, Blackberry OS cia RIM, WebOS, Android, Windows Mobile va Windows phone của Microsoft.5 Môi trường phát triển phần mềm và môi trường phát triển tích hợp. Môi trường phát triển phần mềm (SDE - Software Development Environment) là một tổng thể mà nó cung cấp toàn bộ các phương.

người lập trình máy tính phát triển phần mềm. Một SDE có thể bao gồm: — _ Công cụ quản lý cần thiết; —_ Công cụ mô hình hóa thiết kế; —_ Công cụ tạo ra văn bản, tài liệu; —_ Môi trường phát triển tích hợp (IDE) ~_ Công cụ phân tích mas —_ Công cụ tra Cứu mã; — Công cụ kiểm tra mã: — Công cụ xây đựng phần mém (compile, link); — Kho chứa tài nguyên (quản lý cấu hìn! —_ Công cụ dò tìm và báo sự cố. Môi trường phát trién tich hop (IDE-Integrated Development Environment) cũng được gọi là môi trường thiết kế tích hợp (integrated design environment) hay môi trường gỡ lỗi tích hợp (integrated debugging environment) là mgt phan mém ting dụng mà nó cung cấp toàn bộ các phương tiện đề người lập trình máy tính phát triển phần mềm. Một IDE bao gồm: — B6 bién tip ma ngudn (source code editor) — Trinh bién dich (compiler) và/hoặc trình thông dich (interpreter) - c ‘ng cy (build automation tools) = Trinh go Idi (debugger) Vi dy: Netbeans, Eclipse, Borland Jbuilder,.

Khung (Frameworks) là một môi trường tích hợp trên một platform với các công cụ tương ứng, trên đó người ta phát triển phần mềm ứng dụng.6 Kiến trúc Client-Server [1] Ld. 1 Thin-Client Wireless Client-Server: Kiến trúc này đòi hỏi client kết nối mạng liên tục và ổn định, tương ứng với tập các đặc tính kỹ thuật chung nhỏ nhất của các thiết bị và nền tảng. Vì vậy, mô hình này được thực thỉ bởi các "gia đình” nền táng và thiết bị với các trình duyệt phù hợp. Các trình duyệt với cùng đặc tính kỹ thuật có thể thực thi trên mỗi thiết bị trong môi trường client-server.

Trình duyệt cho phép tải và trả Š mã đánh dấu (markup), và cả các plug-in. Phương pháp này tương tự như phương pháp mô hình wcb, mà trong đó các trình duyệt được thực thi cho nhiều hệ điều hành khác nhau. Nhà phát triển web không cần lo lắng về môi trường mà trong đó trình duyệt hoạt động. Giao thức truy xuất / ứng dụng không đây (WAP - Wireless Access! Application Protocol) và Ngôn ngữ đánh dâu không dây (WML: Wireless Markup Language) của nó cung cấp một khung cho việc xây dựng các ứng.

dụng thin-client wireless với một kiến trúc nhiều lớp (N-Tier).2 Thick-Client Wireless Client-Server: Ứng dụng trên thiết bị di động có thể là do người dùng đặt hàng. Vì vậy, nếu thick client giao tiếp với server, nó có thể thực thi vai việc và server thực hiện các việc khác. Các kiến trúc thick-client-server cố định ding client như là một bộ lưu trữ dữ liệu phụ cho các ứng dụng khi client ngắt kết nối với mạng (thực hiện logic kinh doanh không cần tập trung hóa). Việc thực hiện kiến trúc này cho thiết bị di động khó khăn hơn, do thiết bị di động có tài nguyên rất hạn chế.

Công nghệ hiện nay có thể khắc phục sự hạn chế này, chẳng hạn như điện thoại thông minh (smart phone) và máy tinh bang (tablet computer) có CPU mạnh và bộ nhớ lớn không kém các PC. Tuy nhiên, có ấn đề khác, đó là: Ta phải phân bố phần mềm như thế nào cho một dải rộng thiết bị? Ta phải viết phần mềm như thế nào cho một số lớn các nền tảng khác nhau? Connect " Sandstone Newworks Platform Wire| sccorked Wireless WaP Symbian, ‘Motile platform NET Hình 1.2 Các giải pháp ctia khung N-Tier Client-Server Trong thực lế, các nhà sản xuất thiết bị muốn có sự khác biệt về phần cứng với đối thủ của họ. Một cách để thực hiện mong muốn này là buộc các nhà phát triển phần mềm viết chươngtrình rất đặc thù cho các nền tảng của thiết bị bằng ngôn ngữ riêng biệt của nền tảng đó.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ