Trabalho para fazer em java

11 respostas
x21

Olá pessoal, tudo bem?
Estou com um trabalho escolar para fazer em java mas não estou conseguindo entender o que o professor pede… pois eles ensinam o básico e depois pede coisas ainda não compreendo bem.
Endereços WWW são cadeias de caracteres (strings) que usualmente se referem a algum domínio virtual e possuem o seguinte formato (exemplo): http://www.alguem.com.br Eventualmente, estes endereços também podem apontar para recursos específicos dentro deste domínio: http://www.alguem.com.br/arquivo/ , onde /arquivo é o recurso específico desejado. A comunicação entre servidores e navegadores web normalmente é feita através da porta padrão 80. Sem entrar em detalhes sobre o que isso representa, os endereços http://www.alguem.com.br:80 e http://www.alguem.com.br são equivalentes. Entretanto, podem existir domínios que respondam por uma porta não padrão, por exemplo: http://www.alguem.com.br:8080 Crie uma classe que permite a manipulação de um endereço WWW, contendo:
a) Campos básicos de um endereço WWW: o domínio, a porta e o recurso apontado
b) Um construtor que receba as 3 informações em separado
c) Um construtor que receba a string (endereço WWW) completa
d) Métodos para retornar cada campo separamente (domínio, porta e recurso)
e) Um método para exibição do conteúdo de um endereço. Caso a porta seja a padrão (porta 80), este campo deve ser omitido
f) Um método que verifique a consistência de um endereço. Por exemplo: os endereços tem que começar com http, ou www (quando o construtor que recebe as
strings completas é acionado); a porta precisa ser um valor numérico; o domínio e o recurso não podem conter os caracteres ‘*’, ‘@’, ‘%’ e ‘&’
g) Um método para, dado uma string WWW, retornar verdadeiro ou false se os domínios são iguais

Se alguem puder me ajudar, me passando alguma orientação de como começar a fazer… ficarei muito feliz.
desde já agradeço a atenção de todos,
X2

11 Respostas

M
  1. Crie uma classe. Ele encapsulará os dados do endereço web. Dê um nome sugestivo a esta classe.

  2. Crie os atributos de classe. Um para armazenar o domínio, um para armazenar a porta e outro para armazenar o recurso. Pense no tipo de variável mais adequado para cada um dos atributos.

  3. Crie os dois construtores que são citados no enunciado. Neles, faça a validação dos dados recebidos.

  4. Crie os getters para os atributos.

  5. Sobrescreva o método toString, que retornará a representação textual do objeto. No caso, este método fará o que é solicitado no item (e).

  6. Crie um método para verificar se os domínios são iguais. O método deve receber outro objeto e comparar o domínio deste objeto (this) com o do outro.

Faça pelo menos o começo e, se tiver dúvidas específicas, volte a postar.

x21

Ola marco, a sua orientação foi essencial para meu entendimento pois não estava conseguindo compreender a questão.
Mas tenho uma dúvida! o que é “getters para os atributos”? pois não vi isso no meu curso ainda…
infelizmente, no meu curso, tenho essa dificuldade… pois o professor passa coisas triviais e depois lança trabalhos e provas com um grau de dificuldade muito elevado mas não vou desistir! Por isso estou buscando de todas as formas para aprender.
Desde já quero lhe agradecer, e aguardo retorno, abraços,
x2

leonardofl
public class Classe {

   // atributo é privado, fica protegido
   private void ClasseDoAtributo nomeDoAtributo;

   // getter do atributo; assim que o atributo é acesso externamente
   public ClasseDoAtributo getNomeDoAtributo() {
      return nomeDoAtributo;
   }
}
x21

obrigada, Leonardo! Agora entendi o que quer dizer…
abraços,
x2

x21

Olá pessoal,

Comecei a fazer o trabalho e percebi que estou com dificuldades em entender como vou implementar os testes solicitados nas letras E, F, e G do trabalho. Então queria uma sugestão dos colegas, se for possível.
Não sei se fiz certo mas estou me esforçando para chegar lá... vou postar abaixo o código que fiz sobre o trabalho...

import java.net.*;

public class WebConf {
   String dominio;
   int port;
   String recurso;
  
    WebConf (String pdominio, int porta, String arecurso){
	  dominio = pdominio;
	  port = porta;
	  recurso = arecurso;
	}
	
	WebConf (String URLdominio){
	dominio = URLdominio;
	port = 80;
	recurso = null;
	}
	
	public void setDominio(String dominio){
     this.dominio = dominio;
     }
   public String getDominio(){
     return this.dominio;
   }
   
	public void setPort(int port){
     this.port = port;
     }
   public int getPort(){
     return this.port;
   }
   
   public void setRecurso(String recurso){
     this.recurso = recurso;
     }
   public String getRecurso(){
     return this.recurso;
   }
  
  public static void main(String[] args) {
    
	String NomeDominio = "http://www.guj.com.br/forums/list.java";
	int NumPorta = 80;
	String NomeRecurso = "/forums/list.java";
	
    WebConf WebConf1, WebConf2;
	WebConf1 = new WebConf("http://www.guj.com.br", 80, "/forums/list.java");
	WebConf2 = new WebConf("http://www.guj.com.br/forums/list.java");
	
	WebConf1.setDominio(NomeDominio);
	WebConf1.setPort(NumPorta);
	WebConf1.setRecurso(NomeRecurso);
	
	System.out.println("***************************");
	System.out.println("        Dados da URL       ");
	System.out.println("***************************");
	System.out.println("DOMINIO          ::"+WebConf1.getDominio());
    System.out.println("PORTA            ::"+WebConf1.getPort());
    System.out.println("ARQUIVO          ::"+WebConf1.getRecurso());
  }

}

Desde já agradeço a atenção de todos,
abraços,
X2

M

c) Um construtor que receba a string (endereço WWW) completa

Acho que seu construtor está errado… Acredito que tenha que ser um construtor que receba só um parâmetro. Algo como:

WebConf a = new WebConf("http://site.com.br:7700/pasta/recurso.html");
x21

Valeu pela dica… vou refazer.
O lance é que estou aprendendo agora… acho que vou quebrar muita a cabeça…
:frowning:
x2

d34d_d3v1l

Interessante o seu trabalho,

sempre que tiver trabalhos do tipo para fazer,
me mande uma MP pro enunciado,
para eu fazer tb ?
gosto de treinar…

abraços

x21

Olá pessoal,

Depois de um tempo, consegui fazer o trabalho mas acredito que ficou ainda incompleto, pois existe um item que não ficou legal... pois não consegui imaginar como faço para fazer esse teste. estou me referindo ao item "g) Um método para, dado uma string WWW, retornar verdadeiro ou false se os domínios são iguais " o que eu fiz, executa a comparação mas acredito não ser o ideal... pois o item pede para comparar os dominios e não o recurso.
Se alguem tiver alguma ideia de como fazer isso, aceito sugestões.
Para voces testarem é só rodar o testaWWW
abaixo o código para teste.

public class EnderecoWEB {
    // solução para o item a)
   private String dominio;
   private int porta;
   private String recurso;
     // Construtores pedidos no item b)
    public EnderecoWEB(String dom, int port, String rec) {
     dominio = dom;
     porta = port;
     recurso = rec;
    }
	// solução para o item c)
   public EnderecoWEB(String endereco) {
     dominio = "";
     porta = 0;
     recurso = "";
       if (this.verificaConsistencia(endereco)) { 
          dominio = EnderecoWEB.obtemDominio(endereco);
          porta = EnderecoWEB.obtemPorta(endereco);
          recurso = EnderecoWEB.obtemRecurso(endereco);
         }
    }
    // Métodos do item d)
     public static String obtemDominio(String endereco) {
         String inicioPadrao = "http://", dominio;
         if (endereco.startsWith(inicioPadrao)) 
         endereco = endereco.substring(inicioPadrao.length(), endereco.length());
         int fimDominio = endereco.indexOf(':');
         if (fimDominio == -1) { 
         fimDominio = endereco.indexOf('/');
         if (fimDominio == -1)
         fimDominio = endereco.length();
        }
         dominio = endereco.substring(0, fimDominio);
         return dominio;
    }
    public static int obtemPorta(String endereco) {
         int fimDominio, fimPorta, porta;
         String inicioPadrao = "http://", sporta;
         if (endereco.startsWith(inicioPadrao)) 
         endereco = endereco.substring(inicioPadrao.length(),
         endereco.length());
         fimDominio = endereco.indexOf(':');
         if (fimDominio == -1)
         porta = 80;
         else {
         fimPorta = endereco.indexOf('/', fimDominio);
         if (fimPorta == -1)
         fimPorta = endereco.length();
         sporta = endereco.substring(fimDominio + 1, fimPorta);
         porta = Integer.parseInt(sporta);
        }
     return porta;
    }
     public static String obtemRecurso(String endereco) {
         int inicioRecurso;
         String inicioPadrao = "http://", recurso;
         if (endereco.startsWith(inicioPadrao)) 
         endereco = endereco.substring(inicioPadrao.length(),
         endereco.length());
         inicioRecurso = endereco.indexOf('/');
         if (inicioRecurso != -1)
         recurso = endereco.substring(inicioRecurso+1, endereco.length());
         else
         recurso = null;
     return recurso;
    }
     // metodo para solução do item e) 
	 /* neste caso a porta só será exibida caso a porta seja diferente de 80. 
	  *  Se a porta for 80 essa será omitida e a URL será apresentada na tela completa 
	  */
     public void exibe() {
      String saida = "URL solicitada: " + "http://" + dominio;
         if (porta != 80) {
         saida = saida + ":" + porta;
        }
         if (recurso != null) {
         saida = saida + "/" + recurso;
        }
     System.out.println(saida);
    }
     // Métodos de obtenção e alteração de campos solicitados no item d) 
     public String getDominio() {
     return dominio;
    }
     public void setDominio(String dominio) {
     this.dominio = dominio;
    }
     public int getPorta() {
     return porta;
    }
     public void setPorta(int porta) {
     this.porta = porta;
    }
     public String getRecurso() {
     return recurso;
    }
     public void setRecurso(String recurso) {
     this.recurso = recurso;
    }
    // Item f)
    public boolean verificaConsistencia (String endereco) {
     if ((endereco.startsWith("http") || endereco.startsWith("www")) &&
     !(endereco.contains("*")) &&
     !(endereco.contains("@")) &&
     !(endereco.contains("%")) &&
     !(endereco.contains("&")))
     return true;
    return false;
    }
					
}
aqui esta o codigo para testar os endereços WWW
import java.util.Scanner;

// Classe de teste para o código enderecoWEB
  public class testaWWW {
     public static void main(String[] args) {
	 String www = "";
     System.out.println("******************** Testando Endereco WEB ********************");
	 System.out.println(" ");
	 Scanner input = new Scanner(System.in);
     System.out.println("Digite um endereco  : ");
	 System.out.println(" ");
	 www = input.next();
	 System.out.println(" ");
	 EnderecoWEB confWeb = new EnderecoWEB(www);
	 /* chamada do metodo para soluçao do item e)
	 /* pois se a porta for padrao essa será omitida, mas caso contrario ela
	 /* aparecerá. */
	 confWeb.exibe();
     System.out.println(" ");
	 /* chamada do metodo para solução do item d) Caso não seja digitado um recurso 
	 /*  esse será apresentado com null */
	 System.out.println("******************** Dados do endereco WEB ********************");
	 System.out.println(" ");
	 System.out.println("DOMINIO:   " + confWeb.getDominio());
     System.out.println("PORTA  :   " + confWeb.getPorta());
	 System.out.println("RECURSO:   " + confWeb.getRecurso());
	 System.out.println(" ");
	 //solução para o item g)
	 String host = "";
	 Scanner entrada = new Scanner(System.in);
     System.out.println("Para comparacao digite novamente o endereco: ");	 
	 System.out.println(" ");
	 host = entrada.next();
	 System.out.println(" ");
	     String result = "Os dominios sao : ";
	     boolean verifica = www.equalsIgnoreCase(host);
	     System.out.println(result + " " + verifica);	
     System.out.println(" ");
	 System.out.println("::::::::::::::::::::::::::Fim do teste::::::::::::::::::::::::::");
	 System.out.println(" ");
	}
}

Desde já agradeço a atenção,
x2

adriano_si

Poutz cara… não lí, nem vou ler seu enunciado porque não to com tempo aqui…

Mas queria lhe parabenizar pela forma como você foi capaz de pedir ajuda e aceitar o pouco que lhe foi passado e evoluir com isso… Com certeza ainda há muito o que você aprender, percebe-se percorrendo seu código… mas PQP, parabéns mesmo… Continue assim…

Abs []

x21

Valeu Adriano, obrigada.
abraços,
x2

Criado 12 de fevereiro de 2011
Ultima resposta 3 de mar. de 2011
Respostas 11
Participantes 5