Giáo trình Lập trình truyền thông (Phần 2)
Bạn đang xem tài liệu "Giáo trình Lập trình truyền thông (Phần 2)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- giao_trinh_lap_trinh_truyen_thong_phan_2.pdf
Nội dung text: Giáo trình Lập trình truyền thông (Phần 2)
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông 2. Các chức năng tính toán các dữ liệu, xử lý thông tin theo những qui luật (rule), giải thuật được qui định bởi vấn đề mà ứng dụng giải quyết. Các chức năng này được gọi chung là Dịch vụ nghiệp vụ (Business Rule Service). 3. Trong quá trình tính toán, chương trình ứng dụng cần truy vấn đến các thông tin đã có được lưu trên đĩa cứng hay trong các cơ sỡ dữ liệu. Cũng như cần thiết phải lưu lại các kết quả tính toán được để sử dụng về sau. Các chức năng này được gọi chung là Dịch vụ lưu trữ (Data Storage Service). Ở mức vật lý, các chức năng này có thể được cài đặt vào một hay nhiều tập tin thực thi hình thành các kiểu kiến trúc chương trình khác nhau. Cho đến thời điểm hiện nay, người ta chia kiến trúc của chương trình thành 3 loại được trình bày tiếp theo sau. 1.7.1. Kiến trúc đơn tầng (Single-tier Architecture) Trong kiểu kiến trúc này, cả 3 thành phần của chương trình ứng dụng (User Interface, Business Rule, Data Storage) đều được tích hợp vào một tập tin thực thi. Ví dụ: BKAV, D2, Winword, . . . Các ứng dụng kiểu này chỉ được thực thi trên một máy tính. User Interface Business Rule Data Storage Hình 1.10 - Kiến trúc chương trình đơn tầng • Ưu điểm: • Dễ dàng trong thiết kế cài đặt ứng dụng kiểu này. • Nhược điểm: • Bởi vì cả 3 thành phần được cài vào một tập tin thực thi, nên việc sửa lỗi hay nâng cấp chương trình thì rất khó khăn. Toàn bộ chương trình phải biên dịch lại cho dù chỉ sửa đổi một lỗi rất nhỏ trong một thành phần nào đó ( User Interface chẳng hạn). • Việc bảo trì, nâng cấp ấn bản mới là một công việc cực kỳ nặng nề vì ta phải thực hiện việc cài đặt trên tất cả các máy tính. • Trong kiểu này, mỗi máy tính duy trì một cơ sở dữ liệu riêng cho nên rất khó trong việc trao đổi, tổng hợp dữ liệu. • Máy tính phải đủ mạnh để có thể thực hiện đồng thời cả 3 loại dịch vụ. 1.7.2. Kiến trúc hai tầng (Two - Tier Architecture) Kiến trúc này còn được biết đến với tên kiến trúc Client-Server. Kiến trúc này gồm 2 chương trình thực thi: chương trình Client và chương trình Server. Cả hai chương trình có thể được thực thi trên cùng một máy tính hay trên hai máy tính khác nhau. Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 10
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông Client và Server trao đổi thông tin với nhau dưới dạng các thông điệp (Message) . Thông điệp gởi từ Client sang Server gọi là các thông điệp yêu cầu (Request Message) mô tả công việc mà phần Client muốn Server thực hiện. Hình 1.11 - Kiến trúc chương trình Client-Server Mỗi khi Server nhận được một thông điệp yêu cầu, Server sẽ phân tích yêu cầu, thực thi công việc theo yêu cầu và gởi kết quả về client (nếu có) trong một thông điệp trả lời (Reply Message). Khi vận hành, một máy tính làm Server phục vụ cho nhiều máy tính Client. Mỗi một ứng dụng Client-Server phải định nghĩa một Giao thức (Protocol) riêng cho sự trao đổi thông tin, phối hợp công việc giữa Client và Server. Protocol qui định một số vấn đề cơ bản sau: • Khuôn dạng loại thông điệp. • Số lượng và ý nghĩa của từng loại thông điệp. • Cách thức bắt tay, đồng bộ hóa tiến trình truyền nhận giữa Client và Server. • . . . . Thông thường phần client đảm nhận các chức năng về User Interface, như tạo các form nhập liệu, các thông báo, các báo biểu giao tiếp với người dùng. Phần Server đảm nhận các chức năng về Data Storage. Nhờ đó dễ dàng trong việc bảo trì, chia sẻ tổng hợp dữ liệu trong toàn bộ công ty hoặc tổ chức. Các chức năng về Business Rule có thể được cài đặt ở phần client hoặc ở phần server tạo ra hai loại kiến trúc Client - Server là: o Fat Client o Fat Server. 1.7.2.1. Loại Fat Client Trong loại này Business Rule được cài đặt bên phía Client. Phần Server chủ yếu thực hiện chức năng về truy vấn và lưu trữ thông tin. Hình 1.12 - Kiến trúc chương trình Client – Server theo kiểu Fat Client Ưu điểm Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 11
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông • Tạo ra ít giao thông trên mạng nhờ dữ liệu tạm thời trong quá trình tính toán được lưu tại Client. Nhược điểm • Vì Business Rule được cài đặt trên phía Client, đòi hỏi máy tính thực thi phần Client phải đủ mạnh, dẫn đến tốn kém trong chi phí đầu tư phần cứng cho các công ty xí nghiệp. • Phải cài lại tất cả các máy tính Client khi nâng cấp chương trình. 1.7.2.2. Loại Fat Server Trong loại này, phần lớn các chức năng về Business Rule được đặt ở phần Server. Phần Client chỉ thực hiện một số chức năng nhỏ của Business Rule về kiểm tra tính hợp lệ của dữ liệu nhập bởi người dùng. Hình 1.13 - Kiến trúc chương trình Client – Server theo kiểu Fat Server Ưu điểm • Vì Business Rule được đặt ở phần Server, các máy tính Client không cần phải có cấu hình mạnh. • Việc nâng cấp chương trình khi Business Rule thay đổi trở nên nhẹ nhàng hơn vì chỉ phải cài đặt lại phần Server. Nhược điểm • Tạo ra nhiều thông điệp trao đổi giữa Client và Server làm tăng giao thông trên mạng. • Tăng tải trên máy Server vì nó phải đồng thời thực hiện các chức năng của Business Rule và Data Storage làm giảm hiệu năng của chương trình. 1.7.3. Kiến trúc đa tầng (N-Tier Architecture) Đây là kiến trúc cho các Ứng dụng phân tán (Distributed Application). Thông thường là kiến trúc 3 tầng. Chương trình ứng dụng được tách thành 3 phần riêng biệt tương ứng cho 3 chức năng User Interface, Business Rule và Data Storage. Vì các chức năng thuộc về Business Rule được tách thành một phần riêng, nó có thể được thực thi trên một máy tính Server riêng giải quyết được hầu hết các nhược điểm mắc phải của kiến trúc đơn tầng và kiến trúc hai tầng nói trên. Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 12
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông Hình 1.12 - Kiến trúc chương trình đa tầng Kiến trúc này đáp ứng tốt với những thay đổi về qui luật xử lý dữ liệu của vấn đề mà ứng dụng giải quyết. Việc thay đổi chỉ ảnh hưởng trên tầng Business Rule mà không ảnh hưởng đến hai tầng còn lại. Thông thường, người ta gọi tên các thành phần trên là: Client – Application Server – Database Server 1.8. Bài tập 1.8.1. Bài tập bắt buộc Bài tập 1.1: Protocol HTTP Tìm đọc và viết một báo cáo không quá 10 trang về giao thức HTTP. Bài tập 1.2: Chat Protocol Tìm hiểu về dịch vụ Chat trên mạng Internet. Viết một bảng báo cáo không qua 10 trang trình bày 2 nội dung sau: • Một bảng mô tả các chức năng thường được hỗ trợ trong một dịch vụ Chat. • Xây dựng Chat Protocol riêng của bạn trong đó mô tả: o Các chức năng hỗ trợ bởi Chat Server. o Khuôn dạng (Format) và các loại thông điệp (Message) hỗ trợ bởi Protocol. o Sơ đồ trạng thái hoạt động của server và client (giải thuật). o Minh họa các kịch bản khác nhau cho từng chức năng của dịch vụ. 1.8.2. Bài tập gợi ý Bài tập 1.3: POP3 Protocol Tìm đọc và viết một báo cáo không quá 10 trang về giao thức POP3. Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 13
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông CHƯƠNG 2 Sơ lược về ngôn ngữ Java Mục đích Chương này nhằm giới thiệu sơ lược về ngôn ngữ java cho các sinh viên đã có kiến thức căn bản về Lập trình hướng đối tượng với C++. Chương này sẽ không đề cập đến tất cả các vấn đề có trong Java mà chỉ giới thiệu những vấn đề cơ bản nhất về ngôn ngữ Java, đủ để các học viên có thể đọc hiểu các chương trình minh họa và làm được các bài tập ứng dung ở các chương sau. Yêu cầu Sau khi hoàn tất chương này, bạn có thể: • Trình bày được những vấn đề tổng quan về ngôn ngữ Java như: o Đặc điểm và khả năng của ngôn ngữ Java. o Khái niệm máy ảo của Java (JVM - Java Virtual Machine ). o Vai trò của bộ phát triển ứng dụng JDK (Java Developpment Kit). o Phân biệt được hai kiểu chương trình Applet và Application của Java. o Các kiểu dữ liệu và các phép toán được hỗ trợ bởi Java. • Biên soạn, biên dịch và thực thi thành công chương trình HelloWorld . • Sử dụng thành thạo các cấu trúc điều khiển dưới Java như: if, switch, while, do-while, for. • Biết cách nhận đối số của chương trình Java. • Biết đổi chuỗi thành số trong Java. • Sử dụng được cơ chế ngoại lệ của Java. • Biết định nghĩa lớp mới, sử dụng một lớp đã có của Java. • Giải thích được cơ chế vào ra với Stream trong Java. • Sử dụng thành thạo các phương thức của hai lớp InputStream và OutputStream. • Có thể nhập / xuất chuỗi trên một InputStream / OutputStream. • Giải thích được cơ chế luồng (Thread). • Cài đặt được các luồng trong Java. Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 14
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông 1.1. Giới thiệu về ngôn ngữ Java 1.1.1. Lịch sử phát triển Năm 1990, Sun MicroSystems thực hiện dự án Green nhằm phát triển phần mềm trong các thiết bị dân dụng. James Gosling, chuyên gia lập trình đã tạo ra một ngôn ngữ lập trình mới có tên là Oak. Ngôn ngữ này có cú pháp gần giống như C++ nhưng bỏ qua các tính năng nguy hiểm của C++ như truy cập trực tiếp tài nguyên hệ thống, con trỏ, định nghĩa chồng các tác tử Khi ngôn ngữ Oak trưởng thành, WWW cũng đang vào thời kỳ phát triển mạnh mẽ, Sun cho rằng đây là một ngôn ngữ thích hợp cho Internet. Năm 1995, Oak đổi tên thành Java và sau đó đến 1996 Java đã được xem như một chuẩn công nghiệp cho Internet. 1.1.2. Khả năng của ngôn ngữ Java • Là một ngôn ngữ bậc cao như C, C++, Perl, SmallTalk, cho nên có thể được dùng để tạo ra các ứng dụng để giải quyết các vấn đề về số, xử lý văn bản, tạo ra trò chơi, và nhiều thứ khác. • Có các môi trường lập trình đồ họa như Visual Java, Symantec Cafe, Jbuilder, Jcreator, • Có khả năng truy cập dữ liệu từ xa thông qua cầu nối JDBC (Java DataBase Connectivity) • Hỗ trợ các lớp hữu ích, tiện lợi trong lập trình các ứng dụng mạng (Socket) cũng như truy xuất Web. • Hỗ trợ lập trình phân tán (Remote Method Invocation ) cho phép một ứng dụng có thể được xử lý phân tán trên các máy tính khác nhau. • Và luôn được bổ sung các tính năng cao cấp khác trong các phiên bản sau. 1.1.2. Những đặc điểm của ngôn ngữ Java • Ngôn ngữ hoàn toàn hướng đối tượng. • Ngôn ngữ đa nền cho phép một chương trình có thể thực thi trên các hệ điều hành khác nhau (MS Windows, UNIX, Linux) mà không phải biên dịch lại chương trình. Phương châm của java là "Viết một lần , Chạy trên nhiều nền" (Write Once, Run Anywhere). • Ngôn ngữ đa luồng, cho phép trong một chương trình có thể có nhiều luồng điều khiển được thực thi song song nhau, rất hữu ích cho các xử lý song song. • Ngôn ngữ phân tán, cho phép các đối tượng của một ứng dụng được phân bố và thực thi trên các máy tính khác nhau. • Ngôn ngữ động, cho phép mã lệnh của một chương trình được tải từ một máy tính về máy của người yêu cầu thực thi chương trình. • Ngôn ngữ an toàn, tất cả các thao tác truy xuất vào các thiết bị vào ra đều thực hiện trên máy ảo nhờ đó hạn chế các thao tác nguy hiểm cho máy tính thật. • Ngôn ngữ đơn giản, dễ học, kiến trúc chương trình đơn giản, trong sáng. 1.1.3. Máy ảo Java (JMV - Java Virtual Machine) Để đảm bảo tính đa nền, Java sử dụng cơ chế Máy ảo của Java. ByteCode đó là ngôn ngữ máy của Máy ảo Java tương tự như các lệnh nhị phân của các máy tính thực. Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 15
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông Một chương trình sau khi được viết bằng ngôn ngữ Java (có phần mở rộng là .java) phải được biên dịch thành tập tin thực thi được trên máy ảo Java (có phần mở rộng là .class). Tập tin thực thi này chứa các chỉ thị dưới dạng mã Bytecode mà máy ảo Java hiểu được phải làm gì. Khi thực hiện một chương trình, máy ảo Java lần lượt thông dịch các chỉ thị dưới dạng Bytecode thành các chỉ thị dạng nhị phân của máy tính thực và thực thi thực sự chúng trên máy tính thực. Máy ảo thực tế đó là một chương trình thông dịch. Vì thế các hệ điều hành khác nhau sẽ có các máy ảo khác nhau. Để thực thi một ứng dụng của Java trên một hệ điều hành cụ thể, cần phải cài đặt máy ảo tương ứng cho hệ điều hành đó. 1.1.4. Hai kiểu ứng dụng dưới ngôn ngữ java Khi bắt đầu thiết kế một ứng dụng dưới ngôn ngữ Java, bạn phải chọn kiểu cho nó là Application hay Applet. • Applet: Là một chương trình ứng dụng được nhúng vào các trang web. Mã của chương trình được tải về máy người dùng từ Web server khi người dùng truy xuất đến trang web chứa nó. • Application: Là một chương trình ứng dụng được thực thi trực tiếp trên các máy ảo của Java. 1.1.5. Bộ phát triển ứng dụng Java (JDK- Java Development Kit) JDK là một bộ công cụ cho phép người lập trình phát triển và triển khai các ứng dụng bằng ngôn ngữ java được cung cấp miễn phí bởi công ty JavaSoft (hoặc Sun). Có các bộ Jdk cho các hệ điều hành khác nhau. Các ấn bản của JDK không ngừng được phát hành, các bạn có thể tải về từ địa chỉ hoặc Bộ công cụ này gồm các chương trình thực thi đáng chú ý sau: • javac: Chương trình biên dịch các chương trình nguồn viết bằng ngôn ngữ java ra các tập tin thực thi được trên máy ảo Java. • java: Đây là chương trình làm máy ảo của Java, thông dịch mã Bytecode của các chương trình kiểu application thành mã thực thi của máy thực. • appletviewer: Bộ thông dịch, thực thi các chương trình kiểu applet. • javadoc: Tạo tài liệu về chú thích chương trình nguồn một cách tự động. • jdb: Trình gở rối. • rmic: Tạo Stub cho ứng dụng kiểu RMI. • rmiregistry: Phục vụ danh bạ (Name Server) trong hệ thống RMI 1.1.6. Kiểu dữ liệu cơ bản dưới Java • Kiểu số Tên kiểu Kích thước byte 1 byte short 2 bytes int 4 bytes long 8 bytes float 4 bytes double 8 bytes Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 16
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông • Kiểu ký tự char Java dùng 2 bytes cho kiểu ký tự, theo chuẩn mã UNICODE ( 127 ký tự đầu tương thích với mã ASCII). Do đó, ta sử dụng tương tự như bảng mã ASCII. • Kiểu chuỗi ký tự String Thực chất đây là một lớp nằm trong thư viện chuẩn của Java (Core API), java.lang.String • Kiểu luận lý boolean Nhận 2 giá trị là : true và false. • Kiểu mảng o Khai báo: int[] a ; float[] yt; String[] names; hoặc: int a[]; float yt[]; String names[];int maTran[][]; float bangDiem[][]; o Khởi tạo: a = new int[3]; yt = new float[10]; names = new String[50]; maTran = int[10][10]; o Sử dụng mảng: int i = a[0]; float f = yt[9]; String str = names[20]; int x = matran [2][5]; 1.1.7. Các phép toán cơ bản Các phép toán trong Java cũng tương tự như trong C++. • Phép toán số học: +, - , *, / , % , =,++ , , += , - = , *= , /= , %= • Phép toán logic ==, !=, && , ||, ! ,> , = , > , ~ • Phép toán điều kiện : ? : • Cách chuyển đổi kiểu: (Kiểu Mới) 1.1.8. Qui cách đặt tên trong Java Tên hằng, tên biến, tên lớp, tên phương thức , được đặt tên theo qui tắc bắt buộc sau: • Tên phân biệt giữa chữ hoa và chữ thường. • Dùng các chữ cái, ký tự số, ký tự _ và $. • Không bắt đầu bằng ký tự số. • Không có khoảng trắng trong tên. Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 17
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông Để chương trình nguồn dễ đọc, dễ theo dõi người ta còn sử dụng quy ước đặt tên sau (không bắt buộc): • Tên lớp: o Các ký tự đầu tiên của một từ được viết hoa, o Các ký tự còn lại viết thường. o Ví dụ: lớp Nguoi, SinhVien, MonHoc, String, InputStream, OutputStream. . . • Tên biến, tên hằng, tên phương thức: o Từ đầu tiên viết thường. o Ký tự đầu tiên của từ thứ hai trở đi được viết hoa. Ví dụ: ten, ngaySinh, diaChi, inTen(), inDiaChi(), getInputStream(), . . . • Vị trí đặt dấu { và } để bắt đầu và kết thúc các khối như sau: if (condition) { command1; command1; } else { command3; command4; } 1.2. Chương trình ứng dụng kiểu Application Java là một ngôn ngữ thuần đối tượng (pure object). Tất cả các thành phần được khai báo như hằng, biến, hàm thủ tục đều phải nằm trong phạm vi của một lớp nào đó. Một ứng dụng trong Java là một tập hợp các lớp liên quan nhau, bao gồm các lớp trong thư viện do Java cung cấp và các lớp được định nghĩa bởi người lập trình. Trong một ứng dụng chỉ có một Lớp thực thi được. Đây là lớp đầu tiên được xem xét đến khi chúng ta thực thi ứng dụng. Lớp thực thi được này có các đặc điểm sau: • Có tên lớp trùng với tên tập tin chứa nó. • Phải khai báo phạm vi là public • Có chứa phương thức: public static void main (String args[]){ . . . } là phương thức được thực thi đầu tiên. • Nếu nhiều lớp được định nghĩa trong một tập tin, chỉ có một lớp được khai báo public. Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 18
- Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ - Giáo Trình Lập Trình Truyền Thông 1.2.1. Chương trình HelloWorld Trong ví dụ này, chúng ta viết một chương trình ứng dụng in ra màn hình dòng chữ "Hello World !". Đây là ứng dụng đơn giản chỉ có một lớp thực thi được tên là HelloWorld. Lớp này được khai báo là public, có phương thức main(), chứa trong tập tin cùng tên là HelloWorld.java (phần mở rộng bắt buộc phải là .java). Phương thức System.out.print() sẽ in tất cả các tham số trong dấu () của nó ra màn hình. Ta có thể dùng bất kỳ chương trình soạn thảo văn bản nào để biên soạn chương trình. Nhưng nhớ phải ghi lại với phần mở rộng là .java. 1.2.3. Biên soạn chương trình bằng phần mềm Notepad của Ms Windows Notepad là trình soạn thảo đơn giản có sẵn trong MS Windows mà ta có thể dùng để biên soạn chương trình HelloWorld. Hãy thực hiện các bước sau: • Chạy chương trình Notepad: o Chọn menu Start \ Programs \ Accessories \ Notepad • Nhập nội dung sau vào Notepad public class HelloWorld { public static void main(String args[]) { System.out.print("Hello World! \n"); } } • Save tập tin với tên HelloWorld.java o Chọn menu File \ Save o Tại cửa sổ Save As hãy nhập vào: Save in: Thư mục nơi sẽ lưu tập tin File Name: HelloWorld.java Save as type: All Files Nhấp vào nút Save Biên Soạn: Ngô Bá Hùng - Nguyễn Công Huy 19