Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    121

    Dividere il codice in classi

    Ciao a tutti!
    Sono novizio al java, ma devo impararlo per sostenere un esame.
    Non sono nuovo alla programmazione, nel senso che ho nozioni su oo programming, incapsulamento, information hiding, ereditarietà, riuso, ottimizzazione, etc.
    Vorrei sapere, proprio riguardo alcune delle cose succitate, come dividere il codice in classi.
    La domanda può sembrare stupida, ma ecco il codice.

    codice:
    package src;
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JDesktopPane;
    import javax.swing.JLabel;
    
    import javax.swing.WindowConstants;
    import javax.swing.SwingUtilities;
    
    public class NewJFrame extends javax.swing.JFrame {
    	private JDesktopPane jDesktopPane1;
    	private JButton jButton1;
    	private JLabel jLabel1;
    
    	/**
    	* Auto-generated main method to display this JFrame
    	*/
    	public static void main(String[] args) {
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				NewJFrame inst = new NewJFrame();
    				inst.setLocationRelativeTo(null);
    				inst.setVisible(true);
    			}
    		});
    	}
    	
    	public NewJFrame() {
    		super();
    		initGUI();
    	}
    	
    	private void initGUI() {
    		try {
    			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    			{
    				jDesktopPane1 = new JDesktopPane();
    				getContentPane().add(jDesktopPane1, BorderLayout.CENTER);
    				{
    					jLabel1 = new JLabel();
    					jDesktopPane1.add(jLabel1);
    					jLabel1.setText("jLabel1");
    					jLabel1.setBounds(178, 86, 37, 16);
    				}
    				{
    					jButton1 = new JButton();
    					jDesktopPane1.add(jButton1);
    					jButton1.setText("jButton1");
    					jButton1.setBounds(244, 84, 59, 22);
    					jButton1.addActionListener(new ActionListener() {
    						public void actionPerformed(ActionEvent evt) {
    							jButton1ActionPerformed(evt);
    						}
    					});
    				}
    			}
    			pack();
    			setSize(400, 300);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	private void jButton1ActionPerformed(ActionEvent evt) {
    		System.out.println("jButton1.actionPerformed, event="+evt);
    		jLabel1.setText("ciao");
    	}
    
    }
    Vorrei, in pratica, dividere la grafica in una classe (una classe contenente le label e i bottoni) e gli eventi in un'altra (una classe che gestisca ciò che accade quando viene premuto il pulsante), per spezzettare il codice in modo adeguato e non monolitico.
    E poi... cosa ci metto nel main, dopo aver diviso il lavoro in classi?!
    Grazie a tutti e scusate la domanda banalissima!

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Non è una domanda banale, ma si tratta di un bel concetto della programmazione ad oggetti.
    Allora.
    Considera che puoi suddividere il tuo programma in tutte le classi che vuoi, anche per ogni singolo bottone, l'importante è che la classe estenda ( extends ) o implementi ( implements ) classi ( per la prima ) ed interfaccie ( per la seconda ) utili al tuo scopo.

    Es.
    codice:
     class LaMiaPersonalissimaLabel extends Label{[...]
    Per quanto riguarda la gestione degli eventi la stessa cosa

    Es.
    codice:
     class LaMiaGestioneDiEventi implements ActionListener{
    public void actionPerformed( ActionEvent event ){ [...]
    La differenza tra le due è che l'estensione porta ad aggiungere informazioni alla mia classe ( poi ci sono casi particolari come abstract, ma diventa lunga da spiegare ) e che aggiunge metodi definiti, variabili e quant'altro si renda accessibile alla classe che si desidera estendere, mentre l'interfaccia ti fornisce uno schema obbligatorio che la tua classe deve implementare, come nell'esempio ActionListener che obbliga a scrivere il metodo actionPerformed.

    Mentre per la questione main, immagino tu abbia una classe Frame/JFrame e quindi richiama quella come classe
    codice:
    public static void main ( String args[] ){
    new MiaClasseFrame();
    }
    In questo modo verrà mostrata la tua grafica.

    Importante è:
    Posso estendere solamente una classe, quindi un solo extends, mentre posso implementare infinite interfaccie
    codice:
    class MiaClasse extends ProvaDiEstenzione implements Interfaccia1, Interfaccia2, Interfaccia3...
    Chiaro?
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

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 © 2026 vBulletin Solutions, Inc. All rights reserved.