Condividi:        

Java: Dividere un progetto in più file

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

Java: Dividere un progetto in più file

Postdi Mr.SpOOn » 07/06/05 11:43

Salve.
In java, ogni classe deve stare su un file diverso con lo stesso nome della classe.
Se per esempio una classe deve usare o modificare variabili e/o metodi di un'altra classe, cosa bisogna fare?
Basta mettere tutto nello stesso package o fare l'import di tutti i file?
O serve altro?
Mr.SpOOn
Utente Junior
 
Post: 21
Iscritto il: 07/05/05 09:30
Località: Messina

Sponsor
 

Postdi pjfry » 07/06/05 12:47

mentre sviluppi devi dichiarare l'import delle classi che vuoi usare
quando lanci il programma compilato dipende, puoi fare un jar con dentro tutto o ricreare con le directory la stessa struttura dei package
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi Mr.SpOOn » 07/06/05 12:51

Ma facendo "import nomepackage.*;" dovrei risolvere il problema, no?
Mr.SpOOn
Utente Junior
 
Post: 21
Iscritto il: 07/05/05 09:30
Località: Messina

Postdi pjfry » 07/06/05 12:57

in fase di sviluppo si, però volevo chiarire che non puoi prendere la classe compliata e sperare che funzioni 'da sola'... forse era una precisazione inutile :-?
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Re: Java: Dividere un progetto in più file

Postdi *~Hayabusa~* » 07/06/05 13:44

Mr.SpOOn ha scritto:Se per esempio una classe deve usare o modificare variabili e/o metodi di un'altra classe, cosa bisogna fare?

Aspè, non sono espertissimo e quindi correggetemi se sparo na cretinata ma:
Prima di tutto devi fare l'import.

Per usare il metodo contenuto nella classe dopo aver creato l'oggetto si deve fare
nome_obj.nome_metodo(parametri);

Per modificare il valore delle variabili hai bisogno che nella classe siano presenti dei metodi "accessori" che praticamente ricevono come parametro/i i nuovi valori e poi fanno na cosa tipo this.nome_var = nuovo_valore;

Per la modifica dei metodi..mai fatto..

HTH :undecided:
..ed e' cibo per la mente,
acqua dalla sorgente,
luce fosforescente
laddove il buio e' costante ..
*~Hayabusa~*
Hardware Admin
 
Post: 1386
Iscritto il: 12/05/02 22:44
Località: Davanti al monitor..

Postdi Mr.SpOOn » 07/06/05 15:42

Quindi, riporto direttamente un programma che ho copiato dal MokaBook.
Il codice lì era tutto unito e io l'ho diviso in due classi:

file RectangleExample.java
Codice: Seleziona tutto
package rettangolo;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class RectangleExample extends JComponent {
    private Point corner1 = new Point(0,0);
    private Point corner2 = new Point(0,0);
   
    public RectangleExample() {
    MouseInputAdapter m = new RectangleExampleMouseListener();
    addMouseListener(m);
    addMouseMotionListener(m);
    }
   
    public void paintComponent(Graphics g) {
int x = Math.min(corner1.x,corner2.x);
int y = Math.min(corner1.y,corner2.y);
int width = Math.abs(corner1.x - corner2.x);
int height = Math.abs(corner1.y - corner2.y);
g.fillRect(x, y, width, height);
}
    class RectangleExampleMouseListener extends MouseInputAdapter {
public void mousePressed(MouseEvent e) {
corner1 = e.getPoint();
corner2 = corner1;
repaint();
}
public void mouseDragged(MouseEvent e) {
corner2 = e.getPoint();
repaint();
}
}
}



file Main.java
Codice: Seleziona tutto
package rettangolo;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class Main{
    public static void main(String[] args) {
     
        JFrame f = new JFrame();
        f.setSize(500, 300);
        RectangleExample r = new RectangleExample();
        [u]r.setForeground(Color.BLUE);[/u]
        [u]f.getContentPane().add(r);[/u]
        f.setVisible(true);
    }
}


Effettivamente ora il programma viene eseguito e funziona, però il NetBeans mi sottolinea in rosso quelle due righe che ho sottolineato qui, come se fossero errori praticamente. Se passo il mouse sopra mi dice: Cannot find symbol
Symbol: method setForeground(java.awt.Color)
location: class rettangolo.RectangleExample

e un altro simile nell'altra riga.
Cosa può essere?
Mr.SpOOn
Utente Junior
 
Post: 21
Iscritto il: 07/05/05 09:30
Località: Messina

Postdi pjfry » 07/06/05 15:52

certo che hai fatto una divisione un po' strana, il main è abbastanza normale (credo) lasciarlo insieme alla classe da lanciare... ma se è per sperimentare :D
ma file main.java e RectangleExample.java li hai messi insieme nella directory rettangolo?

come fa a funzionare? non sono pratico di netbeans, ma se ti da degli errori non dovrebbe riuscire a compilare :undecided:
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi Mr.SpOOn » 07/06/05 16:01

Mah, a quanto pare gli errori erano rimasti da prima e in realtà non c'erano. Mi è bastato cancellare e rimettere un punto e virgola e sono scomparsi.

Sto solo cercando di fare pratica con questo sistema perché dovrei presentare un progetto al professore (in futuro) e lui esige - giustamente anche - che ogni classe abbia il proprio file e che il main stia in una classe a parte. Visto che, nonostante sappia fare cose anche un po' più complesse, non ho ancora ben chiaro come organizzare un progetto, sto provando con esempi semplici.

Mi chiedevo anche se anche le sottoclassi devono stare in file separati...
Mr.SpOOn
Utente Junior
 
Post: 21
Iscritto il: 07/05/05 09:30
Località: Messina

Postdi pjfry » 07/06/05 16:05

io il main lo lascio sempre nella classe, ma questi effettivamente sono solo punti di vista e dal punto di vista formale non sono molto preparato :P :D

cosa intendi per 'sottoclassi'?
io tendo ad avere un file per ogni classe, ogni tanto capita di trovare classi 'piccole' definite nello stesso file .java ma non mi piace perchè cmq il compilatore genera + file .class quindi tanto vale tenerli separati da subito...
ancora, JMHO :)
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi Mr.SpOOn » 07/06/05 16:19

Beh, con "sottoclassi" mi riferivo alle classi estese.

Comunque, sempre riguardo il programma che ho incollato prima, c'è la classe RectangleExampleMouseListener. E' necessaria questa classe?
Non capisco perché è inserita come classe, perché in fin dei conti, non rappresenta un vero e proprio oggetto. O forse è necessario crearla per poter estendere MouseInputAdapter?
Mr.SpOOn
Utente Junior
 
Post: 21
Iscritto il: 07/05/05 09:30
Località: Messina

Postdi pjfry » 07/06/05 16:40

Mr.SpOOn ha scritto:Comunque, sempre riguardo il programma che ho incollato prima, c'è la classe RectangleExampleMouseListener. E' necessaria questa classe?
Non capisco perché è inserita come classe, perché in fin dei conti, non rappresenta un vero e proprio oggetto. O forse è necessario crearla per poter estendere MouseInputAdapter?

:mmmh: applet? mouse? :oops: sono altre cose che non conosco :D
bianconiglioooooooo :lol:

perchè dici che 'non rappresenta un oggetto'?
Codice: Seleziona tutto
MouseInputAdapter m = new RectangleExampleMouseListener();

viene istanziata, no?
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi *~Hayabusa~* » 07/06/05 16:51

Mr.SpOOn ha scritto:Comunque, sempre riguardo il programma che ho incollato prima, c'è la classe RectangleExampleMouseListener. E' necessaria questa classe?
Non capisco perché è inserita come classe, perché in fin dei conti, non rappresenta un vero e proprio oggetto. O forse è necessario crearla per poter estendere MouseInputAdapter?

E' una classe che estende un interfaccia.
L'interfaccia ha solo i metodi, sta a te definire cosa fa ogni metodo..detto in soldoni..

Per organizzare il prgetto ti consiglio di andare sul stio della Borland e scaricarti il Jbuilder2005enterprise, ti devi inscrivere ma poi ti mandano un codice per avere il programma per 30gg..magari sfrutti l'occasione per vedere come funziona il servizio offerto da pookmail.com

Come dice Pj, fare una classe per il main e 1 classe per quanti sono i tipi di oggetti che ti servono è la scelta migliore sia perchè dopo è tutto più comprensibile, più leggibile e poi è una regola fondamentale per la riusabilità del codice..magari fai tutto private e ci metti dei metodi accessori.
pjfry ha scritto:viene istanziata, no?

MouseInputAdapter m = new RectangleExampleMouseListener(); //crea il listner
addMouseListener(m);//lo inserisce, così ha qualcosa da "ascoltare" e fionza
addMouseMotionListener(m); //stessa cosa di su.
..ed e' cibo per la mente,
acqua dalla sorgente,
luce fosforescente
laddove il buio e' costante ..
*~Hayabusa~*
Hardware Admin
 
Post: 1386
Iscritto il: 12/05/02 22:44
Località: Davanti al monitor..

Postdi pjfry » 07/06/05 16:54

*~Hayabusa~* ha scritto:Per organizzare il prgetto ti consiglio di andare sul stio della Borland e scaricarti il Jbuilder2005enterprise, ti devi inscrivere ma poi ti mandano un codice per avere il programma per 30gg..magari sfrutti l'occasione per vedere come funziona il servizio offerto da pookmail.com

no no lascia stare jbuilder, netbeans è usatissimo e anche eclipse (che uso io) e sono anche gratis ;)
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi Mr.SpOOn » 07/06/05 16:55

pjfry ha scritto:perchè dici che 'non rappresenta un oggetto'?
Codice: Seleziona tutto
MouseInputAdapter m = new RectangleExampleMouseListener();

viene istanziata, no?


Mmm sì è vero, ma mi sfugge un po' come concetto. Ma dandolo per buono, in quanto classe, non dovrebbe stare quindi in un file a parte?
Ho quindi provato a spostarlo in un altro file, ma utilizza alcune variabili (vedi corner 1 ecc) che fanno parte di un'altra classe e quindi mi dà diversi errori.
Non capisco come fare.
Mr.SpOOn
Utente Junior
 
Post: 21
Iscritto il: 07/05/05 09:30
Località: Messina

Postdi *~Hayabusa~* » 07/06/05 16:57

pjfry ha scritto:no no lascia stare jbuilder, netbeans è usatissimo e anche eclipse (che uso io) e sono anche gratis ;)

Io uso Jbuilder 6, praticamente l'uni ha un contratto con la borland e ogni iscritto al corso ha la licenza :)
..ed e' cibo per la mente,
acqua dalla sorgente,
luce fosforescente
laddove il buio e' costante ..
*~Hayabusa~*
Hardware Admin
 
Post: 1386
Iscritto il: 12/05/02 22:44
Località: Davanti al monitor..

Postdi pjfry » 07/06/05 17:55

Mr.SpOOn ha scritto:
pjfry ha scritto:perchè dici che 'non rappresenta un oggetto'?
Codice: Seleziona tutto
MouseInputAdapter m = new RectangleExampleMouseListener();

viene istanziata, no?


Mmm sì è vero, ma mi sfugge un po' come concetto. Ma dandolo per buono, in quanto classe, non dovrebbe stare quindi in un file a parte?
Ho quindi provato a spostarlo in un altro file, ma utilizza alcune variabili (vedi corner 1 ecc) che fanno parte di un'altra classe e quindi mi dà diversi errori.
Non capisco come fare.

probabilmente in questo caso è così perchè RectangleExample estende JComponent, quindi anche lavorandoci non so se potresti metterla in un file esterno , e cmq per farlo dovresti modificare parecchie cose di RectangleExample
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi pjfry » 07/06/05 17:56

*~Hayabusa~* ha scritto:
pjfry ha scritto:no no lascia stare jbuilder, netbeans è usatissimo e anche eclipse (che uso io) e sono anche gratis ;)

Io uso Jbuilder 6, praticamente l'uni ha un contratto con la borland e ogni iscritto al corso ha la licenza :)

6? ma non è arrivato alla 10? io proverei eclipse ;) :D
Avatar utente
pjfry
Moderatore
 
Post: 8240
Iscritto il: 19/11/02 17:52
Località: terni

Postdi zello » 07/06/05 22:14

(usavo JBuilder 5 prima che mi scocciassi di aspettare 30 secondi di startup a guardarmi il banner, non uso java da un po' e potrei dire inesattezze).
Allora:
1) ogni classe dichiarata public deve esistere in un file con lo stesso nome della classe ed estensione .java; se non è public, questo non è richiesto (morale: tutte le classi accessorie ad una classe public possono essere inserite nel medesimo file). Dato che RectangleExampleMouseListener è una classe non pubblica, non importa che stia in un file a parte (senno' un progetto serio si sparerebbe agilmente 500 files, dato che per ogni evento devi specializzare una classe).
2) attenzione alla terminologia: una classe descrive un "tipo di dato" (e le operazioni che ci si possono compiere sopra), un oggetto - istanza della classe - è la rappresentazione concreta di una classe. Un'automobile è un qualcosa con quattro ruote ed un motore (classe); la mia macchina è un oggetto di classe automobile
3) per Hayabusa: RectangleExampleMouseListener è una classe che ne estende un'altra, perché "extends MouseInputAdapter", non "implements MouseInputListener". Se ricordo bene, le classi *Adapter sono implementazioni vuote delle interfaccie *Listener (pattern Adapter, appunto).
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Postdi Mr.SpOOn » 07/06/05 22:34

wow grande zello.
Il punto 1 è decisamente esaustivo e mi chiarisce parecchi dei dubbi che avevo.
Grazie
Mr.SpOOn
Utente Junior
 
Post: 21
Iscritto il: 07/05/05 09:30
Località: Messina

Postdi *~Hayabusa~* » 07/06/05 23:17

Giusto, ho letto con troppa leggerezza :roll:
..ed e' cibo per la mente,
acqua dalla sorgente,
luce fosforescente
laddove il buio e' costante ..
*~Hayabusa~*
Hardware Admin
 
Post: 1386
Iscritto il: 12/05/02 22:44
Località: Davanti al monitor..

Prossimo

Torna a Programmazione


Topic correlati a "Java: Dividere un progetto in più file":


Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti