Các ổ cắm chỉ được tạo trong suốt thờigian tồn tại của một quy trình ứng dụng đang chạy.Do tiêu chuẩn hóa các giao thức TCP/IP trong quá trình phát triểnInternet, thuật ngữ network socke
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
THÔNG TIN &
TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
Sinh viên thực hiện: Nguyễn Khắc thịnh
Nguyễn Hải Dương Nguyễn Phương Thanh
Lê Hoàng Minh
Giảng viên hướng dẫn: TS Hoàng Hữu Đức
Trang 2Đà Nẵng, tháng 12 năm 2022
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
&
TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
ĐỒ ÁN CUỐI KỲ LẬP TRÌNH HỆ THỐNG
ĐỀ TÀI:
XÂY DỰNG CHƯƠNG TRÌNH
HỘI THẢO TỪ XA
Trang 3Đà Nẵng, tháng 12 năm 2022
LỜI CẢM ƠN
Đầu tiên nhóm chúng em xin chân thành cảm ơn thầy giáo TS.Hoàng Hữu Đức giảng viên môn lập trình mạng, người đã luôn hỗ trợchúng em trong suốt quá trình học tập Trong thời gian cùng nhau làm đồ
án, chúng em không những học hỏi, bổ sung được những kiến thức mà cảithiện nâng cao khả năng làm việc nhóm, tập trung và có trách nhiệm vớicông việc của nhóm mình
Dù đã rất cố gắng hoàn thành đồ án nhưng do kiến thức vẫn còn hạnchế nên những sai sót, lầm lẫn chắc chắn vẫn sẽ có Chúng em mong nhậnđược sự cảm thông và góp ý của thầy giáo TS Hoàng Hữu Đức, quý thầy
cô giáo trong Khoa và tất cả các bạn!
Chúng em xin chân thành cảm ơn!
Trang 4NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Trang 5
LỜI NÓI ĐẦU
Với sự phát triển nhảy vọt của công nghệ thông tin hiện nay, Internetngày càng giữ vai trò quan trọng trong các lĩnh vực khoa học kỹ thuật vàđời sống Dĩ nhiên các bạn đã được nghe nói nhiều về Internet, nói mộtcách đơn giản, Internet là một tập hợp máy tính nối kết với nhau, là mộtmạng máy tính toàn cầu mà bất kì ai cũng có thể kết nối bằng máy tínhriêng của họ Với mạng Internet, tin học thật sự tạo nên một cuộc cáchmạng trao đổi thông tin trong mọi lĩnh vực văn hóa, xã hội, chính trị, kinhtế
Ngày nay, việc đang phát triển hay xây dựng các ứng dụng và nềntảng chatting hiện đang được phổ biến rộng rãi Chatting được hiểu đơngiản là hành động trao đổi thông tin dưới các dạng, giữa người hoặc nhómngười, từ máy này sang máy kia cùng lúc, bằng bàn phím hơn là thiết bịchuyển âm Từ đó nhóm chúng em muốn xây dựng chat room sử dụng giaothức socket TCP bằng ngôn ngữ Java
Sơ lược về socket, socket là giao diện lập trình ứng dụng mạng đượcdùng để truyền và nhận giữ liệu trên internet Giữa hai chương trình chạytrên mạng cần có một liên kết giao tiếp hai chiều, hay còn gọi là two-waycommunication để kết nối 2 process trò chuyện với nhau Điểm cuối(endpoint) của liên kết này được gọi là socket Socket sẽ được sử dụng để
"lắng nghe" mỗi khi có tin nhắn mới, reaction để cập nhật lên giao diện.Việc cập nhật dữ liệu thời gian thực như thế đem lại một trải nghiệm tuyệtvời cho người dùng Nó sẽ giải quyết vấn đề một cách nhanh gọn và tiếmkệm tài nguyên cho cả client và server
Như đã nói ở trên, nhóm chúng em sẽ xây dựng chat room bằngsocket dựa trên giao thức TCP (Transmission Control Protocol) việc
Trang 6truyền dữ liệu không yêu cầu có sự thiết lập kết nối giữa 2 quá trình Do
đó, nó được gọi là socket hướng kết nối
MỤC LỤC
LỜI CẢM ƠN 3
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN 4
LỜI NÓI ĐẦU 5
MỤC LỤC 6
Chương I: Giới Thiệu Tổng Quan 8
1 Khái niệm cơ bản về Internet 8
2 Network Socket 8
3 User Datagram Protocol (UDP) 10
Chương 2: Tìm Hiểu Về Ngôn Ngữ Java 15
1 Khái niệm cơ bản về Java 15
2 Công dụng 15
3 Sự lựa chọn phổ biến 16
4 Java hoạt động như thế nào 17
5 Lập trình hướng đối tượng là gì 17
6 Các tính chất của Java 18
7 Các loại access modifier trong Java 19
8 Nested Class 20
9 Biến 20
10 Exception 21
11 Các kiểu dữ liệu 22
12 Ép kiểu trong Java 22
13 Toán tử Instanceof 23
14 Nạp chồng (Overloading) và ghi đè (Overriding) 24
15 Interface 24
16 Abstracts 24
Trang 718 Collection 26
19 Quan hệ kế thừa trong Java 29
Chương 3: Tổng quan về lập trình mạng 30
1 Tổng quan về mạng máy tính 30
2 Mô hình mạng OSI 33
3 Giao thức truyền thông 35
Chương 4:Xây dựng ứng dụng thực tế 37
1 Phân tích yêu cầu đề tài 37
2 Mục đích xây dựng 38
3 Xác định yêu cầu của người dùng 38
4 Yêu cầu giao diện 38
5 Phân tích các chức năng của hệ thống 38
6 Biểu đồ phân tích thiết kế hệ thống 38
7 Thiết kế giao diện và chức năng 39
KẾT LUẬN 43
TÀI LIỆU THAM KHẢO 44
Trang 8Chương I: Giới Thiệu Tổng Quan
1. Khái niệm cơ bản về Internet 1.1 Giới thiệu chung
Internet là mạng của các máy tính trên toàn cầu được thành lập từnhững năm 80 bắt nguồn từ mạng APARRNET của bộ quốc phòng Mỹ
Vào mạng Internet, bạn có thể tìm thấy nhiều tài liệu để nghiên cứu,học tập, trao đổi thư từ, đặt hàng, mua bán Một trong những mục tiêu củaInternet là chia sẻ thông tin giữa những người dùng trên nhiều lĩnh vựckhác nhau
Mỗi máy tính trên Internet được gọi là một host Mỗi host có khảnăng như nhau về truyền thông tới máy khác trên Internet Một số hostđược nối tới mạng bằng đường nối Dial-up (quay số) tạm thời, số khácđược nối bằng đường nối mạng thật sự 100% (như Ethernet, Tokenring )
1.2 Phân loại
Các máy tính trên mạng được chia làm 2 nhóm Client và Server.
Client: Máy khách trên mạng, chứa các chương trình Client
Server: Máy phục vụ-Máy chủ Chứa các chương trình Server, tàinguyên (tập tin, tài liệu ) dùng chung cho nhiều máy khách Server luôn ởtrạng thái chờ yêu cầu và đáp ứng yêu cầu của Client
Internet Server: Là những server cung cấp các dịch vụ Internet như Web Server, Mail Server, FPT Server…
2.1 Các khái niệm cơ bản về Socket
Socket là một cấu trúc phần mền trong nút mạng của mạng máy tính đóng vai trò là điểm cuối để gửi và nhận dữ liệu trên mạng Cấu
Trang 9trúc và thuộc tính của socket được xác định bởi giao diện lập trình ứngdụng (API) cho kiến trúc mạng Các ổ cắm chỉ được tạo trong suốt thờigian tồn tại của một quy trình ứng dụng đang chạy.
Do tiêu chuẩn hóa các giao thức TCP/IP trong quá trình phát triểnInternet, thuật ngữ network socket được sử dụng phổ biến nhất trong ngữcảnh của bộ giao thức Internet và do đó thường được gọi là ổ cắm Internet.Socket được xác định bên ngoài đối với các host khác bằng socket address,
là transport protocol, IP address, và số port
2.2 Tìm hiểu rõ hơn về Network Socket
Giao diện lập trình ứng dụng (API) cho ngăn xếp giao thức mạng tạomột tay cầm cho mỗi socket được tạo bởi một ứng dụng, thường được gọi
là socket descriptor Tại thời điểm tạo với API, network socket liên kết với
sự kết hợp của một loại giao thức mạng được sử dụng để truyền, địa chỉmạng của máy lưu trữ và số port Ports là các tài nguyên được đánh số đạidiện cho một loại cấu trúc phần mềm khác Chúng được sử dụng làm loạidịch vụ và sau khi được tạo bởi một quy trình, chúng sẽ đóng vai trò làthành phần vị trí có thể định địa chỉ bên ngoài (từ mạng), để các máy chủkhác có thể thiết lập kết nối Network Socket có thể được dành riêng chocác kết nối liên tục để liên lạc giữa hai nút hoặc chúng có thể tham gia vàoliên lạc multicast và không kết nối
Giao diện lập trình ứng dụng (API) mà các chương trình sử dụng đểgiao tiếp với ngăn xếp giao thức, sử dụng network socket, được gọi là APIsocket Việc phát triển các chương trình ứng dụng sử dụng API này đượcgọi là lập trình network socket hoặc lập trình mạng API socket Internetthường dựa trên tiêu chuẩn socket Berkeley Trong tiêu chuẩn socketBerkeley, socket là một dạng mô tả tệp, do triết lý Unix rằng "mọi thứ đều
là tệp" và sự tương đồng giữa socket và tệp Cả hai đều có chức năng đọc,viết, mở và đóng Trong thực tế, sự khác biệt làm
Trang 10căng thẳng sự tương tự và các giao diện khác nhau (gửi và nhận) được sửdụng trên một socket Trong giao tiếp giữa các quá trình, mỗi đầu thường
có socket riêng
Trong các giao thức Internet tiêu chuẩn TCP và UDP, socket address
là sự kết hợp của địa chỉ IP và số port, giống như một đầu của kết nối điệnthoại là sự kết hợp của số điện thoại và một số extension Socket không cần
có địa chỉ nguồn để chỉ gửi dữ liệu, nhưng nếu một chương trình liên kếtsocket với source address, thì socket có thể được sử dụng để nhận dữ liệuđược gửi đến địa chỉ đó Dựa trên address, socket Internet phân phát cácdata packets cho ứng dụng thích hợp
Socket thường đề cập cụ thể đến socket Internet hoặc socket TCP.Socket Internet được đặc trưng tối thiếu bởi những điều sau đây:
Địa chỉ socket cục bộ, bao gồm địa chỉ IP cục bộ và (đối với TCP và UDP, nhưng không phải IP) số port
Giao thức: Giao thức vận chuyển, ví dụ: TCP, UDP, IP Điều này cónghĩa là các điểm cuối (cục bộ hoặc từ xa) có cổng TCP 53 và cổng UDP
53 là các socket riêng biệt, trong khi IP không có port
Một socket đã được kết nối với một socket khác, ví dụ, trong quá trình thiết lập kết nối TCP, cũng có một địa chỉ socket từ xa
3 Transmission control protocol (TCP)
3.1 Sơ lược về TCP
Internet đã và đang là một phần không thể thiếu trong cuộc sốnghàng ngày của chúng ta Tuy nhiên, không phải ai cũng hiểu được tườngtận về cách thức hoạt động của Internet Phương thức truyền dẫn màInternet đang sử dụng là phương thức TCP/IP, một trong những phươngthức truyền dẫn phổ biến nhất hiện nay
TCP là một giao thức mạng quan trọng được sử dụng trong việc
Trang 11một tập hợp các quy tắc và trình tự kiểm soát việc thực hiện truyền dữ liệusao cho tất cả mọi người trên thế giới bất kể vị trí địa lý, bất kể ứng dụng,phần mềm họ đang sử dụng đều có thể thao tác theo cùng một phương thứcgiống nhau được gọi là TCP.
TCP thường kết hợp với IP (Giao thức Internet) theo một cặpđược gọi là TCP/IP Bạn có thể bắt gặp cụm thuật ngữ này trong phầnnetwork setting trên máy tính, điện thoại thông minh hoặc các thiết bịcầm tay của mình IP sẽ xử lý việc gán địa chỉ và chuyển tiếp các gói tin
từ nguồn đến đích trong khi TCP kiểm soát độ tin cậy của truyền dẫn
3.2. Các kết nối TCP và các cổng
Hai ứng dụng dùng TCP phải thiết lập một kết nối TCP trước khi
dữ liệu có thể được truyền Mỗi kết nối sẽ tồn tại giữa một cặp TCP socketvới socket được định nghĩa như là sự kết hợp của địa chỉ IP, cổng đượcdùng, giao thức lớp vận chuyển Quá trình thiết lập kết nối, khởi tạo socketbao gồm giá trị cổng nguồn và cổng đích, chỉ số tuần tự và ACK Hình 1
mô tả tiến trình bắt tay ba bước trong thiết lập một kết nối TCP và quátrình hủy một kết nối TCP
Hình 1
Trang 12Trong quá trình thiết lập kết nối, hai host sẽ chọn lựa cổng, chọnlựa chỉ số tuần tự (sequence number) và dùng các chỉ số của TCP để nhận
ra thông điệp trong quá trình bắt tay ba bước Đầu tiên, đối với vấn đềcổng, bên máy chủ (máy chủ) phải lắng nghe các yêu cầu kết nối từ máyyêu cầu (máy khách), trong trường hợp này là cổng 80 Phía máy khách sẽchọn một cổng chưa dùng làm cổng nguồn, thường là giá trị 1024 hoặc lớnhơn Lưu ý rằng khi so sánh các phân đoạn (segment) trong tiến trình trên,giá trị cổng là không đổi Segment là đơn vị mô tả dữ liệu tại lớp vậnchuyển được gọi là PDU (Protocol Data Unit)
Trong phần header của TCP có bao gồm vài trường có giá trị 1 bit,gọi là các cờ Các cờ này phục vụ cho các mục đích khác nhau Các cờSYN và ACK sẽ chỉ ra một segment có phải là segment đầu tiên hay là thứhai trong một kết nối TCP mới Một segment có cờ SYN sẽ là segment đầutiên trong một kết nối TCP Một segment có cả SYN và ACK sẽ là segmentthứ hai trong một kết nối Các cờ này cho phép các host dễ dàng nhận racác yêu cầu kết nối mới Chỉ số ban đầu có thể được gán về bất kỳ giá trịhợp lệ nào và thường không được gán về 0 Hãy nhớ rằng trong quá trìnhkhôi phục lỗi, việc sử dụng các giá trị này là độc lập trong cả hai chiều
Trang 133.3 Cấu trúc header TCP
Do là giao thức tin cậy nên cấu trúc gói tin của TCP rất phức tạp
Source port và destination port (đều dài 16 bit): được sử dụng
để định danh cho session của giao thức nào đó trên lớp ứng dụng đang được truyền tải trong TCP segment đang xét
Sequence number (32 bit): dùng để đánh thứ tụ gói tin (từ
số sequence nó sẽ tính ra được số byte đã được truyền)
Acknowledge number (32 bit): : sùng để báo đã nhận được gói
tin nào và mong nhận được byte mang số thứ tự nào tiếp theo
Header length (4 bit): cho biết toàn bộ header dài bao nhiêu
tính theo đơn vị word(1 Word = 4 byte)
Các bit reserverd (4 bit): đều được thiết lập bằng 0.
Các bit control (9 bit): các bit dùng để điều khiển các cờ
(flag) ACK, cờ Sequence
Window size (16 bit): số lượng byte được thiết bị sẵn sàng
tiếp nhận
Trang 14Checksum (16 bit): kiểm tra lỗi của toàn bộ TCP segment.
Urgent pointer (16 bit): sử dụng trong trường hợp cần ưu tiên
dữ liệu
Options (tối đa 32 bit): cho phép thêm vào TCP các tính năng khác
Data: dữ liệu của lớp trên
3.4 Tính toán tổng kiểm tra
Tổng kiểm tra có 16 bit cho cả phần header và dữ liệu, nó xác minhtính toàn vẹn dữ liệu của TCP
Tổng kiểm tra TCP cho IPv4
Khi TCP chạy trên IPv4 , phương thức được sử dụng để tính toántổng kiểm tra được định nghĩa như sau:
Trường tổng kiểm tra là phần bù 16 bit của tổng phần bù 1 của tất
cả các từ 16 bit trong tiêu đề và văn bản Tính toán tổng kiểm tra cầnđảm bảo căn chỉnh 16 bit của dữ liệu được tính tổng Nếu một phân đoạnchứa một số lẻ các octet tiêu đề và văn bản, thì có thể đạt được sự liênkết bằng cách đệm octet cuối cùng bằng các số 0 ở bên phải của nó đểtạo thành một từ 16 bit cho mục đích tổng kiểm tra Phần đệm khôngđược truyền như một phần của phân khúc Trong khi tính toán tổng kiểmtra, trường tổng kiểm tra được thay thế bằng số không
Tổng kiểm tra TCP cho IPv6
Khi TCP chạy trên , phương thức được sử dụng để tính toán
tổng kiểm tra sẽ thay đổi:
Bất kỳ giao thức truyền tải hoặc giao thức lớp trên nào khác baogồm các địa chỉ từ tiêu đề IP trong tính toán tổng kiểm tra của nó phảiđược sửa đổi để sử dụng qua IPv6, để bao gồm các địa chỉ IPv6 128 bitthay vì địa chỉ IPv4 32 bit
4 Độ tin cậy và kiểm soát tắc nghẽn
Giao thức TCP có độ tin cậy cao, các gói tin được gửi bằng TCP sẽđược theo dõi do vậy dữ liệu sẽ không bị mất hoặc hỏng trong quá trìnhvận chuyển Đó là lý do tại sao file tải xuống không bị hỏng ngay cả khimạng có vấn đề Tất nhiên, nếu bên nhận hoàn toàn ngoại tuyến, máy tính
sẽ từ bỏ và hiển thị một thông báo lỗi ghi nó không thể giao tiếp với máychủ lưu trữ từ xa
Kiểm soát luồng đạt được bởi TCP sử dụng trường kích thước cửa sổ.Trường này xác định số byte, bắt đầu bằng byte được xác nhận, mà
Trang 15người nhận sẵn sàng chấp nhận Nếu người nhận bận hoặc không muốnnhận thêm dữ liệu từ người gửi, giá trị này có thể được đặt thành 0 Ngoàiđiều khiển luồng dựa trên kích thước cửa sổ, tiêu chuẩn TCP hiện tại (RFC
2581 ) sử dụng một cơ chế kiểm soát tắc nghẽn phức tạp bao gồm bốnthuật toán: Slow Start, Congestion Avoidance, Fast Retransmission, và FastRecovery Thuật toán khởi động chậm (Slow Start) được sử dụng bởi TCP
cố gắng tránh tắc nghẽn bằng cách bắt đầu truyền ở tốc độ thấp và nhanhchóng tăng tốc độ cho đến khi có dấu hiệu đầu tiên cho thấy giới hạn băngthông khả dụng đã đạt đến Tránh tắc nghẽn (Congestion Avoidance) tiếptục tăng tốc độ dần dần đến mức có thể chấp nhận được với các tài nguyênbăng thông hiện có Cả khởi động chậm và tránh tắc nghẽn đều sử dụngcách tiếp cận Tăng dần Giảm nhân lên [an Incremental Reduce Multiplying(AIMD)], cho phép tốc độ truyền dữ liệu tăng dần, trong khi mạng vẫn cókhả năng duy trì tốc độ hiện tại (nghĩa là không xảy ra mất gói) Ngay khitốc độ này vượt quá băng thông mạng khả dụng (nghĩa là các gói bị mấtđược phát hiện), người gửi sẽ giảm đáng kể tốc độ dữ liệu Các thuật toántruyền lại nhanh và phục hồi nhanh (Fast retransmission and fast recovery)
đã được giới thiệu để tăng tốc độ phân phối dữ liệu sau khi mất và do đóTCP giảm mạnh tốc độ truyền
Trang 16Chương 2: Tìm Hiểu Về Ngôn Ngữ Java
1 Khái niệm cơ bản về Java
Java là một ngôn ngữ lập trình được sử dụng rộng rãi để viết mã chocác ứng dụng web Ngôn ngữ này là lựa chọn phổ biến của các nhà pháttriển trong hơn 2 thập niên Hiện nay có hàng triệu ứng dụng Java đangđược sử dụng Java là một ngôn ngữ đa nền tảng, hướng đến đối tượng, lấymạng làm trung tâm và có thể được sử dụng như một nền tảng Đây là mộtngôn ngữ lập trình nhanh, bảo mật, đáng tin cậy dùng để viết mã cho mọithứ từ ứng dụng di động, phần mềm doanh nghiệp cho đến các ứng dụng
dữ liệu lớn và công nghệ phía máy chủ
Vì Java là một ngôn ngữ miễn phí và linh hoạt, nó có thể được dùng
để phát triển các phần mềm cục bộ và phân tán Một số công dụng phổ biếncủa Java bao gồm:
Phát triển trò chơi:
Nhiều trò chơi điện tử, trò chơi máy tính và di động nổi tiếng đượcphát triển bằng Java Ngay cả những trò chơi hiện đại được tích hợp côngnghệ tiên tiến như máy học hay thực tế ảo cũng được phát triển bằng côngnghệ Java
Điện toán đám mây:
Java thường được gọi là ngôn ngữ WORA (Viết một lần, chạy ở mọinơi), khiến nó trở thành ngôn ngữ lý tưởng cho các ứng dụng phi tập trungdựa trên đám mây Các nhà cung cấp đám mây chọn ngôn ngữ Java đểchạy các chương trình trên nhiều nền tảng cơ sở khác nhau
Dữ liệu lớn:
Java được dùng cho các công cụ xử lý dữ liệu có thể làm việc với những tập dữ liệu phức tạp và số lượng dữ liệu thời gian thực khổng lồ
Trang 17Trí tuệ nhân tạo:
Java là một trung tâm thư viện máy học đồ sộ Sự ổn định và tốc độcủa ngôn ngữ này rất lý tưởng cho việc phát triển ứng dụng trí tuệ nhân tạonhư xử lý ngôn ngữ tự nhiên và học sâu
Internet vạn vật:
Java đã được sử dụng để lập trình các cảm biến và phần cứng trong thiết bị biên có thể kết nối một cách độc lập với Internet
3 Sự lựa chọn phổ biến
Java phổ biến vì nó được thiết kế để có thể dễ dàng sử dụng Một số
lý do mà nhà phát triển tiếp tục chọn Java thay vì những ngôn ngữ lập trìnhkhác bao gồm:
Tài nguyên học tập chất lượng cao
Java đã ra mắt từ lâu nên các nhà phát triển mới có thể tiếp cận rấtnhiều tài nguyên học tập Tài liệu chi tiết, những cuốn sách toàn diện vàcác khóa học sẽ hỗ trợ nhà phát triển trong quá trình học hỏi Ngoài ra,người mới làm quen có thể bắt đầu viết mã bằng Java Cơ bản trước khichuyển sang Java Nâng cao
Các chức năng và thư viện sẵn có
Khi sử dụng Java, nhà phát triển không cần phải viết mọi chức năngmới từ đầu Thay vào đó, Java cung cấp một hệ sinh thái phong phú gồmcác chức năng và thư viện sẵn có để phát triển hàng loạt ứng dụng đa dạng
Sự hỗ trợ tích cực của cộng đồng
Java có rất nhiều người dùng hoạt động và một cộng đồng có thể hỗtrợ nhà phát triển khi họ đối mặt với các thách thức trong việc viết mã.Phần mềm nền tảng Java cũng được duy trì và cập nhật thường xuyên.Công cụ phát triển chất lượng cao Java cung cấp nhiều công cụ khác nhau
để hỗ trợ chỉnh sửa tự động, gỡ lỗi, thử nghiệm, triển khai và
Trang 18quản lý thay đổi Những công cụ này khiến việc lập trình bằng Java tiết kiệm thời gian và chi phí.
Độc lập với nền tảng
Mã Java có thể chạy trên bất kỳ nền tảng cơ sở nào như Windows,Linux, iOS hoặc Android mà không cần viết lại Đây là điều khiến ngônngữ này trở nên đặc biệt mạnh mẽ trong môi trường hiện nay khi chúng tamuốn chạy ứng dụng trên nhiều thiết bị
Bảo mật
Người dùng có thể tải mã Java không tin cậy từ trên mạng xuống vàchạy mã này trong môi trường bảo mật để nó không thể gây hại Mã khôngtin cậy sẽ không thể lây nhiễm vi-rút cho hệ thống máy chủ và cũng khôngthể đọc hoặc ghi tệp từ ổ cứng Bạn cũng có thể cấu hình nhiều cấp độ vàhạn chế bảo mật trong Java
4 Java hoạt động như thế nào
Mọi ngôn ngữ lập trình đều là phương thức để giao tiếp với máy.Phần cứng của máy chỉ phản hồi thông tin giao tiếp điện tử Các ngôn ngữlập trình cấp độ cao như Java đóng vai trò là cầu nối giữa ngôn ngữ conngười và ngôn ngữ phần cứng Để sử dụng Java, nhà phát triển cần phảihiểu được 2 điều:
Ngôn ngữ và API Java:
Đây là hoạt động giao tiếp front-end giữa nhà phát triển và nền tảng Java
Máy ảo Java:
Đây là hoạt động giao tiếp back-end giữa nền tảng Java và phần cứng cơ sở Hãy cùng xem xét chi tiết từng yếu tố này ở bên dưới
Trang 195 Lập trình hướng đối tượng là gì
Lập trình hướng đối tượng (Object Oriented Programing – OOP) làmột phương pháp để thiết kế một chương trình bởi sử dụng các lớp và cácđối tượng
Java là một ngôn ngữ lập trình hướng đối tượng vì vậy nó cũng hỗ trợ các đặc tính của lập trình hướng đối tượng:
Đa hình (Polymorphism) Thừa kế (Inheritance)Đóng gói (Encapsulation)Trừu tượng (Abstraction)
Đối tượng (object):
Đối tượng là một thực thể có trạng thái và hành vi Nó có thể mang tính vật lý hoặc logic
Nếu chúng ta xem xét thực tế chúng ta có thể tìm thấy nhiều đồ vậtxung quanh chúng ta: cái bàn, con chó, con người, v.v… Tất cả các đốitượng này đều có thuộc tính và hành vi
Nếu chúng ta xem xét một con chó, thuộc tính của nó sẽ là – tên,giống, màu sắc, và các hành vi là: sủa, chạy, ăn, … Nếu bạn so sánh cácđối tượng trong phần mềm với một đối tượng trong thế giới thực, chúng sẽ
có đặc điểm rất giống nhau: thuộc tính đối tượng trong phần mềm được lưutrữ trong trường (field) và hành vi được lưu trữ trong phương thức(method)
Chúng ta có thể xem lớp như một khuôn mẫu (template) của đốitượng (Object) Trong đó bao gồm dữ liệu của đối tượng (fields hayproperties) và các phương thức(methods) tác động lên thành phần dữ liệu
đó gọi là các phương thức của lớp
Trang 206 Các tính chất của Java
6.1 Tính đóng gói (Encapsulation)
Đóng gói là sự che giấu dữ liệu riêng bên trong mỗi đối tượng củalớp được khai báo và chỉ được truy xuất thông qua hệ thống các phươngthức có sẵn của lớp
Tính đóng gói dùng để bảo vệ dữ liệu, ngăn ngừa việc truy cập vàgán giá trị trực tiếp cho thuộc tính bên trong đối tượng, nhằm bảo vệ tínhchính xác của giá trị thuộc tính
6.2 Tính đa hình (Polymorphism)
Trong từng trường hợp, hoàn cảnh khác nhau thì đối tượng có hìnhthái khác nhau tùy thuộc vào từng ngữ cảnh
6.3 Tính trừu tượng (Abstraction)
Tính trừu tượng trong Java là tính chất không thể hiện cụ thể mà chỉnêu tên vấn đề
Đó là một quá trình che giấu các hoạt động bên trong và chỉ hiển thịnhững tính năng thiết yếu của đối tượng tới người dùng
Ưu điểm khi sử dụng tính trừu tượng để lập trình:
Tính trừu tượng cho phép các lập trình viên loại bỏ tính chất phứctạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cầnthiết của đối tượng trong lập trình, cải thiện khả năng bảo trì của hệ thống.Tính trừu tượng giúp chúng ta tập trung vào những cốt lõi cần thiết của đốitượng thay vì quan tâm đến cách nó thực hiện
Tính trừu tượng cung cấp nhiều tính năng mở rộng khi sử dụng kết hợp với tính đa hình và kế thừa trong lập trình hướng đối tượng
Java trừu tượng hóa thông qua các lớp trừu tượng (Abstract class) vàcác giao diện (Interface)
Trang 216.4 Tính kế thừa (Inheritance)
Là sự liên quan giữa hai class với nhau, trong đó có class cha(superclass) và class con (subclass) Khi kế thừa class con được hưởng tất
cả các phương thức và thuộc tính của class cha
7 Các loại access modifier trong Java
Default: chỉ truy cập được bởi các lớp trong cùng một package.
Public: Truy cập được ở mọi nơi.
Protected: chỉ truy cập được bởi các lớp trong cùng một package Private: Chỉ gọi được khi ở trong cùng 1 lớp.
Nested class được phân chia thành 2 loại:
Static nested classes: là class được khai báo dạng static bên
Anonymous Classes: là class giống như Inner classes và Local
classes, nó được khai bao bên trong class hoặc method mà không có tên cụthể
Sử dụng inner class để gộp các lớp lại một cách hợp lý để dễ dàng quản lý và bảo trì
Biến được tạo ra cùng với lớp trong qua trình lập trình để mô tả thuộc tính của đối tượng
Trang 22Biến có 2 loại: Biến cục bộ và biến toàn cục.
Biến cục bộ: là biến được khởi tạo bên trong các phương thức và sẽ
bị huỷ khi phương thức bị huỷ
Biến toàn cục (Instant): là biến nằm bên trong một lớp và bên
ngoài mọi phương thức
Biến static: biến static được khai báo trong một class với từ khóa
‘static’, phía bên ngoài các phương thức, constructor và block
Một ngoại lệ (Exception) trong Java là một vấn đề phát sinh trongquá trình thực thi chương trình Khi xảy ra ngoại lệ, luồng xử lý (flow) bịgián đoạn, chương trình/ứng dụng dừng bất thường Nó là một đối tượngđược ném ra tại Runtime
Figure 1: Exception trong Java
Sự khác nhau giữa “Checked Exceptions” và “Unchecked
Exceptions” trong Java?
Checked Exceptions:
Trang 23Là một ngoại lệ được kiểm tra và thông báo bởi trình biên dịch tại thời điểm biên dịch.
Checked Exceptions xảy ra tại thời gian biên dịch time Exceptions)
(Compile-Và Checked Exceptions là những Exceptions mà lập trình viênkhông thể lường trước
Trang 24Figure 2: Các kiểu dữ liệu trong Java
12 Ép kiểu trong Java
Ép kiểu Nới rộng (Widening): Là quá trình làm tròn số từ kiểu dữ
liệu có kích thước nhỏ hơn sang kiểu có kích thước lớn hơn Kiểu biến đổinày không làm mất thông tin Ví dụ chuyển từ int sang float Chuyển kiểuloại này có thế được thực hiện ngầm định bởi trình biên dịch
Figure 3: Ép kiểu Nới rộng trong Java
Trang 25Ép kiểu Thu hẹp (Narrowwing): Là quá trình làm tròn số từ kiểu
dữ liệu có kích thước lớn hơn sang kiểu có kích thước nhỏ hơn Kiểu biếnđổi này có thể làm mất thông tin như ví dụ ở trên Chuyển kiểu loại nàykhông thể thực hiện ngầm định bởi trình biên dịch, người dùng phải thựchiện chuyển kiểu tường minh
Figure 4: Ép kiểu thu hẹp trong Java
13 Toán tử Instanceof
Toán tử instanceof trong java được sử dụng để kiểm tra một đốitượng có phải là thể hiển của một kiểu dữ liệu cụ thể không (lớp, lớp con,interface)
Instanceof trong java được gọi là toán tử so sánh kiểu vì nó so sánhthể hiện với kiểu dữ liệu Nó trả về giá trị boolean là true hoặc false
Nếu bạn dùng toán tử instanceof với bất kỳ biến nào mà có giá trịnull, giá trị trả về sẽ là false
14 Nạp chồng (Overloading) và ghi đè (Overriding)
Nạp chồng (Overloading): Là 2 phương thức có cùng tên nhưng
khác tham số sẽ trả về kết quả khác nhau
Ghi đè (Overriding): là lớp con cung cấp lại một cài đặt cụ thể cho
một phương thức mà lớp cha đã cung cấp thì đó gọi là ghi đè phương thức
nó được thục hiện dựa trên 2 lớp có tính chất kế thừa
Trang 2615 Interface
Được xem như là một bản thiết kế, 1 khuôn mẫu của class, chứa cácphương thức trừu tượng không có lệnh thực thi, cung cấp chức năng chocác class implement nó, các class implement chúng sẽ phải override lại cácphương thức có trong interface, vì Java không cho phép đa kế thừa nênInterface là một giải pháp thay thế để có được tính đa kế thừa vì 1 class cóthể implement nhiều interface
Interface như là một bản thiết kế chức năng cho class, và các classimplement chúng sẽ phải override những chức năng đó
16 Abstracts
Abstract class: là một class được khai báo với từ khoá abstract,Abstract class là một lớp cha chứa các biến và phương thức để mô tả thuộctính và hành vi cho tất cả các class có cùng bản chất (Tính năng, hành vi,kiểu, loài)
Abstract class là một class được khai báo với từ khoá abstract, nóchứa các phương thức trừu trượng hoặc các phương thức thường, abstractclass không thể khởi tạo, chỉ có thế được kế thừa bởi các lớp con có sựtương quan, các lớp con kế thừa lớp cha sẽ phải override lại các phươngthức trừu tượng ở trong lớp cha
Bubble Sort (Sắp xếp nổi bọt) là một thuật toán sắp xếp đơn giản,với thao tác cơ bản là so sánh hai phần tử kề nhau, nếu chúng chưa đứngđúng thứ tự thì đổi chỗ (swap)
Có thể tiến hành từ trên xuống (bên trái sang) hoặc từ dưới lên (bên phải sang)