9
SISTEMAS DE INFORMAÇÃO DEIVISON SILVEIRA JOSE RILDO ROCHA LESSA ERIVAN DE SENA RAMOS SISTEMAS ORIENTADOS A OBJETOS II TRABALHO AV II

Trabalho Design pattern

Embed Size (px)

DESCRIPTION

Trabalho Design pattern Factory Method Strategy DocumentFactory Singleton

Citation preview

Page 1: Trabalho Design pattern

SISTEMAS DE INFORMAÇÃODEIVISON SILVEIRA

JOSE RILDO ROCHA LESSAERIVAN DE SENA RAMOS

SISTEMAS ORIENTADOS A OBJETOS II

TRABALHO AV II

FORTALEZA2007

Page 2: Trabalho Design pattern

FACULDADE INTEGRADA DO CEARÁSistemas Orientados a Objetos II - 2º TrabalhoProfessor: Jorge Bérgson

Alunos : Deivison Silveira, Rildo Lessa, Erivan Sena

1) [0,5 pontos] Implemente o padrão Factory Method para criar objetos da aplicação abaixo:

A implementação deve conter todas as classes do diagrama acima. O método obterDocumento (é o método factory) recebe como parâmetro o tipo de documento a ser retornado (docTipo), cria um objeto de uma das subclasses de documento e retorna o mesmo como um objeto do tipo Documento. Caso o tipo especificado não case com nenhum das subclasses, o objeto a ser retornado deve ser um objeto (próprio) da classe Documento.

A classe TesteFactory deve conter o método main e deve criar cada um dos 3 objetos.

public class Documento {private String nome;public Documento(){

this.nome = "Objeto Documento";}public String getTipoObjeto(){

return this.nome;}public void setNome(String nome){

this.nome = nome;}

}

public class DocumentoFactory {public Documento obterDocumento(int docTipo){

Documento objDocumento;switch (docTipo){case 1:

//Instancia o Objeto RelatórioobjDocumento = new Relatorio();break;

case 2://Instancia o Objeto ResumoobjDocumento = new Resumo();

1

Page 3: Trabalho Design pattern

break;case 3:

//Instancia o Objeto EditalobjDocumento = new Edital();break;

default://Instancia o Objeto DocumentoobjDocumento = new Documento();break;

}return objDocumento;

}}

public class Edital extends Documento{public Edital(){

super.setNome("Objeto Edital");}public String getTipoObjeto(){

return super.getTipoObjeto();}

}

public class Relatorio extends Documento{public Relatorio(){

super.setNome("Objeto Relatorio");}public String getTipoObjeto(){

return super.getTipoObjeto();}

}

public class Resumo extends Documento {public Resumo(){

super.setNome("Objeto Resumo");}public String getTipoObjeto(){

return super.getTipoObjeto();}

}

public class TesteFactoryDoc {

public static void main(String[] args) {DocumentoFactory objDocumentoFactory = new DocumentoFactory();

Documento DocumentoRelatorio = objDocumentoFactory.obterDocumento(1);System.out.println(DocumentoRelatorio.getTipoObjeto());Documento DocumentoResumo = objDocumentoFactory.obterDocumento(2);System.out.println(DocumentoResumo.getTipoObjeto());Documento DocumentoEdital = objDocumentoFactory.obterDocumento(3);System.out.println(DocumentoEdital.getTipoObjeto());Documento DocumentoDefault = objDocumentoFactory.obterDocumento(4);System.out.println(DocumentoDefault.getTipoObjeto());

}

2

Page 4: Trabalho Design pattern

}

2) [0,7 pontos] Implemente a classe DocumentoFactory como um Singleton.

public class Documento {private String nome;public Documento(){

this.nome = "Objeto Documento";}public String getTipoObjeto(){

return this.nome;}public void setNome(String nome){

this.nome = nome;}

}

import com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl.SingletonIterator;public class DocumentoFactory {

private static DocumentoFactory instancia = null;public static DocumentoFactory obterInstancia(){

if (instancia == null){instancia = new DocumentoFactory();

}return instancia;

}private DocumentoFactory(){}public Documento obterDocumento(int docTipo){

Documento objDocumento;switch (docTipo){case 1:

//Instancia o Objeto RelatórioobjDocumento = new Relatorio();break;

case 2://Instancia o Objeto ResumoobjDocumento = new Resumo();break;

case 3://Instancia o Objeto EditalobjDocumento = new Edital();break;

default://Instancia o Objeto DocumentoobjDocumento = new Documento();break;

}return objDocumento;

}}

3

Page 5: Trabalho Design pattern

public class Edital extends Documento{public Edital(){

super.setNome("Objeto Edital");}public String getTipoObjeto(){

return super.getTipoObjeto();}

}

public class Relatorio extends Documento{public Relatorio(){

super.setNome("Objeto Relatorio");}public String getTipoObjeto(){

return super.getTipoObjeto();}

}

public class Resumo extends Documento {public Resumo(){

super.setNome("Objeto Resumo");}public String getTipoObjeto(){

return super.getTipoObjeto();}

}

public class TesteFactoryDoc {

public static void main(String[] args) {DocumentoFactory objDocumentoFactory = DocumentoFactory.obterInstancia();

Documento DocumentoRelatorio = objDocumentoFactory.obterDocumento(1);System.out.println(DocumentoRelatorio.getTipoObjeto());Documento DocumentoResumo = objDocumentoFactory.obterDocumento(2);System.out.println(DocumentoResumo.getTipoObjeto());Documento DocumentoEdital = objDocumentoFactory.obterDocumento(3);System.out.println(DocumentoEdital.getTipoObjeto());Documento DocumentoDefault = objDocumentoFactory.obterDocumento(4);System.out.println(DocumentoDefault.getTipoObjeto());

}

}

4

Page 6: Trabalho Design pattern

3) [0,8 pontos] Implemente o padrão Strategy para que uma classe Cliente possa ordenar um vetor de acordo com os seguintes critérios:

Método de Ordenação Quando Aplicar

Seleção N < 100Inserção 100 =< N < 1.000QuickSort N >= 1.000

public class EstrategiaOrdenacao {private Ordenacao pobjOrdenador = null;public void ContextoOrdenacao(int[] alstValores){

if (alstValores.length < 100){pobjOrdenador = new OrdenacaoSelectionSort();

} else if (alstValores.length >= 100 && alstValores.length < 1000){

pobjOrdenador = new OrdenacaoInsertionSort();}else if (alstValores.length >= 1000){

pobjOrdenador = new OrdenacaoQuickSort();}

}public int[] Ordenar(int[] alstValores){

return pobjOrdenador.Ordenar(alstValores);}

}

public interface Ordenacao {int[] Ordenar(int[] alstValores);

}

public interface Ordenador {void Ordenar(int[] alstValores);

}

public class OrdenacaoInsertionSort implements Ordenacao {public int[] Ordenar (int[] alstValores) { int aux; for (int i=0; i < alstValores.length; i++){ for (int j=1; j < (alstValores.length-i); j++){ if (alstValores[j-1]>alstValores[j]){ aux = alstValores[j]; alstValores[j] = alstValores[j-1]; alstValores[j-1]=aux; } } } return alstValores;}

}

5

Page 7: Trabalho Design pattern

import java.util.Random;public class OrdenacaoQuickSort implements Ordenacao { private static long comparisons = 0; private static long exchanges = 0; public static int[] quicksort(int[] a) { shuffle(a); // to guard against worst-case quicksort(a, 0, a.length - 1); return a; } public static void quicksort(int[] a, int left, int right) { if (right <= left) return; int i = partition(a, left, right); quicksort(a, left, i-1); quicksort(a, i+1, right); }

private static int partition(int[] a, int left, int right) { int i = left - 1; int j = right; while (true) { while (less(a[++i], a[right])) // find item on left to swap ; // a[right] acts as sentinel while (less(a[right], a[--j])) // find item on right to swap if (j == left) break; // don't go out-of-bounds if (i >= j) break; // check if pointers cross exch(a, i, j); // swap two elements into place } exch(a, i, right); // swap with partition element return i; }

// is x < y ? private static boolean less(double x, double y) { comparisons++; return (x < y); }

// exchange a[i] and a[j] private static void exch(int[] a, int i, int j) { exchanges++; int swap = a[i]; a[i] = a[j]; a[j] = swap; }

// shuffle the array a private static void shuffle(int[] a) { int N = a.length; for (int i = 0; i < N; i++) { int r = i + (int) (Math.random() * (N-i)); // between i and N-1 exch(a, i, r); } }

public int[] Ordenar (int[] alstValores) {return quicksort(alstValores);

}}

6

Page 8: Trabalho Design pattern

public class OrdenacaoSelectionSort implements Ordenacao{ public int[] Ordenar(int alstValores[]) {

for (int i = 0; i < alstValores.length - 1; i++ ){

int minIndex = i; // index of min value int min = alstValores[minIndex]; // min value // Find the minimum value in the unsorted part of the array. for ( int j = i + 1; j < alstValores.length; j++ ) { // If this element is less than min it becomes the min. if ( alstValores[j] < min ) { minIndex = j; min = alstValores[minIndex]; } } int T = alstValores[minIndex]; alstValores[minIndex] = alstValores[i]; alstValores[i] = T;

} return alstValores;

}}

public class TesteStrategy {public static int[] vetorRandomico(int aintTamanho){

int llstValores[] = new int[aintTamanho];for(int i = 0; i < aintTamanho; i++){

llstValores[i] = (int)(Math.random() * 10);}return llstValores;

}public static void imprimeValores(int[] alstValores){

System.out.println("-------------------------------------");for(int i = 0; i < alstValores.length; i++){

System.out.print(alstValores[i] + "-");}System.out.println();System.out.println("-------------------------------------");

}public static void main(String[] args) {

EstrategiaOrdenacao lobjEstrategiaOrdenacao = new EstrategiaOrdenacao();int llstValores[] = vetorRandomico(50);System.out.println("Vetor Randômico:");imprimeValores(llstValores);lobjEstrategiaOrdenacao.ContextoOrdenacao(llstValores);lobjEstrategiaOrdenacao.Ordenar(llstValores);System.out.println("Vetor Ordenado:");imprimeValores(llstValores);

}}

7