Kotlin là một ngôn ngữ ngữ dụng kiểu tĩnh dành cho Java Virtual Machineđã chính thức phát hành phiên bản 1.0. Nó được tạo ra bởi JetBrains, Kotlin cũnggiống như nhiều ngôn ngữ lập trình không phải Java khác, tức là cũng sẽ chạytrên JVM và sử dụng các công cụ và thư viện hiện có của Java. Và ngược lại Javacũng có thể sử dụng các item được xây dựng trong Kotlin.Mục tiêu quan trọng của Kotlin là tính hữu dụng. Từ lúc giới thiệu vào năm2011 cho đến khi phát hành phiên bản 1.0, JetBrains đã luôn chu trọng đến tínhtương hợp với Java..Mặc dù Kotlin có một số tính năng hoàn toàn mới chẳng hạnnhư một type system được thiết kế để ngăn chặn các bug như các null pointerreference, nhưng quan trọng là nó làm việc cùng với code và cơ sở hạ tầng hiệncó của Java. Cuối cùng, Kotlin không có trình quản lý gói và build system củariêng nó, do Java đã có sẵn.Thiết kế và cài đặt hoàn chỉnh phần mềm Chat trên Android với các chứcnăng chính sau đây: Trò chuyện(Chat) Cập nhật thông tin(Edit profile) Kết bạn(Add friends)
Trang 1- -
TIỂU LUẬN CHUYÊN NGÀNH
TÌM HIỂU KOTLIN VÀ XÂY DỰNG ỨNG DỤNG
MINH HỌA TRÊN ANDROID
TP.HỒ CHÍ MINH - 2017
SINH VIÊN THỰC HIỆN: TRƯƠNG THÀNH TÍN
MSSV: 14110205 SINH VIÊN THỰC HIỆN: NGUYỄN VĂN THẮNG MSSV: 14110184
GVHD: NGUYỄN TRẦN THI VĂN
Trang 2- -
TIỂU LUẬN CHUYÊN NGÀNH
TÌM HIỂU KOTLIN VÀ XÂY DỰNG ỨNG DỤNG
MINH HỌA TRÊN ANDROID
TP.HỒ CHÍ MINH - 2017
SINH VIÊN THỰC HIỆN: TRƯƠNG THÀNH TÍN
MSSV: 14110205 SINH VIÊN THỰC HIỆN: NGUYỄN VĂN THẮNG MSSV: 14110184
GVHD: NGUYỄN TRẦN THI VĂN
Trang 3
Giáo viên hướng dẫn
Nguyễn Trần Thi Văn
Trang 4
Giáo viên hướng dẫn
Nguyễn Minh Đạo
Trang 5Nhóm thực hiện đề tài xin chân thành cảm ơn Thầy Nguyễn Trần Thi Văn – giáo viên khoa Công nghệ thông tin trường Đại học Sư phạm Kỹ thuật TP.HCM, đã giúp đỡ chúng em rất nhiều trong việc lựa chọn đề tài, hướng dẫn thực hiện, nêu ý kiến nhận xét, cung cấp tài liệu tham khảo trong quá trình thực hiện đề tài
“Tìm hiểu Kotlin và xây dựng ứng dụng chat minh họa trên hệ điều hành Android”
Chúng em xin cảm ơn các anh chị khóa trước đã cung cấp nhiều thông tin, tài liệu tham khảo, các bạn cùng khóa cùng nhau trao đổi kinh nghiệm để thực hiện đề tài tốt hơn
Nhóm chúng em rất mong nhận được những ý kiến đóng góp của quý thầy
cô và các bạn để đề tài ngày càng hoàn thiện
Sau cùng, chúng em xin kính chúc quý Thầy Cô trong Khoa Công nghệ thông tin và Thầy Nguyễn Trần Thi Văn thật dồi dào sức khỏe, niềm tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến thức cho thế hệ mai sau
Xin chân thành cảm ơn!
Nhóm thực hiện đề tài
Sinh viên thực hiện
Trương Thành Tín Nguyễn Văn Thắng
Trang 6Chương 1: MỞ ĐẦU 3
1.1 Lý do chọn đề tài 3
1.2 Ý nghĩa khoa học và thực tiễn 3
1.3 Mục tiêu đề tài 4
1.3.1 Nghiên cứu công nghệ 4
1.3.2 Mô hình hệ thống 4
1.4 Đối tượng và phạm vi nghiên cứu 4
Chương 2: TÌM HIỂU TỔNG QUAN VỀ KOTLIN VÀ FIREBASE 5
2.1 Giới thiệu về Kotlin 5
2.2 Kotlin và Android 5
2.3 Ưu nhược điểm của Kotin 6
2.3.1 Ưu điểm 6
2.3.2 Nhược điểm 8
2.4 Tính linh hoạt 9
2.5 Đặc điểm 10
2.5.1 Khai báo biến 10
2.5.2 Null Safety 11
2.5.3 String template 11
2.5.4 Kế thừa và overide 12
2.5.5 Chỉ định truy cập(Visibility Modifiers) 13
2.5.6 Truyền tham số trong hàm 13
2.6 Giới thiệu về Firebase 14
2.6.1 Realtime Database – Cơ sở dữ liệu thời gian thực……… ….13
2.6.2 Firebase Authentication – Hệ thống xác thực của Firebase ………… 13
2.6.3 Firebase Hosting 14
2.7 Những lợi ích từ việc sử dụng Google Firebase 15
2.7.1 Triển khai ứng dụng nhanh……… 14
2.7.2 Bảo mật 15
Trang 7Chương 3: XÂY DỰNG PHẦN MỀM CHAT TRÊN ANDROID 17
3.1 Khảo sát hiện trạng 17
3.1.1 Thuyết minh đề tài 17
3.1.2 Khảo sát và mô tả hiện trạng của đề tài 17
3.2 Mô hình hóa yêu cầu 17
3.2.1 Danh sách các yêu cầu của phần mềm 17
3.2.2 Lượt đồ chức năng 20
3.2.3 Đặc tả Use case 21
3.2.4 Lập sơ đồ luồng dữ liệu DFD 29
Chương 4: THIẾT KẾ DỮ LIỆU 39
4.1 Sơ đồ tổng quát 39
4.2 Sơ đồ Logic 39
4.3 Lược đồ CSDL(ERD) 40
4.4 Chi tiết các bảng dữ liệu: 40
Chương 5: THIẾT KẾ GIAO DIỆN 43
5.1 Mô tả chi tiết các màn hình 43
5.1.1 Màn hình đăng nhập 43
5.1.2 Màn hình danh sách chat 44
5.1.3 Màn hình danh bạ 45
5.1.4 Màn hình thông tin thêm 46
5.1.5 Màn hình Chat 47
5.1.6 Màn hình thêm bạn 48
5.1.7 Màn hình cài đặt 49
5.1.8 Màn hình trang cá nhân user 50
5.1.9 Màn hình thiết lập trang cá nhân 51
Chương 6: THIẾT KẾ VÀ XỬ LÝ 53
6.1 Thiết kế xử lý 53
6.1.1 Xử lý đăng xuất 53
Trang 86.1.5 Xử lý xem danh sách bạn bè 57
6.1.6 Xử lý thêm bạn 58
6.1.7 Xử lý Block bạn bè 58
Chương 7: KIỂM THỬ PHẦN MỀM 59
7.1 Thiết kế các test case 59
7.2 Đặc tả các test case 59
7.2.1 Kiểm thử CSDL 59
7.2.2 Kiểm thử giao diện 59
7.2.3 Kiểm tra tính tiện dụng 60
TỔNG KẾT 65
TÀI LIỆU THAM KHẢO 66
Trang 9DANH MỤC CÁC HÌNH
Hình 1: Các nền tảng 10 Hình 2: Lượt đồ chức năng _ 20 Hình 3:Mô hình hóa nghiệp vụ: Đăng nhập 29 Hình 4: Mô hình hóa nghiệm vụ: Đăng xuất 30 Hình 5: Mô hình hóa nghiệp: Truy vấn tài khoản 31 Hình 6:Mô hình hóa nghiệp vụ: Chỉnh sửa thông tin _ 32 Hình 7:Mô hình hóa nghiệp vụ: Xóa (danh sách đen) _ 34 Hình 8:Mô hình hóa nghiệp vụ: Chat _ 35 Hình 9:Mô hình hóa nghiệp vụ: Kết bạn _ 36 Hình 10:Mô hình hóa nghiệp vụ: Xem danh bạ 38 Hình 11: Màn hình đăng nhập _ 43 Hình 12: Màn hình danh sách chat _ 44 Hình 13: Màn hình danh bạ _ 45 Hình 14: Màn hình thông tin thêm 46 Hình 15: Màn hình chat 47 Hình 16: Màn hình thêm bạn 48 Hình 17: Màn hình cài đặt 49 Hình 18: màn hình thông tin trang cá nhân _ 50 Hình 19: Màn hình thiết lập trang cá nhân _ 51 Hình 20: Xử lý đăng xuất _ 53 Hình 21: Xử lý tìm kiếm tài khoản 54 Hình 22: Xử lý thay đổi profile 55 Hình 23: Xử lý chat _ 56 Hình 24: Xử lý xem danh sách bạn bè _ 57 Hình 25: Xử lý thêm bạn _ 58 Hình 26: Xử lý block bạn bè 58
Trang 10DANH MỤC CÁC BẢNG
Bảng 1: Yêu cầu chức năng nghiệp vụ _ 17 Bảng 2: Yêu cầu chức năng hệ thống 18 Bảng 3: Yêu cầu về chất lượng hệ thống _ 18 Bảng 4: Mô tả chức năng _ 19 Bảng 5: Mô tả chức năng cơ bản các tác nhân (ACTOR) và chức năng (USECASE) _ 20 Bảng 6: Use Case Đăng nhập _ 21 Bảng 7: Use Case Chỉnh sửa thông tin 22 Bảng 8: Use Case Đăng xuất 23 Bảng 9: Use Case Xóa (Quản lý chat) _ 24 Bảng 10 Use Case Block _ 24 Bảng 11: Use Case Xóa (Danh sách đen) 25 Bảng 12: Use Case Kết bạn _ 26 Bảng 13: Use Case Hủy kết bạn _ 27 Bảng 14: Use Case Chat _ 27 Bảng 15: Thuật toán Đăng nhập _ 29 Bảng 16: Thuật toán Đăng xuất 31 Bảng 17: Thuật toán Truy vấn tài khoản _ 32 Bảng 18: Thuật toán Chỉnh sửa thông tin 33 Bảng 19: Thuật toán Xóa (Danh sách đen) _ 34 Bảng 20: Thuật toán Chat 36 Bảng 21: Thuật toán kết bạn 37 Bảng 22: Thuật toán Xem danh bạ _ 38 Bảng 23: Dữ liệu users 40 Bảng 24: Dữ liệu conversation 41 Bảng 25: Dữ liệu friends _ 41 Bảng 26: Dữ liệu request_friend _ 42 Bảng 27: Dữ liệu user_listconver 42 Bảng 28: Các đối tượng trong màn hình Đăng nhập _ 43 Bảng 29: Các đối tượng trong màn hình danh sách chat 45 Bảng 30: Các đối tượng trong màn hình danh sách bạn _ 46 Bảng 31: Các đối tượng trong màn hình danh sách bạn _ 46 Bảng 32: Các đối tượng trong màn hình danh sách bạn _ 47 Bảng 33: Các đối tượng trong màn hình danh sách thêm bạn 49 Bảng 34: Các đối tượng trong màn hình cài đặt _ 50 Bảng 35: Các đối tượng trong màn hình thông tin trang cá nhân _ 51 Bảng 36: Các đối tượng trong màn hình thiết lập 52
Trang 11Chương 1: MỞ ĐẦU
1.1 Lý do chọn đề tài
Sau hơn 20 năm đổi mới ngành Công nghệ thông tin Việt Nam đã có những bước tiến toàn diện, vượt bậc, không ngừng hiện đại hóa, rút ngắn khoảng cách phát triển so với các nước trong khu vực và trên thế giới, chủ động hội nhập kinh tế quốc tế phục vụ sự nghiệp công nghiệp hóa, hiện đại hóa đất nước Có thể nói ngày nay, phát triển công nghệ thông tin là con đường ngắn nhất, là cách thức tất yếu giúp Việt Nam thoát khỏi sự tụt hậu yếu kém, sánh vai với các nước tiên tiến trên thế giới Máy tính trở nên không còn xa lạ với chúng ta
Khi suy nghĩ về phát triển Android, rất có thể là một ngôn ngữ lập trình ngay lập tức ở trong suy nghĩ của bạn: Java
Mặc dù đúng là đa số các ứng dụng Android được viết bằng Java, nhưng khi nói đến phát triển Android, Java không phải là lựa chọn duy nhất
Có thể viết các ứng dụng Android bằng bất cứ ngôn ngữ nào có thể biên dịch và chạy trên máy ảo Java (JVM), và người dùng cuối của bạn sẽ không hề biết Và một trong những ngôn ngữ lập trình tương thích với JVM đã thực sự gây
sự chú ý cho cộng đồng Android đó là Kotlin, một ngôn ngữ lập trình kiểu tĩnh (static type) từ JetBrains
Nhóm em đã đã nghe những điều tốt đẹp về Kotlin và hứng thú muốn tự mình thử nó
1.2 Ý nghĩa khoa học và thực tiễn
Đề tài này có thể được sử dụng cho công việc xây dựng một ứng dụng Chat
có giao diện đẹp mắt, dễ dàng sử dụng, thao tác nhanh gọn vì có đầy đủ các chức năng cơ bản
Trang 121.3 Mục tiêu đề tài
1.3.1 Nghiên cứu công nghệ
Tìm hiểu về ngôn ngữ Kotlin
1.4 Đối tượng và phạm vi nghiên cứu
Tìm hiểu ngôn ngữ lập trình Kotlin
Tìm hiểu, phân tích các tính năng của một ứng dụng Chat cơ bản
Trang 13Chương 2: TÌM HIỂU TỔNG QUAN VỀ KOTLIN VÀ
FIREBASE
2.1 Giới thiệu về Kotlin
Kotlin là một ngôn ngữ ngữ dụng kiểu tĩnh dành cho Java Virtual Machine
đã chính thức phát hành phiên bản 1.0 Nó được tạo ra bởi JetBrains, Kotlin cũng giống như nhiều ngôn ngữ lập trình không phải Java khác, tức là cũng sẽ chạy trên JVM và sử dụng các công cụ và thư viện hiện có của Java Và ngược lại Java cũng có thể sử dụng các item được xây dựng trong Kotlin
Mục tiêu quan trọng của Kotlin là tính hữu dụng Từ lúc giới thiệu vào năm
2011 cho đến khi phát hành phiên bản 1.0, JetBrains đã luôn chú trọng đến tính tương hợp với Java Mặc dù Kotlin có một số tính năng hoàn toàn mới chẳng hạn như một type system được thiết kế để ngăn chặn các bug như các null pointer reference, nhưng quan trọng là nó làm việc cùng với code và cơ sở hạ tầng hiện
có của Java Cuối cùng, Kotlin không có trình quản lý gói và build system của riêng nó, do Java đã có sẵn
2.2 Kotlin và Android
Lập trình Android là một trong những lĩnh vực quan trọng mà JetBrains hướng đến với Kotlin Ngôn ngữ mang đến tính tương thích ngược với Java 6 và
7, các phiên bản của Java hầu hết đều tương thích chặt chẽ với Android
JetBrains cũng hy vọng Kotlin sẽ được sử dụng trong các lĩnh vực khác chẳng hạn như các ứng dụng lớn và phức tạp, đề cao hiệu suất
Các nhà phát triển không có lựa chọn thay thế cho việc phát triển ứng dụng Android bằng ngôn ngữ Java Mặc dù được sử dụng rộng rãi, nhưng trong quá trình hoạt động ngôn ngữ Java sinh ra rất nhiều file rác Java 8 đã giải quyết một
số vấn đề ngôn ngữ và đặc biệt hơn là với Java 10 Để có được nhiều lợi ích từ việc chỉnh sửa trong hai phiên bản này, bạn phải đặt SDK tối thiểu sang Android
Trang 1424 chỉ để sử dụng Java 8 Kotlin nhắm đến việc lấp đầy khoảng trống đó của một ngôn ngữ hiện đại đang thiếu cho nền tảng Android
2.3 Ưu nhược điểm của Kotin
2.3.1 Ưu điểm
- Có thể thay thế cho Java:
Một trong những thế mạnh lớn nhất của Kotlin như là một ứng viên để thay thế cho Java là khả năng tương tác rất tốt giữa Java và Kotlin—bạn có thể thậm chí có code Java và Kotlin tồn tại song song trong cùng dự án, và tất cả mọi thứ vẫn sẽ được biên dịch một cách hoàn hảo Dưới đây, bạn có thể thấy một ví dụ về một dự án bao gồm một Activity Java và một Actitivy Kotlin
Trong thực tế, một khi dự án kết hợp Kotlin và Java được biên dịch, người dùng sẽ không thể biết những phần nào của dự án của bạn được viết bằng Java, và những phần nào được viết bằng Kotlin Bởi vì các lớp Kotlin
và Java có thể tồn tại song song trong cùng một dự án, nên có thể bắt đầu sử dụng Kotlin mà không cần phải làm bất cứ điều gì to tát cả giống như chuyển đổi toàn bộ dự án sang Kotlin hoặc bắt đầu một dự án mới để bạn có thể thử Kotlin
Vì Kotlin là hoàn toàn tương thích với Java, nên cũng có thể sử dụng phần lớn các thư viện Java và các framework trong dự án Kotlin của bạn—thậm chí nâng cao các framework dựa vào chú thích xử lý
- Dễ học:
Kotlin nhằm mục đích là nâng cao hơn so vớiJava, chứ không phải hoàn toàn viết lại, rất nhiều các kỹ năng đã có trong việc code Java của bạn vẫn được áp dụng đối với dự án Kotlin
Kotlin cũng được thiết kế để có thể dễ học cho các nhà phát triển Java Những nhà phát triển Java sẽ cảm thấy rằng hầu hết cú pháp của Kotlin đều
Trang 15quen thuộc; ví dụ, các code được sử dụng để tạo ra một lớp mới trong Kotlin
là rất giống với Java:
class MainActivity : AppCompatActivity() {
Kotlin cũng được thiết kế trực quan và dễ đọc, do đó, ngay cả khi bạn gặp một số code khác biệt, thì bạn vẫn có thể để biết được ý nghĩa về những gì code này làm
- Kết hợp những gì tốt nhất của lập trình hàm và thủ tục:
Hiện đang có một số lý thuyết lập trình được sử dụng rộng rãi, nhưng khi nói đến các câu hỏi về "phương pháp nào là tốt nhất", thì không dễ để có câu trả lời Mỗi kiểu lập trình có tập hợp điểm mạnh và điểm yếu của nó, do đó, mặc dù không thiếu các kịch bản mà lập trình hàm có một lợi thế, thì cũng có rất nhiều vấn đề nơi mà một cách tiếp cận lập trình thủ tục sẽ hiệu quả hơn Vậy tại sao cần phải lựa chọn giữa hàm và thủ tục? Giống như nhiều ngôn ngữ lập trình hiện đại khác, Kotlin nhằm mục đích mang lại cho bạn những gì tốt nhất của cả hai bằng cách kết hợp các khái niệm và các yếu tố của lập trình thủ tục và hàm
- Android Studio hỗ trợ:
Kotlin được phát triển bởi JetBrains, công ty đứng sau IntelliJ—IDE mà Android Studio dựa trên nó Không có gì bất ngờ, rằng Android Studio hỗ trợ tốt cho Kotlin Một khi bạn đã cài đặt plugin Kotlin, Android Studio làm cho việc cấu hình Kotlin trong dự án của bạn trở nên đơn giản giống như mở một vài menu
Một khi bạn đã thiết lập plugin Kotlin cho Android Studio, IDE của bạn
sẽ không gặp vấn đề gì việc hiểu, biên dịch và chạy code Kotlin Android Studio cũng cung cấp việc gỡ lỗi, tự động hoàn tác, điều hướng code, unit testing, và tái cấu trúc cho Kotlin
Trang 16Một khi dự án Android Studio của bạn đã được cấu hình để hỗ trợ cho Kotlin, bạn thậm chí có thể chuyển đổi toàn bộ một tập tin mã nguồn Java thành một tập tin Kotlin, với chỉ một vài cú nhấp chuột
Đặc biệt, các extension của Kotlin Android (mà chúng ta sẽ khám phá trong phần hai) cho phép bạn nhập tham chiếu đến một View vào một tập tin Activity, từ đó, bạn có thể làm việc với giao diện như thể nó là một phần của Activity đó Điều này có nghĩa là bạn không còn phải xác định mỗi View bằng cách sử dụng findViewById, mà có thể chuyển đổi code chẳng hạn như:
TextView text = (TextView) findViewById(R.id.myTextView);
text.setText("Hello World");
Thành gọn gàng hơn nhiều:
myTextView.setText("Hello World")
2.3.2 Nhược điểm
- Thêm thời gian chạy Runtime:
Thư viện tiêu chuẩn của Kotlin và runtime sẽ làm tăng kích thước tập tin apk của bạn Mặc dù nó chỉ tương đương với khoảng 800KB, nhưng nếu ứng dụng của bạn đã lớn sẵn rồi thì 800KB phụ có thể làm nó phình to và khiến người dùng nghĩ lại trước khi tải về ứng dụng của bạn
Trang 17- Không hẳn là code dễ đọc đối với beginer:
Mặc dù cú pháp ngắn gọn của Kotlin là một trong những thế mạnh lớn nhất của ngôn ngữ, nhưng bạn có thể thấy một số khó khăn ban đầu, đơn giản bởi vì có rất nhiều thứ đang được thực hiện trong một số lượng nhỏ code đó Java có thể dài dòng hơn, nhưng ngược lại tất cả mọi thứ đều rõ ràng, có nghĩa là những người không quen code Java có xu hướng dễ dàng hơn để hiểu so Kotlin
Ngoài ra, nếu sử dụng không hợp lý, quá tải toán tử của Kotlin có thể dẫn đến số code đó có thể khó khăn để đọc
- Cộng đồng nhỏ hơn và ít có sẵn trợ giúp:
Vì Kotlin là một ngôn ngữ tương đối mới, nên cộng đồng Kotlin vẫn còn khá nhỏ, đặc biệt là so với cộng đồng của ngôn ngữ khác như Java Nếu bạn chuyển đổi sang Kotlin, thì bạn có thể không có được truy cập vào cùng một
số hướng dẫn, bài đăng trên blog, và tài liệu hướng dẫn sử dụng, và có thể gặp ít hỗ trợ từ cộng đồng về những nơi như các diễn đàn và Stack Overflow Tại thời điểm bài viết, tìm kiếm cho Kotlin trong Stack Overflow trả về các bài viết chỉ hơn 4.600 được dán nhãn Kotlin—so với hơn 1.000.000 bài viết
có chứa các từ khóa Java
2.4 Tính linh hoạt
Như các bạn thấy ở bức hình dưới thì Kotlin rất linh hoạt và có thể lập trình ở nhiều nền tảng:
Trang 18Hình 1: Các nền tảng
2.5 Đặc điểm
2.5.1 Khai báo biến
Có 2 từ khóa khai báo biến trong Kotlin là var và val
Từ khóa var sử dụng khi giá trị của biến thay đổi, val sử dụng khi giá trị của biến không thay đổi
Từ khóa val giống như readonly trong C# hoặc final trong Java
Biến val phải được khởi tạo lúc khai báo
Từ khóa Void trong java hay C# sẽ được thay thế bằng Unit trong Kotlin
Trang 192.5.2 Null Safety
Một trong những cạm bẫy phổ biến trong các ngôn ngữ lập trình, bao gồm cả Java là cho phép 1 thành phần nào đó được Null Nếu không chắc chắn thành phần đó được phép Null hay không sẽ rất dễ xảy ra lỗi không lường trước được, gây nguy hiểm cho hệ thống của bạn Cụ thể, trong java sẽ gây ra 1 exception là NullPoiterException hoặc viết ngắn gọi là NPE
Kotlin nhằm mục đích xóa bỏ NullPoiterException trong code của chúng ta Ngay khi khai báo biến với Kotlin, bạn đã phải chỉ rõ biến đó có được phép Null hay không Có 2 trường hợp được phép đó là : không thể Null và có thể Null
Khai báo 1 biến cho phép Null
var b: String? = "abc" // có thêm dấu ? sau kiểu của
biến
b = null // compilation ok
val l = b.length // not safe
Khai báo 1 biến không được phép Null
var a: String = "abc"
a = null // compilation error
val l = a.length // safe
Chúng ta có thể thấy Kotlin đã khắc phục được expcetion NPE trong Java Các biến cho phép Null hay không được phép Null đã được xác định ngay trong quá trình khai báo biến, các IDE sẽ giúp chúng ta phát hiện ra lỗi ngay khi compile Việc phát hiện ra lỗi sớm khi compile sẽ tốt hơn so với khi runtime Nó giúp hệ thống của chúng ta an toàn hơn
2.5.3 String template
String trong kotlin có thể chứa các biểu thức template, tức là những kết quả trả về hoặc biến có thể được nối vào trong 1 String Một biểu thức template bắt đầu với ($) và tên :
Trang 20val apples = 4
valbananas = 3
println(“I have $apples apples.”)
println(“I have $apples apples and ” + (apples + bananas) + “ fruits.”)
println(“I have $apples apples and ${apples + bananas} “ fruits.”)
openclass AnotherDerived() : Base() { finaloverridefunv() {}
}
Trong interface, các member mặc định là “open”
interface B { funf() { print("B") } // interface members are 'open' by default funb() { print("b") }
}
Kotlin implement interface :
class C() : A(), B { // The compiler requires f() to be
overridden:
Trang 21override fun f() { super<A>.f() // call to A.f() super<B>.f() // call to B.f() }
}
2.5.5 Chỉ định truy cập(Visibility Modifiers)
Có 4 loại Visivility Modifiers trong Kotlin : private, protected, internal,
và public
Nếu không chỉ rõ thì mặc định là public
Các chỉ định truy cập : private, protected và public giống cách sử dụng trọng java
Riêng internal ta có thể sử dụng trong cùng module
2.5.6 Truyền tham số trong hàm
Kotlin cho phép thay đổi vị trí tham số trong hàm
fun main(args : Array<String>) {
greet(firstName = "Frasensco", lastName =
"Merini")
greet(lastName = "John", firstName = "Stamos") greet("Borat", "Ismail")
greet("Crystal", lastName = "Stamos")
call("Xavier", age = 20, location = "Portugal") }
fun greet(firstName : String, lastName : String){ println("Good morning $firstName $lastName") }
fun call(name : String, location : String, age :
Good morning Frasensco Merini
Good morning Stamos John
Trang 22Good morning Borat Ismail
Good morning Crystal Stamos
Call Xavier who lives at Portugal and he is 20 old
2.6 Giới thiệu về Firebase
Firebase là một nền tảng ứng dụng di động và web với các công cụ và hạ
tầng được thiết kế để giúp các lập trình viên xây dựng các ứng dụng chất lượng cao
Với Google Firebase, bạn có thể tạo ra các ứng dụng chat như Yahoo
Message của ngày xưa hoặc như Facebook Messager của ngày nay trong thời gian cực ngắn như khoảng một ngày thậm chí là vài giờ bởi đơn giản là bạn chỉ cần lo phần client còn phần server và database đã có firebase lo Firebase là sự kết hợp giữa nền tảng cloud với hệ thống máy chủ cực kì mạnh mẽ tới từ Google, để cung cấp cho chúng ta những API đơn giản, mạnh mẽ và đa nền tảng trong việc quản lý,
sử dụng database Cụ thể hơn Google Firebase cung cấp tới chúng ta những chức năng chính sau:
2.6.1 Realtime Database – Cơ sở dữ liệu thời gian thực
Firebase lưu trữ dữ liệu database dưới dạng JSON và thực hiện đồng bộ database tới tất cả các client theo thời gian thực Cụ thể hơn là bạn có thể xây dựng được client đa nền tảng (cross-platform client) và tất cả các client này sẽ cùng sử dụng chung 1 database đến từ Firebase và có thể tự động cập nhật mỗi khi dữ liệu trong database được thêm mới hoặc sửa đổi
Ngoài ra Firebase còn cho phép bạn phân quyền một các đơn giản bằng cú pháp tương tự như javascript
2.6.2 Firebase Authentication – Hệ thống xác thực của Firebase
Với Firebase bạn có thể dễ dàng tích hợp các công nghệ xác thực của Google, Facebook, Twitter, … hoặc một hệ thống xác thực mà bạn tự mình tạo ra vào trong ứng dụng của bạn ở bất kì nền tảng nào như Android, iOS hoặc Web
2.6.3 Firebase Hosting
Các bạn có thể triển khai một ứng dụng nền web nhanh chóng với hệ thống
Trang 23Firebase, và các dữ liệu sẽ được lưu trữ đám mây đồng thời được bảo mật thông qua giao thức truy cập SSL
Các ứng dụng sẽ được cấp 1 tên miền dạng *.firebaseapp.com hoặc bạn có thể trả tiền để sử dụng tên miền của riêng mình
2.7 Những lợi ích từ việc sử dụng Google Firebase
Ở phía trên là các chức năng của google firebase, vậy các chức năng đó sẽ đem lại cho bạn những lợi ích gì, có lẽ một số bạn đã mường tượng ra rồi nhưng cũng có bạn có lẽ vẫn còn mơ hồ vì vậy hãy đọc kĩ phần này sẽ biết câu trả lời chính xác nhất
2.7.1 Triển khai ứng dụng nhanh
Với Firebase bạn có thể giảm bớt rất nhiều thời gian cho việc viết các dòng code để quản lý và đồng bộ cơ sở dữ liệu, mọi việc sẽ diễn ra hoàn toàn tự động với các API của Firebase Không chỉ có vậy Firebase còn hỗ trợ đã nền tảng nên bạn sẽ càng đỡ mất thời gian rất nhiều khi ứng dụng bạn muốn xây dựng là ứng dụng đa nền tảng
Không chỉ nhanh chóng trong việc xây dựng database, Google Firebase còn giúp ta đơn giản hóa quá trình đăng kí và đăng nhập vào ứng dụng bằng các sử dụng
hệ thống xác thực do chính Firebase cung cấp
2.7.2 Bảo mật
Firebase hoạt động dựa trên nền tảng cloud và thực hiện kết nối thông qua giao thức bảo mật SSL, chính vì vậy bạn sẽ bớt lo lắng rất nhiều về việc bảo mật của dữ liệu cũng như đường truyền giữa client và server Không chỉ có vậy, việc cho phép phân quyền người dùng database bằng cú pháp javascipt cũng nâng cao hơn nhiều độ bảo mật cho ứng dụng của bạn, bởi chỉ những user mà bạn cho phép mới có thể có quyền chỉnh sửa cơ sở dữ liệu
2.7.3 Tính linh hoạt và khả năng mở rộng
Sử dụng Firebase sẽ giúp bạn dễ dàng hơn rất nhiều mỗi khi cần nâng cấp
Trang 24hay mở rộng dịch vụ Ngoài ra firebase còn cho phép bạn tự xây dựng server của riêng mình để bạn có thể thuận tiện hơn trong quá trình quản lý
Việc Firebase sử dụng NoSQL, giúp cho database của bạn sẽ không bị bó buộc trong các bảng và các trường mà bạn có thể tùy ý xây dựng database theo cấu trúc của riêng bạn
2.7.5 Giá thành
Google Firebase có rất nhiều gói dịch vụ với các mức dung lượng lưu trữ cũng như băng thông khác nhau với mức giá dao động từ Free đến $1500 đủ để đáp ứng được nhu cầu của tất cả các đối tượng Chính vì vậy bạn có thể lựa chọn gói dịch vụ phù hợp nhất với nhu cầu của mình Điều này giúp bạn tới ưu hóa được vốn đầu tư và vận hành của mình tùy theo số lượng người sử dụng Ngoài ra bạn còn không mất chi phí để bảo trì, nâng cấp, khắc phục các sự cố bởi vì những điều này
đã có Firebase lo
Trang 25Chương 3: XÂY DỰNG PHẦN MỀM CHAT TRÊN ANDROID
3.1 Khảo sát hiện trạng
3.1.1 Thuyết minh đề tài
- Phần mềm sử dụng để mọi người có thể kết bạn và chat với nhau
- Người dùng sẽ sử dụng tài khoản của google để đăng nhập vào hệ thống
- Thành viên có thể cập nhật thông tin đã đăng ký ban đầu
3.1.2 Khảo sát và mô tả hiện trạng của đề tài
3.1.2.1 Hiện trạng
- Tán gẫu trực tuyến ngày càng phát triển, đây là nhu cơ bản của mỗi con người, ứng dụng Chat Android nhằm đáp ứng nhu cầu đó
3.1.2.2 Yêu cầu
- Lưu trữ các thông tin về tên tài khoản, ngày sinh, số điện thoại, email
- Người dùng có thể xem thông tin các tài khoản bạn bè của mình
3.2 Mô hình hóa yêu cầu
3.2.1 Danh sách các yêu cầu của phần mềm
3.2.1.1 Yêu cầu chức năng nghiệp vụ
Bảng 1: Yêu cầu chức năng nghiệp vụ
STT Công việc Loại công
việc
Quy định/công thức liên quan
Biểu mẫu liên quan
Ghi chú
1 Chat Trò chuyện Đã tra cứu được tài
khoản phù hợp
2 Cập nhập
thông tin
Chỉnh sửa thông tin
Đã đăng nhập thành công
Trang 26Tra cứu Xem được thông tin
người dùng công khai
Bảng 2: Yêu cầu chức năng hệ thống
1
Phân quyền sử dụng - Người dùng chưa có tài khoản google:
chỉ xem được giao diện trang đăng nhập
- Người dùng có tài khoản google: xem được giao diện trang đăng nhập và có thể đăng nhập vào hệ thống
Bảng 3: Yêu cầu về chất lượng hệ thống
nhanh, hiệu quả
Hiệu quả Tùy thuộc số lượng thông tin
người cần tra cứu
Trang 27Đăng xuất: thoát khỏi giao diện sử dụng phần mềm, trở
về giao diện đăng nhập
3 Quản lý chat Là nơi xóa đoạn hội thoại giữa hai người với nhau, quản
lý và hiển thị nội dung chat
5 Xem danh sách đen
Khi người dùng không muốn bị làm phiền, hay không muốn nhìn thấy một tài khoản thì có thể thêm người đó vào trong danh sách đen này, người dùng củng có thể xóa người đó ra khỏi danh sách nếu muốn
6 Truy vấn
Tìm tài khoản để kết bạn, xem thông tin cá tài khoản
đó, các chức năng kết bạn, hủy, block tương tự như xem danh bạ
7 Đăng nhập Người dùng đăng nhập để sử dụng các chức năng của
phần mềm chat
Trang 283.2.2 Lượt đồ chức năng
Hình 2: Lượt đồ chức năng
Bảng 5: Mô tả chức năng cơ bản các tác nhân (ACTOR) và chức năng (USECASE)
Trang 29 Quản lý chat
Xóa tin nhắn
Chat
Truy vấn, Xem danh bạ
Xem thông tin các tài khoản khác
Bảng 6: Use Case Đăng nhập
Use Case Đăng nhập
Mô tả Cho phép người dùng đăng nhập vào hệ thống
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng phải có tài khoản của Google biết tài khoản và
mật khẩu của mình
Các bước thực hiện (1) Người dùng mở chương trình
(2) Chọn Sign in with Google (3) Chọn tài khoản Google (4) Nếu đăng nhập thất bại, thông báo “Nhập sai tên tài
khoản hoặc mật khẩu” Người dùng nhập lại thông tin
và đăng nhập lại lần nữa
(5) Nếu đăng nhập thành công Xuất hiện giao diện
Trang 30chương trình với đầy đủ chức năng
Bảng 7: Use Case Chỉnh sửa thông tin
Use Case Chỉnh sửa thông tin
Mô tả Người dùng muốn chỉnh sửa các thông tin cá nhân, ảnh đại
diện, hay cập nhập thêm thông tin về mình
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng đã đăng ký tài khoản và có thông tin trên hệ
(4) Xuất hiện màn hình trang Nhấp vào tên hiển thị hiện
tại của người dùng(Trang cá nhân của bạn)
(5) Xuất hiện màn hình trang thông tin cá nhân, chọn vào
biểu tượng ở giữa phía bên phải màn hình
(6) Xuất hiện màn hình trang cá nhân, nhấp vào“ thông
tin”
(7) Xuất hiện màn hình trang thông tin, nhấp “ĐỔI
THÔNG TIN”
(8) Người dùng chọn các thông tin mình cần sửa như ảnh
đại diện, tên hiển thị, giới tính, ngày sinh, số điện
Trang 31thoại và nhấn “Lưu thông tin”
(9) Nếu sửa thành công, thông tin khách hàng mới sẽ
được cập nhật vào CSDL và hiển thị thông báo “Cập nhật thành công” Nếu sửa thất bại, thông báo lỗi và
nhập lại
Bảng 8: Use Case Đăng xuất
Use Case Đăng xuất
Mô tả Người dùng muốn đăng xuất tài khoản của mình ra khỏi
(3) Xuất hiện trang thông tin thêm, chọn biểu tượng
ở phía trên bên phải màn hình
(4) Xuất hiện màn hình “Cài đặt”
Chọn chức năng “Đăng xuất”
(5) Hệ thống ngắt kết nối với CSDL và đăng xuất ra màn
hình đăng nhập
Trang 32Bảng 9: Use Case Xóa (Quản lý chat)
Use Case Xóa (Quản lý chat)
Mô tả Người dùng muốn xóa đoạn đoạn “chat” của mình đi
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng đăng nhập thành công, đã kết bạn và thực hiện
(5) Màn hình sẽ hiện lên nút “Xóa”, nhấp “Xóa”
(6) Hệ thống sẽ hiện thông báo “Đã xóa tin nhắn” và tin
nhắn đó sẽ biến mất
Bảng 10 Use Case Block
Use Case Block
Mô tả Người dùng muốn chặn tài khoản khác
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng đã có tài khoản, chặn (block) với tài khoản
khác vì một lý do nào đó
Trang 33(3) Sau khi truy vấn/xem danh bạ, danh sách tài khoản
xuất hiện, chọn và ấn giữ vào tài khoản cần block,
chọn “Vào trang cá nhân”
(4) Màn hình profile xuất hiện, chọn biểu tượng , chọn “Chặn luôn”Hệ thống sẽ thông báo block thành công nếu thao tác thành công
Bảng 11: Use Case Xóa (Danh sách đen)
Use Case Xóa (Danh sách đen)
Mô tả Người dùng muốn xóa người dùng ra khỏi danh sách đen
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng đăng nhập thành công, đã từng block người
Trang 34(5) Hiện ra trang danh sách đen, chọn tài khoản muốn
xóa khỏi danh sách đen
(6) Hiện ra trang cá nhân của tài khoản cần xóa, chọn
biểu tượng
(7) Chọn “Bỏ chọn”, hệ thống sẽ bỏ chặn tài khoản đó
Bảng 12: Use Case Kết bạn
Use Case Kết bạn
Mô tả Người dùng muốn kết bạn với tài khoản khác
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng đã có tài khoản, muốn kết bạn với người khác
để thực hiện chức năng chat
Các bước thực hiện
(1) Người dùng mở và thực hiện xong chức năng đăng
nhập
(2) Chọn biểu tượng ở phía dưới màn hình
(3) Xuất hiện màn hình danh bạ, chọn biểu tượng ở phía trên bên phải màn hình
(4) Xuất hiện màn hình thêm bạn chọn tìm bạn theo
“Tên” hoặc “Email”, điền tên người bạn muốn tìm vào ô “Search…” và chọn biểu tượng
(5) Xuất hiện danh sách bạn, chọn tên người bạn muốn
kết bạn
(6) Xuất hiện trang cá nhân của người đó, nhấn “KẾT
BẠN”
Trang 35(7) Hệ thống sẽ gửi yêu cầu kết bạn tới người đó
Bảng 13: Use Case Hủy kết bạn
Use Case Hủy kết bạn
Mô tả Người dùng muốn hủy kết bạn với tài khoản khác
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng đã có tài khoản, muốn hủy kết bạn với người
mình đã từng kết bạ
Các bước thực hiện
(1) Người dùng mở và thực hiện xong chức năng đăng
nhập
(2) Người dùng mở chức năng truy vấn hoặc Xem danh
bạ, tìm đến người cần thao tác
(3) Sau khi truy vấn/xem danh bạ, danh sách tài khoản
xuất hiện, chọn vào tài khoản cần hủy kết bạn
(4) Màn hình profile xuất hiện, chọn chức năng hủy kết
bạn
(5) Hệ thống sẽ thông báo hủy kết bạn thành công nếu
thao tác thành công
Bảng 14: Use Case Chat
Use Case Chat
Mô tả Người dùng muốn sử dụng chức năng chính - CHAT
Trang 36Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng đã có tài khoản, muốn tán gẫu với tài khoản
với nhau
(5) Ghi tin nhắn và ấn vào nút (6) Nếu thành công tin nhắn sẽ đến với người nhận
Trang 373.2.4 Lập sơ đồ luồng dữ liệu DFD
3.2.4.1 Nghiệp vụ: Đăng nhập
Mô tả:
D1: Tên đăng nhập, mật khẩu, yêu đăng nhập
D2: Danh sách tài khoản: tên đăng nhập, mật khẩu
D4: Thông báo đăng nhập thành công/thất bại
Bảng 15: Thuật toán Đăng nhập
B4 Thực hiện so sánh tên người dùng đăng nhập với các tên người dùng
có trong dữ liệu nếu tồn tại chuyển xuống B5, nếu sai chuyển xuống B7
User
Đăng nhập D2
D4 D1
Hình 3:Mô hình hóa nghiệp vụ: Đăng nhập