Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Introduzione alla Programmazione in Java: Concetti Fondamentali, Appunti di Programmazione Java

Appunti generali sulla programmazione orientata agli oggetti

Tipologia: Appunti

2018/2019

Caricato il 17/06/2019

Symo_98
Symo_98 🇮🇹

2 documenti

1 / 19

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
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
creare un oggetto di una classe,
serve a inizializzare i nuovi oggetti,
ha lo stesso nome della classe,
non deve restituire nulla e non ha alcun tipo.
inizializza le variabili d’istanza
ci possono essere diversi costruttori ma tutti devono avere lo stesso nome (OVERLOADING)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13

Anteprima parziale del testo

Scarica Introduzione alla Programmazione in Java: Concetti Fondamentali e più Appunti in PDF di Programmazione Java solo su Docsity!

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

  • creare un oggetto di una classe,
  • serve a inizializzare i nuovi oggetti,
  • ha lo stesso nome della classe,
  • (^) non deve restituire nulla e non ha alcun tipo.
  • inizializza le variabili d’istanza
  • ci possono essere diversi costruttori ma tutti devono avere lo stesso nome (OVERLOADING)

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

VARIBILI DI INSTANZA

  • Dichiarata all’interno di una classe ma al di fuori di qualsiasi metodo.
  • Tutti i metodi posso utilizzarle.
  • Ciascun oggetto ha le proprio variabili d’istanza le quali hanno propri valori.
  • Tipicamente sono inizializzate dal costruttore.
  • (^) Le variabili d’istanza hanno lo stesso periodo di vita dell’oggetto a cui appartengono

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)

  • Non sono associati ad oggetti ma ad una classe stessa
  • possono essere invocati senza alcun rifermento ad oggetti
  • aggiunta del prefisso “ static
  • (^) invocati usando il nome della classe.
  • niente parametro implicito
    • Non possono accedere a variabili d’istanza.

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:

  • concetto matematico ellipse/ rectangle / point
  • un’astrazione di un’entità della vita reale banck account/ moneta/ … Classi Attori Scanner / Random Classi d’utilità Math

COESIONE E ACCOPPIAMENTO

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

  • non devono essere inizializzate dal costruttore hanno lo stesso e costante valore per tutti gli oggetti della classe COSTANTI FINAL= dichiarata con STATIC FINAL TIPO = COSTANTE Esempio: costi di commissione

INTERFACCE E POLIMORFISMO

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

  • tutti i metodi dell’interfacce sono astratti , infatti non hanno implementazioni
  • (^) i metodi sono automaticamente public
  • non ha variabili d’istanza, può solo definire costati
  • esistono variabili di tipo interfaccia ma non esistono istanze di un’interfaccia
  • questa variabile può contenere istanze delle classi che IMPLEMENTANO l’interfaccia

Una classe implementa un’interfaccia sole se fornisce l’implementazione di TUTTI i metodi dichiarati all’interno di essa.

  • una classe può implementare più interfacce INSTANCEOF permette di verificare se un oggetto appartiene ad un determinato tipo

IMPLEMENTAZIONE DI COMPARABLE

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()*

  • polimorfismo avviene in fase di esecuzione late binding
  • overloading i fase di compilazione early binding

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:

  • no metodi
  • (^) usata solo per verificare se un’altra classe la realizza
  • se oggetto da clonare non è un esemplare di una classe che realizza viene lanciata l’eccezione GERARCHIE DI EREDITARIETA’ Metodi di una sottoclasse -SOVRASCRIVERE metodi della superclasse: il figlio ridefinisce un metodo con la stessa firma del metodo padre -EREDITARE metodi della superclasse il figlio non ridefinisce nessun metodo della superclasse -definisce NUOVI metodi metodi che non devono necessariamente esistere nel padre VARIABILI DI INSTANZA DI SOTTOCLASSI -il figlio ereditano tutte le variabili d’istanza del padre -può definire variabili d’istanza proprie INVOCARE IL COSTRUTTORE DEL PADRE DAL COSTRUTTORE DEL FIGLIO parola chiave: SUPER (primo comando nel costruttore del figlio) POLIMORFISMO al figlio gli si possono passare qualsiasi tipo di PADRE
  • metodi delle sottoclassi sovrascrivono il metodo della superclasse e possono essere invocati polimorficamente attraverso la superclasse

METODI ASTRATTI quando un metodo viene definito ASTRATTO quando ogni sottoclasse implementa quel determinato metodo

  • non sono implementati ma si scrive solo la firma CLASSI ASTRATTE (anche dette concrete) ibrido tra interfaccia e classe - queste classi possono avere metodi normalmente implementati o metodi astratti - Le classi che estendono una classe astratta sono obbligate ad implementare i metodi astratti della superclasse. - puoi dichiarare una classe astratta senza avere metodi astratti, così che evitiamo che vengano creati oggetti di quella classe - le classi astratte forzano la realizzazione di sottoclassi METODI E CLASSI FINAL Per evitare di sovrascrivere certi metodi si usa la parola chiave FINAL

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:

  • sono dichiarate fra parentesi angolari <>
  • E’ impossibile aggiungere per esempio oggetti di tipo String, ma e’ possibile aggiungere un oggetto di tipo String ad un esemplare ArrayList che sia stato creato con l’intezione di usarlo per contenere roba del tipo del ArrayList.

METODI GENERICI

  • può appartenere anche a classi non generiche
  • per utilizzarli non occorre specificare il tipo effettivo da assegnare alle variabili di tipo
  • (^) il tipo del parametro è dedotto al compilatore dell’uso che ne facciamo TYPE ERASURE
  • le variabili di tipo non sono tipi di Java. Non troveremo mai T.java oppure T.Class nel file system
  • consente alle applicazioni java che usano tipi generici di essere compatibili con le sue librerie e applicazioni
  • (^) tutte le variabili di tipo vengono poi sostituite con un tipo effettivo di java
  • i tipi generici nel codice vengono rimpiazzati con il tipo grezzo corrispondente
  • vengono aggiunti casting dove è necessario
  • per effetto delle type erasure non vi è modo di risalire a runtime al tipo dell’oggetto che effettivamente viene usata in una classe generica. COLLEZIONI DI DATI IN JAVA Collezioni : -insieme -liste COLLEZIONI DI OGGETTI S ono tutte le classi contenute nel package java.util (libreria standar di java)

PROGETTAZIONE FORMALE: MODELLO A CASCATA

  • (^) modello sequenziale di esecuzione delle fasi della progettazione formale
  • spesso è utile ripetere le varie fasi iterativamente raffinando progressivamente il progetto MODELLO A SPIRALE
  • suddividere il processo di sviluppo in fasi multiple
  • fasi iniziali: prototipi del sistema
  • (^) però ha numero troppo elevato di iterazioni / troppo tempo

PROGETTAZIONE ORIENTATA AGLI OGGETTI (*)

  1. Individuare le classi: -Le classi rappresentano insiemi di oggetti con lo stesso comportamento -Rappresenta alcune entità come oggetti altri come dati primitivi
  2. Determinare le responsabilità di ogni classe
  3. Descrivere le relazioni tra le classi individuate

SCHEDE CRC

  • (^) descrive una classe, le sue responsabilità e i suoi collaboratori
  • usare una schede per ogni classe
  • per ogni metodo individuare una classe responsabile C:CLASSE R:RESPONSABILITA’ C: COLLABORATORI

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 :

  • condividere documentazione con gli altri membri del team
  • classi java già predisposte GESTIONE DELLE ECCEZIONI

CONDIZIONE DI ERRORE Può avere molte cause:

  • errori di programmazione
  • errori di sistema = disco rosso
  • (^) errori di utilizzo= input non corretto

ECCENZIONI

  • è un’anomalia, da cui sia possibile effettuare il recupero, che si è presentata durante l’esecuzione di un programma.
  • (^) Formalmente è una violazione di vincoli semantici e di risorsa
  • è un evento che interrompe la normale esecuzione di un programma

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))

CATEGORIE DI ECCEZIONI

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.

PROGETTARE NUOVE ECCEZIONI

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

IL PACKAGE JAVA.IO

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

LA CLASSE ASTRATTA INPUTSTREAM

Dichiara metodi per leggere flussi binari da una sorgente specifica. Read legge un byte alla volta Close chiude il flusso di input

LA CLASSE FILEINPUTSTREAM

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

  • read legge carattere alla volta
  • close chiude il flusso di caratteri COCRETEZZARE READER dobbiamo convertire il flusso di input binario in quello di caratteri e si usa la classe InputStreamReader sottoclasse di Reader costruttore: public InputStreamReader(InputStream in)

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

  • write legge un carattere ala volta e il carattere e passato come argomento di tipo int
  • close chiude il flusso di output

CLASSE PRINTWRITER sottoclasse concreta di Wrtiter Istanziando un ogetto PrintWriter: -se il file passato come parametro del costruttore esiste, allora viene svuotato

DISEGNARE FIGURE

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

GESTIONE DEGLI EVENTI

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:

  • classi per i diversi tipi di eventi
  • le interfacce relative ai listener di eventi
  • le classi ADAPTER , che implementano le interfacce listener

TIPI DI EVENTI:

-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

  • (^) è un contenitore ed estende JComponent
  • serve quando vogliamo aggiungere più componenti all’interno del frame

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