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

Đồ án xây dựng ứng dụng rèn luyện thể hình

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.37 MB, 76 trang )

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

ĐỒ ÁN 1

XÂY DỰNG ỨNG DỤNG RÈN LUYỆN THỂ HÌNH

GV HƯỚNG DẪN:
Th.S TRẦN ANH DŨNG

SV THỰC HIỆN:
PHẠM TRƯƠNG HẢI ĐOÀN - 20520046

TP. HỒ CHÍ MINH, 2023


LỜI CẢM ƠN
Sau quãng thời gian học tập và rèn luyện tại trường Đại học Công nghệ Thông
tin – ĐHQG TP.HCM, trong môn học ĐỒ ÁN 1, em quyết định chọn thực hiện đề
tài: XÂY DỰNG ỨNG DỤNG RÈN LUYỆN THỂ HÌNH nhằm củng cố, tổng kết,
cũng như nâng cao những kiến thức và kĩ năng mình đã học.
Để thực hiện được đồ án này, đầu tiên em xin được gửi lời cảm ơn chân thành
nhất đến thầy Trần Anh Dũng, giảng viên hướng dẫn của đồ án, đã tận tình hỗ trợ,
đánh giá và định hướng cho em trong suốt quá trình làm đồ án. Những gì em học
được qua q trình làm việc với thầy khơng chỉ có ý nghĩa lớn với sự hoàn thành của
đồ án mà cịn là những bài học q báu cho q trình học tập và làm việc sau này.
Đồng thời, em cũng xin gửi lời cảm ơn đến các quý thầy cô trường Đại học
Cơng nghệ thơng tin nói chung và các q thầy cơ khoa Cơng nghệ phần mềm nói
riêng đã giảng dạy, bồi dưỡng kiến thức và kĩ năng cho em trong suốt quãng thời gian


em học tại trường.
Cuối cùng, em muốn gửi lời cảm ơn đến gia đình, bạn bè đã thấu hiểu, hỗ trợ
em về mặt tinh thần cũng như có các góp ý rất chân thật, thực tế để đồ án ngày một
hồn thiện.
Trong q trình làm đồ án khơng tránh khỏi được những sai sót, em kính mong
nhận được sự chỉ dẫn và góp ý của q thầy cơ để hồn thiện và phát triển thêm.
Một lần nữa, em xin chân thành cảm ơn!

Thành phố Hồ Chí Minh, 23 tháng 06 năm 2023
Sinh viên

PHẠM TRƯƠNG HẢI ĐOÀN


MỤC LỤC
TÓM TẮT ĐỒ ÁN......................................................................................................1
Chương 1.

MỞ ĐẦU .............................................................................................2

1.1. Lý do chọn đề tài ...........................................................................................2
1.2. Mục đích nghiên cứu .....................................................................................3
1.2.1.

Khách quan ..........................................................................................3

1.2.2.

Chủ quan ..............................................................................................3


1.3. Đối tượng nghiên cứu ....................................................................................3
1.3.1.

Đối tượng công nghệ ...........................................................................3

1.3.2.

Đối tượng sử dụng ...............................................................................4

1.4. Phạm vi nghiên cứu .......................................................................................4
1.4.1.

Phạm vi môi trường .............................................................................4

1.4.2.

Phạm vi chức năng ..............................................................................4

Chương 2.

CƠ SỞ LÝ THUYẾT ..........................................................................6

2.1. Android ..........................................................................................................6
2.1.1.

Hệ điều hành Android .........................................................................6

2.1.2.

Ngôn ngữ lập trình Kotlin ...................................................................7


2.1.3.

Jetpack Compose .................................................................................7

2.1.4.

Lập trình bất đồng bộ với Flow, Coroutine .........................................8

2.1.4.1. Lập trình bất đồng bộ .......................................................................8
2.1.4.2. Coroutine .........................................................................................8
2.1.4.3. Flow .................................................................................................9
2.2. Firebase ..........................................................................................................9


2.2.1.

Cloud Firestore ....................................................................................9

2.2.2.

Firebase Authentication .....................................................................10

2.2.3.

Cloud Storage cho Firebase ...............................................................10

2.3. Full-text search với Algolia .........................................................................10
2.3.1.


Full-text search ..................................................................................10

2.3.2.

Algolia ...............................................................................................11

2.4. FoodData Central API .................................................................................12
Chương 3.

PHÂN TÍCH, THIẾT KẾ HỆ THỐNG ............................................13

3.1. Phân tích Use Case ......................................................................................13
3.1.1.

Sơ đồ Use Case ..................................................................................13

3.1.2.

Danh sách tác nhân ............................................................................13

3.1.3.

Danh sách Use Case ..........................................................................13

3.1.4.

Đặc tả Use Case .................................................................................15

3.2. Sơ đồ Sequence............................................................................................28
3.3. Sơ đồ Activity ..............................................................................................32

3.4. Kiến trúc hệ thống .......................................................................................38
3.4.1.

Sơ đồ tổng quan .................................................................................38

3.4.2.

Mô tả kiến trúc ..................................................................................38

3.5. Thiết kế Cơ sở dữ liệu .................................................................................39
3.5.1.

Sơ đồ Cơ sở dữ liệu tổng quan ..........................................................39

3.5.2.

Mô tả Cơ sở dữ liệu ...........................................................................39

3.6. Thiết kế Giao diện người dùng ....................................................................41
3.6.1.

Danh sách màn hình ..........................................................................43

3.6.2.

Mơ tả chi tiết các Màn hình ...............................................................45


3.6.2.1. Màn hình Đăng ký .........................................................................45
3.6.2.2. Màn hình Đăng nhập .....................................................................46

3.6.2.3. Màn hình Trang chủ.......................................................................47
3.6.2.4. Màn hình Lịch sử tập luyện ...........................................................48
3.6.2.5. Màn hình Chi tiết buổi tập .............................................................50
3.6.2.6. Màn hình Ghi chép thơng tin buổi tập ...........................................51
3.6.2.7. Màn hình Danh sách bài tập ..........................................................52
3.6.2.8. Màn hình Chi tiết bài tập ...............................................................53
3.6.2.9. Màn hình Thêm bài tập Custom ....................................................54
3.6.2.10. Màn hình Danh sách chương trình tập ........................................55
3.6.2.11. Màn hình Thêm mới chương trình tập.........................................56
3.6.2.12. Màn hình Lịch sử ăn uống ...........................................................58
3.6.2.13. Màn hình Danh sách thực phẩm ..................................................59
3.6.2.14. Màn hình Chi tiết thực phẩm .......................................................60
3.6.2.15. Màn hình Điều chỉnh Profile .......................................................61
3.6.2.16. Màn hình Ghi chép số đo cơ thể ..................................................62
Chương 4.

KẾT LUẬN .......................................................................................64

4.1. Thành quả ....................................................................................................64
4.2. Hạn chế ........................................................................................................64
4.3. Hướng phát triển ..........................................................................................64
TÀI LIỆU THAM KHẢO .........................................................................................65


DANH MỤC HÌNH
Hình 2.1. Logo Android, bản quyền được nắm giữ bởi Google (Nguồn: Wikimedia
Commons) ...................................................................................................................6
Hình 2.2. Logo ngơn ngữ lập trình Kotlin (Nguồn: Wikimedia Commons) ..............7
Hình 2.3. Logo Firebase (Nguồn: Wikimedia Commons) ..........................................9
Hình 2.4. Logo Algolia (Nguồn: Wikipedia) ............................................................11

Hình 2.5. Logo của USDA - Bộ Nông nghiệp Hoa Kỳ (Nguồn: Wikimedia
Commons) .................................................................................................................12
Hình 3.1. Sơ đồ Use Case tổng quan ........................................................................13
Hình 3.2 Sơ đồ Sequence cho Use Case Đăng ký.....................................................28
Hình 3.3. Sơ đồ Sequence cho Use Case Xem lịch sử tập luyện ..............................28
Hình 3.4. Sơ đồ Sequence cho Use Case Ghi chép một buổi tập .............................29
Hình 3.5. Sơ đồ Sequence cho Use Case Xem danh sách chương trình tập .............30
Hình 3.6. Sơ đồ Sequence cho Use Case Tạo chương trình tập ...............................30
Hình 3.7. Sơ đồ Sequence cho Use Case Ghi chép một ngày ăn ..............................31
Hình 3.8. Sơ đồ Sequence cho Use Case Theo dõi sự tiến bộ ..................................32
Hình 3.9. Sơ đồ Activity của Use Case Xem lịch sử tập luyện ................................32
Hình 3.10. Sơ đồ Activity cho Use Case Ghi chép một buổi tập..............................33
Hình 3.11. Sơ đồ Activity cho Use Case Xem danh sách Chương trình tập ............33
Hình 3.12. Sơ đồ Activity cho Use Case Tạo chương trình tập ................................34
Hình 3.13. Sơ đồ Activity cho Use Case Ghi chép một ngày ăn ..............................35
Hình 3.14. Sơ đồ Activity cho Use Case chỉnh sửa Profile ......................................36
Hình 3.15. Sơ đồ Activity cho Use Case Theo dõi sự tiến bộ ..................................37
Hình 3.16. Sơ đồ kiến trúc tổng quan .......................................................................38
Hình 3.17. Sơ đồ Cơ sở dữ liệu tổng quan ................................................................39
Hình 3.18. Màn hình Đăng ký ...................................................................................45
Hình 3.19. Màn hình Đăng nhập ...............................................................................46
Hình 3.20. Màn hình Trang chủ ................................................................................47
Hình 3.22. Màn hình Lịch sử tập luyện ....................................................................48

1


Hình 3.23. Màn hình Chi tiết buổi tập ......................................................................50
Hình 3.24. Màn hình Đăng ký ...................................................................................51
Hình 3.25. Màn hình Danh sách bài tập ....................................................................52

Hình 3.26. Màn hình Chi tiết bài tập.........................................................................53
Hình 3.27. Màn hình Thêm bài tập Custom ..............................................................54
Hình 3.28. Màn hình Danh sách chương trình tập ....................................................55
Hình 3.29. Màn hình Thêm mới chương trình tập ....................................................56
Hình 3.30. Màn hình Lịch sử ăn uống ......................................................................58
Hình 3.31. Màn hình Danh sách thực phẩm..............................................................59
Hình 3.32. Màn hình Chi tiết thực phẩm ..................................................................60
Hình 3.33. Màn hình Điều chỉnh Profile ...................................................................61
Hình 3.34. Màn hình Đăng ký ...................................................................................62

2


DANH MỤC BẢNG
Bảng 3.1. Danh sách tác nhân ...................................................................................13
Bảng 3.2. Danh sách Use Case..................................................................................15
Bảng 3.3. Đặc tả Use Case Đăng ký .........................................................................16
Bảng 3.4. Đặc tả Use Case Đăng nhập .....................................................................16
Bảng 3.5. Đặc tả Use Case Xem lịch sử tập luyện....................................................17
Bảng 3.6. Đặc tả Use Case Ghi chép một buổi tập ...................................................18
Bảng 3.7. Đặc tả Use Case Bắt đầu một buổi tập .....................................................19
Bảng 3.8. Đặc tả Use Case Xem danh sách chương trình tập ...................................20
Bảng 3.9. Đặc tả Use Case Tạo chương trình tập .....................................................21
Bảng 3.10. Đặc tả Use Case Xem danh sách bài tập ................................................22
Bảng 3.11. Đặc tả Use Case Tạo bài tập Custom .....................................................23
Bảng 3.12. Đặc tả Use Case Ghi chép một ngày ăn..................................................24
Bảng 3.13. Đặc tả Use Case Xem thông tin dinh dưỡng của thực phẩm ..................24
Bảng 3.14. Đặc tả Use Case Chỉnh sửa Profile .........................................................25
Bảng 3.15. Đặc tả Use Case Thêm số đo cơ thể .......................................................26
Bảng 3.16. Đặc tả Use Case Theo dõi sự tiến bộ ......................................................27

Bảng 3.17. Mô tả Collection User .............................................................................40
Bảng 3.18.Mô tả Collection Food .............................................................................40
Bảng 3.19. Mô tả Collection Routine .......................................................................40
Bảng 3.20. Mô tả Collection EatingDay ...................................................................41
Bảng 3.21. Mô tả Collection Workout ......................................................................41
Bảng 3.22. Mô tả Collection Exercise ......................................................................42
Bảng 3.23. Mô tả Collection DefaultMeasurements .................................................42
Bảng 3.24. Mô tả Collection Exercise ......................................................................42
Bảng 3.25. Mô tả Collection Exercise ......................................................................43
Bảng 3.26. Danh sách các màn hình .........................................................................44
Bảng 3.27. Mơ tả Màn hình Đăng ký ........................................................................46
Bảng 3.28. Mơ tả Màn hình Đăng nhập ....................................................................47

1


Bảng 3.29. Mơ tả Màn hình Trang chủ .....................................................................48
Bảng 3.30. Mơ tả Màn hình Lịch sử tập luyện..........................................................49
Bảng 3.31. Mơ tả Màn hình Chi tiết buổi tập ...........................................................50
Bảng 3.32. Mơ tả Màn hình Ghi chép thơng tin buổi tập .........................................52
Bảng 3.33. Mơ tả Màn hình Danh sách bài tập .........................................................53
Bảng 3.34. Mơ tả Màn hình Chi tiết bài tập ..............................................................54
Bảng 3.35. Mơ tả Màn hình Thêm bài tập Custom ...................................................55
Bảng 3.36. Mơ tả Màn hình Danh sách chương trình tập .........................................56
Bảng 3.37. Mơ tả Màn hình Thêm mới chương trình tập .........................................57
Bảng 3.38. Mơ tả Màn hình Lịch sử ăn uống............................................................59
Bảng 3.39. Mơ tả Màn hình Danh sách thực phẩm...................................................59
Bảng 3.40. Mơ tả Màn hình Chi tiết thực phẩm........................................................60
Bảng 3.41. Mơ tả Màn hình Điều chỉnh Profile ........................................................62
Bảng 3.42. Mơ tả Màn hình Ghi chép số đo cơ thể ..................................................63


2


DANH MỤC TỪ VIẾT TẮT

Từ viết tắt

API

Từ đầy đủ

Ý nghĩa

Application
Programming Interface

FDC

FoodData Central

JVM

Java Virtual Machine

Giao diện lập trình ứng dụng

Bộ dữ liệu về dinh dưỡng, thực phẩm
phát triển bởi USDA
Máy ảo Java cho phép chạy chương

trình Java
Tập hợp các trình biên dịch và công
nghệ cho phép phát triển frontend,

LLVM

backend cho bất kỳ ngơn ngữ lập trình,
kiến trúc nào

SaaS

Software as a service

Phần mềm dạng dịch vụ

UI

User Interface

Giao diện người dùng

USDA

U.S. Department of

Bộ Nông nghiệp Hoa Kỳ

Agriculture

1



TÓM TẮT ĐỒ ÁN
Hiện nay, nhu cầu rèn luyện sức khỏe ngày một tăng cao do sự phát triển của
công nghệ khiến con người ngồi một chỗ nhiều và ít vận động. Trong đó, chăm sóc
sức khỏe thơng qua các hoạt động tập luyện thể hình và điều chỉnh chế độ dinh
dưỡng là cực kỳ phổ biến. Tuy nhiên, phần lớn các ứng dụng thường chỉ tập trung
vào 1 khía cạnh, tập luyện hoặc dinh dưỡng. Đồng thời, phần lớn các ứng dụng
hướng tới những người ít kinh nghiệm và cần rất nhiều sự chỉ dẫn từ ứng dụng, còn
các ứng dụng cho những người đã tập được một thời gian và chỉ cần ứng dụng với
vai trò hỗ trợ thì lại rất ít.
Từ đó, ứng dụng Stren, được xây dựng với Android Native, Algolia,
Firebase, ra đời nhằm tích hợp quản lý việc tập luyện và ăn uống, cũng như phục vụ
cho nhu cầu của nhóm người dùng đã có kinh nghiệm tập luyện và ăn uống nói trên.
Ứng dụng hỗ trợ các chức năng:
-

Ghi chép việc tập luyện.

-

Xem lịch sử tập luyện.

-

Bắt đầu một buổi tập (có đồng hồ bấm giờ tự động để canh quãng thời gian
nghĩ giữa hiệp).

-


Xem thơng tin, tìm kiếm, lọc các bài tập.

-

Tạo, chỉnh sửa các chương trình tập.

-

Ghi chép việc ăn uống theo từng ngày.

-

Xem thơng tin, tìm kiếm, lọc các thực phẩm.

-

Ghi chép các số đo cơ thể.

-

Theo dõi sự tiến bộ của bản thân theo thời gian.

Sau quá trình tìm hiểu và nghiên cứu, em đã xây dựng được một ứng dụng
hồn chỉnh, đầy đủ tính năng cần thiết, và báo cáo này sẽ trình bày các kết quả đạt
được sau quá trình trên.

1


Chương 1. MỞ ĐẦU

1.1.

Lý do chọn đề tài

Từ trước đến nay, sức khỏe đã ln đóng một vai trị mật thiết trong cuộc
sống của mỗi người bởi lẽ sức khỏe ảnh hưởng trực tiếp đến mọi khía cạnh trong
cuộc sống của con người, từ công việc, học tập, cho đến đời sống tinh thần. Trong
đó, hoạt động thể chất và dinh dưỡng là hai thành tố quan trọng trong việc quyết
định một người có khỏe mạnh hay khơng.

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]

Dần dà, việc rèn luyện thể chất không chỉ dừng lại ở mức bảo đảm sức khỏe
mà cịn là một hình thức phát triển bản thân, người tập luyện không chỉ tập để có
sức khỏe mà cịn để khỏe hơn, đẹp hơn, tốt hơn. Do đó các phịng gym và các dịch
vụ PT (Personal Trainer – HLV cá nhân) nở rộ lên và được nhiều người đón nhận.
Tuy nhiên đối với những người đã tập được một thời gian và có đủ kiến thức, định
hướng cho mình, hay đơn giản là muốn tự mình nắm rõ quá trình tập luyện thì họ
không cần quá nhiều sự kèm cặp, hướng dẫn như trong các chương trình PT. Thay
vào đó, cái họ cần là sự trợ giúp trong những việc đáng lẽ sẽ mất nhiều thời gian
nếu họ tự làm mà khơng có sự hỗ trợ nào: ghi chép quá trình rèn luyện, quan sát sự
tiến bộ của bản thân, quản lý các mục tiêu, tìm kiếm thơng tin…
Để giải quyết vấn đề trên, em quyết định chọn đề tài Xây dựng ứng dụng
rèn luyện thể hình, nhằm cung cấp một giải pháp chuyên hỗ trợ những người rèn
luyện thể hình trong quá trình tập luyện, ăn uống của họ. Ứng dụng cho phép họ có
cái nhìn tổng qt cũng như chi tiết về q trình rèn luyện của bản thân để có thể dễ
dàng điều chỉnh chương trình tập cũng như chế độ dinh dưỡng. Đồng thời, ứng
dụng cũng cung cấp nhiều tiện ích khác để hỗ trợ người dùng trong suốt quá trình
tập luyện.


2


1.2.

Mục đích nghiên cứu

1.2.1. Khách quan
- Đáp ứng nhu cầu của những người dùng đã có kiến thức và kinh nghiệm
trong việc tập luyện, ăn uống và mong muốn tự quản lý, ghi chép việc
tập luyện cũng như ăn uống của bản thân.
- Cung cấp một giải pháp chung cho cả việc quản lý quá trình tập luyện
và ăn uống, để người dùng không phải tải quá nhiều ứng chỉ để quản lý
cả 2 khía cạnh.
1.2.2. Chủ quan
- Nghiên cứu, áp dụng các best practice, các kĩ thuật trong việc lập trình
Android vào đề tài: phân chia package, quản lý resource, thiết kế kiến
trúc ứng dụng…
- Nghiên cứu, áp dụng các thư viện phổ biến trong lập trình Android:
o UI: Jetpack Compose
o Dependency Injection: Hilt
o Testing: JUnit, Espresso
o Asynchronous Programming: Flow, Coroutine
o APIs Calls: Retrofit
- Nghiên cứu, áp dụng các tính năng mới, tối ưu của ngơn ngữ lập trình
Kotlin: extension functions, higher-order functions, sealed class, data
class, function type…
1.3.

Đối tượng nghiên cứu


1.3.1. Đối tượng cơng nghệ
- Lập trình Android:
o Thiết kế giao diện người dùng: Jetpack Compose
o Ngôn ngữ lập trình: Kotlin
o Kiến trúc ứng dụng: MVVM

3


o Lập trình bất đồng bộ: Flow, Coroutine
o Giao tiếp với backend qua RESTful API: Retrofit
- Backend:
o Cơ sở dữ liệu: Firestore
o Lưu trữ file: Firebase Storage
o Xác thực: Firebase Authentication
o Full-text search: Algolia
o Nguồn dữ liệu về thực phẩm: FDC API
1.3.2. Đối tượng sử dụng
Những người rèn luyện thể hình có nhu cầu ghi chép, quan sát, quản
lý q trình tập luyện, ăn uống của bản thân.
1.4.

Phạm vi nghiên cứu

1.4.1. Phạm vi môi trường
Ứng dụng di động sử dụng hệ điều hành Android.
1.4.2. Phạm vi chức năng
Ứng dụng cho phép người dùng:
- Ghi chép, thêm mới, chỉnh sửa thông tin của một buổi tập.

- Xem lịch sử tập luyện theo từng ngày.
- Bắt đầu một buổi tập (có đồng hồ bấm giờ tự động để canh quãng
thời gian nghĩ giữa hiệp).
- Xem thơng tin, tìm kiếm, lọc các bài tập theo phân loại, nhóm cơ
được tập.
- Tạo, chỉnh sửa các chương trình tập, bắt đầu nhanh một buổi tập
với một chương trình tập bất kỳ.
- Ghi chép việc ăn uống theo từng ngày và theo dõi lượng calo,
lượng chất dinh dưỡng tiêu thụ theo từng ngày.
- Xem thông tin, tìm kiếm các thực phẩm.

4


- Ghi chép các số đo thể chất của cơ thể (cân nặng, chiều cao,...) .
- Theo dõi sự thay đổi về mặt thể chất, tập luyện, dinh dưỡng của
bản thân trong các khoảng thời gian.

5


Chương 2. CƠ SỞ LÝ THUYẾT
2.1.

Android

2.1.1. Hệ điều hành Android

Hình 2.1. Logo Android, bản quyền được nắm giữ bởi Google
(Nguồn: Wikimedia Commons)


Android là một hệ điều hành mã nguồn mở dựa trên nền tảng Linux
kernel, được phát triển chủ yếu cho các thiết bị có màn hình cảm ứng (điện
thoại thông minh, tablet, đồng hồ thông minh…).
Android được phát triển bởi một hiệp hội các nhà phát triển ứng dụng
được gọi là Open Handset Alliance, mặc dù phiên bản được sử dụng rộng rãi
nhất chủ yếu do Google phát triển. Android được công bố vào tháng 11 năm
2007, với thiết bị Android thương mại đầu tiên, HTC Dream, được ra mắt
vào tháng 9 năm 2008.
Android là hệ điều hành phổ biến nhất trên toàn cầu dành cho điện
thoại kể từ 2011 đến nay và phổ biến nhất trên máy tính bảng từ năm 2013
đến nay. Tính đến tháng 5 năm 2021, Android có hơn 3 tỷ người dùng hoạt
động hàng tháng và tính đến tháng 1 năm 2021, Google Play Store có hơn 3
triệu ứng dụng. Android 13, phát hành vào ngày 15 tháng 8 năm 2022, là
phiên bản mới nhất và Android 12.1/12L mới phát hành gần đây bao gồm
nhiều cải tiến dành riêng cho điện thoại gập, máy tính bảng, màn hình
desktop rời và Chromebook [10].

6


2.1.2. Ngơn ngữ lập trình Kotlin

Hình 2.2. Logo ngơn ngữ lập trình Kotlin (Nguồn: Wikimedia Commons)

Kotlin là ngơn ngữ lập trình high-level, sử dụng static type, có thể
phát triển đa nền tảng và được sử dụng cho nhiều mục tiêu khác nhau. Kotlin
được thiết kế để tương thích hồn tồn với Java và JVM, nhưng đồng thời
cũng có thể biên dịch thành JavaScript (ví dụ: đối với ứng dụng web sử dụng
React) hoặc native code thơng qua LLVM (ví dụ: đối với ứng dụng iOS). Chi

phí phát triển ngơn ngữ Kotlin do JetBrains bỏ ra, còn thương hiệu Kotlin do
Kotlin Foundation nắm giữ [12].
Kể từ ngày 7 tháng 5 năm 2019, Google cơng bố ngơn ngữ lập trình
Kotlin sẽ là ngơn ngữ chính cho việc phát triển ứng dụng Android, và đang
dần thay thế trình biên dịch Java tiêu chuẩn.
2.1.3. Jetpack Compose
Jetpack Compose là UI toolkit được đề xuất bởi Android để xây dựng
giao diện người dùng. Jetpack Compose đơn giản hóa và tăng tốc phát triển
giao diện người dùng trên Android bằng cách giảm thiểu lượng code và sử
dụng nhiều tính năng mạnh mẽ của Kotlin API. Đồng thời Jetpack Compose
có rất nhiều cơng cụ built-in để xây dựng theme, các UI Component, chế độ
tối. Đồng thời, Jetpack Compose có thể được sử dụng để phát triển giao diện
người dùng cho nhiều loại thiết bị di động khác nhau (điện thoại, đồng hồ
thơng minh, máy tính bảng) [1].

7


2.1.4. Lập trình bất đồng bộ với Flow, Coroutine
2.1.4.1.

Lập trình bất đồng bộ
Lập trình bất đồng bộ (hay Asynchronous Programming) là

một kĩ thuật lập trình cho phép nhiều tác vụ được thực hiện đồng thời
mà không làm ảnh hưởng đến luồng chạy chính của chương trình, điều
này tạo cảm tưởng như các tác vụ ấy được chạy song song với luồng
chạy chính. Khi các tác vụ ấy hồn thành xong thì sẽ trả về kết quả
cho luồng chạy chính, đảm bảo cho việc luồng chạy chính khơng bị
“block” (bị đơng cứng, phải đợi có kết quả của các tác vụ mới được

chạy tiếp). Điều này giữ việc thực hiện chương trình được tối ưu và
trải nghiệm người dùng được tốt nhất.
Trong lập trình ứng dụng nói chung và lập trình Android nói
riêng, lập trình bất đồng bộ là cực kỳ quan trọng vì việc ứng dụng bị
đứng trong khi các tác vụ phức tạp, cần nhiều thời gian được thực thi
sẽ gây nhiều khó chịu cho người dùng.
Các phương pháp để cài đặt kĩ thuật này bao gồm: Xử lý đa
luồng (Multithreading), sử dụng Callback, sử dụng Promise/Future, sử
dụng các Reactive Extensions, sử dụng Coroutine… [6]
2.1.4.2.

Coroutine
Hướng tiếp cận của ngôn ngữ lập trình Kotlin trong lập trình

bất đồng bộ là sử dụng Coroutine. Coroutine được dựa trên khái niệm
suspendable computations - ý tưởng cho rằng một hàm có thể tạm
dừng việc thực thi của nó tại một số thời điểm và tiếp tục sau đó. Một
coroutine có thể coi như một “lightweight thread”.
Một trong những ưu điểm lớn nhất của Coroutines là việc viết
non-blocking code (các đoạn code không block luồng chạy chính bằng
cách sử dụng lập trình bất đồng bộ) gần tương tự như viết blocking

8


code. Chỉ cần sử dụng thêm một số hàm và cú pháp nhất định, thì
đoạn code bất đồng bộ nhìn tương tự như đoạn code đồng bộ, và
không cần phải tìm hiểu thêm các API hay cú pháp phức tạp nào.
Đồng thời Coroutine có thể được sử dụng cho nhiều nền tảng, dù là
JVM, JavaScript hay nền tảng nào thì vẫn có thể dùng chung một đoạn

code, vì bên dưới đã có trình biên dịch xử lý việc chuyển đổi code
sang nền tảng tương ứng [7].
2.1.4.3.

Flow
Flow được xây dựng dựa trên Coroutine để lần lượt trả về

nhiều giá trị một cách bất đồng bộ, trong khi đó suspend function – cài
đặt cơ bản của Coroutine – chỉ có khả năng trả về một giá trị một lần,
Một Flow có thể coi như một Iterator duyệt qua từng phần tử trong
một nhóm dữ liệu và lần lượt trả về từng giá trị một bằng cách sử
dụng suspend function ở bên dưới để có thể đảm bảo tính bất đồng bộ
[2].
2.2.

Firebase

Hình 2.3. Logo Firebase (Nguồn: Wikimedia Commons)

2.2.1. Cloud Firestore
Cloud Firestore (hay Firestore) là một cơ sở dữ liệu linh hoạt và có
tính scalability dành cho việc phát triển ứng dụng di động, lập trình web và
xây dựng máy chủ từ thơng qua một số dịch vụ khác của Firebase và Google
Cloud. Tương tự với Firebase Realtime Database, Cloud Firestore giúp đồng

9


bộ hóa dữ liệu trên tất cả các ứng dụng thơng qua các real-time listeners và
hỗ trợ tính năng offline cho di động và web để lập trình viên có thể xây dựng

các ứng dụng hoạt động tốt bất kể độ trễ của mạng hay kết nối Internet.
Cloud Firestore cũng cung cấp khả năng tích hợp với các sản phẩm khác của
Firebase và Google Cloud, bao gồm Cloud Functions [3].
2.2.2. Firebase Authentication
Firebase Authentication cung cấp dịch vụ, các SDK dễ sử dụng và thư
viện giao diện người dùng để xác thực người dùng. Firebase Authentication
hỗ trợ xác thực bằng mật khẩu, số điện thoại, hay xác thực thông qua các liên
kết phổ biến như Google, Facebook và Twitter, v.v.
Firebase Authentication có khả năng tích hợp với các dịch vụ Firebase
khác, và đồng thời tận dụng các tiêu chuẩn OAuth 2.0 và OpenID Connect
nên lập trình viên hồn tồn có thể tích hợp Firebase Authentication với một
hệ thống backend khác ngồi các dịch vụ mà Firebase cung cấp [5].
2.2.3. Cloud Storage cho Firebase
Cloud Storage cho Firebase được sử dụng khi ứng dụng cần lưu trữ
các nội dung do người dùng tạo ra, chẳng hạn như hình ảnh, âm thanh, video.
Cloud Storage cho Firebase là dịch vụ lưu trữ mạnh mẽ, đơn giản với
chi phí tiết kiệm chi phí. Các Firebase SDK dành cho Cloud Storage cung
cấp tính năng bảo mật cho quá trình tải các tập tin trong ứng dụng, bất kể
chất lượng đường truyền kết nối mạng [4].
2.3.

Full-text search với Algolia

2.3.1. Full-text search
Full-text search là kĩ thuật tìm kiếm văn bản trong dữ liệu văn bản sao
cho kết quả trả về có chứa một số hoặc tất cả các kí tự trong văn bản được
truy vấn. Ngược lại, tìm kiếm truyền thống sẽ trả về kết quả khớp chính xác
từng kí tự trong tham số truy vấn.

10



Full-text search được ứng dụng trong nhiều lĩnh vực khác nhau—ví
dụ: tìm kiếm một món ăn trong thực đơn nhà hàng hoặc tìm kiếm một mặt
hàng trên trang web thương mại điện tử thông qua một vài từ trong tên của
mặt hàng. Ngồi việc tìm kiếm các từ khóa cụ thể, full-text search có thể
được phụ trợ với các kĩ thuật như fuzzy search và từ đồng nghĩa. Do đó, kết
quả cho một từ chẳng hạn như “Mì ống” sẽ khơng chỉ trả về các mục như
“Mì ống với thịt viên” mà cịn có thể trả về các mục như “Fettuccine
Carbonara” bằng cách sử dụng từ đồng nghĩa hoặc “Thịt xơng khói và bánh
mì dẹt sốt pesto” bằng cách sử dụng fuzzy search [8].
2.3.2. Algolia

Hình 2.4. Logo Algolia (Nguồn: Wikipedia)

Algolia là một search engine cung cấp nhiều dịch vụ tìm kiếm (trong
đó có full-text search) dưới mơ hình SaaS (Software as a Service).
Algolia cung cấp dịch vụ tìm kiếm thơng qua các API khác nhau.
Trong đó, Rest API của Algolia cung cấp các tính năng cơ bản về tìm kiếm,
phân tích và giám sát. Đồng thời, có 10 ngơn ngữ và nền tảng được hỗ trợ để
sử dụng Algolia. Các ngôn ngữ được hỗ trợ bao gồm Python, Ruby, PHP,
JavaScript, Java, Go, C#, Scala. Hai nền tảng di động, iOS, Android cũng
được hỗ trợ. Algolia cũng có thể được tích hợp với 4 web framework: Ruby
on Rails, Symfony, Django và Laravel. Về giao diện người dùng, Algolia có
một vài thư viện giao diện người dùng để lựa chọn [9].

11


Bên cạnh những sản phẩm trên, Algolia cũng tích hợp với các phần

mềm mã nguồn mở và bên thứ ba khác, bao gồm Drupal, WordPress và
Magento.
2.4.

FoodData Central API

Hình 2.5. Logo của USDA - Bộ Nông nghiệp Hoa Kỳ
(Nguồn: Wikimedia Commons)

FoodData Central (FDC) là hệ thống dữ liệu tích hợp về dinh dưỡng
và thực phẩm được phát triển bởi U.S. Department of Agriculture (USDA –
Bộ Nông nghiệp Hoa Kỳ), tập trung vào nghiên cứu, cung cấp dữ liệu về
chất dinh dưỡng và các thành phần thực phẩm khác cũng như các nguồn
thông tin liên quan đến nông nghiệp, thực phẩm, thực phẩm bổ sung và các
thơng tin khác. FoodData Central có thể được sử dụng trong nhiều lĩnh vực
khác nhau, bao gồm nghiên cứu, hoạch định chính sách, giáo dục, dinh
dưỡng và sức khỏe, phát triển sản phẩm, v.v. [13]
FoodData Central API là một REST API được phát triển bởi USDA
cho phép người dùng truy cập đến dữ liệu của FoodData Central với mục
đích tích hợp dữ liệu dinh dưỡng vào ứng dụng của họ.

12


Chương 3. XÂY DỰNG HỆ THỐNG
3.1.

Phân tích Use Case

3.1.1. Sơ đồ Use Case


Hình 3.1. Sơ đồ Use Case tổng quan

3.1.2. Danh sách tác nhân
STT
1

Tác nhân

Mô tả/Ghi chú

Trainee

Người tập luyện, sử dụng ứng dụng để quản lý

(Người tập luyện)

việc tập luyện, ăn uống

Bảng 3.1. Danh sách tác nhân

3.1.3. Danh sách Use Case
STT

Tên Use Case

1

Đăng ký


Mô tả/Ghi chú
Dành cho Người tập luyện, để đăng ký tài
khoản mới cho ứng dụng

13


2

Đăng nhập

3

Xem lịch sử tập luyện

4

Ghi chép một buổi tập

Dành cho Người tập luyện, để đăng nhập với
ứng dụng bằng tài khoản đã đăng ký
Dành cho Người tập luyện, để xem lịch sử
các buổi tập của một ngày bất ký
Dành cho Người tập luyện, để ghi chi tiết một
buổi tập
Dành cho Người tập luyện, để bắt đầu tiến

5

Bắt đầu một buổi tập


hành tập luyện (có thể các chức năng bấm giờ
để canh thời gian nghỉ)

6

Xem danh sách chương
trình tập

Dành cho Người tập luyện, để xem tất cả các
chương trình tập người dùng đã tạo
Dành cho Người tập luyện, để tạo mới một

7

Tạo chương trình tập

chương trình tập và tiến hành ghi chép, bắt
đầu tập với chương trình tập

8

Xem danh sách bài tập

Dành cho Người tập luyện, để xem danh sách
tất cả bài tập
Dành cho Người tập luyện, để tạo một bài tập

9


Tạo bài tập custom

cho riêng họ khi danh sách bài tập của ứng
dụng khơng có bài tập họ cần
Dành cho Người tập luyện, để ghi chép các

10

Ghi chép một ngày ăn

thực phẩm và chất dinh dưỡng tiêu thụ trong
một ngày

11

Xem thông tin dinh
dưỡng của thực phẩm

Dành cho Người tập luyện, để xem thông tin
chi tiết dinh dưỡng của một thực phẩm
Dành cho Người tập luyện, để chỉnh sửa, thay

12

Chỉnh sửa Profile

đổi các thông tin Profile như tên, số tuổi, giới
tính, cân nặng, chiều cao

14



Dành cho Người tập luyện, để ghi chép các
Thêm số đo cơ thể

13

số đo cơ thể (VD: Chiều cao, cân nặng, số đo
vòng bụng, số đo vòng bắp tay,…)
Dành cho Người tập luyện, để theo dõi sự

Theo dõi sự tiến bộ

14

tiến bộ về mặt tập luyện, dinh dưỡng, thể chất
theo thời gian

Bảng 3.2. Danh sách Use Case

3.1.4. Đặc tả Use Case
STT

1

Tên Use Case

Đăng ký

Mô tả


Cho phép người đăng ký tài khoản mới cho ứng dụng

Actor

Trainee

Tiền điều kiện

Khơng có

Hậu điều kiện

Tài khoản mới được tạo cho người dùng
1) Người dùng khởi động ứng dụng

Dòng sự kiện

2) Người dùng chuyển đến màn hình Đăng ký

chính

3) Người dùng nhập email, mật khẩu
4) Người dùng xác thực email
1) Người dùng khởi động ứng dụng

Dòng sự kiện phụ

2) Người dùng chọn “Đăng ký với Google
3) Người dùng chọn tài khoản Google tương ứng

4) Người dùng nhập email đã đăng ký/mật khẩu

Dịng sự kiện lỗi

khơng trùng khớp
5) Hệ thống báo lỗi

15


×