Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JAVA] Programma che modifica url di pagine web

    Salve a tutti. Vi espongo il problema che mi si è presentato. Sto al momento preparando l'esame di programmazione in java e, provando a risolvere un vecchio compito d'esame non capisco come devo affrontare una cosa . Posto il testo dell'esame
    codice:
    public class TestProvider {
    
    
    
            public static void main(String[] args) {
    
           
    
                    //C--
    
                    Provider p = Provider.getProvider(); // when asked for a page, returns its url without protocol
    
                    WebPage page = p.getPage("http://www.microsoft.com");
    
                    WebPage page2 = p.getPage("http://www.google.com");
    
                    assert "www.microsoft.com".equals(page.content());
    
                    assert "www.google.com".equals(page2.content());
    
                    assert page2.size() == 14;
    
                   
    
                   
    
                    // C
    
                    WebPage page3 = p.getPage("http://www.google.com");
    
                    assert page3.equals(page2);
    
                    assert !page3.equals(p.getPage("https://www.google.com"));
    
                    assert page3.content().equals(p.getPage("https://www.google.com").content());
    
                   
    
                    // B (hint: you can use String.split() )
    
                    Provider p2 = Provider.getProvider(Provider.REVERSE); // returns its reversed url
    
                    assert p2.getPage("http://www.microsoft.com").content().equals("com.microsoft.www");
    
                    assert page3.equals(p2.getPage("http://www.google.com"));
    
           
    
                    // B++/A--
    
                    p2.enableFirewall(); // by default everything works the same
    
                    p2.addFirewallRule("http://www."); // if something starts with this, it is not accepted.
    
                    p2.addFirewallRule("https://www.");
    
                    p2.addFirewallRule("www.");
    
                    p2.removeFirewallRule("https://www.");
    
                    List<String> rules = p2.firewallRules();
    
                    assert rules.get(0).equals("http://www.");
    
                    assert rules.size() == 2;
    
                    assert p2.firewallEnabled();
    
                    assert !p2.isAllowed("http://www.microsoft.com"); // rule 0 does not allow this page
    
                    assert p2.isAllowed("https://www.microsoft.com");
    
                    p2.disableFirewall();
    
                    assert !p2.firewallEnabled();
    
                    assert p2.isAllowed("http://www.microsoft.com"); // firewall is disabled
    
                    assert p2.isAllowed("https://www.microsoft.com");
    
                   
    
                    // A++
    
                    try {
    
                            p2.enableFirewall(); // keeps previous rules
    
                            p2.getPage("http://www.microsoft.com"); // rule 0 does not allow this page
    
                            assert false; // exception should be thrown instead
    
                    } catch (NotAcceptedByFirewall e) {
    
                            assert e.violatedRule() == 0;
    
                    }
    
           
    
            }
    
    
    
    }
    Premetto che non chiedo la soluzione dell'esame, ma qualche consiglio su come partire. Il compito consiste nel rendere compilabile e funzionante la classe TestProvider implementando ciò che manca. Ora, mi viene un primo dubbio. Devo implementare la classe WebPage, ma non riesco a capire se la devo implementare come classe interna a Provider o separatamente, e dunque già qua mi blocco e non riesco ad andare avanti perchè non sto trovando lo spunto giusto. Un'altra cosa che non sto capendo è cosa fa in realtà la seguente riga:

    Provider p = Provider.getProvider();

    Spero di riuscire a cogliere al meglio i vostri preziosi aiuti, Grazie a tutti in anticipo e scusatemi se ho fatto domande banali ...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Programma che modifica url di pagine web

    Originariamente inviato da robynho86
    Devo implementare la classe WebPage, ma non riesco a capire se la devo implementare come classe interna a Provider o separatamente
    Se fosse interna a Provider, si dovrebbe:
    a) dichiarare le variabili come Provider.WebPage
    oppure
    b) (solo se Provider fosse in un package) importare xyz.Provider.WebPage per poter usare WebPage non qualificato.

    Visto che dal sorgente si evince che non è a) e invece b) non è, presumo, ciò che l'esaminatore vorrebbe forse vedere ..... allora direi: classe esterna.

    P.S. WebPage immagino che sia un semplice "bean" che contiene dati.

    Originariamente inviato da robynho86
    Un'altra cosa che non sto capendo è cosa fa in realtà la seguente riga:

    Provider p = Provider.getProvider();
    Guardando il sorgente, si nota che Provider ha un uso che rispecchia molto da vicino quello che fa ad esempio java.util.Calendar (classe astratta), che ha dei metodi statici getInstance() (in varie versioni) che "tirano" fuori implementazioni specifiche (sotto-classi) che fanno il lavoro concreto.

    Ecco, potresti fare esattamente una cosa del genere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie mille per la risposta, sono riuscito a completare i passi C-- e C. adesso mi trovo davanti ad un altro problema.

    Sto provando ad implementare il punto B e mi trovo davanti a questa riga di codice:

    url
    codice:
    Provider p2 = Provider.getProvider(Provider.REVERSE); // returns its reversed url
    non capisco come devo implementare il nuovo costruttore per Provider.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da robynho86
    Sto provando ad implementare il punto B e mi trovo davanti a questa riga di codice:

    url
    codice:
    Provider p2 = Provider.getProvider(Provider.REVERSE); // returns its reversed url
    Avendo solo un pezzo di codice che devi "far compilare", senza sapere molto altro (e probabilmente senza aver avuto requisiti o restrizioni particolari) .... devi anche riuscire sia a interpretare ma anche ad "inventare" un po'.

    Un NomeClasse.QUALCOSA cosa potrebbe essere? C'è più di una possibilità e se non hai avuto restrizioni puoi anche scegliere.
    Questo overload di getProvider, quando riceve quel valore dovrebbe fornire un'altra implementazione, che ovviamente farà quello che il significato di REVERSE indica ....


    Originariamente inviato da robynho86
    non capisco come devo implementare il nuovo costruttore per Provider.
    Io comunque nel mio messaggio precedente non avevo parlato di costruttori. Avevo parlato di sotto-classi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Beh dovrebbe essere una costante giusto? Comunque, per quanto riguarda i primi 2 punti non so se ho risolto seguendo a pieno il tuo consiglio... i punti C-- e C comunque funzionano e abilitando gli asserts non ricevo errori dunque ritengo di aver risolto i primi 2 problemi..
    Questa è la classe Provider
    codice:
    public class Provider {
    
    	public static Provider getProvider() {
    		return new Provider();
    	}
    
    	
    	public WebPage getPage(String string) {
    		return new WebPage(string);
    	}
    
    }
    e questa è la classe WebPage

    codice:
    public class WebPage {
    	
    	private int index;	
    	private String content = "";
    	private String url;
    	
    	public WebPage(String url) {
    		this.url = url;
    	}
    
    	public String content() {
    		this.index=this.url.indexOf("/");
    		this.content=this.url.substring(index+2);
    		return this.content;
    	}
    
    	public boolean equals(WebPage other){
    		if (this.url==other.url) return true; 
    			else return false;
    	}
    
    	public int size() {
    		return this.content().length();
    	}
    
    }
    Per quanto riguarda invece il punto C non sto riuscendo ad afferrare il tuo suggerimento; ... Probabilmente è una scemenza lo so... abbi pazienza...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da robynho86
    Beh dovrebbe essere una costante giusto?
    Esatto .... poi che sia un int, un String o altro, non cambia nulla dal punto di vista "funzionale". Se non hai indicazioni precise, puoi pure scegliere tu.

    Originariamente inviato da robynho86
    Questa è la classe Provider

    Per quanto riguarda invece il punto C non sto riuscendo ad afferrare il tuo suggerimento
    Tecnicamente, nessuno ti vieta di istanziare e restituire proprio un Provider. Solo che .... se fai così: a) devi avere un costruttore che riceve il "modo" di utilizzo, b) devi avere un campo che lo tiene, c) nel getPage devi fare una catena di if o switch (a seconda di come rappresenti il "modo") per fare i vari casi.

    Non è che non funziona ... è poco object-oriented.

    Ti è chiaro il concetto di utilizzo dei vari es.:
    Calendar.getInstance()
    DateFormat.getInstance()
    TimeZone.getTimeZone(String id)

    (e altri)?

    Originariamente inviato da robynho86
    e questa è la classe WebPage
    Occhio, le stringhe non si confrontano con ==.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Tecnicamente, nessuno ti vieta di istanziare e restituire proprio un Provider. Solo che .... se fai così: a) devi avere un costruttore che riceve il "modo" di utilizzo, b) devi avere un campo che lo tiene, c) nel getPage devi fare una catena di if o switch (a seconda di come rappresenti il "modo") per fare i vari casi.

    Non è che non funziona ... è poco object-oriented.
    in effetti con questa frase mi è venuto in mente un probabile modo per implementare anche quel punto la... ma sarebbe anch'esso "poco object-oriented"


    Ti è chiaro il concetto di utilizzo dei vari es.:
    Calendar.getInstance()
    DateFormat.getInstance()
    TimeZone.getTimeZone(String id)

    (e altri)?
    no, in realtà non so come funzionino...

    Occhio, le stringhe non si confrontano con ==.
    è vero... devo confrontarle con equals();

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da robynho86
    no, in realtà non so come funzionino...
    Calendar, DateFormat, TimeZone sono classi astratte e i loro metodi statici getInstance, getTimeZone, ecc.. alcuni in varie varianti ritornano istanze di sotto-classi scelte in base ai parametri e/o configurazioni globali (es. il Locale di default).
    Come lo fanno tecnicamente ... non è importante (non lo so di preciso nemmeno io, dovrei sbirciare nei sorgenti del framework, a volte lo faccio ).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.