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

từ biểu đồ thiết kế và bài toán giảng viên đưa ra hãy cài đặt đầy đủ nhất có thể cho bài toán thiết kế này bằng ngôn ngữ lập trình java

10 0 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 897,12 KB

Nội dung

Chúng tôi cũng muốn cảm ơn những người bạn đã chia sẻ kiến thức, ý kiếnvà góp ý quý báu, giúp chúng tôi vượt qua những thách thức trong quá trìnhnghiên cứu và phát triển phần mềm.Không t

Trang 1

TRƯỜNG ĐẠI HỌC XÂY DỰNG HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

MÔN CÔNG NGHỆ PHẦN MỀM

TIỂU LUẬN 4

1 Tìm hiểu mẫu Observer design pattern Vẽ lại biểu đồ lớp cho thiết kế giảng viên đưa ra được vẽ bằng tay

2 Từ biểu đồ thiết kế và bài toán giảng viên đưa ra, hãy cài đặt đầy đủ nhất

có thể cho bài toán thiết kế này bằng ngôn ngữ lập trình Java

Giáo viên giảng dạy: Lê Thị Hoàng Anh

Nhóm: 7 – Lớp 67IT4

Thành viên nhóm:

0093667 Nguyễn Quang Nghĩa

Cài đặt Java

0003167 Hồ Sỹ Chinh

0073367 Đinh Bùi Nam

0162167 Cao Việt Linh Vẽ lại biểu đồ lớp

4010067 Trịnh Ngọc Quang Tìm hiểu mẫu Observer

design pattern

Hà Nội, 24.02.2024

Trang 2

Mục Lục:

Lời cảm ơn 3

I Mẫu Observer design pattern 4

1 Định nghĩa 4

2 Mục tiêu 4

3 Ưu & nhược điểm 4

 Ưu điểm: 4

 Nhược điểm: 4

4 Tính áp dụng 4

5 Cấu trúc 5

 Subject : 5

 Observer : 5

 ConcreteSubject : 5

 ConcreteObserver : 6

II Vẽ biểu đồ lớp cho thiết kế giảng viên đưa ra 7

III Cài đặt 8

Trang 3

Lời cảm ơn

Chúng tôi xin gửi lời cảm ơn chân thành đến những người đã đóng góp vào thành công của Bài tập lớn Công nghệ Phần mềm này

Đầu tiên và quan trọng nhất, chúng tôi muốn bày tỏ lòng biết ơn đặc biệt đến cô Lê Thị Hoàng Anh Sự hướng dẫn, kiến thức và tận tâm của cô đã đóng vai trò quan trọng trong việc hình thành và phát triển kiến thức của chúng tôi về Công nghệ Phần mềm

Chúng tôi cũng muốn cảm ơn những người bạn đã chia sẻ kiến thức, ý kiến

và góp ý quý báu, giúp chúng tôi vượt qua những thách thức trong quá trình nghiên cứu và phát triển phần mềm

Không thể không kể đến sự hỗ trợ từ gia đình và bạn bè, những người đã hiểu và ủng hộ chúng tôi suốt quá trình nghiên cứu Những lời động viên và sự

hỗ trợ tinh thần từ họ đã đóng góp quan trọng vào sự thành công của chúng tôi Cuối cùng, chúng tôi xin bày tỏ lòng biết ơn sâu sắc đến tất cả những người

đã đồng hành và đóng góp vào hành trình nghiên cứu của chúng tôi

Trang 4

I Mẫu Observer design pattern

1 Định nghĩa

Observer design pattern là một mẫu thiết kế phần mềm mà một đối tượng, gọi là subject, duy trì một danh sách các thành phần phụ thuộc nó, gọi

là observer, và thông báo tới chúng một cách tự động về bất cứ thay đổi nào, thường thì bằng cách gọi 1 hàm của chúng

2 Mục tiêu

Định nghĩa mối phụ thuộc một - nhiều giữa các đối tượng để khi mà một đối tượng có sự thay đổi trạng thái, tất các thành phần phụ thuộc của nó sẽ được thông báo và cập nhật một cách tự động

Một đối tượng có thể thông báo đến một số lượng không giới hạn các đối tượng khác

3 Ưu & nhược điểm

 Ưu điểm:

 Đảm bảo nguyên tắc Open/Closed Principle (OCP): Cho phép thay đổi Subject và Observer một cách độc lập Chúng ta có thể tái sử dụng các Subject mà không cần tái sử dụng các Observer và ngược lại Nó cho phép thêm Observer mà không sửa đổi Subject hoặc Observer khác

 Thiết lập mối quan hệ giữa các objects trong thời gian chạy

 Sự thay đổi trạng thái ở 1 đối tượng có thể được thông báo đến các đối tượng khác mà không phải giữ chúng liên kết quá chặt chẽ

 Không giới hạn số lượng Observer

 Nhược điểm:

 Unexpected update: Bởi vì các Observer không biết về sự hiện diện của nhau, nó có thể gây tốn nhiều chi phí của việc thay đổi Subject

 Subscriber được thông báo theo thứ tự ngẫu nhiên

4 Tính áp dụng

Sử dụng Observer Patern khi chúng ta muốn:

 Sự thay đổi trạng thái ở 1 đối tượng cần được thông báo đến các đối tượng khác mà không phải giữ chúng liên kết quá chặt chẽ

Trang 5

 Cần mở rộng dự án với ít sự thay đổi nhất.

 Khi abstraction có 2 khía cạnh, cái này phụ thuộc cái kia Đóng gói các khía cạnh này trong các đối tượng khác nhau cho phép bạn thay đổi

và tái sử dụng chúng độc lập

 Khi thay đổi một đối tượng yêu cầu việc thay đổi đến các đối tượng khác, và bạn không biết số lượng đối tượng cần thay đổi

 Khi một đối tượng thông báo các đối tượng khác mà không cần biết đối tượng đó là gì hay nói cách khác là tránh tightly coupled

5 Cấu trúc

 Subject :

o Là đối tượng chứa thông tin hoặc trạng thái cần được theo dõi

o Cung cấp các phương thức để thêm, xóa hoặc thông báo cho các observers khi trạng thái của nó thay đổi

 Observer :

o Là các đối tượng quan tâm đến trạng thái của subject và cần nhận thông báo khi trạng thái của subject thay đổi

o Định nghĩa một phương thức cập nhật để subject có thể gọi khi có

sự thay đổi

 ConcreteSubject :

o Là một lớp cụ thể của Subject, triển khai các phương thức của Subject và giữ danh sách các observers

o Khi trạng thái của nó thay đổi, nó sẽ thông báo cho tất cả các observers của nó

Trang 6

 ConcreteObserver :

o Có thể duy trì một liên kết đến đối tượng ConcreteSubject

o Lưu trữ trạng thái của subject

o Thực thi việc cập nhật để giữ cho trạng thái đồng nhất với subject gửi thông báo đến

 Ta có thể hình dung sự tương tác giữa subject và các observer như sau: Khi subject có sự thay đổi trạng thái, nó sẽ duyệt qua danh sách các observer của nó và gọi phương thức cập nhật trạng thái ở từng observer, có thể truyền chính nó vào phương thức để các observer có thể lấy ra trạng thái của nó

và xử lý

Trang 7

II Vẽ biểu đồ lớp cho thiết kế giảng viên đưa ra

Trang 8

III Cài đặt

/*

* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license

* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java

to edit this template

*/

package baitaplon ;

/**

*

* @author Admin

*/

import java util ArrayList ;

import java util List ;

// Interface ISubject

interface ISubject {

void attach( Observer observer);

void detach( Observer observer);

void notifyAllObserver();

}

// Interface IObserver

interface Observer {

void update( DBvariableE varDBe);

void ConnectDB( DBvariableE varDBe);

}

// Class DBvariableE

class DBvariableE {

String varE ;

public DBvariableE( String varE ) {

this.varE = varE ;

}

}

// Class ConnectDB

class ConnectDB implements ISubject {

private final List Observer < > observers = new ArrayList<>(); private DBvariableE varDBe ;

@ Override

public void attach( Observer observer ) {

observers add(observer );

Trang 9

}

@ Override

public void detach( Observer observer ) {

observers remove ( observer );

}

@ Override

public void notifyAllObserver () {

for ( Observer observer : observers ) {

observer.update(varDBe);

}

}

public boolean checkChangeVariableEnvironment( String oldVarE ) { return true ; // For example purposes

}

public void connectToDB () {

String oldVarE = "oldValue" ;

( if checkChangeVariableEnvironment(oldVarE )) {

this.notifyAllObserver();

}

}

}

// Class MySQLDBcon

class MySQLDBcon implements Observer {

@ Override

public void ConnectDB( DBvariableE varDBe ) {

System out println ( "Connecting to MySQL database " ); }

@ Override

public void update( DBvariableE varDBe ) {

System out println ( "Updating MySQL database " ); }

}

// Class SQLServerDBcon

class SQLServerDBcon implements Observer {

@ Override

public void ConnectDB( DBvariableE varDBe ) {

System out println ( "Connecting to SQL Server database " ); }

Trang 10

@ Override

public void update( DBvariableE varDBe ) {

System out println ( "Updating SQL Server database " ); }

}

// Class MongoDBcon

class MongoDBcon implements Observer {

@ Override

public void ConnectDB( DBvariableE varDBe ) {

System out println ( "Connecting to MongoDB database " ); }

@ Override

public void update( DBvariableE varDBe ) {

System out println ( "Updating MongoDB database " ); }

}

public class Main {

public static void main( String [] args ) {

// Tạo một đố? i tượng ConnectDB

ConnectDB connectDB = new ConnectDB();

// Tạo các đố? i tượng Observer

MySQLDBcon mySQLDBcon = new MySQLDBcon(); SQLServerDBcon sqlServerDBcon = new SQLServerDBcon(); MongoDBcon mongoDBcon = new MongoDBcon(); // Đăng ký các Observer với ConnectDB

connectDB attach ( mySQLDBcon );

connectDB attach ( sqlServerDBcon );

connectDB attach ( mongoDBcon );

// Khi có sự thay đốK i trong mối trường biế? n, kế? t nố? i và cập

String oldVarE = "oldValue" ;

( if connectDB checkChangeVariableEnvironment ( oldVarE )) { connectDB connectToDB ();

} else {

System out println ( "No change in variable environment

Database connection not required." ); }

}

}

Ngày đăng: 20/05/2024, 15:54

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

TÀI LIỆU LIÊN QUAN

w