Tải bản đầy đủ (.pdf) (107 trang)

Xây dựng chương trình tra cứu thông tin giao thông trên hệ điều hành iosi

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.36 MB, 107 trang )

LỜI CAM ĐOAN
Đồ án tốt nghiệp là kết quả tổng hợp các kiến thức mà sinh viên đã được
học và nghiên cứu trong suốt quả trình học tập tại trường. Nhận thức rõ được điều
đó, với tinh thần tự giác học hỏi, cố gắng nỗ lực của bản thân và sự hướng dẫn tận
tình của cô giáo ThS. Phạm Thị Liên, em đã hoàn thành xong đồ án tốt nghiệp của
mình.
Em xin cam đoan: Nội dung đồ án của em không sao chép nội dung cơ bản
từ đồ án khác và sản phẩm đồ án là của chính bản thân em nghiên cứu và xây dựng
lên. Mọi thông tin sai lệch em xin hoàn toàn chịu trách nhiệm trước hội đồng bảo
vệ.
Thái Nguyên, tháng 6 năm 2016
Sinh Viên

Trần Trọng Hiếu

1


LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành và sự tri ân sâu sắc tới các thầy cô của
trường Đại học Công nghệ thông tin và Truyền thông nói chung và các thầy cô
khoa Công nghệ thông tin nói riêng đã tạo điều kiện giúp đỡ em trong thời gian
làm bài thực tập tốt nghiệp.
Đặc biệt, em xin chân thành cảm ơn cô giáo ThS. Phạm Thị Liên đã nhiệt
tình chỉ bảo và hướng dẫn em trong suốt quá trình thực hiện và hoàn thành đồ án
này.
Trong quá trình thực tập do kiến thức của bản thân còn hạn chế nên bài báo
cáo của em khó tránh khỏi những thiếu sót. Em rất mong nhận được sự đóng góp ý
kiến từ quý thầy cô để em có thể học hỏi thêm nhiều kiến thức và hoàn thiện tốt
hơn.
Em xin chân thành cảm ơn!


Thái Nguyên, tháng 6 năm 2016
Sinh Viên

Trần Trọng Hiếu

2


MỤC LỤC
LỜI CAM ĐOAN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
LỜI CẢM ƠN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
MỤC LỤC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
DANH MỤC HÌNH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
DANH MỤC BẢNG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
LỜI NÓI ĐẦU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Chương 1. TÌM HIỂU VỀ CƠ SỞ LÝ THUYẾT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1. Ngôn ngữ lập trình hướng đối tượng OBJECTIVE-C . . . . . . . . . . . . . . . . . . . 11
1.1.1. Lịch sử phát triển ngôn ngữ Objective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2. Giới thiệu về Objective-C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1.3. Các yếu tố căn bản của Ojective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2. Giới thiệu về hệ điều hành iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.2.1. Quá trình phát triển của iOS qua các bản nâng cấp . . . . . . . . . . . . . . . . . 21
1.2.2. Kiến trúc hệ điều hành iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.2.3. Đặc điểm của hệ điều hành iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3. Ngôn ngữ lập trình hướng đối tượng Objective-c và công cụ lập trình
XCode SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3.1. Bộ công cụ hỗ trợ lập trình xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3.2. XCode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.3.3. iPhone Simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.3.4. Xây dựng và cài đặt ứng dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

1.3.5. Mô hình MVC (Model-View-Controller). . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.3.6. Một số đối tượng giao diện cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Chương 2. TÌM HIỂU GOOGLE MAPS SDK, GOOGLE PLACE API VÀ XÂY
DỰNG WEBSERVICE CHO ỨNG DỤNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.1. Google Maps SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3


2.1.1. Tổng quan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.1.2. Các loại bản đồ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.1.3. Đổi chế độ hiển thị bản đồ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.1.4. Tích hợp Google Maps vào ứng dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.1.5. Các thành phần giao diện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2. Google Places API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2.1. Các truy vấn địa điểm khả dụng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2.2. Tìm kiếm địa điểm gần nhất – Nearby Search . . . . . . . . . . . . . . . . . . . . . . 43
2.2.3. Thông tin chi tiết về địa điểm - Place Detail. . . . . . . . . . . . . . . . . . . . . . . . 45
2.2.4. Gợi ý kết quả tìm kiếm - Place autocomplete . . . . . . . . . . . . . . . . . . . . . . . 45
2.3. Xây dựng web service cho ứng dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.3.1. Mô tả . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.3.2. Các hàm API của web service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Chương 3. ĐẶC TẢ, PHÂN TÍCH, THIẾT KẾ HỆ THỐNG . . . . . . . . . . . . . . . . . . 52
3.1. Đặc tả bài toán . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.2. Mô tả hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.2.1. Tra cứu luật giao thôn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.2.2. Tra cứu quy định xử phạt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.2.3. Tra cứu biển báo giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2.4. Tìm kiếm và hiển thị các địa điểm gần nhất . . . . . . . . . . . . . . . . . . . . . . . . 55
3.2.5. Đăng và xem thông tin giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.3. Phân tích thiết kế hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

3.3.1. Biểu đồ Use case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.3.2. Biểu đồ trình tự . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.3.3. Biểu đồ hoạt động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.3.4. Biểu đồ lớp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.4. Thiết kế cơ sở dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.4.1. Thiết kế bảng cơ sở dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4


3.4.2. Sơ đồ thực thể liên kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Chương 4. XÂY DỰNG CHƯƠNG TRÌNH TRA CỨU THÔNG TIN GIAO
THÔNG TRÊN HỆ ĐIỀU HÀNH iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.1. Các thư viện và framework sử dụng trong chương trình. . . . . . . . . . . . . . . . . 70
4.2. Màn hình khởi động. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.3. Các View Controller trong chương trình. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.3.1. View gốc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.3.2. View tra cứu quy định xử phạt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.3.3. View tra cứu biển báo giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.3.4. View tra cứu luật giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.3.5. View hiển thị bản đồ giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.4. Giao diện sau khi cài đặt của chương trình. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.4.1. Giao diện chính và menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.4.2. Chức năng tra cứu quy định xử phạt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.4.3. Chức năng tra cứu luật biển báo giao thông . . . . . . . . . . . . . . . . . . . . . . . . 74
4.4.4. Chức năng tra cứu luật giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.4.5. Chức năng hiển thị bản đồ, tìm kiếm địa điểm. . . . . . . . . . . . . . . . . . . . . . 75
4.4.6. Chức năng tìm địa điểm gần nhất . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.4.7. Chức năng đăng nhập đăng ký tài khoản . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.4.8. Chức năng đăng và hiển thị thông tin giao thông . . . . . . . . . . . . . . . . . . . 77
KẾT LUẬN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

TÀI LIỆU THAM KHẢO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

5


DANH MỤC HÌNH
Hình 1.1: Kiến trúc hệ điều hành iOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Hình 1.2: Quá trình cài đặt XCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Hình 1.3: Giao diện XCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Hình 1.4: Các mẫu ứng dụng trong XCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Hình 1.5: Giao diện iPhone Simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Hình 1.6: Mô hình MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Hình 1.7: Model-View-Controller Layer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Hình 1.8: UILabel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Hình 1.9: Thuộc tính của Label. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Hình 1.10: UIButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Hình 1.11: Thuộc tính của Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Hình 1.12 : UIImage khi kéo ra thiết kế giao diện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Hình 1.13: Table View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Hình 2.1: Các chế độ hiển thị của Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Hình 3.1: Mô tả chức năng tra cứu luật giao thông. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Hình 3.2: Mô tả chức năng tra cứu quy định xử phạt. . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Hình 3.3: Mô tả chức năng tra cứu biển báo giao thông . . . . . . . . . . . . . . . . . . . . . . . . 54
Hình 3.4: Mô tả chức năng tìm kiếm và hiển thị các địa điểm gần nhất. . . . . . . . . 55
Hình 3.5: Mô tả chức năng đăng và xem thông tin giao thông. . . . . . . . . . . . . . . . . . 56
Hình 3.6: Biểu đồ Use case tổng quát. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Hình 3.7: Biểu đồ Use case chức năng tra cứu luật giao thông . . . . . . . . . . . . . . . . . 57
Hình 3.8: Biểu đồ Use case chức năng xem bản đồ giao thông . . . . . . . . . . . . . . . . . 59
Hình 3.9: Biểu đồ trình tự chức năng tra cứu luật giao thông đường bộ . . . . . . . . 63
Hình 3.10: Biểu đồ trình tự chức năng tra cứu biển báo giao thông. . . . . . . . . . . . . 63

Hình 3.11: Biểu đồ trình tự chức năng tra cứu quy định xử phạt . . . . . . . . . . . . . . . 63
Hình 3.12: Biểu đồ trình tự chức năng tra cứu thông tin địa điểm . . . . . . . . . . . . . . 64
6


Hình 3.13: Biểu đồ trình tự chức năng tra cứu thông tin giao thông . . . . . . . . . . . . 64
Hình 3.14: Biểu đồ trình tự chức năng tìm kiếm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Hình 3.15: Biểu đồ trình tự chức năng đăng nhập. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Hình 3.16: Biểu đồ trình tự chức năng đăng thông tin giao thông . . . . . . . . . . . . . . 65
Hình 3.17: Biểu đồ trình tự chức năng báo cáo địa điểm sai. . . . . . . . . . . . . . . . . . . . 65
Hình 3.18: Biểu đồ trình tự chức năng đăng ký . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Hình 3.19: Biểu đồ hoạt động chức năng đăng ký. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Hình 3.20: Biểu đồ hoạt động chức năng xem bản đồ giao thông. . . . . . . . . . . . . . . 67
Hình 3.21: Biểu đồ hoạt động chức năng đăng thông tin giao thông . . . . . . . . . . . . 67
Hình 3.22: Biểu đồ trình tự cho chức năng đăng ký . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Hình 3.23: Biểu đồ lớp hệ thống. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Hình 3.24: Sơ đồ thực thể liên kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Hình 4.1. Các thư viện và framework hệ thống được sử dụng . . . . . . . . . . . . . . . . . . 70
Hình 4.2: Thiết kế màn hình khởi động cho ứng dụng . . . . . . . . . . . . . . . . . . . . . . . . . 70
Hình 4.3: Thiết kế Root View Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Hình 4.4: Thiết kế View quy định xử phạt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Hình 4.5: Thiết kế View tra cứu biển báo giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Hình 4.6: Thiết kế View tra cứu luật giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Hình 4.7: Thiết kế View hiển thị thông tin giao thông . . . . . . . . . . . . . . . . . . . . . . . . . 73
Hình 4.8: Giao diện và menu của chương trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Hình 4.9: Chức năng tra cứu các hành vi vi phạm theo từng loại phương tiện . . 74
Hình 4.10: Chức năng tra cứu biển báo giao thông. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Hình 4.11: Chức năng tra cứu luật giao thông . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Hình 4.12: Chức năng hiển thị bản đồ, tìm kiếm địa điểm. . . . . . . . . . . . . . . . . . . . . . 75
Hình 4.13. Chức năng tìm địa điểm gần nhất . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Hình 4.14: Chức năng đăng nhập đăng ký tài khoản . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

7


DANH MỤC BẢNG
Bảng 1.1: Các kiểu dữ liệu trong Objective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Bảng 1.2: Các phép toán trong Objective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Bảng 1.3: Các định dạng ảnh được hỗ trợ trên iPhone . . . . . . . . . . . . . . . . . . . . . . . . . 36
Bảng 2.1: Các loại bản đồ Google Maps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Bảng 2.2: Các loại địa điểm trong Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Bảng 3.1: Bảng user trong cơ sở dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Bảng 3.2: Bảng places trong cơ sở dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

8


LỜI NÓI ĐẦU
Dưới sự phát triển vượt bậc của Công nghệ thông tin, thời đại Internet bùng
nổ chiếc điện thoại di động không chỉ đơn giản là phương tiện liên lạc mà nó còn
là công cụ hữu ích cho con người. Xu hướng sử dụng Smartphone và máy tính
bảng đang gia tăng nhanh chóng trên thế giới nói chung và Việt Nam nói riêng,
trong đó theo nghiên cứu của IDC năm 2012 Việt Nam có tốc độ tăng trưởng
266%. Android, iOS, Windows Phone là những hệ điều hành chạy trên
Smartphone và máy tính bảng phổ biến nhất thế giới: Android 75%, iOS 17,3%,
Windows Phone 3,2%.
Khi tham gia giao thông, mọi người vẫn còn e ngại về kiến thức luật của
mình. Không nắm vững các quy tắc giao thông, tình huống bị xử phạt là điểm
chung của đại đa số người tham gia giao thông Việt Nam.
Với tình hình đó, cùng với nhu cầu cập nhật liên tục các thông tin giao

thông trên các tuyến đường của người dùng. Em đã xây dựng chương trình “Tra
cứu thông tin giao thông trên hệ điều hành iOS” nhằm cung cấp một chương trình
tra cứu các thông tin về quy định xử phạt, biến báo, luật giao thông, tình hình giao
thông trực tuyến trên bản đồ giúp người sử dụng chấp hành đúng luật, dễ dàng
tránh và xử lý các sự cố bất ngờ xảy ra trên đường giao thông, nâng cao ý thức
chấp hành luật giao thông của người dùng.
Nội dung tìm hiểu:
 Tên đề tài: Xây dựng chương trình tra cứu thông tin giao thông trên hệ
điều hành ios
 Các vấn đề cần giải quyết
 Tìm hiểu về ngôn ngữ lập trình Objective – C
 Tìm hiểu về hệ điều hành iOS
 Tìm hiểu về phương pháp phát triển ứng dụng trên hệ điều hành iOS
 Tìm hiểu về Google Maps SDK, Google Place API
9


 Tìm hiểu về cách xây dựng webservice dựa trên PHP và MySQL
 Dự kiến kết quả: Xây dựng được ứng dụng hoàn thiện chạy trên iPhone
 Bố cục bài báo cáo
 Toàn bộ bài báo cáo đồ án tốt nghiệp gồm 4 chương sau
 Chương 1: Tìm hiểu về cơ sở lý thuyết
 Chương 2: Tìm hiểu về Google Maps SDK, Google Place API và xây
dựng webservice cho ứng dụng
 Chương 3: Đặc tả, phân tích, thiết kế hệ thống
 Chương 4: Xây dựng chương trình tra cứu thông tin giao thông trên hệ
điều hành iOS


10



Chương 1.
TÌM HIỂU VỀ CƠ SỞ LÝ THUYẾT

1.1. Ngôn ngữ lập trình hướng đối tượng OBJECTIVE-C
1.1.1. Lịch sử phát triển ngôn ngữ Objective-C
Vào đầu những năm 1980, Brad J. Cox đã thiết kế ra ngôn ngữ Objective-C
dựa trên ngôn ngữ SmallTalk-80. Có thể hình dung rằng Objective-C là ngôn ngữ
lập trình được đặt ở lớp trên củangôn ngữ lập trình C truyền thống, điều này có
nghĩa rằng ngôn ngữ C được bổ sung thêm các thành phần mở rộng (extensions) để
hình thành nên một ngôn ngữ lập trình mới đó chính là Objective-C. Ngôn ngữ
Objective-C này cho phép chúng ta tạo và quản lý các đối tượng (Objects).
Đến năm cuối tháng 12 năm 1996, hãng Apple đã mua lại công ty NeXT
Software và môi trường NEXTSTEP/OPENSTEP đã trở thành thành phần cột lỗi
của hệ điều hành OS X mà Apple giới thiệu sau này. Phiên bản chính thức của môi
trường phát triển này do Apple giới thiệu ban đầu có tên là Cocoa. Bằng việc hỗ
trợ sẵn ngôn ngữ Objective-C, đồng thời tích hợp một số công cụ phát triển khác
như Project Builder (đây chính là tiền thân của XCode) và Interface Builder, Apple
đã tạo ra một môi trường mạnh mẽ để phát triển ứng dụng trên MAC OS X.
Đến năm 2007, Apple tung ra bảng nâng cấp cho ngôn ngữ Objective-C và
gọi đó là Objective-C 2.0. Cho đến khi Apple chính thức giới thiệu iPhone vào
năm 2007, các rất rất nhiều các developers mong muốn được tham gia phát triển
ứng dụng trên thiết bị mang tính cách mạng về công nghệ này. Ban đầu, Apple
không khuyến khích việc tham gia phát triển ứng dụng từ bên thứ ba này mà chỉ
cho phép các ứng dụng chạy trên nền web được chạy thông qua ứng dụng dạng
trình duyệt Safari mà họ cấy sẵn trong iPhone. Điều này làm cho các ứng dụng khi
muốn chạy phải yêu cầu kết nối tới máy chủ web host ứng dụng của các developers
tham gia phát triển. Rõ ràng động tác này của Apple không thể đáp ứng nhu cầu
của các developers cho có rất nhiều hạn chế trong việc phát triển ứng dụng web11



based như thế. Ngay sau đó, Apple đã trấn an giới phát triển ứng dụng bằng việc
chính thức thông báo rằng các developers sẽ có thể phát triển các ứng dụng thuần
iPhone. Tức là các ứng dụng nằm trong iPhone và chạy trên hệ điều hành của
iPhone giống như các ứng dụng có sẵn của Apple như Contacts, Stocks,
Weather,…chạy trên thiết bị đặc biệt này.
Đến năm 2010, với việc chính thức giới thiệu thêm thiết bị iPad, Apple
chuyển sang sử dụng thuật ngữ tổng quát hơn đó chính làiOS để chỉ hệ điều hành
dùng trên các thiết bị di động có thể có sự khác biệt về kích thước vật lý và độ
phân giải như iPhone, iPod, iPad và các phiên bản khác nhau của chúng. iOS SDK
giờ đây sẽ cho phép các developers phát triển ứng dụng trên bất cứ thiết bị iOS
này. iOS 6 chính là phiên bản hiện tại của hệ điều hành đầy thú vị này.
1.1.2. Giới thiệu về Objective-C
Objective-C là một ngôn ngữ lập trình hướng đối tượng (OOP) được xây
dựng dựa trên ngôn ngữ lập trình C. Tuy nhiên ta phải thấy sự khác nhau giữa C và
Objective-C ở chỗ Objective-C là ngôn ngữ lập trình hướng đối tượng còn C lại là
ngôn ngữ lập trình hướng thủ tục. Objective-C là ngôn ngữ chính được sử dụng để
phát triển hệ điều hành MacOS X cũng như iOS (hệ điều hành chạy trên các thiết
bị iPhone, iPod hay iPad).
Do Objective-C được phát triển từ C nên chúng ta có thể sử dụng C trong
chương trình viết bằng Objective-C. Objective-C compiler sẽ chuyển tất cả mã
lệnh viết bằng C sang thành mã biên dịch bằng Objective-C. Chính vì vậy mà
Objective-C có đầy đủ sức mạnh của ngôn ngữ C và những cải tiến của một ngôn
ngữ lập trình hướng đối tượng hiện đại.
Objective-C đơn giản và nhỏ gọn nhưng lại là một thành phần mở rộng rất
mạnh mẽ của ngôn ngữ chuẩn ANSI C. Objective-C cung cấp đầy đủ các khả năng
lập trình hướng đối tượng nhưng lại được thực thi theo cách khá đơn giản và dễ
dàng.
Là ngôn ngữ hướng đối tượng nên Objective-C giải quyết các vấn đề lập

12


trình dựa trên khái niệm các Objet. Nó bao gồm 3 phần:
 Interface: Interface của một lớp (class) thông thường được định nghĩa
trong file header với đuôi .h. Nó chính là phần khai báo của một lớp.
 Implementation: Mã nguồn của chương trình được viết trong phần
implementation của một lớp và được định nghĩa trong một file có đuôi .m. Đây là
phần định dạng nghĩa của lớp.
 Instantiation: Sau khi khai báo và định nghĩa một lớp, chúng ta có thể
thực thể hóa lớp này bằng việc cấp phát bộ nhớ cho new object của lớp đó.
 Ngôn ngữ lập trình Objective-C được chọn vì một số lý do dưới đây:
 Nó là ngôn ngữ lập trình hướng đối tượng và các chức năng cung cấp
bởi Cocoa framework chỉ có thể được mang lại bởi các kỹ thuật hướng đối tượng.
 Nó là thành phần mở rộng của chuẩn ANSI C vì vậy các chương trình
viết bằng C của framework này sẽ không bị mất đi tính năng nào và người dùng
được hưởng các lợi thế của ngôn ngữ C. Với ngôn ngữ này, người dùng có thể lựa
chọn cả lập trình hướng đối tượng và lập trình thủ tục khi cần thiết.
 Nó đơn giản và dễ học bởi cú pháp của nó khá ngắn gọn nên nó giúp
cho lập trình viên đạt được hiệu quả mong muốn mà không gặp nhiều khó khăn.
 Nó rất năng động nếu so sánh với các ngôn ngữ mở rộng khác dựa trên
C. Trình biên dịch đóng một vai trò rất quan trọng trong việc bảo vệ thông tin liên
quan đến các đối tượng để sử dụng lúc run time.
 Nó là một ngôn ngữ mạnh bởi vì các quyết định có thể được đưa ra lúc
biên dịch sẽ được trì hoãn cho tới khi chương trình chạy.
1.1.3. Các yếu tố căn bản của Ojective-C

 Khai báo biến và cách sử dụng
Biến
 Biến được sử dụng để lưu trữ các giá trị của ứng dụng. Biến gồm có:

kiểu dữ liệu, tên biến và giá trị của biến.
13


 Cú pháp:
Kiểu_dữ_liệu tên_biến;
Hoặc
Kiểu_dữ_liệu tên_biến = giá_trị_của_biến;
 Quy tắc đặt tên
 Ngôn ngữ Objective-C có phân biệt hoa thường.
 Tên biến không có dấu tiếng việt.
 Tên biến không có khoảng trắng.
 Tên biến không được bắt đầu bằng số.
 Tên biến không được có các ký tự đặc biệt ( ngoại trừ dấu gạch dưới _ )
 Tên biến không được đặt trùng với các từ khoá của ngôn ngữ objectiveC. VD: void, if, static, ...

 Kiểu dữ liệu
Kiểu dữ liệu sẽ giúp trình biên dịch xác định được loại dữ liệu (số nguyên,
số thực, chuỗi,…) mà chúng ta muốn lưu trữ là gì từ đó sẽ cấp phát lượng bộ nhớ
tương ứng với loại dữ liệu mà chúng ta cần lưu trữ. Objective-C hỗ trợ các kiểu dữ
liệu cơ bản như sau:
Loại dữ liệu
Kí tự

Số nguyên

Tên kiểu

Số ô nhớ


Miền giá trị

char

1 byte

-128 … 127

unsigned char

1 byte

0 … 255

int

4 bytes

-2147483648 … 2147483647

unsigned int

4 bytes

0 … 4294967295

short

2 bytes


-32768 .. 32767

unsigned short 2 bytes

0 .. 65535

long

4 bytes

-2147483648 .. 2147483647

unsigned long

4 bytes

0 … 4294967295

14


Số thực

logic

-9,223,372,036,854,775,808 ..

long long

8 bytes


float

4 bytes

0 .. 3.4028235e+38

double

8 bytes

0 .. 1.7976931E+308

Long double

16 bytes

0 .. 1.1897315E+509

BOOL

1 byte

0, 1; True, False; Yes, No

9,223,372,036,854,775,807

Bảng 1.1: Các kiểu dữ liệu trong Objective-C

 Phép toán

Phép toán

Ký hiệu

Ví dụ

Cộng

+

A+B

Trừ

-

A-B

Nhân

*

A*B

Chia

/

A/B


Lấy phần dư

%

A%B

Bảng 1.2: Các phép toán trong Objective-C
Lưu ý: phép lấy phần dư chỉ được dùng trên 2 toán hạng kiểu số nguyên
(nếu không sẽ sinh lỗi cú pháp)
Ví dụ: 9 % 5 = 4

 Từ khóa
Khai báo class, category và protocol
 Một số từ khóa thông dụng trong Objective-C
 @interface: Khai báo class hoặc interface.
 @implementation: Định nghĩa class hoặc category.
 @protocol: Khai báo protocol
 @end: Kết thúc trong việc khai báo, định nghĩa category hoặc protocol.
 @private: Giới hạn phạm vi trong lớp mà biến thể hiện được khai báo.
 @protected: Giới hạn phạm vi trong lớp và lớp con kế thừa mà biến thể
15


hiện được khai báo.
 @public: không giới hạn phạm vi truy xuất.
 @class: khai báo trước một tên lớp đã được định nghĩa ở một nơi khác.
 @selector(method_name): Trả về một selector đã được biên dịch mà
được định nghĩa thông qua method_name.
 @protocol(protocol_name): Trả về một protocol protocol_name (một
thể hiện của một lớp Protocol). @protocol là hợp lệ (không có protocol_name)

trong trường hợp khai báo trước
 @synchronized: Định nghĩa một block mã nguồn trong nó phải được
thực hiện đồng bộ
 #import: Dùng để include một file, tương tự include trong C, C++.
Phạm vi truy xuất các biến
 @private: Giới hạn phạm vi trong lớp mà biến thể hiện được khai báo
 @protected (default): Giới hạn phạm vi trong lớp và lớp con kế thừa
mà biến thể hiện được khai báo
 @public: Không giới hạn phạm vi truy xuất
 Mặc định là protected.
Xử lý ngoại lệ
 Ngôn ngữ cũng hỗ trợ các cấu trúc try – catch – throw - finally giống
như C++ @try - @catch - @throw - @finally cách thức sử dụng cũng hoàn toàn
tương tự.

 Câu lệnh trong Objective-C
Các câu lệnh điều khiển if, switch và các câu lệnh lặp for, while… tương tự
như C/C++ hoặc Java
 Lệnh If

 Lệnh if
if (<condition>) {
16


<statements>
}

 Lệnh if … else
if (<condition>) {

<statements>
} else {
<statements>
}
 Các câu lệnh lặp
 For
for (<initial>; <condition>; <increment>) {
<statements>
}
 While
while (<condition>) {
<statements>
}
 Do … While
do {
<statements>
} while (<condition>)
 Câu lệnh rẽ nhánh: Switch
 switch (<expression>) {
case <constant>: <statements>
break;
default:
break;

17


}

 Mảng

Mảng là 1 tập hợp nhiều biến nhớ có cùng kiểu, gọi là kiểu phần tử của
mảng, được cấp phát ở những vị trí liên tục trong bộ nhớ.
Mỗi phần tử (biến nhớ) trong mảng được xác định dựa trên tên mảng và các
chỉ số xác định vị trí của phần tử trong mảng.
Chỉ số phần tử của mảng là các số nguyên không âm.
Mảng NSArray
Cú pháp
NSArray *tên_mảng;
Để khởi tạo giá trị cho các phần tử trong mảng ta sử dụng hàm
<initWithObjects>

 Chuỗi – Đối tượng NSString
Khởi tạo chuỗi
 Đối với chuỗi trong Objective-C phải bắt đầu bằng @. VD: @“UIT”
 Để kiểm tra giá trị của chuỗi ta dung hàm NSLog
VD: NSLog(@“%@”,@“UIT”);
Đối tượng NSString
 Cách khai báo:
 NSString *Chuoi1;
 Các hàm xử lý chuỗi đối với NSString:
 length: lấy độ dài của chuỗi
 characterAtIndex: Lấy ra kỹ tự ở vị trí chỉ định
 componentsSeparatedByString: Cắt chuỗi thành nhiều phần
 substringFromIndex: Lấy ra chuỗi con tính từ vị trí chỉ định đến cuối
chuỗi
 substringToIndex: Lấy ra chuỗi con tính từ vị trí chỉ định đến đầu
18


chuỗi

 rangeOfString: Tìm xem một chuỗi nào có có tồn tại trong chuỗi cho
trước hay không
 stringByReplacingOccurrencesOfString:withString: Thay thế một
chuỗi bằng một chuỗi mới trong chuỗi cho trước
 compare: So sánh hai chuỗi với nhau
 intValue: Lấy số nguyên ra từ chuỗi.

 Object
Objective-C cho phép định danh một đối tượng mà không cần phải chỉ ra
một lớp cụ thể của đối tượng đó, điều này cho phép định kiểu động.
ID: Trong Objective-C, định danh đối tượng là một kiểu dữ liệu khác biệt:
id. Kiểu này được định nghĩa như là một con trỏ trỏ đến một đối tượng, trong thực
tế, một con trỏ trỏ đến các biến thể hiện của một đối tượng, với dữ liệu duy nhất.
Giống như hàm hoặc mảng trong C, một đối tượng được định danh bởi một địa
chỉ. Tất cả các đối tượng, bất kể là biến thể hiện hay phương thức, đều có kiểu là
id.
id anObject;

19


 Lớp
Định nghĩa lớp
Một lớp trong Objective-C được định nghĩa gồm 2 file thành phần tương tự
C, C++. Một file *.h định nghĩa trước các biến thành phần và tên các phương thức,
file *.m định nghĩa phần thực thi cho các phương thức trong file *.h
File ClassName.h
#import <headerFile.h>
@interface ClassName {
variable1 declaration;

variable2 declaration;
}
method1 declaration;
method2 declaration;
@end
Objective-C sử dụng từ khóa @interface để khai báo một tên lớp trong file
h. Từ khóa @end được sử dụng ở cuối phần khai báo.
File ClassName.m
#import “ClassName.h”
@implementation ClassName
-method 1 //triển khai phương thức 1
-method 2 // triển khai phương thức 2
@end
Objective-C sử dụng từ khóa @implementation để khai báo phần thực thi
thực sự của lớp trong file m. Từ khóa @end được sử dụng ở cuối phần khai báo.

 Phương thức
Class method
 Ký hiệu dấu +
20


 Truy xuất thông qua tên lớp
 Không thể truy cập vào các biến thể hiện (Instance variables)
Instance method
 Ký hiệu dấu  Truy xuất thông qua đối tượng
Khai báo phương thức
-/+ (return_type) method;
-/+ (return_type) methodPara1 : (type) para1;
-/+ (return_type) methodPara1 : (type) para1 andPara2: (type) para2;

Gọi phương thức
// Class method
MyClass *myClass = [MyClass method];
// Instance method
[object method];
[object methodPara1:pa1];
[object methodPara1:pa1 andPara2:pa2];

 Kế thừa
Tương tự như các ngôn ngữ khác như C++,…
Trong Objective-C, root class của tất cả các class là NSObject
Ví dụ: Class Teacher kế thừa từ lớp Person

21


1.2. Giới thiệu về hệ điều hành iOS
iOS là hệ điều hành trên các thiết bị dân động của Apple. Ban đầu hệ điều
hành này chỉ được phát triền để chạy trên iPhone, nhưng sau đó nó đã mở rộng để
chạy trên các thiết bị của Apple như iPod touch, iPad và Apple TV. Ngày 31 tháng
5 năm 2011, Apple Sotre của Apple chứa khoảng 500 000 ứng dụng iOS và được
tải về tổng cộng khoảng 15 tỷ lần. Trong quý 4 năm 2010, có khoảng 26% điện
thoại thông minh chạy hệ điều hành iOS, sau hệ điều hành Android của Google và
Symbia của Nokia.
Giao diện người dùng của iOS dựa trên cơ sở thao tác bằng tay. Người dùng
có thể tương tác với hệ điều hành này thông qua rất nhiều động tác bằng tay trên
màn hình cảm ứng của các thiết bị của Apple.
Hệ điều hành này được tiết lộ tại Hội nghị và Triển lãm Macworld diễn ra
vào tháng 1 năm 2007 và được phát hành vào tháng 9 năm đó. Khi đó, hệ điều
hành này chưa có một cái tên riêng nên chỉ đơn giản là “iPhone chạy OS X”. Ban

đầu, ứng dụng của bên thứ ba không được hổ trợ. Steve Job đã chỉ ra rằng những
nhà phát triển có thể xây dựng các ứng dụng web mà “sẽ cư xử như những ứng
dụng ban đầu trên iPhone”. Vào ngày 17 tháng 10 năm 2007, Apple thông báo một
bộ phát triền phần mềm đáng được xây dựng và họ dự định sẽ đưa nó đến “tay các
nhà phát triển vào tháng 2”. Ngày 6 tháng 3 năm 2008, Apple đã phát hành bản
dùng thử đầu tiên, cùng với một cái tên mới cho hệ điều hành đó là “iPhone OS”.
22


Tháng 6 năm 2010, Apple đổi cái tên iPhone OS thành iOS. Nhãn hiệu
“iOS” đã được Cisco dùng để đặt tên cho hệ điều hành của mình. Để tránh các vụ
kiện cáo, Apple đã xin giấy phép sử dụng nhãn hiệu iOS từ Cisco.
1.2.1. Quá trình phát triển của iOS qua các bản nâng cấp
Phiên bản iOS 1.x: Đây là phiên bản đầu tiên và xuất hiện cùng chiếc
iPhone đầu tiên (hay còn gọi là iPhone 2G) vào ngày 29/6/2007. Hệ điều hành mới
mang đến một giao diện và cách thức sử dụng hoàn toàn mới cho một chiếc điện
thoại cảm ứng điển hình nói chung và cho các chiếc điện thoại của Apple nói riêng
như: các biểu tượng (icon) sắp xếp đồng nhất trên màn hình chính, cảm ứng đa
điểm.
Phiên bản iOS 2.x: Phiên bản lớn thứ 2 được Apple giới thiệu sau phiên bản
đầu tiên 1 năm và phát hành chính thức cùng với chiếc iPhone thế hệ thứ 2 (iPhone
3G) cùng sự xuất hiện của App Store mang đến những ứng dụng từ các nhà phát
triển thứ 3 cho thiết bị di động của Apple.
Phiên bản iOS 3.x: 1 năm sau khi phát hành phiên bản hệ điều hành thứ 2,
phiên bản hệ điều hành thứ 3 được giới thiệu và xuất hiện chính thức ngày
17/6/2009 cùng iPhone 3GS. Ở phiên bản này, nhiều tính năng thiếu sót mà người
dùng than phiền đã được Apple bổ sung gần như đầy đủ như: sao chép văn bản,
nhắn tin đa phương tiện (MMS)
Phiên bản iOS 4.x: Thời điểm ra mắt chính thức phiên bản 4.x cũng là lúc
Apple chính thức đổi tên hệ điều hành của mình thành “iOS” và đây cũng là phiên

bản đầu tiên của hệ điều hành này hỗ trợ cho đồng thời nhiều thiết bị.
Phiên bản iOS 5.x: Giống như iOS 3, iOS 5 cũng bán ra cùng với 1 thiết bị
nâng cấp nhẹ của iPhone là iPhone 4S thay vì 1 phiên bản hoàn toàn mới.
Phiên bản iOS 6.x : Gắn liền với sự xuất hiện của iPhone 5, iOS 6 không
tích hợp quá nhiều tính năng mới hay có thay đổi lớn về giao diện như iOS 5, thay
vào đó iOS 6 tập trung vào việc cải tiến những tính năng chính vốn có từ trước.
Phiên bản iOS 7.x: Hệ điều hành iOS 7 Apple cho ra mắt năm 2013 gắn liền
23


với sự xuất hiện của iPhone 5S được cho là mang nhiều thay đổi nhất từ trước đến
nay cho người dùng một trải nghiệm mới mẻ hơn, tập trung vào sự đơn giản.
Phiên bản iOS 8.x: Vẫn là giao diện phẳng và nhiều màu sắc như iOS 7.
Điểm mới ở đây đó chính là các phần mềm và chức năng được bổ sung thêm. iOS
8 mang lại vô vàn những chức năng mới, tăng cường khả năng hoạt động chung
với Mac OS 10.10.
1.2.2. Kiến trúc hệ điều hành iOS
Apple không cho phép người dùng tiếp cận trực tiếp với bất kì phần cứng nào
của iPhone, mọi tương tác phần cứng phải thông qua một số lớp khác nhau của phần
mềm, hoạt động như một trung gian giữa các ứng dụng và thiết bị phần cứng.

Hình 1.1: Kiến trúc hệ điều hành iOS
24


Các lớp kiến trúc này mô tả một cách trừu tượng các thành phần cơ bản của
hệ điều hành iOS. Lớp cao hơn có mức độ trừu tượng lớn hơn, các lớp thấp hơn là
các lớp nền tảng, bị ràng buộc để giao tiếp trực tiếp với phần cứng.
Apple khuyến cao nên sử dụng các framework ở mức cao nhất có thể bởi vì
các lớp cao được xây dựng theo mô hình hướng đối tượng của các lớp thấp hơn.

Một framework là một thư mục chứa thư viện được chia sẻ và các tài
nguyên liên kết với chúng ví dụ như các file header, các hình ảnh…Framework là
cầu nối ứng dụng tới các interface của hệ thống như danh bạ, thư viện nhạc, album
ảnh…
Lớp Core OS (lớp nhân trong)
 Là lớp dưới cùng của iOS, nó là nền tảng của hệ điều hành. Nó đảm
nhiệm các nhiệm vụ như quản lí bộ nhớ, file hệ thống, kiên kết mạng và một số
chức năng khác, nó tác động trực tiếp tới phần cứng.
Lớp Core Service (lớp nhân dịch vụ)
 Lớp Core Service cung cấp các dịch vụ dựa trên nền tảng của lớp Core
OS. Nó cung cấp những truy cập cơ bản tới các dịch vụ của iOS và nó bao gồm
các thành phần sau: AddressBook framework, Core Data Framework, Core
Foundation Framework, Foundation Framework, Core Location Framework, Store
Kit Framework, SQLite library.
Lớp Media Services (lớp liên kết)
Lớp Media Service của iOS cung cấp các khả năng về audio, video,
animations và graphics. Như các lớp khác trong ngăn xếp của iOS, lớp media bao
gồm một số các Framework cái mà có thể được sử dụng trong những ứng dụng
iPhone như: Core Graphics Framework, Quartz Core Framework, OpenGL ES
Framework, iPhone Audio Support, AV Foundation Framework, Core Audio
Frameworks, Open Audio Library, Media Player Framework.
Lớp Cocoa Touch (lớp tiếp xúc)
Lớp này nằm ở trên cùng trong ngăn xếp của iOS và chứa những
25


×