Tải bản đầy đủ (.docx) (69 trang)

Xây dựng ứng dụng theo dõi chạy bộ trên Android

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.82 MB, 69 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNGKHOA CÔNG NGHỆ THÔNG TIN</b>

<b>---MẪN XUÂN TUẤN ANH</b>

<b>PHÁT TRIỂN ỨNG DỤNG THEO DÕI CHẠY BỘ TRÊNANDROID</b>

<b>ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC</b>

<b>CHUYÊN NGÀNH KỸ THUẬT PHẦN MỀM</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

<b>KHOA CÔNG NGHỆ THÔNG TIN---</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>LỜI CẢM ƠN</b>

Lời đầu tiên, em xin gửi lời cảm ơn chân thành đến Ban giám hiệu Trường Đại họcCông nghệ thông tin và Truyền thông, đặc biệt là Khoa Công nghệ thông tin đã tạo điềukiện cho em thực hiện và hoàn thành đồ án tốt nghiệp này.

Em xin trân trọng cảm ơn Thầy Nguyễn Văn Việt, giảng viên hướng dẫn đồ án, ngườiđã tận tình hướng dẫn, góp ý và hỗ trợ em trong suốt quá trình thực hiện đồ án. Nhờ vàosự hướng dẫn cùng các kiến thức chun ngành của thầy, em đã có thể hồn thành đượcđề tài "Phát triển ứng dụng theo dõi chạy bộ trên Android" một cách tốt nhất.

Em cũng xin gửi lời cảm ơn tất cả các giảng viên thuộc khoa Công nghệ thông tincũng như các giảng viên thuộc các bộ môn khác đã truyền đạt kiến thức và kỹ năng choem trong các lĩnh vực khác nhau đặc biệt là về Cơng nghệ thơng tin trong suốt q trìnhhọc tập tại trường.

Em nhận thức được rằng đồ án của em cịn nhiều thiếu sót cần cải thiện và bổ sungthêm. Vậy nên em mong muốn có được các góp ý và ý tưởng về đề tài này để em có thểtiếp tục học hỏi và nghiên cứu để cải thiện cũng như áp dụng cho các dự án sau này.

Em xin chân thành cảm ơn!

Thái Nguyên, ngày tháng năm 2024Sinh viên thực hiện

Mẫn Xuân Tuấn Anh

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>LỜI CAM ĐOAN</b>

Em xin cam đoan rằng bài báo đồ án tốt nghiệp này là kết quả của quá trình tổng hợpvà nghiên cứu của cá nhân em, được thực hiện trên cơ sở nghiên cứu lý thuyết, kiến thứcdưới sự hướng dẫn tận tình giáo viên hướng dẫn ThS. Nguyễn Văn Việt. Trong báo cáođồ án tốt nghiệp này, em có tham khảo và sử dụng một số kiến thức từ các nguồn đã đượcliệt kê trong phần tài liệu tham khảo ở cuối bài báo cáo.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

1.2. Các công cụ và tiện ích được sử dụng...17

1.2.1. Android Studio IDE...17

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

1.2.3. Thư viện Jetpack Compose...19

1.2.4. Thư viện Dagger Hilt...20

2.2.2. Chức năng theo dõi chạy bộ...25

2.2.3. Chức năng dòng thời gian...25

2.2.4. Chức năng quản lí trang cá nhân...25

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

3.2.3. Chức năng theo dõi chạy...52

3.2.4. Giao diện bảng điều hướng...55

3.2.5. Giao diện trang cá nhân...56

3.2.6. Giao diện dòng thời gian...58

3.2.7. Giao diện bạn bè...60

3.2.8. Giao diện cài đặt...65

3.2.9. Hộp thoại đăng xuất...66

KẾT LUẬN...67

1. Kết quả đạt được...67

2. Những điểm hạn chế...67

3. Hướng phát triển...67

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

Ý KIẾN CỦA GIÁO VIÊN HƯỚNG DẪN...69

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>MỤC LỤC HÌNH ẢNH</b>

Hình 2.1 Trường hợp sử dụng tổng qt...26

Hình 2.2: Biểu đồ hoạt động chức năng Đăng nhập bằng địa chỉ email...30

Hình 2.3. Biểu đồ hoạt động chức năng Đăng nhập bằng Google...31

Hình 2.4. Biểu đồ hoạt động chức năng Tạo tài khoản...31

Hình 2.5. Biểu đồ hoạt động chức năng Đặt lại mật khẩu...32

Hình 2.6. Biểu đồ trình tự chức năng Đăng nhập bằng email...32

Hình 2.7. Biểu đồ trình tự cho chức năng Đăng nhập bằng Google...33

Hình 2.8. Biểu đồ hoạt động cho chức năng Đăng ký...33

Hình 2.9. Biểu đồ hoạt động cho chức năng Đặt lại mật khẩu...34

Hình 2.10. Biểu đồ hoạt động khi bắt đầu theo dõi chạy...36

Hình 2.11. Biểu đồ hoạt động khi kết thúc phiên chạy...37

Hình 2.12. Biểu đồ hoạt động chức năng lưu lại phiên chạy...37

Hình 2.13. Biểu đồ trình tự khi bắt đầu phiên chạy...38

Hình 2.14. Biểu đồ trình tự khi kết thúc phiên chạy...38

Hình 2.15. Biểu đồ trình tự lưu phiên chạy...39

Hình 2.17. Biểu đồ hoạt động cho chức năng Xem và Lọc dịng thời gian...41

Hình 2.18. Biểu đồ hoạt động cho chức năng xóa bản ghi chạy...41

Hình 2.19. Biều đồ trình tự cho chức năng Xem và Lọc dịng thời gian...42

Hình 2.20. Biểu đồ trình tự cho chức năng Xóa bản ghi chạy...42

Hình 2.22. Biểu đồ hoạt động cho chức năng Xem trang cá nhân...44

Hình 2.23. Biểu đồ hoạt động cho chức năng chỉnh sửa trang cá nhân...44

Hình 2.24. Biểu đồ trình tự cho chức năng Xem trang cá nhân...45

Hình 2.25. Biểu đồ trình tự Chỉnh sửa trang cá nhân...45

Hình 3.1. Màn hình xác thực...47

Hình 3.2. Biểu mẫu Đăng nhập bằng địa chỉ email...48

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Hình 3.3. Biểu mẫu Đăng ký...49

Hình 3.4. Biểu mẫu Đặt lại mật khẩu...50

Hình 3.5. Màn hình chính kèm theo các thơng số của người dùng...51

Hình 3.6. Màn hình theo dõi chạy...52

Hình 3.7. Màn hình theo dõi chạy khi đã bắt đầu...53

Hình 3.8. Màn hình sau khi kết thúc phiên chạy...54

Hình 3.15. Hộp thoại gửi lời mời kết bạn...61

Hình 3.16. Menu các chức năng với mỗi bạn bè...62

Hình 3.17. Màn hình cho Lời mời kết bạn đã gửi đi...63

Hình 3.18. Màn hình Yêu cầu kết bạn đến...64

Hình 3.19. Màn hình Cài đặt trong ứng dụng...65

Hình 3.20. Hộp thoại xác nhận đăng xuất...66

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>CHƯƠNG 1. CƠ SỞ LÝ THUYẾT</b>

<b>1.1. Các công nghệ được áp dụng</b>

<i>1.1.1. MVVM Design Pattern</i>

Mơ hình MVVM (Model-View-ViewModel) là một Design Pattern (mẫu thiết kế)được sử dụng rộng rãi trong phát triển phần mềm để tách biệt logic xử lý dữ liệu và giaodiện người dùng. MVVM kết hợp các khái niệm của Mơ hình (Model), Giao diện (View)và Mơ-đun xử lý hiển thị (ViewModel) để tạo ra một cấu trúc ứng dụng có thể quản lý dễdàng và mở rộng.

Trong MVVM, Model đại diện cho dữ liệu và logic xử lý dữ liệu. Nó khơng biết gì vềgiao diện người dùng và khơng phụ thuộc vào nó. Model thực hiện các hoạt động nhưtruy xuất, cập nhật và xử lý dữ liệu.

View là thành phần hiển thị giao diện người dùng. Nó đảm nhận vai trị hiển thị dữ liệutừ ViewModel và tương tác với người dùng. View không chứa logic xử lý dữ liệu và chỉlàm nhiệm vụ hiển thị thông tin.

ViewModel là một lớp trung gian giữa Model và View. Nó nhận dữ liệu từ Model vàchuyển đổi nó thành dữ liệu phù hợp để hiển thị trên View. ViewModel cung cấp cácthuộc tính và lệnh mà View sử dụng để hiển thị và tương tác với dữ liệu. Nó khơng biết gìvề giao diện người dùng cụ thể, điều này giúp tách biệt hoàn toàn logic xử lý dữ liệu vàgiao diện người dùng.

Ưu điểm của MVVM bao gồm:

- Tách biệt rõ ràng giữa logic xử lý dữ liệu và giao diện người dùng, giúp dễ dàng quảnlý và bảo trì ứng dụng.

- Tính linh hoạt và khả năng kiểm thử tốt do logic xử lý nằm trong ViewModel.

- Khả năng tái sử dụng cao, vì ViewModel không phụ thuộc vào giao diện người dùngcụ thể.

Tuy nhiên, MVVM cũng có một số nhược điểm:

- Địi hỏi việc tạo ra một số lượng lớn các lớp cho ViewModel và khái niệm khá phứctạp hơn so với các mơ hình truyền thống.

- u cầu một số kiến thức về data binding và sử dụng các framework hỗ trợ để triển

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

So sánh với MVC (Model-View-Controller) và MVP (Model-View-Presenter):

- Trong MVC, Controller hoặc Presenter đảm nhận vai trò trung gian giữa Model vàView, trong khi MVVM sử dụng ViewModel. MVC và MVP chủ yếu tập trung vào việcđiều phối và điều khiển, trong khi MVVM tập trung vào việc quản lý dữ liệu và giao diệnngười dùng.

- MVVM thường sử dụng data binding để liên kết dữ liệu giữa ViewModel và View,trong khi MVC và MVP khơng có tính năng này mặc định.

- MVP đặt nặng tính tương tác giữa Presenter và View, trong khi MVVM tập trung vàoviệc cung cấp dữ liệu cho View thông qua ViewModel.

Tóm lại, MVVM là một mơ hình thiết kế phát triển phần mềm mạnh mẽ và linh hoạt.Nó tách biệt rõ ràng giữa logic xử lý dữ liệu và giao diện người dùng, giúp dễ dàngquảnlý và bảo trì ứng dụng. MVVM có ưu điểm về tính linh hoạt, khả năng kiểm thử tốt vàkhả năng tái sử dụng cao. Tuy nhiên, nó địi hỏi việc tạo ra nhiều lớp và có một số kháiniệm phức tạp. So với MVC và MVP, MVVM tập trung vào việc quản lý dữ liệu và giaodiện người dùng, sử dụng data binding để liên kết dữ liệu và cung cấp dữ liệu cho Viewthông qua ViewModel.

<i>1.1.2. Clean Architecture</i>

Clean Architecture (Kiến trúc sạch) là một phương pháp thiết kế phần mềm được pháttriển bởi Robert C. Martin, còn được gọi là Uncle Bob. Nó tập trung vào việc tách biệtcác thành phần và lớp của hệ thống thành các lớp độc lập với nhau, đồng thời đảm bảotính mở rộng, bảo trì và kiểm thử dễ dàng.

Mục tiêu chính của Clean Architecture là tạo ra một hệ thống có thể thay đổi các chitiết bên trong mà không ảnh hưởng đến các thành phần bên ngồi. Nó đề cao sự phântách giữa các lớp và sự tuân thủ các nguyên tắc SOLID (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation và Dependency Inversion).

Clean Architecture được chia thành các lớp theo các mức độ phụ thuộc và trách nhiệmkhác nhau. Các lớp này bao gồm:

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

1. Entities (Thực thể): Đây là các đối tượng cơ bản của hệ thống, biểu diễn các kháiniệm cốt lõi và logic của ứng dụng.

2. Use Cases (Các trường hợp sử dụng): Lớp này chứa các quy trình kinh doanh cụ thểvà các tác vụ sử dụng các đối tượng Entities để thực hiện các nhiệm vụ cụ thể.

3. Interface Adapters (Bộ chuyển đổi giao diện): Lớp này chứa các thành phần liênquan đến việc giao tiếp với bên ngoài của hệ thống, bao gồm các lớp giao diện ngườidùng, lớp giao tiếp với các dịch vụ bên ngoài (API, cơ sở dữ liệu, v.v.) và các lớp chuyểnđổi dữ liệu.

4. Frameworks & Drivers (Các khung ứng dụng và trình điều khiển): Đây là thànhphần giao tiếp trực tiếp với các cơng nghệ và framework bên ngồi như UI frameworks,databases, web servers, v.v. Nó chịu trách nhiệm kết nối các thành phần bên trong với cácthành phần bên ngồi.

Ưu điểm của Clean Architecture bao gồm:

- Tính linh hoạt và dễ dàng mở rộng: Các thành phần được tách biệt rõ ràng, cho phépthay đổi và bảo trì dễ dàng mà không ảnh hưởng đến các thành phần khác.

- Khả năng kiểm thử tốt: Các thành phần có thể được kiểm thử độc lập mà không cầnphụ thuộc vào các thành phần khác.

- Tính tái sử dụng cao: Sự phân tách giữa các lớp và nguyên tắc SOLID tạo điều kiệncho việc tái sử dụng mã nguồn.

Tuy nhiên, Clean Architecture cũng có một số nhược điểm:

- Địi hỏi sự hiểu biết về nguyên tắc và quy tắc thiết kế phần mềm.

- Tạo ra một số lớp và thành phần phụ để xử lý sự tách biệt và phân chia trách nhiệm,gây ra một lượng mã nguồn và công việc phát triển thêm.

Clean Architecture giúp xây dựng hệ thống phần mềm linh hoạt, dễ bảo trì và dễ kiểmthử. Nó tách biệt các thành phần và lớp của hệ thống thành các lớp độc lập với nhau,đồng thời đảm bảo tính mở rộng và bảo trì dễ dàng. Các lớp trong Clean Architecture

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

được tổ chức theo mức độ phụ thuộc và trách nhiệm, bao gồm Entities, Use Cases,Interface Adapters và Frameworks & Drivers.

Entities đại diện cho các đối tượng cốt lõi của hệ thống, biểu diễn các khái niệm vàlogic chính. Use Cases chứa các trường hợp sử dụng và tác vụ kinh doanh, sử dụng cácđối tượng Entities để thực hiện các nhiệm vụ cụ thể. Interface Adapters chứa các thànhphần liên quan đến giao tiếp với bên ngoài, bao gồm giao diện người dùng, dịch vụ bênngoài và chuyển đổi dữ liệu. Cuối cùng, Frameworks & Drivers là thành phần giao tiếpvới các cơng nghệ và framework bên ngồi, như UI frameworks hay cơ sở dữ liệu.

Clean Architecture có nhiều ưu điểm, bao gồm tính linh hoạt và dễ mở rộng, khả năngkiểm thử tốt và khả năng tái sử dụng cao. Việc tách biệt rõ ràng giữa các thành phần giúpthay đổi và bảo trì dễ dàng, đồng thời cho phép kiểm thử độc lập các thành phần. Tuynhiên, việc áp dụng Clean Architecture đòi hỏi hiểu biết về nguyên tắc và quy tắc thiết kếphần mềm, cũng như tạo ra một số lớp và công việc phát triển thêm.

Clean Architecture là một phương pháp thiết kế phần mềm mạnh mẽ, giúp xây dựng hệthống linh hoạt, bảo trì dễ dàng và dễ kiểm thử. Nó đảm bảo sự tách biệt giữa các thànhphần và lớp trong hệ thống, đồng thời tuân thủ nguyên tắc SOLID để tạo ra một kiến trúcsạch và dễ mở rộng.

<i>1.1.3. Dependency Injection</i>

Dependency Injection (DI) là một nguyên tắc trong lập trình phần mềm giúp quản lýcác thành phần phụ thuộc (dependencies) trong một ứng dụng. Nó tạo điều kiện cho việcchèn (inject) các đối tượng hoặc các phụ thuộc vào một thành phần từ bên ngoài, thay vìthành phần tự tạo hay quản lý chúng.

Mục tiêu chính của Dependency Injection là giảm sự phụ thuộc chặt chẽ giữa cácthành phần trong một hệ thống phần mềm. Thay vì các thành phần tự tạo hoặc trực tiếpgọi các thành phần phụ thuộc, DI cho phép các phụ thuộc được cung cấp từ bên ngồi,thơng qua việc chèn chúng vào thành phần cần sử dụng. Điều này tạo ra một cách linhhoạt để thay đổi và tái sử dụng các thành phần mà không làm thay đổi mã nguồn của cácthành phần khác.

Có ba phương pháp chính để thực hiện Dependency Injection:

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

1. Constructor Injection (Chèn thông qua Constructor): Trong phương pháp này, cácphụ thuộc được chèn vào thông qua các tham số của constructor của một lớp. Khi khởitạo một đối tượng từ lớp đó, các phụ thuộc sẽ được cung cấp và gán cho các biến thànhviên tương ứng.

2. Setter Injection (Chèn thông qua Setter): Trong phương pháp này, các phụ thuộcđược chèn vào thông qua các phương thức setter của một lớp. Sau khi khởi tạo đối tượng,các phương thức setter sẽ được gọi để cung cấp các phụ thuộc.

3. Interface Injection (Chèn thông qua Interface): Trong phương pháp này, mộtinterface được sử dụng để chèn các phụ thuộc vào thành phần. Lớp thành phần sẽ triểnkhai interface này và cung cấp implement cho các phương thức chèn phụ thuộc.

Ưu điểm của Dependency Injection bao gồm:

- Giảm sự phụ thuộc: DI giúp giảm sự phụ thuộc chặt chẽ giữa các thành phần, làmcho mã nguồn linh hoạt hơn và dễ mở rộng hơn.

- Tái sử dụng và kiểm thử dễ dàng: Các phụ thuộc có thể được thay thế hoặc mơ phỏngtrong q trình kiểm thử hoặc thay đổi logic mà không cần thay đổi mã nguồn của thànhphần.

- Quản lý các thành phần phụ thuộc: DI giúp quản lý việc tạo và cung cấp các thànhphần phụ thuộc, đảm bảo rằng các phiên bản và tài nguyên được quản lý một cách hiệuquả.

Tuy nhiên, DI cũng có một số nhược điểm:

- Điều phối phụ thuộc: Việc quản lý và điều phối các phụ thuộc có thể trở nên phức tạpvà khó khăn trong các ứng dụng lớn.

- Cần hiểu rõ cấu trúc và quy tắc: Áp dụng DI đòi hỏi hiểu rõ nguyên tắc và quy tắccủa nó để đảm bảo việc chèn phụ thuộc được thực hiện đúng cách.

Dependency Injection là một nguyên tắc quan trọng trong lập trình phần mềm, giúpgiảm sựphụ thuộc và tạo ra các ứng dụng dễ dàng mở rộng, linh hoạt và dễ quản lý. Nó làmột cơng cụ mạnh mẽ trong việc xây dựng các hệ thống phần mềm có khả năng thay đổivà bảo trì tốt.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<i>1.1.4. SOLID Principles</i>

SOLID là một bộ nguyên tắc thiết kế phần mềm được đưa ra để tạo ra các hệ thốngphần mềm dễ dàng bảo trì, mở rộng và linh hoạt. Tên gọi SOLID đại diện cho nămnguyên tắc chính: Single Responsibility (SRP), Open-Closed (OCP), Liskov Substitution(LSP), Interface Segregation (ISP) và Dependency Inversion (DIP).

1. Single Responsibility (SRP): Nguyên tắc SRP khuyến khích mỗi lớp hoặc modulechỉ nên có một trách nhiệm duy nhất. Một lớp nên chỉ chịu trách nhiệm về một khía cạnhcụ thể của chương trình và nhiệm vụ của nó khơng nên phụ thuộc vào q nhiều yếu tốbên ngồi. Nếu một lớp có q nhiều trách nhiệm, nó sẽ trở nên khó bảo trì và dễ gây lỗi.

2. Open-Closed (OCP): Nguyên tắc OCP khuyến khích việc thiết kế các thành phầnphần mềm mở rộng được và đóng với việc sửa đổi. Theo nguyên tắc này, một thành phầnphần mềm nên mở cho việc mở rộng bằng cách cho phép thay đổi hành vi của nó thơngqua kế thừa, ghi đè hoặc chèn thêm mã mới, mà không cần sửa đổi mã nguồn của thànhphần gốc.

3. Liskov Substitution (LSP): Nguyên tắc LSP tạo ra một quy ước cho việc kế thừatrong lập trình hướng đối tượng. Nó nói rằng các đối tượng của lớp con nên có thể thaythế các đối tượng của lớp cha mà không làm thay đổi tính năng chính hoặc sự đúng đắncủa chương trình. Điều này đảm bảo tính nhất quán và tương thích trong việc sử dụng cácđối tượng kế thừa.

4. Interface Segregation (ISP): Nguyên tắc ISP khuyến khích việc chia nhỏ các giaodiện lớn thành các giao diện nhỏ hơn, cung cấp các phương thức tương ứng với các khíacạnh cụ thể của chương trình. Điều này giúp tránh việc lớp phải triển khai các phươngthức không cần thiết, giảm sự phụ thuộc và làm cho mã nguồn dễ đọc, bảo trì và mở rộnghơn.

5. Dependency Inversion (DIP): Nguyên tắc DIP tạo ra một cơ chế để quản lý phụthuộc giữa các thành phần phần mềm. Thay vì các thành phần phụ thuộc trực tiếp vàonhau, nguyên tắc này khuyến khích sử dụng Dependency Injection (DI) để chèn các phụthuộc từ bên ngoài. Điều này giúp giảm sự phụ thuộc chặt chẽ, tăng tính linh hoạt và khảnăng thay đổi của hệ thống.

SOLID là một tập hợp các nguyên tắc thiết kế phần mềm quan trọng, giúp tạo ra cáchệ thống phần mềm dễ bảo trì, mở rộng và linh hoạt. Áp dụng đúng SOLID giúp tăng

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

tính module, giảm sự phụ thuộc vàgiúp phát triển mã nguồn dễ đọc, dễ kiểm thử và dễ táisử dụng. Các nguyên tắc SOLID cung cấp một khung chắc chắn để xây dựng kiến trúcphần mềm chất lượng cao và giúp các nhà phát triển tạo ra các ứng dụng linh hoạt, mởrộng và dễ quản lý.

<i>1.1.5. Serverless</i>

Serverless là một mơ hình phát triển ứng dụng trong đó nhà phát triển khơng cần quantâm đến việc quản lý cơ sở hạ tầng máy chủ (server infrastructure). Thay vì tập trung vàoviệc triển khai và quản lý máy chủ, nhà phát triển chỉ cần tập trung vào việc viết mã vàtriển khai các chức năng (functions) hoặc logic của ứng dụng.

Mơ hình serverless cho phép nhà phát triển xây dựng ứng dụng phân tán và tự độngmở rộng mà không cần lo lắng về việc mua sắm, cấu hình và duy trì các máy chủ. Cácchức năng (functions) trong mơ hình này được triển khai và chạy trên nền tảng điện toánđám mây, và việc quản lý tài nguyên và mở rộng đều do nhà cung cấp điện toán đám mây(cloud provider) chịu trách nhiệm.

Có nhiều nhà cung cấp serverless phổ biến trên thị trường, mỗi nhà cung cấp đều cungcấp một dịch vụ serverless riêng với các tính năng và cơng cụ hỗ trợ. Dưới đây là một sốví dụ về các nhà cung cấp serverless:

1. Amazon Web Services (AWS) Lambda: AWS Lambda là dịch vụ serverless củaAmazon. Nó cho phép bạn triển khai các hàm (functions) và chạy chúng mà không cầnquan tâm đến việc quản lý máy chủ. Lambda hỗ trợ nhiều ngơn ngữ lập trình và tích hợptốt với các dịch vụ khác trong hệ sinh thái AWS.

2. Microsoft Azure Functions: Azure Functions là dịch vụ serverless của MicrosoftAzure. Nó cung cấp một mơi trường để triển khai các chức năng (functions) mà khôngcần lo lắng về việc cấu hình máy chủ. Azure Functions tích hợp tốt với các dịch vụ kháccủa Azure và hỗ trợ nhiều ngôn ngữ lập trình.

3. Google Cloud Functions: Google Cloud Functions là dịch vụ serverless của GoogleCloud Platform. Nó cho phép bạn triển khai chức năng (functions) và chạy chúng màkhông cần quản lý cơ sở hạ tầng. Cloud Functions tích hợp tốt với các dịch vụ khác củaGoogle Cloud và hỗ trợ nhiều ngơn ngữ lập trình.

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

4. IBM Cloud Functions: IBM Cloud Functions là dịch vụ serverless của IBM Cloud.Nó cho phép bạn triển khai các hàm (functions) và chạy chúng mà không cần quản lýmáy chủ. IBM Cloud Functions hỗ trợ nhiều ngơn ngữ lập trình và tích hợp tốt với cácdịch vụ khác trong hệ sinh thái IBM Cloud.

Mơ hình serverless giúp giảm sự phụ thuộc vào cơ sở hạ tầng và tập trung vào việc tạora các chức năng (functions) và logic của ứng dụng. Nó mang lại sự linh hoạt, mở rộng vàgiảm chi phí cho việc phát triển ứng dụng. Các nhà cung cấp serverless cung cấp cáccông cụ và dịch vụ để hỗ trợ triển khai và quản lý serverless một cách dễ dàng và hiệuquả.

<b>1.2. Các cơng cụ và tiện ích được sử dụng</b>

<i>1.2.1. Android Studio IDE</i>

Android Studio là một môi trường phát triển tích hợp (Integrated DevelopmentEnvironment - IDE) được phát triển bởi Google, chuyên dùng cho việc phát triển ứngdụng di động trên nền tảng Android. Với các cơng cụ, tính năng và sự tích hợp đặc biệtcho việc phát triển Android, Android Studio là một lựa chọn hàng đầu cho các nhà pháttriển ứng dụng di động.

Dưới đây là một số đặc điểm và tính năng chính của Android Studio:

1. Tích hợp dễ dàng: Android Studio tích hợp tốt với trình quản lý mã nguồn Git và hệthống kiểm soát phiên bản, cho phép nhà phát triển dễ dàng quản lý mã nguồn và làmviệc trong nhóm. Nó cũng tích hợp với Gradle, một cơng cụ xây dựng mạnh mẽ cho việcxây dựng, kiểm thử và triển khai ứng dụng Android.

2. Trình biên tập thơng minh: Android Studio cung cấp trình biên tập mã nguồn thơngminh với các tính năng như gợi ý mã, kiểm tra lỗi cú pháp, tự động hoàn thành và địnhdạng mã tự động. Điều này giúp tăng năng suất và giảm thời gian phát triển.

3. Thiết kế giao diện người dùng (UI): Android Studio cung cấp trình chỉnh sửa giaodiện người dùng (Layout Editor) cho phép nhà phát triển thiết kế giao diện người dùngmột cách trực quan. Bằng cách kéo và thả các thành phần, sắp xếp và tùy chỉnh các yếutố giao diện, nhà phát triển có thể dễ dàng tạo ra giao diện người dùng hấp dẫn và tươngtác.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

4. Trình giả lập thiết bị: Android Studio đi kèm với Android Emulator, một trình giảlập thiết bị Android tích hợp. Trình giả lập này cho phép nhà phát triển thử nghiệm ứngdụng trên nhiều thiết bị Android khác nhau, mô phỏng các tính năng và hành vi của thiếtbị thực tế.

5. Hỗ trợ kiểm thử và gỡ lỗi: Android Studio cung cấp các công cụ mạnh mẽ để kiểmthử ứng dụng, bao gồm kiểm thử đơn vị (unit testing), kiểm thử chức năng (functionaltesting) và kiểm thử giao diện người dùng (UI testing). Nó cũng hỗ trợ gỡ lỗi (debugging)chi tiết, cho phép nhà phát triển theo dõi và sửa lỗi trong q trình thực thi ứng dụng.

6. Tích hợp các cơng cụ và thư viện: Android Studio tích hợp và hỗ trợ một loạt cáccông cụ và thư viện hữu ích để giúp nhà phát triển xây dựng ứng dụng đa dạng và mạnhmẽ. Điều này bao gồm hỗ trợ Kotlin (ngơn ngữ lập trình chính thức của Android), thưviện hỗ trợ Android Jetpack, Firebase, Google Play Services và nhiều công cụ và pluginkhác.

Android Studio là một IDE mạnh mẽ và toàn diện cho việc phát triển ứng dụngAndroid. Với các tính năng và cơng cụ đa dạng cộng thêm sự hỗ trợ và cập nhật mạnhmẽ đến từ Google và nhà phát triển của IDE IntelliJ, việc phát triển ứng dụng di độngtrên hệ điều hành Android sẽ trở nên tiện lợi và dễ dàng hơn nhiều.

<i>1.2.2. Ngơn ngữ lập trình Kotlin</i>

Kotlin là một ngơn ngữ lập trình hiện đại, có tính năng tương thích ngược với Java,được phát triển bởi JetBrains. Được giới thiệu lần đầu vào năm 2011, Kotlin đã nhanhchóng trở thành một ngơn ngữ phổ biến trong cộng đồng phát triển phần mềm và được sửdụng rộng rãi cho việc phát triển ứng dụng di động, ứng dụng máy chủ, và ứng dụng web.Một trong những đặc điểm chính của Kotlin là tính tương thích ngược với Java. Điều nàycó nghĩa là bạn có thể sử dụng mã nguồn Java hiện có trong dự án Kotlin mà không cầnchỉnh sửa nhiều. Kotlin cung cấp một trình biên dịch thơng minh có khả năng hiểu vàbiên dịch mã Java, cho phép nhà phát triển chuyển đổi từ Java sang Kotlin một cách dễdàng và mượt mà.

Một trong những ưu điểm quan trọng của Kotlin là sự an tồn và thân thiện với lập trìnhviên. Kotlin áp dụng nhiều quy tắc an toàn trong quá trình phát triển, giúp tránh được

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

nhiều lỗi phổ biến trong Java như null pointer exceptions. Nó cung cấp một hệ thốngkiểm tra kiểu mạnh mẽ và thông minh, cho phép phát hiện lỗi tại thời điểm biên dịch vàcung cấp mã gợi ý để sửa chữa. Điều này giúp tăng tính ổn định và tin cậy của ứng dụngKotlin.

Kotlin cung cấp rất nhiều tính năng mạnh mẽ để giúp nhà phát triển viết mã ngắn, dễ đọcvà dễ bảo trì. Nó hỗ trợ cú pháp súc tích và linh hoạt, cho phép nhà phát triển viết mã mộtcách nhanh chóng và hiệu quả. Kotlin cũng có nhiều tính năng tiện ích như hàm mở rộng,lớp dữ liệu, null safety, lambda expressions và coroutine. Điều này giúp tăng năng suất vàgiảm thiểu lỗi trong quá trình phát triển.

Kotlin không chỉ hỗ trợ phát triển ứng dụng di động với Android, mà còn hỗ trợ phát triểnứng dụng máy chủ và ứng dụng web. Kotlin/JVM cho phép bạn viết mã Java chạy trênmáy ảo Java (JVM) và Kotlin/Native cho phép bạn viết mã Kotlin chạy trên nền tảngnative như iOS và máy tính cá nhân. Kotlin/JS cho phép bạn viết mã Kotlin và biên dịchthành JavaScript để phát triển ứng dụng web.

Tóm lại, Kotlin là một ngơn ngữ lập trình hiện đại, tương thích ngược với Java, vàđược phát triển bởi JetBrains. Với tính tương thích ngược, tính an tồn, tính thân thiệnvới lập trình viên và nhiều tính năng mạnh mẽ, Kotlin là một lựa chọn tuyệt vời cho việcphát triển ứng dụng di động, ứng dụng máy chủ và ứng dụng web.

<i>1.2.3. Thư viện Jetpack Compose</i>

Jetpack Compose là một thư viện phát triển giao diện người dùng (UI) hiện đại và kháiniệm mới cho việc xây dựng ứng dụng Android. Được phát triển bởi Google, JetpackCompose giúp các nhà phát triển tạo ra giao diện người dùng đẹp mắt, linh hoạt và dễdàng trong việc xây dựng ứng dụng di động.

Một trong những điểm nổi bật của Jetpack Compose là cú pháp khai báo giao diện dựatrên nguyên tắc "code là giao diện". Thay vì sử dụng XML như trong các phiên bản trướcđây, Jetpack Compose sử dụng Kotlin để tạo ra giao diện người dùng. Điều này mang lạilợi ích lớn về sự linh hoạt, dễ đọc và dễ hiểu mã nguồn, giúp tăng năng suất phát triển vàgiảm thiểu lỗi.

Jetpack Compose cung cấp một loạt các thành phần UI tiện ích và mạnh mẽ. Các thànhphần này được xây dựng dựa trên khái niệm "composables", có thể được kết hợp và tái sửdụng để tạo ra giao diện phức tạp. Ví dụ, bạn có thể tạo các thành phần như nút (button),

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

danh sách (list), bảng điều khiển (checkbox), và rất nhiều nữa bằng cách sử dụng các hàmcomposables có sẵn hoặc tạo các composables tùy chỉnh của riêng bạn.

Jetpack Compose cũng cung cấp một hệ sinh thái mạnh mẽ của các công cụ hỗ trợ nhưAndroid Studio và các thư viện khác trong Jetpack. Các công cụ này giúp đơn giản hóavà tăng tốc q trình phát triển, bao gồm xem trước giao diện người dùng trực tiếp trongquá trình phát triển, kiểm tra nhanh chóng và dễ dàng, và phân tích hiệu năng ứng dụng.

Với Jetpack Compose, bạn có thể tận dụng các tính năng hiện đại như tạo hiệu ứngchuyển động mượt mà, tương tác đa điểm, và giao diện người dùng tối đa hóa cho cácthiết bị di động khác nhau. Bên cạnh đó, Jetpack Compose được tích hợp tốt với hệ sinhthái Android hiện có, cho phép bạn kết hợp các thành phần Compose với các thành phầnAndroid truyền thống và sử dụng các tính năng mạnh mẽ của Android như cảm biến, dịchvụ nền, và quản lý vòng đời ứng dụng.

Với sự phát triển nhanh chóng và sự hỗ trợ từ cộng đồng, Jetpack Compose đang trởthành một công cụ phát triển giao diện người dùng quan trọng cho ứng dụng Android. Nócung cấp sự linh hoạt, hiệu suất và khả năng mở rộng, giúp bạn xây dựng các ứng dụngAndroid tuyệt vời với giao diện người dùng đẹp và tương tác mạnh mẽ.

<i>1.2.4. Thư viện Dagger Hilt</i>

Dagger Hilt là một thư viện phổ biến trong cộng đồng phát triển Android, được pháttriển bởi Google và xây dựng dựa trên thư viện dependency injection (DI) Dagger.Dagger Hilt cung cấp một cách tiếp cận đơn giản và dễ sử dụng hơn để triển khai DItrong các ứng dụng Android.

Với Dagger Hilt, việc quản lý các phụ thuộc và cung cấp các đối tượng (objects) trongứng dụng trở nên dễ dàng hơn bằng cách sử dụng các annotated classes và cácannotations như @Inject, @Module và @Provides. Thư viện giúp tự động tạo ra các đốitượng phụ thuộc và quản lý vòng đời của chúng, từ việc khởi tạo đến việc giải phóng bộnhớ.

Một trong những tính năng nổi bật của Dagger Hilt là sự tích hợp mạnh mẽ vớiAndroid Jetpack. Thư viện cung cấp các annotation và cách tiếp cận tối ưu cho việc triểnkhai DI trong các thành phần Jetpack như Activities, Fragments, ViewModels và

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

Services. Điều này giúp giảm bớt công việc lập trình và giúp bạn tập trung vào việc pháttriển chức năng chính của ứng dụng.

Dagger Hilt cũng hỗ trợ việc tạo ra các graph phụ thuộc (dependency graph) tự động.Thư viện tự động quét và phân tích các annotated classes để xác định các phụ thuộc vàtạo ra các đối tượng tương ứng. Điều này giúp giảm thiểu cơng việc cấu hình thủ cơng vàđảm bảo tính nhất quán trong việc quản lý phụ thuộc.

Ngoài ra, Dagger Hilt cung cấp các tính năng như scoping, lazy injection và assistedinjection. Scoping cho phép bạn xác định vòng đời của các đối tượng phụ thuộc, trong đóscoping annotation như @Singleton hay @ActivityScoped giúp quản lý vòng đời của cácđối tượng. Lazy injection cho phép bạn trì hỗn việc tạo đối tượng cho đến khi nó đượcyêu cầu thực sự. Assisted injection cho phép bạn cung cấp các giá trị động vào q trìnhtạo đối tượng.

Dagger Hilt cũng được tích hợp tốt với các công cụ phát triển Android như AndroidStudio và Kotlin. Thư viện cung cấp hỗ trợ code autocompletion, kiểm tra lỗi tĩnh và gợiý thông minh khi triển khai DI. Điều này giúp tăng năng suất phát triển và đảm bảo tínhchính xác của việc triển khai DI trong dự án.

Tóm lại, Dagger Hilt là một thư viện dependency injection mạnh mẽ và dễ sử dụngtrong phát triển ứng dụng Android. Với tích hợp tốt với Android Jetpack và các tính năngnhư scoping, lazy injection và assisted injection, Dagger Hilt giúp bạn quản lý phụ thuộcvà triển khai DI một cách dễ dàng và hiệu quả.

<i>1.2.5. Google Firebase</i>

Firebase là một nền tảng phát triển ứng dụng di động và web đám mây, được cung cấpbởi Google. Nó cung cấp một loạt các dịch vụ dựa trên đám mây để giúp các nhà pháttriển xây dựng, triển khai và quản lý ứng dụng một cách dễ dàng và hiệu quả. Firebasebao gồm nhiều dịch vụ khác nhau, trong đó có hai dịch vụ quan trọng sẽ được áp dụngvào trong dự án này đó là là Authentication và Firestore.

Firebase Authentication là một dịch vụ xác thực người dùng mạnh mẽ và dễ sử dụng.Nó cung cấp các phương thức xác thực linh hoạt như đăng nhập bằng email, đăng nhậpbằng mạng xã hội (Google, Facebook, Twitter), đăng nhập bằng số điện thoại và đăngnhập bằng tài khoản người dùng tùy chỉnh. Firebase Authentication giúp bạn xây dựng hệthống đăng nhập an toàn và quản lý danh sách người dùng một cách dễ dàng. Nó cũng

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

tích hợp tốt với các tính năng bảo mật khác của Firebase như quyền truy cập dựa trên vaitrò và kiểm soát truy cập.

Firestore là một cơ sở dữ liệu đám mây NoSQL linh hoạt và mạnh mẽ. Nó cung cấpmột lưu trữ dựa trên tài liệu và cơ chế đồng bộ thời gian thực, cho phép bạn lưu trữ vàtruy xuất dữ liệu một cách dễ dàng. Firestore được tổ chức theo cấu trúc tàiliệu/collection/document, giúp bạn tổ chức và truy xuất dữ liệu theo cách linh hoạt. Nócung cấp tính năng đồng bộ thời gian thực, cho phép dữ liệu được cập nhật ngay lập tứctrên tất cả các thiết bị kết nối. Firestore cũng tích hợp tốt với các dịch vụ khác củaFirebase như Authentication, Cloud Functions và Storage, giúp bạn xây dựng ứng dụnghoàn chỉnh và mạnh mẽ.

Ngồi Authentication và Firestore, Firebase cịn cung cấp nhiều dịch vụ khác nhưRealtime Database, Cloud Storage, Cloud Functions, Cloud Messaging và Analytics.Realtime Database là một cơ sở dữ liệu thời gian thực, Cloud Storage cung cấp lưu trữđám mây, Cloud Functions cho phép bạn xây dựng và triển khai các chức năng máy chủkhông cần máy chủ riêng, Cloud Messaging giúp gửi thông báo đến người dùng vàAnalytics giúp bạn hiểu rõ hơn về hành vi người dùng và hiệu suất ứng dụng.

Tóm lại, Firebase là một nền tảng đám mây mạnh mẽ cho phát triển ứng dụng di độngvà web. Với dịch vụ như Authentication và Firestore, bạn có thể xây dựng hệ thống xácthực người dùng và quản lý dữ liệu một cách dễ dàng và linh hoạt. Firebase cũng cungcấp một loạt các dịch vụ khác nhau để giúp bạn xây dựng các ứng dụng đa dạng và mạnhmẽ.

<i>1.2.6. Star UML</i>

Star UML là một ứng dụng phần mềm mạnh mẽ và linh hoạt để mơ hình hóa và thiếtkế các hệ thống phần mềm. Nó cung cấp một môi trường đồ họa dễ sử dụng và được sửdụng rộng rãi trong lĩnh vực phát triển phần mềm và quản lý dự án.

Với Star UML, bạn có thể tạo ra các biểu đồ UML (Unified Modeling Language) nhưbiểu đồ lớp, biểu đồ tuần tự, biểu đồ hoạt động, biểu đồ trạng thái và nhiều loại biểu đồkhác. Các biểu đồ UML giúp bạn diễn đạt và trực quan hóa các khía cạnh cấu trúc, hànhvi và tương tác của hệ thống phần mềm, giúp cải thiện việc hiểu và truyền đạt thông tingiữa các thành viên trong dự án.

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

Star UML cung cấp một loạt các tính năng và cơng cụ để hỗ trợ q trình phát triển phầnmềm. Bạn có thể tạo ra các mơ hình UML chính xác và chi tiết bằng cách kéo và thả cácphần tử, kết nối chúng với nhau và tùy chỉnh thuộc tính và phương thức của chúng. Nócũng cho phép bạn tạo ra các mơ hình mơ phỏng tiến trình kinh doanh, cung cấp một cáinhìn tổng quan về cấu trúc của dự án.

Một trong những ưu điểm của Star UML là khả năng mở rộng của nó. Bạn có thể tảixuống và cài đặt các plugin và extension từ cộng đồng người dùng, mở rộng tính năng vàkhả năng của ứng dụng theo nhu cầu cụ thể. Điều này giúp bạn tùy chỉnh và linh hoạttrong việc sử dụng Star UML để phù hợp với yêu cầu cụ thể của dự án.

Ngoài ra, Star UML hỗ trợ xuất và nhập các tệp tin UML theo các định dạng chuẩn nhưXMI, XML, PNG và PDF, giúp bạn chia sẻ và trình bày mơ hình của mình cho các thànhviên khác trong dự án. Bạn cũng có thể tích hợp Star UML với các cơng cụ quản lý phiênbản như Git để theo dõi và quản lý lịch sử thay đổi của mơ hình.

Tóm lại, Star UML là một ứng dụng mơ hình hóa phần mềm mạnh mẽ và đa dạng. Vớikhả năng tạo ra các biểu đồ UML và hỗ trợ mở rộng, nó giúp bạn thiết kế và trực quanhóa hệ thống phần mềm một cách dễ dàng và linh hoạt. Với tính năng xuất và nhập tệptin UML và tích hợp với các cơng cụ khác, Star UML cung cấp một mơi trường làm việctồn diện để phát triển và quản lý dự án phần mềm.

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<b>CHƯƠNG 2. KHẢO SÁT & PHÂN TÍCH THIẾT KẾ</b>

<b>2.1. Khảo sát</b>

Trong những năm gần đây, xu hướng sử dụng các ứng dụng theo dõi chạy bộ đã trởthành một phần không thể thiếu của cuộc sống hiện đại. Với sự phát triển của công nghệdi động và các thiết bị thông minh, việc sử dụng các ứng dụng chạy bộ trên điện thoại diđộng đã trở nên phổ biến và hấp dẫn đối với người dùng.

Nhờ vào tính tiện lợi và khả năng tương tác hoạt động, các ứng dụng theo dõi chạy bộđã trở thành người bạn đồng hành đáng tin cậy của mọi người khi tập luyện và rèn luyệnsức khỏe. Những ứng dụng này cho phép người dùng ghi lại thông tin về quãng đường đãchạy, tốc độ, thời gian và nhiều thông số khác, giúp họ theo dõi tiến bộ và đạt được mụctiêu tập luyện cá nhân.

Một trong những lợi ích chính của việc sử dụng các ứng dụng theo dõi chạy bộ là khảnăng cung cấp phản hồi và gợi ý cá nhân hóa. Các ứng dụng này có khả năng phân tíchdữ liệu và đưa ra những phản hồi thông minh về hiệu suất chạy bộ của người dùng. Bằngcách theo dõi tiến bộ và đề xuất các bài tập tùy chỉnh, người dùng có thể nâng cao kỹnăng chạy bộ của mình và đạt được mục tiêu tập luyện một cách hiệu quả.

Ngồi ra, tính năng xã hội cũng là một phần quan trọng trong các ứng dụng theo dõi chạybộ. Người dùng có thể chia sẻ thành tích của mình trên các mạng xã hội, tham gia vào cácnhóm cộng đồng chạy bộ và thách thức bạn bè. Điều này không chỉ tạo ra một môitrường thân thiện và động lực cho người dùng, mà còn khuyến khích họ duy trì một lốisống lành mạnh và hoạt động thể chất đều đặn.

Tuy nhiên, cần lưu ý rằng việc sử dụng các ứng dụng theo dõi chạy bộ cần được thựchiện một cách cân nhắc và chính xác. Bảo mật dữ liệu cá nhân là vấn đề quan trọng, dođó, người dùng nên kiểm tra và chọn lựa các ứng dụng có độ tin cậy và bảo mật cao.

Tóm lại, các ứng dụng theo dõi chạy bộ ngày nay đem lại nhiều lợi ích cho ngườidùng. Từ việc theo dõi tiến bộ, cung cấp phản hồi cá nhân hóa cho đến khả năng kết nốixã hội, các ứng dụng này không chỉ giúp người dùng rèn luyện sức khỏe mà cịn tạo nramột cộng đồng sơi động và đầy động lực.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>2.2. Yêu cầu cơ bản về chức năng</b>

<i>2.2.1. Chức năng xác thực người dùng</i>

Trước khi có thể sử dụng các chức năng chính của ứng dụng người dùng phải thựchiện Đăng nhập tài khoản trước. Ứng dụng dự định sẽ cung cấp 2 hình thức đăng nhập làĐăng nhập bằng Google và Đăng nhập bằng địa chỉ email. Nếu người dùng muốn sửdụng chức năng Đăng nhập bằng địa chỉ email thì trước hết phải thực hiện Đăng ký tàikhoản mới. Sau khi người dùng thực hiện đăng ký, người dùng sẽ được gán một uid tựđộng, uid này sẽ được sử dụng để truy cập đến dữ liệu của người dùng trên cơ sở dữ liệu.Trong trường hợp người dùng quên mật khẩu, họ có thể thực hiện Đặt lại mật khẩu bằngcách sử dụng địa chỉ email đã đăng ký tài khoản trước đó.

<i>2.2.2. Chức năng theo dõi chạy bộ</i>

Đây là chức năng lòng cốt của ứng dụng. Khi người dùng bắt đầu phiên chạy, ứngdụng sẽ thực hiện ghi lại các thông tin như quãng đường đã chạy được, vận tốc hiện tại,thời gian, vị trí hiện tại (dùng để hiển thị tuyến đường đã chạy qua trên bản đồ) cho đếnkhi kết thúc phiên chạy. Tồn bộ thơng tin của phiên chạy sẽ được lưu lại dưới dạng Bảnghi, các bản ghi đã được lưu sẽ được hiển thị ở Dịng thời gian.

<i>2.2.3. Chức năng dịng thời gian</i>

Tồn bộ Bản ghi sẽ được hiển thị ở đây kèm theo đó sẽ có một bộ lọc theo thời giangiúp người dùng có thể dễ dàng tìm và xem lại các Bản ghi cũ hơn.

<i>2.2.4. Chức năng quản lí trang cá nhân</i>

Tồn bộ thông tin của người dùng sẽ được hiển thị tại đây. Người dùng có thể chọnnhững thơng tin mà mình muốn hiển thị tới người khác ví dụ như tên, địa chỉ email, ngàysinh, số điện thoại, địa chỉ, sở thích,.. ngồi ra người dùng cịn có thể đặt một đoạn giớithiệu ngắn để hiển thị trên cùng.

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<b>2.3. Tổng quan</b>

<i>2.3.1.Biểu đồ trường hợp sử dụng</i>

<i>Hình 2.1 Trường hợp sử dụng tổng quát2.3.2. Mô tả các tác nhân</i>

1 User (Người dùng) <sub>ứng dụng</sub><sup>Người trực tiếp thực hiện các thao tác trên </sup>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

2 UC2000 Track running đến khi người dùng kết thúc phiên<sup>Ghi lại các thông tin cần thiết cho</sup>chạy.

3 UC3000 Manage timeline <sub>chạy từ trước tới nay.</sub><sup>Xem lại các bản ghi của các phiên</sup>

4 UC4000 Manage personal profile đặt cách hiển thị các thơng tin này<sup>Quản lí các thơng tin cá nhân và </sup>đến người dùng khác.

5 UC5000 Manage friends Quản lí bạn bè.

6 UC6000 Setttings <sub>ứng dụng.</sub><sup>Chỉnh sửa các cài đặt cơ bản của </sup>

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<i>2.3.4. Biểu đồ lớp</i>

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

- Chức năng đăng nhập bằng Email:

<i>Hình 2.2: Biểu đồ hoạt động chức năng Đăng nhập bằng địa chỉ email</i>

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

- Chức năng đăng nhập bằng Google:

<i>Hình 2.3. Biểu đồ hoạt động chức năng Đăng nhập bằng Google</i>

- Chức năng đăng ký:

<i>Hình 2.4. Biểu đồ hoạt động chức năng Tạo tài khoản</i>

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

- Chức năng đặt lại mật khẩu:

<i>Hình 2.5. Biểu đồ hoạt động chức năng Đặt lại mật khẩu2.4.3. Biểu đồ trình tự</i>

- Chức năng đăng nhập bằng email:

<i>Hình 2.6. Biểu đồ trình tự chức năng Đăng nhập bằng email</i>

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

- Chức năng đăng nhập bằng Google:

<i>Hình 2.7. Biểu đồ trình tự cho chức năng Đăng nhập bằng Google</i>

- Chức năng Đăng ký:

<i>Hình 2.8. Biểu đồ hoạt động cho chức năng Đăng ký</i>

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

- Chức năng Đặt lại mật khẩu:

<i>Hình 2.9. Biểu đồ hoạt động cho chức năng Đặt lại mật khẩu</i>

</div>

×