Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Semantica su un codice Java

    Ciao a tutti :

    Ho un codice java del tipo :

    codice:
    public class Client {
     
      private InetAddress address;
      private int port ;
      private int gkPort;
      private SendThread sendkey;  
    
      public Client(InetAddress address , int port , int gkPort){
         this.address = address;
         this.port = port;
         this.gkPort = gkPort;
    
         sendKey = new SendThread(port , gkPort);
         sendkey.start();
     }
    
    class SendThread extends Thread{
    
        private int port;
        private int gkPort;
    
        public SendThread(int port , int skPort){
            this.port = port;
            this.gkPort = gkPort;
            
        }
        
        public void run(){
          //Faccio qualcosa con port e gkPort;
       }
    In questo codice passo i valori port e gkPort sia nel costruttore di Client e sia nel costruttore di SendThread.

    In quest'altro codice invece passo i valori port e gkPort solamente nel costruttore di Client :

    codice:
    public class Client {
     
      private InetAddress address;
      private int port ;
      private int gkPort;
      private SendThread sendkey;  
    
      public Client(InetAddress address , int port , int gkPort){
         this.address = address;
         this.port = port;
         this.gkPort = gkPort;
    
         sendKey = new SendThread();
         sendKey.start();
     }
    
    class SendThread extends Thread{
    
        public SendThread(){
          
         super();
            
        }
     
       public void run(){
        //Faccio qualcosa con port e gkPort;
       }
    
    }
    
    }
    Ora....funzionano tutti e due , ma quale è preferibile scrivere ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    dipende, in assoluto non ti so dire quale soluzione sia migliore, non penso la classe si esaurisca con lo snippet che hai postato, bisognerebbe vedere il resto, il contesto in cui è utilizzata e soprattutto le specifiche.
    Ad occhio e croce, se gkPort è un parametro necessario solo al Thread, è bene che lo gestisca solo questo (non me lo tenga insomma come variabile di istanza). In caso contrario posso darlo final come variabile di istanza e usarlo dentro il thread tranquillamente
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    port e gkPort non cambiano mai.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    no, intendo se la usi in altri punti (leggendone il valore).
    Again, se altrove ti chiedi chi sia "port" (anche solo con un get) è bene che resti come variabile di istanza (final e non lo cambi). Se altrove non ti chiedi chi è port, è più logico diventi variabile di istanza della inner class. L'unica differenziazione, allo stato attuale, è fatta per questo motivo
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    No li uso solo nel thread

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    e allora IO credo:

    1. Thread non una classe inner, ma una classe a se stante, a cui passo i parametri che mi interessano
    2. la tua classe Client prende come parametri il thread istanziato e eventualmente inetAddress se lo usa altrove (altrimenti questo lo dai direttamente al thread)

    se vuoi proprio saperla tutta tutta, non metterei manco start nel costruttore (parlando di semantica)...a quel punto a che serve il client? Beh in realtà il client istanzia il thread...quindi torni a parametri ora come sono nel costruttore di Client, questo istanzia il thread non tenendosi al suo interno port, inetAddress ecc e infine prevedi un metodo start che avvia il thread dall'esterno.
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339


    SendThread è una classe inner.

    port e gkPort vengono utilizzati solo da SendThread.

    Da quanto mi hai detto , presumo sia conveniente passare i parametri solo nella classe Client

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    no. Se alla classe servono quei parametri e li usa solo quella, fai conto che forse è meglio che la classe non sia inner. Semanticamente far conoscere a client roba che non gli interessa, non è il top. Li passi alla inner (che diventa una classe normale) e dovresti usare quella. Se poi mi dici "il client fa sti mestieri", bene, allora al client dai la classe thread, non i parametri.
    Se hai altri limiti il discorso cambia, in queste condizioni semanticamente sono più corrette due classi separate
    RTFM Read That F*** Manual!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    OK

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.