1. Trang chủ
  2. » Luận Văn - Báo Cáo

Các mô hình lập trình tiên tiến

20 1K 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 711,5 KB

Nội dung

Các mô hình lập trình tiên tiến

Trang 1

Các mô hình lập trình tiên tiến

Học viên: THY Lớp: CH10CNT3 Bài tập: số 1 Mục lục:

Câu 1: Lập trình đồng thời (concurrence) là gì? Vì sao cần đến lập trình đồng thời trong các hệ phân

tán? Chạy ví dụ số Fibonacci và giải thích tính đồng thời trong ví dụ trong tài liệu tham khảo [1] 3

Trả lời: 3

Định nghĩa: 3

Vì sao cần lập trình đồng thời trong hệ phân tán: 3

Giải thích: 6

Câu 2: Lập trình component là gì? Ích lợi của lập trình component? Các công nghệ component? Tham khảo [1] 7

Trả lời: 7

Định nghĩa: 7

Các lợi ích của lập trình component: 7

Các công nghệ component: 8

Câu 3: Mô hình component trong eBay Tham khảo [2] 8

Trả lời: 8

Câu 4: RMI là gì? Cách tiến hành cài đặt RMI Cài đặt ví dụ HelloWorld trong tài liệu [3] và giải thích 11

Trả lời: 11

Định nghĩa: 11

Cách tiến hành cài đặt RMI 12

HelloWorld Example 14

Câu 5: Đọc bài “Teach Yourself Programming in Ten Years.pdf” và viết 1 trang với bài này 18

Trang 2

Trả lời 18

Trang 3

Câu 1: Lập trình đồng thời (concurrence) là gì? Vì sao cần đến lập trình đồng thời trong các hệ phân tán? Chạy ví dụ

số Fibonacci và giải thích tính đồng thời trong ví dụ trong tài liệu tham khảo [1]

Trả lời:

Định nghĩa:

Trong lập trình đồng thời, vài luồng hoạt động có thể thực hiện cùng 1 lúc Mỗi luồng thực hiện như khi nó hoạt động trong 1 chương trình tuần tự ngoại trừ khi

nó cần giao tiếp hoặc tương tác với luồng khác Mỗi chuỗi lệnh được gọi là 1 thread Chương trình tuần tự được gọi là đơn luồng Khi một chương trình đa luồng thực hiện, các hoạt động trong các luồng khác nhau được chèn theo thứ tự không thể biết trước tùy thuộc vào các ràng buộc được đưa ra bởi các hoạt động đồng bộ rõ rang mà có thể được nhúng trong code Các hoạt động cho mỗi luồng theo thứ tự một cách chặt chẽ nhưng sự đan xen của các hoạt động từ một tập các luồng là chưa xác định và phụ thuộc vào hàng loạt sự thực hiện của chương trình Mỗi luồng có thể chạy rất nhanh trong khi những luồng khác không chạy

Có thể nói lập trình đồng thời là một chương trình mà chứa các hoạt động đồng bộ mà được làm đồng bộ tại một hoặc nhiều điểm hoặc tại một hoặc nhiều tài nguyên suốt quá trình thực thi

Vì sao cần lập trình đồng thời trong hệ phân tán:

Các hệ thống phân tán chạy được phân tán nhiều nơi, trên nhiều máy với tài nguyên lớn và một lúc có thể chạy nhiều ứng dụng Vì thế các ứng dụng này nên được chạy đồng thời để tiết kiệm thời gian và tài nguyên

Sau đây là ví dụ:

import java.awt.*;

import java.awt.event.*;

Trang 4

public class Fibonacci {

private static boolean stopProgram = false;

public static void main(String argv[]) {

Frame myFrame = new Frame("Calculate Fibonacci Numbers"); List myList = new List(4);

myFrame.add(myList, BorderLayout.CENTER);

Button b1 = new Button("Stop Calculation");

b1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

stopProgram = true;

} });

Button b2 = new Button("Exit");

b2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0);

} });

Panel p1 = new Panel();

p1.add(b1);

p1.add(b2);

myFrame.add(p1, BorderLayout.SOUTH);

myFrame.setSize(200, 300);

myFrame.show();

Trang 5

int counter = 2;

while (true) {

if (stopProgram)

break;

counter += 1;

myList.add("Num = " + counter + "Fib = " + fibonacci(counter));

myFrame.show();

}

//Note: stopProgram cannot change value to true in the above //loop How does the program get to this point?

myList.add("Program Done");

}

public static int fibonacci(int NI) {

if (NI <= 1)

return 1;

return fibonacci(NI - 1) + fibonacci(NI - 2);

}

}

Trang 6

Giải thích:

Ở ví dụ trên, việc tính số Fibonacci là tự động trong 1 vòng lặp Và có vẻ như biến stopProgram không thể đặt thành false để dừng chương trình Tuy nhiên khi button stop được nhấn thì chương trình cũng dừng

Đó là bởi vì biến stopProgram có thể thay đổi giá trị từ bên ngoài Kỹ thuật này cho phép các giá trị thay đổi đồng thời Ở ví dụ này, chương trình chạy ẩn đối với người lập trình Một thread riêng rẽ là GUI thread đã được bắt đầu Thread này luôn luôn được chạy bởi java mọi lúc và đợi sự kiện click button stop button calculator Khi button này được click, GUI thread sẽ chạy trong một phần thời gian và đồng thời cùng với main thread và đặt biến stopProgram thành true

Câu 2: Lập trình component là gì? Ích lợi của lập trình

component? Các công nghệ component? Tham khảo [1]

Trả lời:

Định nghĩa:

Một cách nhìn thú vị tới lập trình đồng thời là nghĩ nó chứa 2 loại: hoạt động và thực thể Các hoạt động là hoạt động trên các thực thể hoặc các thực thể điều khiển

Trang 7

các hoạt động Nếu tất cả các đơn vị là object thì trong 1 chương trình đồng thời, tất cả object trong chương trình đó hoặc là chủ động (các hoạt động đồng thời như thread) hoặc bị động (như chia sẻ tài nguyên hoặc sự kiện được dung đồng bộ) Những kiểu đơn giản, các object không đồng bộ được dung bởi object chủ động hoặc bị động

Các object bị động, được gọi như những thành phần đơn giản Nó cung cấp cơ sở

hạ tầng cho các hoạt động đồng bộ mà thực hiện trong 1 chương trình đồng bộ Thực chất lập trình hướng thành phần là nhấn mạnh vào sự chia tách mối quan hệ của các chức năng có sẵn trên diện rộng trong cả hệ thống phần mềm Các thành phần có thể sử dụng trong nhiều dịch vụ và kế thừa các thành phần cơ bản khác Trong mỗi thành phần có code (mã) và data Để code và data nhóm trong một thành phần thì chúng phải gắn kết với nhau và sẽ được bảo vệ đối với những thành phần khác.Các thành phần này có inteface để các thành phần hoặc hệ thống khác

có thể gọi đến

Các lợi ích của lập trình component:

- Dễ sử dụng lại Mỗi thành phần có thể được phát triển riêng biệt và sử dụng cho nhiều ứng dụng Sau đó có thể sử dụng lại cho nhiều ứng dụng khác nhau và phát triển thêm

- Dễ bảo trì Vì mỗi thành phần là riêng biệt và sự ảnh hưởng là ít

- Có khả năng phân tán và lập trình đồng thời Các thành phần có thể đặt ở nhiều nơi, gọi tới nhau thông qua inteface và chạy đồng thời với nhau

- Các thành phần có thể phối hợp với nhiều thread, chúng có thể tạo hoặc tự tạo các thread đơn lẻ

- Các thành phần có thể dùng trong các hoạt động đồng bộ riêng lẻ, và trong các trường hợp của tính toán phân tán hoặc trên các máy tính vật lý khác nhau, một vài kỹ thuật được cài đặt để cho phép các thành phần giao tiếp với những hoạt động đồng bộ Các object khác nhau cho các hoạt động đồng bộ,

có thể thiết kế dùng luồng thủ tục, logic trong 1 component được tổ chức khái quát xung quanh trạng thái của component khi nó thực hiện Một vài kỹ

Trang 8

thuật cần thiết kế để thực thi các thành phần cho phép chúng cung cấp những điều kiên này

Các công nghệ component:

- RMI

- Common Object Request Broker (CORBA)

- Enterprise Java Beans (EJB)

Câu 3: Mô hình component trong eBay Tham khảo [2]

Trả lời:

Ebay là một nền tảng thương mại điện tử thành công lớn Ebay là một hệ thống thương mại điện tử mà người dùng có thể truy xuất tới website com của ebay và tìm kiếm mọi thứ họ muốn mua, hoặc đấu giá với người mua hoặc đưa lên các sản phẩm mà họ muốn chia sẻ với những người mua hiện tại và sau đó Sau đó người dùng thanh toán trực tuyến dựa vào hệ thống paypal – là hệ thống được thiết kế nhằm mục đích thanh toán trực tuyến dựa trên nền tảng của ebay, và nhận hàng hóa qua thư Giống như các hệ thống kinh doanh có thể trực tuyến khác, eBay được xây dựng dựa trên công nghệ phân tán Nó yêu cầu khả năng mở rộng, tốc độ cao, sẵn dùng cao và bảo mật Nó cần điều khiển một số lượng lớn các request được sinh ra bởi giao tiếp trên mạng và có thể đáp ứng từng ấy request trong 1 khọag thời gian cho phép Ebay còn cung cấp nhiều API cho nhà phát triển để tạo các ứng dụng truy xuất vào eBay Dưới đây là các dịch vụ do Ebay cung cấp:

Kiến trúc của eBay có thể được lặp lại nhiều lần Một giải pháp kiến trúc là không chỉ dựa vào kiến trúc phần mềm mà còn dựa vào kiến trúc hệ thống, từ các thành phần mà có thể cắm vào không chỉ là web server, web client mà còn là db, security

Trang 9

server, application servr, proxy server, và transaction server Hệ thống được đưa ra với 3 tầng: thiết bị có khả năng duyệt web, application và transaction server,

database tại tầng dịch vụ dữ liệu Dưới đây là biểu đồ tường minh cho vấn đề này:

Như vậy, eBay dựa trên mô hình component Các component được dùng: Web servers, Web clients, databases, security servers, application servers, proxy servers, transaction servers

Trang 10

Giữa các thành phần này có sự tương tác theo sơ đồ trên Mỗi thành phần có các thuộc tính chính:

Web browsers for Modifiability: Người dùng có thể tương tác với website thông

qua 1 trình duyệt web, thông qua HTML Web browers hỗ trợ giao diện người dùng có thể tùy chỉnh trong nhiều cách

HTTPS for Security: Khi người dùng gửi một request, thì trình duyể sẽ chuyển

các thông tin đó tới 1 website đích Sự chuyển giao này mang nhiều thông tin của người dùng như credit card, và HTTPS được dùng cho mục đích đảm bảo an toàn cho những phiên giao dịch này HTTPS sử dụng secure sockets layer như một giao thức con trên nền HTTP Ở mức này sẽ thựuc hiện mã hóa đối vớii các thông tin

Trang 11

được gửi đi Hệ thống parallel của eBay cung cấp một giao dịch an toàn thông qua tài khoản ngân hàng của user

Proxy servers for Performance: Request từ các trình duyệt riêng lẻ đầu tiên đc

đưa tới 1 proxy server, để cải thiện tốc độ của hệ thống Proxy server lưu trữ các thông tin mà user có thể nhận đc mà không cần truy cập tới web site chính

Load balancing for Performance, Scalability, and Availability: hỗ trợ

hiệu suất, khả năng mở rộng, và khả

Web Servers for Performance: Đa luồng, xử lý và respond lại với các request Application servers for Modifiability, Performance, and Scalability: Cài đặt

các logic nghiệp vụ, kết nối với client và server Chúng cho phép cơ sở dữ liệu tập trung vào lưu trữ, thu hồi và phân tích dữ liệu mà không cần quan tâm dữ liệu được sử dụng thế nào

Databases for Performance, Scalability, and Availability: Các request, điểm

đến cuối cùng là chuyển đến truy xuất vào cơ sở dữ liệu để lấy ra hoặc bổ sung, sửa đổi data

Câu 4: RMI là gì? Cách tiến hành cài đặt RMI Cài đặt ví dụ HelloWorld trong tài liệu [3] và giải thích.

Trả lời:

Định nghĩa:

RMI là viết tắt của remote method invoke - triệu gọi phương thức từ xa RMI cung cấp hỗ trợ cho các object phân tán trong java, ví dụ một object có thể gọi một method của một object khác từ xa Object đang gọi có thể dung cú pháp tương tự như đang gọi một method địa phương

Mô hình java RMI có 2 yêu cầu chung Một là mô hình RMI đơn giản và dễ sử dụng Và thứ 2, mô hình RMI phải phù hợp với ngôn ngữ java trong một cách tự nhiên

Trang 12

Cách tiến hành cài đặt RMI

Một ứng dụng RMI thường có 2 chương trình: Client và server Server tạo các method từ xa và tạo các tham chiếu để có thể truy cập Sau đó nó sẽ đợi client gọi tới các method này Clients có các tham chiếu từ xa để truy cập vào các object trên server và gọi các method từ các object này

Mô hình RMI cung cấp một ứng dụng object phân tán tới lập trình viên Nó là một

kỹ thuật mà server và client dung để giao tiếp và truyền thông tin giữa các object Một ứng dụng object phân tán sẽ có các đặc điểm:

- Xác định object từ xa: Hệ thống phải chứa các tham chiếu tới các object từ

xa Có thể làm bằng 2 cách: Dùng rmiregiter để đặt tên hoặc bởi việc chuyển hoặc trả lại các object từ xa

- Giao tiếp với các object từ xa: LTV không phải điều khiển việc giao tiếp này vì RMi sẽ làm công việc đó Việc gọi method từ xa giống như gọi cá method địa phương

- Load các file class bytecode cho các object mà chuyển như một tham số hoặc trả về một giá trị

Các bước tiến hành có thể nói như sau:

Phía serever

- Tạo file inteface

- Tạo lớp implements cài đặt các dịch vụ ở phía máy chủ: Các bước có thể tham khảo img:

- Cài đặt server (có thể chung với bước trên nếu là ví dụ đơn giản)

- Biên dịch

Phía client

- Copy lại file inteface.class nếu đặt ở thư mục khác

- Tạo ứng dụng client

Trang 13

- Biên dịch

Quá trình thực thi:

Bước 1: Tạo file stub hoặc skeleton:

rmic HelloWorldServer

Bước 2: Chia file vào các thư mục, file _stub phía lient và file _ske là phía server Bước 3: Khởi động rmiregistry

Bước 4: Khởi động server

Bước 5: Chạy ứng dụng client

Trang 14

HelloWorld Example

Cách tiến hành cài đặt một ứng dụng RMI, ở đây chỉ ra đối với ví dụ helloword Đây là một hệ thống RMI đơn giản với client và server Server chứa một method là helloword trả về một string cho client Để xây dựng hệ thống RMI thì tất cả cá file phải được build Sau đó sẽ tạo ra stub và skeleton là những kỹ thuật cơ bản giao tiếp với đối tượng từ xa được tạo ra bằng rmic compiler

RMI có các file sau:

- HelloWord.java

- HelloWordClient.java

- HelloWordServer.java

Sau khi các file đã được build, thực hiện câu lệnh sau đây để tạo ra stub và skeleton

rmic HelloWorldServer

Sau đó 2 class đc tạo ra là HelloWordServer_stub.class và HelloWordServer_Skel.class File đầu tiên sẽ đặt phía client và file thứ 2 đặt phía server

Source code:

File inteface:

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface HelloWorld extends Remote {

String helloWorld() throws RemoteException;

}

Trang 15

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.rmi.RMISecurityManager;

import java.rmi.server.UnicastRemoteObject;

/*

Classname: HelloWorldServer

Purpose: The RMI server.

*/

public class HelloWorldServer extends UnicastRemoteObject implements HelloWorld {

public HelloWorldServer() throws RemoteException {

super();

}

public String helloWorld() {

System.out.println("Invocation to helloWorld was succesful!");

return "Hello World from RMI server!";

}

public static void main(String args[]) {

try {

Trang 16

// Create an object of the HelloWorldServer class HelloWorldServer obj = new HelloWorldServer();

// Bind this object instance to the name

"HelloServer".

Naming.rebind("HelloWorld", obj);

System.out.println("HelloWorld bound in registry"); }

catch (Exception e) {

System.out.println("HelloWorldServer error: " + e.getMessage());

e.printStackTrace();

} }

}

Client:

import java.rmi.Naming;

import java.rmi.RemoteException;

/*

Classname: HelloWorldClient

Comment: The RMI client.

*/

public class HelloWorldClient {

Trang 17

static String message = "blank";

// The HelloWorld object "obj" is the identifier that is

// used to refer to the remote object that implements

// the HelloWorld interface.

static HelloWorld obj = null;

public static void main(String args[]) {

try {

obj = (HelloWorld) Naming.lookup("//" +

"kvist.cs.umu.se"

+ "/HelloWorld");

message = obj.helloWorld();

System.out.println("Message from the RMI-server was: \"" + message

+ "\"");

}

catch (Exception e) {

System.out.println("HelloWorldClient exception: " + e.getMessage());

e.printStackTrace();

}

Ngày đăng: 12/12/2015, 09:42

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w