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

KHÓA LUẬN TỐT NGHIỆP XÂY DỰNG ỨNG DỤNG QUẢN LÝ SỨC KHỎE VÀ ĐỀ XUẤT CHẾ ĐỘ DINH DƯỠNG PHÙ HỢP VỚI THỂ TRẠNG

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 (1.58 MB, 73 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

NGUYỄN KHÁNH DUY

KHĨA LUẬN TỐT NGHIỆP
XÂY DỰNG ỨNG DỤNG QUẢN LÝ SỨC KHỎE
VÀ ĐỀ XUẤT CHẾ ĐỘ DINH DƯỠNG PHÙ HỢP VỚI THỂ TRẠNG
Build a health management application
and nutrient recomendation

KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM

TP. HỒ CHÍ MINH, 2021


ĐẠ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

NGUYỄN KHÁNH DUY – 16520295

KHÓA LUẬN TỐT NGHIỆP
XÂY DỰNG ỨNG DỤNG QUẢN LÝ SỨC KHỎE
VÀ ĐỀ XUẤT CHẾ ĐỘ DINH DƯỠNG PHÙ HỢP VỚI THỂ TRẠNG
Build a health management application
and nutrient recomendation


KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM

GIẢNG VIÊN HƯỚNG DẪN
THS.THÁI THỤY HÀN UYỂN

TP. HỒ CHÍ MINH, 2021


THƠNG TIN HỘI ĐỒNG CHẤM KHĨA LUẬN TỐT NGHIỆP

Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số ……………………
ngày ………………….. của Hiệu trưởng Trường Đại học Công nghệ Thông tin
1. …………………………………………. – Chủ tịch.
2. …………………………………………. – Thư ký.
3. …………………………………………. – Ủy viên.
4. …………………………………………. – Ủy viên


LỜI CẢM ƠN
Đầu tiên, em xin gởi lời cảm ơn chân thành đến tập thể quý Thầy Cô
Trường Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM và quý Thầy Cô
khoa Công nghệ Phần mềm đã giúp cho em có những kiến thức cơ bản làm nền
tảng để thực hiện đề tài này.
Đặc biệt, em xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất đến Ths.Thái
Thụy Hàn Uyển đã hướng dẫn tận tình, tạo điều kiện và động viên em vượt qua
những khó khăn, đó là nguồn động lực to lớn cho em hồn thành luận văn này.
Mặc dù đã cố gắng hoàn thành nhưng chắc chắn sẽ khơng tránh khỏi
những sai sót, nhóm em kính mong nhận được sự thơng cảm và những ý kiến
đánh giá chân thành của thầy cô và các bạn để nhóm em khắc phục hồn thiện
bản thân và dự án này. Em xin chân thành cảm ơn.

........, ngày......, tháng......, năm......


MỤC LỤC
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI ...............................................................................................2
1.1

Bối cảnh chọn đề tài. .......................................................................................................2

1.2. Mục tiêu ................................................................................................................................2
1.3. Phạm vi .................................................................................................................................3
1.4. Đối tượng nghiên cứu ....................................................................................................3
1.5. Phương pháp thực thiện ...............................................................................................4
1.6. Kết quả mong đợi .............................................................................................................4
1.7. Kế hoạch thực hiện ..........................................................................................................5
CHƯƠNG 2: CƠ SỞ KIẾN THỨC..................................................................................................8
2.1. Framework Flutter ..........................................................................................................8
2.1.1.

Giới thiệu .................................................................................................................8

2.1.2.

Ưu nhược điểm .....................................................................................................9

2.1.3.

Ngôn ngữ Dart .................................................................................................... 10

2.2. Kiến trúc và cơ chế hoạt động Flutter .................................................................. 11

2.2.1.

Các tầng kiến trúc ............................................................................................. 11

2.2.2.

Cơ chế Render .................................................................................................... 13

2.3. Hệ thống gợi ý – Recommendation systems ..................................................... 14
2.3.1.

Tổng quan ............................................................................................................ 14

2.3.2.

Các phương pháp gợi ý................................................................................... 16

2.3.3.

So sánh các phương pháp gợi ý .................................................................. 21

CHƯƠNG 3: THỰC HIỆN DỰ ÁN ............................................................................................. 23
3.1. Khảo sát hiện trạng ...................................................................................................... 23


3.1.1.

Ứng dụng “Google Fit” .................................................................................... 23

3.1.2.


Ứng dụng “Healthily” ...................................................................................... 25

3.1.3.

Ứng dụng “MyFitnessPal” ............................................................................. 27

3.2. Phân tích yêu cầu........................................................................................................... 28
3.3. Danh sách Actor ............................................................................................................. 30
3.4. Sơ đồ và danh sách Usecase hệ thống ................................................................. 31
3.4.1.

Nhóm Usecase “Quản lý tài khoản” ........................................................... 34

3.4.2.

Nhóm Usecase “Quản lý bản thân” ............................................................ 37

3.4.3.

Nhóm Usecase “Tính tốn các chỉ số sức khỏe” .................................. 44

3.4.4.

Nhóm Usecase “Tra cứu các bài tập”........................................................ 52

3.4.5.

Nhóm Usecase “Quản lý nhắc nhở” ........................................................... 57


CHƯƠNG 4. KẾT LUẬN ................................................................................................................ 62
4.1. Kết quả đạt được ........................................................................................................... 62
4.2. Thuận lợi và khó khăn................................................................................................. 62
4.2.1.

Thuận lợi............................................................................................................... 62

4.2.2.

Khó khăn ............................................................................................................... 63

4.3. Hướng phát triển ........................................................................................................... 63


DANH MỤC HÌNH
Hình 1. Flutter - Framework đa nề tảng .................................................................................8
Hình 2. Các tầng kiến trúc Flutter ........................................................................................... 11
Hình 3. Skia trong engine Flutter ............................................................................................ 14
Hình 4. Minh họa một hệ thơng gợi ý .................................................................................... 15
Hình 5. Hệ thống gợi ý dựa theo lọc cộng tác .................................................................... 18
Hình 6. Hệ thống gợi ý lọc theo nội dung ............................................................................ 19
Hình 7. Hệ thống gợi ý dựa trên cơ sở tri thức ................................................................ 20
Hình 8. Ứng dụng Google Fit ..................................................................................................... 23
Hình 9. Ứng dụng Healthily ....................................................................................................... 25
Hình 10. Ứng dụng MyFitnessPal ........................................................................................... 27
Hình 11. Sơ đồ usecase tổng quát ........................................................................................... 31
Hình 12. Sơ đồ nhóm usecase "Quản lý tài khoản" ......................................................... 34
Hình 13. Sơ đồ hoạt động usecase "Quản lý tài khoản" ................................................ 35
Hình 14. Sơ đồ hoạt động usecase "Quản lý mục tiêu" ................................................. 36
Hình 15. Sơ đồ hoạt động usecase "Quản lý lượng nước nạp vào".......................... 38

Hình 16. Sơ đồ hoạt động usecase "Quản lý hoạt động" ............................................... 39
Hình 17. Sơ đồ hoạt động useacse "Theo dõi trọng lượng" ........................................ 40
Hình 18. Sơ đồ hoạt động usecase "Quản lý các chỉ số khác" ..................................... 41
Hình 19. Sơ đồ hoạt động usecase "Quản lý món ăn" .................................................... 42
Hình 20. Sơ đồ hoạt động usecase "Đo bước chân" ........................................................ 43
Hình 21. Sơ đồ nhóm useace "Tính tốn chỉ số sức khỏe”........................................... 44
Hình 22. Sơ đồ hoạt độn usecase "Tính tốn chỉ số BMI" ............................................ 45
Hình 23. Sơ đồ hoạt động usecase "Calo hằng ngày" ..................................................... 46
Hình 24. Sơ đồ hoạt động cho usecase "Độ cồn trong máu" ....................................... 47
Hình 25. Sơ đồ hoạt động usecase "Khối lượng cơ thể nạc" ....................................... 48
Hình 26. Sơ đồ hoạt động useacse "Chỉ số mỡ cơ thể" .................................................. 49
Hình 27. Sơ đồ hoạt động usecase "Máy tính giảm cân"............................................... 50


Hình 28. Sơ đồ hoạt động usecase ""Trọng lượng lý tưởng"...................................... 51
Hình 29. Sơ đồ nhóm usecase "Tra cứu các bài tập" ...................................................... 52
Hình 30. Sơ đồ hoạt động usecase “Bài tập tim mạch”.................................................. 53
Hình 31. Sơ đồ hoạt động usecase "Bài tập múi cơ"....................................................... 54
Hình 32. Sơ đồ hoạt động usecase "Bài tập bụng" .......................................................... 55
Hình 33. Sơ đồ hoạt động usecase "Bài tập cơ bản" ....................................................... 56
Hình 34. Sơ đồ nhóm usecase "Quản lý nhắc nhở" ......................................................... 57
Hình 35. Sơ đồ hoạt động usecase "Nhắc nhở uống nước" ......................................... 58
Hình 36. Sơ đồ hoạt động usecase "Nhắc nhở ăn" .......................................................... 59
Hình 37. Sơ đồ hoạt động usecase "Nhắc nhở cân" ........................................................ 60
Hình 38. Sơ đồ hoạt động usecase "Nhắc nhở uống thuốc" ........................................ 61


DANH MỤC BẢNG
Bảng 1. Kế hoạch thực hiện đồ án..............................................................................................7
Bảng 2 Ưu nhược điểm của Flutter........................................................................................ 10

Bảng 3. Các phương pháp gợi ý ............................................................................................... 17
Bảng 4. So sánh các phương pháp gợi ý ............................................................................... 22
Bảng 5. Ứng dụng Google Fit..................................................................................................... 25
Bảng 6. Ứng dụng Healthily....................................................................................................... 26
Bảng 7. Ứng dụng MyFitnessPal .............................................................................................. 28
Bảng 8. Phân tích yêu cầu ........................................................................................................... 30


TÓM TẮT KHÓA LUẬN
Tổng quan đề tài: đặt vấn đề, lý do chọn đề tài, mục tiêu và phạm vi tiếp cận
của đề tài
Tìm hiểu, khảo sát các ứng dụng hiện có: so sánh, và rút ra các điểm mạnh,
điểm yếu.
Phân tích, lựa chọn các nghiệp vụ cần có của 1 ứng dụng theo dõi sức khỏe.
Tìm hiểu về ngơn ngữ lập trình Dart, các ưu nhược điểm của Flutter để áp
dụng vào hệ thống .
Tìm hiểu hệ thống gợi ý sản phẩm đối với hai phương pháp: Content – based
method, Collaborative filtering method.
Phát triển ứng dụng di động với framework Flutter, theo hướng tính năng,
thân thiện, dễ sử dụng đối với người dùng .
Trình bày kết luận, và hướng phát triển cho ứng dụng theo dõi và quản lý
sức khỏe.

1


CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
1.1.

Bối cảnh chọn đề tài


Với sự phát triển của kinh tế, kéo theo đó là sự tiến bộ của nền y học hiện
đại, nhu cầu chăm sóc sức khoẻ của con người được chú trọng. Trong xã hội tân
tiến hiện nay, việc áp dụng khoa học kỹ thuật là cần thiết vì nó mang đến sự
tiện dụng và hiệu quả.
Để đáp ứng nhu cầu chăm sóc sức khỏe đó của con người, đề tài “Quản lý
chế độ dinh dưỡng và đề xuất chế độ dinh dưỡng phù hợp với thể trạng” ra đời.
Việc phát triển đề tài thành một ứng dụng trên thiết bị di động là phù hợp với
điều kiện của cuộc sống hiện nay. Hầu hết mỗi gia đình đều sở hữu riêng cho
mình ít nhất là một thiết bị di động, vì thế họ có thể theo dõi và chăm sóc sức
khỏe của bản thân ngay trên thiết bị di động của mình. Điều đó tạo vừa tạo nên
sự tiện lợi và tiết kiệm với người dùng, vừa có thể đảm bảo sức khỏe bản thân
và gia đình

1.2.

Mục tiêu

Hiểu được Machine Learning cơ bản và các thuật toán tư vấn, gợi ý sản
phẩm. Từ đó có thể áp dụng các thuật tốn này vào ứng dụng tương tự khác
Sử dụng những công nghệ mới, phù hợp đáp ứng khả năng mở rộng và
tương tác cao.
Xây dựng ứng dụng quản lý sức khỏe có giao diện trực quan, phù hợp với
nhu cầu của đối tượng người dùng. Người dùng có thể xem, tìm kiếm các thông
tin về thể trạng và phương pháp cải thiện sức khỏe bản thân.
Phát triển ứng dụng có tính thực tiễn cao, có khả năng triển khai ứng dụng
vào thực tế.

2



Nhóm em hi vọng dựa trên nền tảng lý thuyết đã được thầy cô truyền dạy
và hỗ trợ, kết hợp với sự tìm hiểu cơng nghệ của nhóm, luận văn tốt nghiệp của
nhóm sẽ đạt được mục tiêu mong đợi..
1.3.

Phạm vi

Ứng dụng “Quản lý sức khỏe” được nhóm xây dựng bằng ngôn ngữ Flutter
trên môi trường Android.
Xây dựng ứng dụng “Quản lý sức khỏe” hướng đến những người có trong
tay một thiết bị di động và mong muốn chăm sóc sức khỏe bản thân và gia đình
Tìm hiểu hệ thống gợi ý sản phẩm đối với hai phương pháp: Content – based
method, Collaborative filtering method dựa trên các khía cạnh: ý tưởng;
phương thức; ưu, nhược điểm.
Triển khai, đánh giá độ chính xác của từng phương pháp dựa trên dữ liệu
thử nghiệm. Áp dụng hệ thống gợi ý vào ứng dụng “Quản lý sức khỏe” để gợi ý
các chế độ dinh dưỡng phù hợp với thể trạng riêng từng người.
1.4.

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

Các cơng nghệ:
+ Mobile: Flutter
+ Firebase
Thuật tốn: Thuật tốn khuyến nghị Content – based và Collaborative
Filtering.
Đối tượng trong phạm vi đề tài hướng đến:
+ Các gymmer/vận động viên
+ Người già, người cần duy trì sức khỏe

+ Người trong quá trình tăng/giảm cân

3


- Người trong quá trình hồi phục sức khỏe
1.5.

Phương pháp thực thiện

Lên kế hoạch, thực hiện bằng cách trao đổi trực tiếp và gián tiếp cũng như
nhờ sự tư vấn của giáo viên hướng dẫn.
Sử dụng các phương pháp nghiên cứu: đọc tài liệu, thực nghiệm, phân tích
các ứng dụng liên quan nổi bật hiện nay.
Tham khảo các sản phẩm và công nghệ liên quan tới quản lý sức khỏe hiện

Tìm hiểu các thuật tốn tư vấn, gợi ý sản phẩm (recommendation system)
hiện có và vận dụng, tùy chỉnh, đánh giá các thuật toán phù hợp với đề tài.
1.6.

Kết quả mong đợi

Sau khi xác định đề tài và nghiên cứu, tìm hiểu thực tế, em đã xây dựng ý
tưởng thiết kế ứng dụng “Quản lý sức khỏe” cần đạt được những kết quả sau:
- Về ứng dụng:
• Với người dùng chưa đăng nhập, có thể đăng ký tài khoản bằng Google
hoặc email nhằm tạo ra dữ liệu riêng của mỗi người
• Với người dùng đã đăng nhập có thể thực hiện chức năng tra cứu sức khỏe
bản thân, sau đó tiến hành quản lý và tập luyện.
• Hệ thống tiến hành hỗ trợ, theo dõi và quản lý các quá trình luyện tập của

người dùng, đề xuất các bài tập và nhắc nhở người dùng thục hiện chúng
• Hệ thống cũng đồng thời đề xuất chế độ dinh dưỡng để giúp người dùng
kiểm soát khẩu phần ăn một các khoa học, đồng thời nhắc nhở ăn uống giúp
người dùng không quên đi những buổi ăn bổ sung quan trọng - Về hệ thống gợi
ý món ăn:

4


• Hiểu bài toán khuyến nghị, đặc biệt là hai phương pháp khuyến nghị
chính: Content – based và Collaborative.
• Có kết quả so sánh, đánh giá.
• Hệ thống gợi ý chế độ dinh dưỡng có thể đề xuất các thực đơn phù hợp với
nhu cầu khác nhau của người dùng
- Các tiêu chí khác:
• Tính thẩm mỹ: Ứng dụng có giao diện đẹp, dễ sử dụng tâm lý thoải mái
cuốn hút khách hàng khi sử dụng.
• Khả năng phản hồi nhanh: các thao tác được đáp ứng nhanh và mượt mà
1.7.

STT

Kế hoạch thực hiện

Công việc

Thời gian thực
hiện

Giai đoạn 1: Khảo sát nhu cầu thực tế, tìm hiểu các kiến thức


3 Tuần

về các thuật toán gợi ý và các yêu cầu nghiệp vụ của ứng

(08/03/2021 –

dụng

28/03/2021)

Sprint 1: Khảo sát, nghiên cứu

1 Tuần

• Phát biểu bài tốn

Tuần 1

• Khảo sát nhu cầu thực tế của người có nhu cầu

(08/03/2021 –

• Tham khảo các ứng dụng liên quan và tìm hiểu các 14/03/2021)
yêu cầu nghiệp vụ của ứng dụng.
• Phân tích, xác định chức năng

5



Sprint 2: Tìm hiểu cơ bản các thuật tốn gợi ý

1 Tuần
Tuần 2
(15/03/2021 –
21/03/2021)

Sprint 3: Tìm hiểu về các cơng nghệ sử dụng

1 Tuần

• Tìm hiểu Flutter

Tuần 3

• Tìm hiểu Firebase

(22/03/2021 –
28/03/2021)

Giai đoạn 2: Thiết kế và xây dựng ứng dụng với các chức

7 tuần

năng dành cho người dùng
Sprint 4: Thiết kế ứng dụng

1 tuần

• Thiết kế cơ sở dữ liệu


(29/03/2021 –

• Khảo sát UI của các ứng dụng liên quan

04/04/2021)

• Thiết kế UI mobile app với figma
Sprint 5: Xây dựng ứng dụng

6 tuần

• Xây dựng database với MySQL

(05/04/2021 -

• Xây dựng Restful API

16/05/2021)

• Xây dựng mobile app
Giai đoạn 3: Áp dụng hệ thống gợi ý chế độ dinh dưỡng và

6 tuần

ứng dụng
Sprint 6: Tìm hiểu hệ thống gợi ý, chạy thử nghiệm 2 tuần
và đánh giá các

(17/05/2021 –


6


thuật toán gợi ý

30/05/2021)

Sprint 7: Áp dụng hệ thống gợi ý vào ứng dụng đề

3 tuần

xuất chế độ dinh dưỡng phù hợp với thể trạng.

(31/05/2021 –
20/06/2021)

Sprint 8: Kiểm thử và hồn thành báo cáo

1 tuần

• Kiểm thử các chức năng của ứng dụng

(21/06/2021 –

• Hồn thành báo cáo

26/06/2021)

Bảng 1. Kế hoạch thực hiện đồ án


7


CHƯƠNG 2: CƠ SỞ KIẾN THỨC
2.1.

Framework Flutter

2.1.1. Giới thiệu

Hình 1. Flutter - Framework đa nề tảng

Flutter, sử dụng ngôn ngữ lập trình Dart, được giới thiệu là một bộ cơng
cụ UI (UI toolkit) đa nền tảng, được thiết kế để cùng một codebase mà lập trình
viên có thể sử dụng để chạy nó trên nhiều nền tảng khác nhau như iOS và
Android, đồng thời vẫn cho phép ứng dụng giao tiếp trực tiếp với các service
riêng của từng platform.
Mục tiêu của Flutter là giúp lập trình viên có thể đưa những sản phẩm
ứng dụng với hiệu suất cao nhất, cùng cảm giác tự nhiên nhất trên từng
platform, trong khi vẫn chia sẻ code nhiều nhất có thể.
Trong lúc phát triển ở môi trường development, ứng dụng Flutter được
chạy trong một môi trường ảo (Virtual Machine) cung cấp cơ chế hot reload mà
khơng cần recompile hồn tồn lại. Trong mơi trường release, ứng dụng Flutter

8


biên dịch trực tiếp qua mã máy, dù là kiến trúc Intel x64 hay ARM, hay cũng có
thể là Javascript nếu được target sang ứng dụng Web. Flutter là framework

open source cùng giấy phép BSD, với một hệ sinh thái rất mạnh gồm các thư
viện bên thứ ba do người dùng phát triển để hỗ trợ cho thư viện gốc.
2.1.2. Ưu nhược điểm
Ưu điểm

Nhược điểm

Giảm tối đa thời gian phát triển

Cả Flutter và ngôn ngữ Dart đều vẫn

ứng dụng với việc sử dụng cùng

cịn rất mới, chưa hồn tồn ổn định

codebase cho nhiều nền tảng.

Ứng dụng dùng Flutter chưa tối ưu

Đồng thời giảm tiền bạc và cơng

hồn tồn về mặt dung lượng nên

sức vì chỉ cần một team phát

sản phẩm ứng dụng có phần hơi

triển, thay vì chia ra 2 team iOS

nặng Cảm nhận của ứng dụng


và Android

Flutter không được hồn tồn 100%

Tính năng hot reload mạnh mẽ,

native, vì cơ bản Flutter không tạo

giúp ta xem thay đổi sau khi sửa

ra các component native mà chỉ giả

code mà không cần recompile cả

native, do đó vẫn sẽ có những khác

app, giúp rất nhiều trong việc

biệt nhỏ so với ứng dụng native

phát triển, sửa chữa bug và bảo

Khơng có một kiến trúc cụ thể nào

trì dự án Render nhanh và hồn

trong việc phát triển ứng dụng

toàn tự do customize nhờ vào


Flutter. Điều này có thể tốt với lập

kiến trúc đằng sau Flutter.

trình viên lâu năm nhờ tính tự do,

Flutter giúp ta kiểm soát từng

nhưng cũng sẽ là trở ngại cho người

pixel trên màn hình, xóa bỏ mọi

mới khi khơng biết phải theo kiến

rào cản giới hạn về render đồ họa trúc chuẩn nào Cả Flutter và Dart
đều được phát triển và đổi mới
Cộng đồng phát triển mạnh mẽ
thường xuyên. Trở ngại của điều
từng ngày, framework cũng đang
này là việc ta phải bảo trì code liên
trên đà phát triển, ví dụ như việc

9


support ổn định cho website và

tục nếu muốn bắt kịp sự phát triển


desktop app thông qua phiên bản của Flutter
Flutter 2.0 ra mắt đầu năm 2021
Bảng 2 Ưu nhược điểm của Flutter

2.1.3. Ngơn ngữ Dart
Dart, ngơn ngữ lập trình của Flutter, là một ngơn ngữ lập trình hướng đối
tượng được tối ưu cho phía client, giúp phát triển app nhanh chóng trên nhiều
nền tảng. Mục tiêu của Dart là mang tới một cung cụ phát triển hiệu quả nhất
trong việc phát triển các ứng dụng đa nền tảng.
Dart còn là nền tảng của Flutter. Dart cung cấp giải pháp ngôn ngữ lập
trình cho các ứng dụng Flutter với rất nhiều chức năng cốt lõi như format, phân
tích và kiểm thử code.
Ngơn ngữ Dart là loại ngơn ngữ có kiểu cứng (type safe), sử dụng cách
kiểm tra kiểu dữ liệu tĩnh (static type checking) để chắc chắn rằng giá trị của
biến ln khớp với kiểu dữ liệu tĩnh của biến đó. Tuy nhiên, cơ chế kiểu dữ liệu
của Dart cũng rất linh hoạt, cho phép ta khai báo kiểu động dạng dynamic,
nghĩa là kiểu dữ liệu của biến lúc này sẽ được kiểm tra ở runtime, thay vì
compile time như kiểu dữ liệu tĩnh.
Dart còn hỗ trợ sound null safety, nghĩa là giá trị của biến sẽ không thể
null trừ khi ta khai báo nó có thể null. Với tính năng này, Dart có thể giảm thiểu
tối đa các lỗi null exception khi chạy ở runtime. Điểm đặc biệt là, không giống
với các ngơn ngữ lập trình hỗ trợ null-safe khác, khi biến nào trong Dart được
khai báo là không thể null, thì biến đó sẽ chắc chắn ln ln khơng thể null
(đây là ý nghĩa của chữ sound trong cụm từ sound null safety).
Dart có một bộ thư viện gốc rất mạnh mẽ, đáp ứng mọi nhu cầu cơ bản
về lập trình:
-

Bộ kiểu dữ liệu, danh sách và các hàm chính cho mọi chương trình
Dart (dart:core)


-

Bộ danh sách hỗ trợ mạnh hơn, gồm queue, linked list, hashmap, và
cây nhị phân (dart:collection)

-

Bộ dịch encoder và decoder giúp chuyển đổi giữa các dạng dữ liệu
khác nhau, bao gồm JSON và UTF-8 (dart:convert)

-

Bộ hỗ trợ hằng số, hàm và các cơng thức tốn học (dart:math)

10


-

Hỗ trợ xử lý file, socket, HTTP, và đọc ghi (I/O) cho các ứng dụng
không phải web (dart:io)

-

Hỗ trợ lập trình bất đồng bộ, với các lớp như Future (tương tự
Promise trong ES6) và Stream (tương tự Observable trong rxjs)
(dart:async)

-


Hỗ trợ giao tiếp với các ngơn ngữ kiểu C (ví dụ C++) (dart:f i)

-

Lập trình song song sử dụng isolate - các worker độc lập tương tự
như threads nhưng không chia sẻ bộ nhớ, giao tiếp với nhau chỉ
thông qua các message (dart:isolate)

-

Cung cấp các element HTML và các công cụ khác để tương tác với
trình duyệt và với DOM (Document Object Model) (dart:html)

2.2.

Kiến trúc và cơ chế hoạt động Flutter

2.2.1. Các tầng kiến trúc

Hình 2. Các tầng kiến trúc Flutter

11


Flutter được thiết kế như một kiến trúc phân tầng dễ mở rộng. Flutter
tồn tại dưới dạng một loạt các thư viện độc lập mà mỗi thư viện tương ứng với
một tầng. Khơng tầng nào có đặt quyền truy cập trực tiếp vào tầng dưới, và mọi
phần của framework đều là optional và dễ dàng thay thế.


Đối với các hệ điều hành, các ứng dụng Flutter đều được đóng gói tương
tự như các ứng dụng native. Một trình nhúng (Embedder) của hệ điều hành
cung cấp một entrypoint, phối hợp với hệ điều hành để truy cập vào các service
như render giao diện, input và quản lý event loop. Trình nhúng được viết bằng
các ngôn ngữ tương ứng của hệ điều hành: Java và C++ cho Android, ObjectiveC/Objective-C++ cho iOS và macOS, và C++ cho Windows và Linux. Sử dụng
trình nhúng, code Flutter có thể được tích hợp vào các ứng dụng sẵn có dưới
dạng một module con, hoặc cũng có thể được dùng như một ứng dụng riêng.
Flutter đã tích hợp sẵn các trình nhúng gốc cho từng nền tảng, tuy nhiên vẫn có
các trình nhúng khác được phát triển, ví dụ như go-flutter, một trình nhúng
giúp chạy ứng dụng Flutter trên Windows, sử dụng ngôn ngữ go để giao tiếp
với hệ điều hành.
Lõi của Flutter, được gọi là Flutter engine, được viết chủ yếu bằng ngôn
ngữ C++ và hỗ trợ các nhu cầu thiết yếu để hỗ trợ đa số các ứng dụng Flutter.
Engine này chịu trách nhiệm vẽ tất cả mọi thứ lên màn hình mỗi khi có frame
mới cần render. Flutter framework có thể gọi tới engine thơng qua thư viện
dart:ui (thư viện này đóng gói các code C++ tương ứng dưới dạng các class của
Dart, ví dụ như các class hỗ trợ việc nhận input, đồ họa và render text). Thơng
thường, lập trình viên có thể tương tác với Flutter thông qua Flutter
framework một cách hiện đại và dễ hiểu hơn các tầng dưới, được viết bằng
ngôn ngữ Dart. Framework bao gồm một bộ thư viện phong phú về platform,
layout, … cũng được phân tầng. Đi từ dưới lên, ta sẽ có: - Tầng foundation, gồm
các class nền tảng như về animation (để animate), painting (để vẽ đồ họa) và

12


gesture (để nhận tương tác). - Tầng rendering, gồm các class hỗ trợ cho việc hệ
thống layout. Với tầng này, ta có thể xây dựng một cây layout gồm các render
object. - Tầng widget, gồm các class tượng trưng cho những component trên
giao diện. Mỗi render object dưới tầng rendering đều có một class tương ứng

trên tầng widget. Ngồi ra, tầng widget cịn giúp ta định nghĩa các class mang
tính tái sử dụng, tương tự như Component của React. - Thư viện Material và
Cupertino, từ các thành phần của tầng widget, giúp ta gọi và render các thành
phần trên giao diện theo chuẩn Material design hoặc iOS design. Framework
Flutter tương đối nhỏ và cơ bản. Nhiều tính năng cao hơn mà ta hay dùng đều
được đóng gói dưới dạng các package (tương tự các thư viện), bao gồm các
plugin về nền tảng như camera và webview, hay các tính năng chung như http.
Các package này được xây dựng dựa trên phần gốc của Dart và Flutter.
2.2.2. Cơ chế Render
Điểm đặc biệt nhất của Flutter, là dù đây là một framework chạy đa nền
tảng, nhưng về hiệu năng thì Flutter vẫn sánh ngang với các ứng dụng native.
Để đạt được điều này, Flutter có một cơ chế render rất đặc biệt, khác với các
framework đa nền tảng khác như React Native. Các framework đa nền tảng
khác như React Native thông thường sẽ render bằng cách tạo ra một tầng
abstract bên trên các thư viện UI của Android và iOS để giao tiếp với các thư
viện UI đó. Code thơng thường sẽ được viết bằng các ngôn ngữ thông dịch như
Javascript, từ đó ngơn ngữ này phải tương tác với các thư viện Java của Android
hoặc Objective-C của iOS để hiển thị giao diện. Việc này dần dần sẽ tăng đáng kể
chi phí render, đặc biệt là khi sự tương tác giữa UI và app logic trở nên phức
tạp. Ngược lại, Flutter giảm thiểu tối đa, thậm chí là hồn tồn khơng cần giao
tiếp với thư native để render giao diện. Code để render của Flutter sẽ được
compile về dạng code native, rồi từ đó dùng thư viện Skia (một thư viện đồ họa
được viết bằng C/C++, dùng trực tiếp CPU hoặc GPU để vẽ lên giao diện) để
render giao diện. Điều này đồng nghĩa với việc, từng pixel trên màn hình giao

13


diện của ứng dụng Flutter đều sẽ được do Flutter quản lý và lập trình viên có
thể tồn quyền kiểm sốt chúng.


Hình 3. Skia trong engine Flutter

Flutter cịn nhúng một bản sao của Skia vào engine, cho phép lập trình viên
có thể nâng cấp ứng dụng sử dụng Flutter để có thể bắt kịp những cập nhật
hiệu năng mới nhất, ngay cả khi điện thoại của người dùng chưa nâng cấp
phiên bản Android mới. Điều này được áp dụng tương tự với các ứng dụng
Flutter trên các platform khác như iOS, Windows hay macOS.

2.3.

Hệ thống gợi ý – Recommendation systems

2.3.1. Tổng quan
Hệ thống gợi ý (Recommender systems hoặc Recommendation systems)
là một dạng của hệ hỗ trợ ra quyết định, cung cấp giải pháp mang tính cá nhân
hóa mà khơng phải trải qua quá trình tìm kiếm phức tạp. Hệ gợi ý học từ người
dùng và gợi ý các sản phẩm tốt nhất trong số các sản phẩm phù hợp.

14


Hình 4. Minh họa một hệ thơng gợi ý

Hệ thống gợi ý sử dụng các tri thức về sản phẩm, các tri thức của chuyên
gia hay tri thức khai phá học được từ hành vi con người dùng để đưa ra các gợi
ý về sản phẩm mà họ thích trong hàng ngàn hàng vạn sản phẩm có trong hệ
thống. Các website thương mại điện tử, ví dụ như sách, phim, nhạc, báo...sử
dụng hệ thống gợi ý để cung cấp các thông tin giúp cho người sử dụng quyết
định sẽ lựa chọn sản phẩm nào. Các sản phẩm được gợi ý dựa trên số lượng sản

phẩm đó đã được bán, dựa trên các thông tin cá nhân của người sử dụng, dựa

15


trên sự phân tích hành vi mua hàng trước đó của người sử dụng để đưa ra các
dự đoán về hành vi mua hàng trong tương lai của chính khách hàng đó. Các
dạng gợi ý bao gồm: gợi ý các sản phẩm tới người tiêu dùng, các thông tin sản
phẩm mang tính cá nhân hóa, tổng kết các ý kiến cộng đồng, và cung cấp các
chia sẻ, các phê bình, đánh giá mang tính cộng đồng liên quan tới yêu cầu, mục
đích của người sử dụng đó.
2.3.2. Các phương pháp gợi ý
Giả sử rằng I là tập các đối tượng (Item) có thể được gợi ý, U là tập người
dùng, u là một người dùng cụ thể trong tập U và i là một đối tượng cụ thể trong
I mà chúng ta muốn dự đoán cho u (dựa vào sở thích của u).
Phương pháp

Dữ liệu cơ sở

Dữ liệu đầu ra

Tiến trình xử lý

Dựa theo lọc

Các điểm số đánh

Các điểm số

Nhận ra người sử dụng


cộng tác

giá của những

đánh giá của u

trong U tượng tự với u

người sử dụng

cho các đối

( về sở thích) và sau đó

trong U đối với

tượng trong I.

ngoại suy điểm số đánh

gợi ý

các đối tượng

giá vủa u cho i.

trong I.
Dựa theo nội


Các đặc điểm của

Các điểm số

Tạo ra một mơ hình mơ

dung

các đối tượng

đánh giá của u

tả sở thích của người

trong I.

cho các đối

sử dụng u, sau đó sử

tượng trong I.

dụng để đánh giá mức
độ ưa thích của u với i.

Dựa trên cơ

Các đặc điểm của

Một sự mô tả


Suy luận sự phù hợp

sở tri thức

các đối tượng

nhu cầu và sở

giữa I và nhu cầu của u.

trong I. Các tri

thích của người

thức (hiểu biết) về

16


×