











Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti generali sulla programmazione orientata agli oggetti
Tipologia: Appunti
1 / 19
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!












Oggetto : entità dotata di 3 caratteristiche: stato, comportamento, identità. Stato : informazioni conservate nell’oggetto / condiziona il comportamento dell’oggetto nel futuro / può variare nel tempo per effetto di un’operazione sull’oggetto Comportamento : definito dai metodi che possono essere eseguiti dall’oggetto / I metodi possono modificare lo stato dell’oggetto. Metodo è una sorta di funzione che contiene un blocco di codice e appartiene ad una certa classe
Overloading : la possibilità di avere una classe che definisca metodi differenti con la stessa firma, ma i lori parametri devono distinguersi. Overrinding riprogrammare un metodo ereditato L’overloading avviene in fase di compilazione, esaminando il tipo dei parametri Esempio : println è un metodo overloaded della classe PrintStream CLASSE STRING: è una classe predefinita e modella una qualunque sequenza di caratteri. La println fa riferimento ad un oggetto stringa (ma non è un metodo della classe String)
Esempi metodi: lenght() / toUpperCase() … River.lenght() l’oggetto funge da parametro implicito nell’invocazione del metodo PARAMETRI IMPLICITI ED ESPLICITI Espliciti : dati in ingresso di un metodo Impliciti : oggetto su cui è invocato il metodo METODO specifica il tipo dei parametri espliciti e il valore di restituzione -Una variabile di riferisce ad un solo oggetto alla volta -Un’ oggetto può essere referenziato da più variabili simultaneamente
PROPRIETA’ DELLE STRINGHE Immunità: una volta creato un oggetto String NON può cambiare Efficienza: METODO COSTRUTTORE
Per creare un oggetto di una classe deve essere invocato il costruttore della classe in combinazione con l’operatore NEW.
SELF CHECK Greeting2 = greeting (il 2 ha il riferimento allo stesso oggetto di greeting)
METODO DI ACCESSO NON cambiano lo stato del suo parametro implicito METODO MODIFICATORI cambiano lo stato del suo parametro implicito
PACCHETTI Le classi di Java sono organizzate in pacchetti
INTERFACCIA PUBBLICA tutti i metodi di una classe + il costruttore
Public : consente l’accesso al di fuori della classe Private : consente l’accesso solo ai membri della classe (si possono effettuare sia a metodi che a variabili) Java è un linguaggio fortemente tipizzato
Variabili final il valore non può essere modificato (costante) e possono essere usate nei metodi, classi, variabili… METODI STATICI (anche detti metodi di classe perché non operano su una particolare istanza della classe)
Per ogni tipo primitivo (non sono oggetti e non sono associati ad alcuna classe) esiste sempre un Simple Data Object , cioè Classe Wrapper incapsula una variabile di un tipo primitivo Auto-boxing: da java 5.0 la conversione tra i tipi e le corrispondenti classi wrapper è automatica.
Una classe rappresenta un singolo concetto. Puo rappresentare:
Coesione una classe deve rappresentare un singolo concetto E’ coesa se l’interfaccia contiene solo operazioni tipiche del concetto che la classe realizza. In pratica quando una classe esprime solo operazione tipiche ad un determinato concetto. Bassa coesione una classe fa tante cose insieme facendo lavoro sparso e non correlato. Potrebbe trovarsi in classi che hanno un gran numero di metodi
Accoppiamento classe A dipende da classe B se usa oggetti e/o metodi di B E’ possibile avere molte classi che dipendono tra di loto accoppiamento alto In pratica un programma efficiente deve avere ALTA COESIONE E BASSO ACCOPPIAMENTO.
Un metodo può cambiare lo stato dell’oggetto ricevuto per valore, ma non può cambiare l’oggetto da referenziare. (metodi statici *) VARIABILI STATICHE
INTERFACCE dichiara una collezione di metodi elencando le loro firme (con tipo valore restituito) a non fornisce alcuna implementazione dei quei metodo Un’interfaccia NON è una classe, ma si possono creare oggetti di tipo getQualcosa
Una classe implementa un’interfaccia sole se fornisce l’implementazione di TUTTI i metodi dichiarati all’interno di essa.
Per usare il metodo SORT basta implementare il metodo comparable, che contiene un metodo astratto chiamato compareTo usato per confrontare oggetti
POLIMORFISMO E' una tecnica usata per far assumere a un determinato tipo di dato, un valore differente a seconda del tipo di dato richiesto Esempio : double i= x.getTotalePrezzo(); Autovettura a= new Camion(); getTotalePrezzo() viene detto POLIMORFICO
polimorfismo vs overloanding()*
INTERFACCE DI SMISTAMENTO i meccanismi di smistamento consentono a una classe di richiamare uno specifico metodo quando necessita di maggiori informazioni.
Ereditarietà e il metodo clone public Object clone(){ Object cloned= super.clone(); return cloned; } INTERFACCIA CLONEABLE Interfaccia contrassegno:
METODI ASTRATTI quando un metodo viene definito ASTRATTO quando ogni sottoclasse implementa quel determinato metodo
ERIDITARIETA’ MULTIPLA non consetita! -una classe può avere più padri in pari livello, ma in java non è consentito ma viene realizzata attraverso l’interfacce.
INTERFACCE una classe quindi può estendere solo una classe ma può implementare più interfacce.
PROGRAMMAZIONE GENERICA creazione di strutture dati e algoritmi che possono essere utilizzati con tipi di dati diversi VARIABILI DI TIPO : variabili a cui si può assegnare un tipo non primitivo e che possono essere usate come tipi nelle dichiarazioni (CLASSI GENERICHE) public class Pair<S,T>…… l’effetto ottenuto è come se le variabili di tipo venissero assegnate con i tipi indicati al momento dell’istanziamento. Le variabili di tipo di una classe generica:
METODI GENERICI
SCHEDE CRC
ASSOCIAZIONE/AGGREGAZIONI gli oggetti di una classe contengono riferimenti ad oggetti di un’altra classe DIPENDENZA molte applicazioni dipendo dallo Scanner per l’input
DOCUMENTAZIONE si usa javadoc per farlo, e lanciandola si ottiene una documentazione in formato html. Vantaggi :
CONDIZIONE DI ERRORE Può avere molte cause:
ECCENZIONI
Se si verifica un’eccezione il metodo trasferisce il contro ad un GESTORE DELLE ECCEZIONI
CONDIZIONE DI ERRORE java ha una gerarchia di classi per rappresentare le varie tipologie di errore, dislocate in package diversi a seconda del tipo di errore. La super classe di tutti gli errori è la classe THROWABLE nel pacchetto java.lang , e qualsiasi nuovo tipo di errore deve essere inserito nella discendenza di throwable LA SUPERCLASSE THROWABLE Superclasse di tutti gli errori, e ha 2 sottoclassi dirette: -ERROR errori fatali, dovute a condizioni accidentali. Esempio: OutOfMemoryError, AssertionError
-EXCEPTION tutti gli errori che non rientrano in error -i programmi possono gestire o no questi errori a seconda dei casi Package: java.lang / java.io Tutte le classi che rappresentano eccezioni sono sottoclassi della classe EXCEPTION ((disegno con gerachia))
eccezioni NON controllate -dovute a circostanze che il programmatore PUO’ EVITARE , correggendo il programma ESEMPIO: -NullPointerException : uso di un riferimento a NULL -IndexOfBoundException: accesso ad elementi esterni ai limiti di un array Non è obbligatorio scrivere codice per gestire questo tipo di eccezione, il programmatore può prevenire queste anomalie andando a correggere il codice.
Per avere un messaggio di errore che stampa lo stack delle chiamate ai metodi in cui è verificata l’eccezione usiamo il metodo printStachTrace()
La clausola FINALLY viene usata per indicare un’istruzione che va eseguita sempre Esempio : se leggendo un file si verifica un’eccezione vogliamo comunque che il file si chiuda.
Possiamo progettare nuove eccezioni nel caso in cui nessuna di quelle disponibili ci sembrano adeguate -Per essere tipo controllato deve estedere EXCEPTION -Per tipo Non controllato estendere RunTimeException
In java input e output sono definiti in termini di flussi sequenza di dati ordinati 2 tipi di flussi: -dati binari -di caratteri
FLUSSI OUTPUT hanno una destinazione
CLASSE IOEXCEPTION -in java.io per segnalare condizioni di errori, e questo tipo di eccezione si verifica collegato ad un problema di I/O -Costruttori che ricevono come parametro il nome di un file/directory o un oggetto File possono laniare FileNotFoundException (sottoclasse di IOException)
FLUSSI STANDARD definiti dalla classe System in java.lang -standard input (tastiera) : di tipo InputStream System.in -standard output(monitor) : di tipo PrintStream System.out -standard error( messaggi di errore) di tipo PrintStream System.err
Dichiara metodi per leggere flussi binari da una sorgente specifica. Read legge un byte alla volta Close chiude il flusso di input
E’ una sottoclasse di InputStream e si possono creare oggetti di questa classe
LA CLASSE ASTRATTA OUTPUTSTREAM -dichiara i metodi per scrivere flussi binari in una destinazione specifica Metodi: -write() scrive un byte alla volta / il byte è passato come argomento di tipo int -close() chiude il flusso di output e rilascia le risorse associate al flusso
CLASSE PRINTSTREAM classe concreta della discendenza di OutputStream CLASSE FILEOUTPUTSTREAM sottoclasse di OutputStream e possiamo creare oggetti di questa classe e c’è anche un costruttore CLASSE ASTRATTA READER dichiara i metodi per leggere flussi di caratteri da una sorgente specifica
CLASSE FILE READER sottoclasse di InputStreamReader Il costruttore richiede il nome del file -oggetti di fileReader leggono un carattere alla volta, ma spesso serve leggere intere linee LA CLASSE ASTRATTA WRITER dichiara i metodi per leggere flussi di caratteri verso una direzione specifica Metodi: public void write (int c) throws IOException public abstract void close() throws IOExpection
CLASSE PRINTWRITER sottoclasse concreta di Wrtiter Istanziando un ogetto PrintWriter: -se il file passato come parametro del costruttore esiste, allora viene svuotato
Per visualizzare qualcosa all’interno di un frame occorre definire un oggetto di tipo componente e aggiungerlo al frame. Si deve usare la classe JCOMPONENT
DISEGNARE FORME paintCompinet Graphics Graphics2D RICEVERE TESTO IN INPUT un’applicazione grafica può ricevere testo in input lanciando un oggetto JOptionPane Metodo: showInputDialog
EVENTI ogni volta che l’utente esegue un’azione (su elementi dell’interfaccia utente grafica) -click mouse -pressione su tastiera -selezione di un elemento da menu … Tuttò ciò genera un evento
EVENTI: RICEVITORI E SORGENTI RICEVITORE LISTENER -riceva una notifica quando un evento accade -un programma sceglie gli eventi da trattare istallando un ricevitore per ciascun di esse RICEVITORE SOURCE E’ La componente che ha generato l’evento -questa sorgente notifica tutti i listener quando un evento accade. Packge: java.awt.event, contiene:
-MouseEvent (eventi del mouse) click, spostamenti ecc -ActionEvent (eventi di azioni) cliccare sul bottone -AdjustmentEvent (eventi di modifica) -FocusEvent -ItemEvent (selezionare/deselezionare elemento) -keyEvent (eventi tastiera) -WindowEvent (eventi relativi a finestre)
INTERFACCE LISTER sono ricevitori di eventi ed esiste un’interfaccia listener per ciascun tipo di evento (((Sarebbero i tipi di eventi ma a posto di “event” c’è “listener”.)))
ACTIONLISTENER E JBUTTOM JBUTTOM definire pulsanti ACTIONLISTENER attaccare questo ad ogni bottone Interfaccia ESEMPIO : public interface ActionListener{ void ActionPerfomed(ActionEvent event); } Il parametro EVENT contiene i dettagli relativi all’evento
Per collegare un SORCE ad un LISTENER occorre aggiungerlo: ActionListener listener = new ClickListener(); button.addActionListerner(listener);
button contiene un riferimento ad oggetto JButtom sottocalsse di JComponent
JPANEL
JMenu (sottoclasse di JMenuItem) contiene ista di oggetti di tipo JMenuItem JComponent supertipo per ciascuna di queste classi
AREA DI TESTO: JTextArea per mostare linee di testo multiple