Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [Java] Organizzazione delle classi in package

    Salve a tutti

    Sto lavorando al progetto di programmazione per il mio corso di Java all'università e sto morendo per capire il criterio con cui creare i package affinché possa suddividere e organizzare tutte le classi inserendole in cartelle. Devo realizzare una versione per la linea di comando e un'altra ad interfaccia grafica della mia applicazione perciò ho organizzato le mie cartelle come vi mostro di seguito:

    codice:
    - project
       - gui
          - app
          - classes
          - util
       - tui
          - app
             ArchiveBuilder.java
          - classes
             Admin.java
             Booking.java
             Guest.java
             Hotel.java
             Room.java
             User.java
          - util
             BadTextFileFormatException.java
             CardCheck.java
             List.java
             Queue.java
    Le parole precedute dal trattino sono le mie cartelle mentre le altre sono i nomi dei file sorgenti. Inoltre, la tabulazione (rientro) indica che il file o la cartella sono contenuti all'interno della cartella con minor rientro.
    Quello che non ho capito è: qual è il nome da dare al package e come importarlo poi nell'applicazione vera e propria (che sarà contenuta nella cartella app) affinché possa usare tutte le classi in altre cartelle? Ho provato a scrivere "package classes" e "package tui.classes" ma così non riesce ad individuare le classi. Per favore, qualcuno mi dia una mano!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Cosa vuol dire che non riesce ad individuare le classi? Tieni presente che il nome del package deve rispettare fedelmente la struttura di directory.

    Quindi, dalla struttura che hai postato tu, abbiamo due possibilità: fare in modo che la directory "project" faccia parte del package, oppure no.

    Assumendo che la directory "project" faccia parte del package, allora nella realizzazione delle classi, dovrai avere l'indicazione completa del "percorso" che porta alla classe. Ad esempio, la classe "ArchiveBuilder", dovrà avere la seguente intestazione:

    package project.tui.app;

    Gli import vanno fatti di conseguenza, laddove le classi non facciano parte dello stesso package, in modo che esse possano vedersi, quindi, se la classe "ArchiveBuilder" deve usare la classe "Admin", essa dovrà avere la seguente intestazione e importazione:

    codice:
    package project.tui.app;
    ...
    import project.tui.classes.Admin;  // Oppure importarle tutte con l'asterisco
    ...
    
    public class ArchiveBuilder ... {
       ...
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Originariamente inviato da LeleFT
    Cosa vuol dire che non riesce ad individuare le classi? Tieni presente che il nome del package deve rispettare fedelmente la struttura di directory.

    Quindi, dalla struttura che hai postato tu, abbiamo due possibilità: fare in modo che la directory "project" faccia parte del package, oppure no.

    Assumendo che la directory "project" faccia parte del package, allora nella realizzazione delle classi, dovrai avere l'indicazione completa del "percorso" che porta alla classe. Ad esempio, la classe "ArchiveBuilder", dovrà avere la seguente intestazione:

    package project.tui.app;

    Gli import vanno fatti di conseguenza, laddove le classi non facciano parte dello stesso package, in modo che esse possano vedersi, quindi, se la classe "ArchiveBuilder" deve usare la classe "Admin", essa dovrà avere la seguente intestazione e importazione:

    codice:
    package project.tui.app;
    ...
    import project.tui.classes.Admin;  // Oppure importarle tutte con l'asterisco
    ...
    
    public class ArchiveBuilder ... {
       ...
    }
    Ciao.
    Ciao, e grazie mille per la risposta! Guarda, dalla tua risposta ho capito il criterio che sta dietro ai package ma quando cerco di compilare la classe ArchiveBuilder, il compilatore mi dà un sacco di errori dovuti al fatto che non riesce ad individuare i nomi delle classi che uso in ArchiveBuilder.
    Inoltre, la directory project fa parte del package ed è situata sul mio desktop. Non riesco proprio a capire cos'è che non va (ti premetto anche che la direttiva package è la prima linea del file ma niente lo stesso)...

  4. #4
    Reup del topic! Per favore, qualcuno mi dia qualche suggerimento...

  5. #5
    Originariamente inviato da jumper21e
    la directory project fa parte del package ed è situata sul mio desktop.
    Potrebbe essere questo il problema. Il percorso al desktop contiene cartelle con spazi che potrebbero causare problemi. Ti consiglio di creare una cartella "Progetti" in C e poi usare una cartella per ogni singolo progetto:

    codice:
    -C:
      -Progetti
        -TuoProgetto1
          -project
            (e da qui le cartelle dei tuoi package)
        -TuoProgetto2
          - ....
    Al mio segnale... scatenate l'inferno!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Inoltre, se non ci fai vedere qualche esempio (anche minimale) di ciò che stai facendo e degli errori che ottieni, non è così facile aiutarti.

    Posta l'intestazione di una delle classi che non riesci a compilare, con la clausola package e gli import che effettui. Posta anche esattamente i messaggi di errore che ottieni quando cerchi di compilarla.
    E posta anche il percorso completo del sorgente .java


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Sì, hai ragione Ecco qualche dettaglio in più:

    Dunque, il percorso della directory del progetto è il seguente (uso Mac):

    codice:
    Macintosh HD/Utenti/Scrivania/Progetto
    All'interno della directory Progetto c'è un'altra directory "radice" di nome project che è il package principale. La struttura delle directory e dei file interni è quella che ho descritto nel primo post.

    Ora, nella directory util ci sono quattro file che compilano perfettamente e senza errori. La prima riga di ogni file che si trova in util è la seguente:

    codice:
    package project.tui.util;
    I problemi iniziano nella directory classes: ogni file che si trova in questa directory ha la seguente intestazione:

    codice:
    package project.tui.classes;
    Prima di tutto, la classe User compila senza problemi ma le sottoclassi Admin e Guest no, l'errore è che entrambe le due sottoclassi non trovano la classe User che, però, si trova nella stessa directory. La classe Booking non compila perché non riesce a trovare la classe Guest di cui fa uso. Ecco l'errore che esce sul terminale:

    codice:
    Booking.java:39: cannot find symbol
    symbol  : class Guest
    location: class project.tui.classes.Booking
    	public Guest getBooker() { return booker; }
    	       ^
    L'errore si ripete ogni volta in cui compare un oggetto di tipo Guest.
    Le classi Room e Hotel fanno uso della classe List<T> contenuta nella directory util di prima, perciò, dopo l'intestazione con la direttiva "package" per creare il package faccio l'import della classe List<T> in util così:

    codice:
    Room.java
    
    package project.tui.classes;
    import project.tui.util.List;
    
    public class Room {
    	...
    La stessa cosa si ripete per la classe Hotel.
    Infine, nella directory app c'è un'unica classe ArchiveBuilder in cui si fa uso sia di classi che appartengono a util sia di classi che appartengono a classes perciò, dopo la direttiva package, importo come ti ho mostrato prima le classi che mi occorrono da util e da classes. Gli errori del compilatore sono sempre quelli: ogni volta in cui creo un riferimento ad un oggetto la cui classe è contenuta in uno degli altri package, il compilatore non riesce a trovarla:

    codice:
    ArchiveBuilder.java: 176 : cannot find symbol
    symbol  : class Booking
    location: class project.tui.app.ArchiveBuilder
    	            List<Booking> reservation = new List<Booking>();
    	                                                 ^
    Dovrei aver aggiunto tutto. Spero che sia tutto chiaro, in caso contrario dimmi pure cosa non si capisce.

    Grazie in anticipo per l'aiuto!

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    in questi casi guarda sempre il primo punto in cui si presenta l'errore: è quello la causa degli altri in cascata.

    il fatto che non trovi Guest è sintomo del fatto che tu non gli stai dicendo dove Guest si trova(non in questo caso perchè sono nello stesso package) oppure che ci sia qualche errore nella compilazione di Guest che fa vedere non valido il riferimento in altri contesti

  9. #9
    Originariamente inviato da valia
    in questi casi guarda sempre il primo punto in cui si presenta l'errore: è quello la causa degli altri in cascata.

    il fatto che non trovi Guest è sintomo del fatto che tu non gli stai dicendo dove Guest si trova(non in questo caso perchè sono nello stesso package) oppure che ci sia qualche errore nella compilazione di Guest che fa vedere non valido il riferimento in altri contesti
    Nella compilazione di Guest non c'è nessun errore, se la sposto dal package insieme alla superclasse User compila senza problemi. Il problema è la struttura dei package e a questo punto non so proprio cos'altro fare. So che è una richiesta un po' insolita e odio farla ma se c'è qualcuno che si intende di package più di me e che ha cinque minuti da dedicarmi, posso inviargli tutto il progetto per aiutarmi a capire cos'è che non va. Non è una richiesta di aiuto per correggere codice che non compila, lo giuro, se mettete tutte le classi insieme non c'è nessun errore, ve l'assicuro!

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    mandami il codice

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.