Estratto del documento

Programmazione orientata agli oggetti

Primi concetti

  • Classi -> Sono uno stampo che permettono di creare degli oggetti
  • Oggetti -> Gli oggetti sono istanze di classi
  • Metodi -> Compiti da eseguire che assegniamo agli oggetti

Ogni tipo si caratterizza per un insieme di operazioni ammissibili e un insieme di valori (intervallo ristretto). Le classi introducono nuovi tipi di dati e esprimono gli aspetti comuni di una famiglia di oggetti. I metodi della classe rappresentano l’insieme delle operazioni ammissibili.

Tipi primitivi

  • Stringa -> oggetti immutabili
  • Int -> numeri interi
  • Double -> numeri reali 64 bit

In una classe possiamo avere più classi ma solo una è public.

Variabili di istanza

Ogni classe di oggetti possiede delle variabili di istanza. Ogni oggetto della classe anche se è strutturalmente simile agli altri, ha comunque uno stato indipendente. Es: private double x, y;

Pronome this

Denota implicitamente l’oggetto-ricevitore su cui è stato invocato il metodo. Es: public double getX() {return this.x;}

Costruttori

Metodi che inizializzano l’oggetto.

  • Default: metodo che inizializza le variabili di istanza a 0, se non è stato ridefinito nessun costruttore Java mette a disposizione il costruttore di default.
  • Normale: inizializza le variabili di istanza ad un certo valore
  • Copia: le variabili di istanza dell’oggetto this vengono inizializzate con lo stesso valore delle variabili di istanza dell’oggetto passato come riferimento.

Il costruttore di default inizializza:

  • Tipi numerici = 0
  • Tipi boolean = false
  • Tipi char = null carattere
  • Tipi oggetti = null

Java ha quattro modificatori

  • Private: variabili, metodi e classi definite private sono accessibili solo nella classe in cui sono dichiarati
  • Public: variabili, metodi e classi definite public sono accessibili da qualsiasi punto
  • Protected: variabili, metodi e classi definite protected sono accessibili sia all’interno del pacchetto, di una classe ma anche all’esterno del pacchetto in una sottoclasse che estende la classe
  • Default: visibilità package

I metodi possono essere:

  • Metodi accessori, non cambiano lo stato dell’oggetto
  • Metodi mutatori, cambiamo lo stato dell’oggetto

Oggetti e riferimenti

In Java le variabili di tipi oggetti, contengono riferimenti alle aree di memoria degli oggetti, create e inizializzate dai metodi costruttori.

Oggetti incapsulati

Quando progettiamo una classe la privatezza dei dati di un oggetto, costituisce sempre una decisione strategica di programmazione (progettiamo gli oggetti come entità incapsulate). Lo stato interno dell’oggetto è modificabile solo tramite l’invocazione di metodi.

Una classe si dice eseguibile se è presente il main. Se abbiamo un metodo del tipo: p0.distanza(p1), p0 viene chiamato ricevitore, riceve il compito di eseguire il compito, p1 viene chiamato parametro.

Vari formati per i tipi primitivi

  • %1.2f usato per i tipi double, abbiamo che le cifre prima della virgola devono essere minimo 1 e dopo la virgola massimo 2
  • %5d usato per i tipi interi, abbiamo minimo 5 cifre per il numero intero se ne servono più verranno scritte

Un metodo è statico se non lavora sull’oggetto this. Questi tipi di metodi possono essere evocati anche sulla classe contenente il metodo.

Irrobustire

Diminuire le possibilità di errore.

Enumerazione

Classi implicite in cui vengono enumerati tutti e soli i possibili oggetti che possono esistere della classe. È un tipo. Definisco i possibili valori. Esempio Data.Cosa.ANNO. L’Enumerazione è una classe, i possibili valori sono gli oggetti.

Entità static

Un campo static è condiviso tra tutte le istanze della classe, infatti, si tratta di una variabile di classe anziché una variabile di istanza.

Entità di istanza ed entità di classe

Campi e metodi non static, costituiscono entità d’istanza, dal momento che hanno rilevanza su ogni singolo oggetto. Tali entità presuppongono l’uso di this.

Campi static costituiscono entità di classe, ossia che hanno rilevanza di classe, indipendentemente da qualsiasi istanza. Il loro significato sussiste anche quando nessun oggetto della classe è stato creato, non si basano su this.

Classi di utilità

Classi che contengono solo dei metodi statici. Una classe di utilità non richiede di essere istanziata. I suoi metodi static o di classe possono essere invocati direttamente sulla classe. Il costruttore di default va ridefinito con corpo vuoto e reso privato. Come conseguenza i clienti della classe non possono creare oggetti-istanze di Mat.

Costanti

I campi definiti con final, sono chiamate costanti, il loro valore non può essere modificato.

Librerie di classi riutilizzabili e packaging

Per facilitare il riutilizzo delle classi, e dunque per migliorare l’attività di programmazione e renderla più ingegneristica, è fondamentale mettere a punto librerie di classi riutilizzabili. Java risulta già dotato di un’ampia libreria di classi testate. Anche il programmatore può costruirsi proprie librerie, costruendo dei package. Un package corrisponde ad una directory del file system. Avendo la directory di progetto, si creano la sottodirectory poo contenente quindi sottodirectory che ospitano classi “affini” tra loro, ossia che svolgono compiti correlati. Per riutilizzare una classe è importante collocarla in una sottodirectory della directory di progetto e specificare esplicitamente questa posizione nel file come segue:

Classi immutabili

Le classi immutabili sono classi di oggetti immutabili, le variabili di istanza diventano costanti.

Passaggio dei parametri

Poiché in Java i parametri formali di un metodo sono affetti esclusivamente dal passaggio per valore, essi si comportano esattamente come variabili locali inizializzate (parametri attuali) al tempo della chiamata del metodo (tipo il costruttore).

Esempio: Java aspetta il costruttore per inizializzare le variabili di istanza. In Java tutti i parametri sono passati per valore. Quando come parametri passiamo i riferimenti ad un oggetto potrebbero avvenire delle modifiche all’indietro.

Record di attivazione

Quando chiamiamo un metodo nascono in memoria aree di attributi, variabili. Queste aree di memoria prendono il nome di Record di attivazione.

Overloading

I metodi che hanno lo stesso signature, in Java vengono diversificati per il numero e i tipi del parametro. Quando un metodo viene definito e implementato nei piani alti si dice template method. Il main è statico perché quando viene invocato non utilizziamo degli oggetti su cui richiamare il metodo main.

Regole di visibilità

Dicesi blocco una zona di testo di un programma normalmente racchiusa in una coppia {}.

  • Regola 1: Un nome introdotto in un blocco B1 corpo di una classe è visibile in tutto il blocco B1 e penetra automaticamente in un blocco B11 laddove l’entità risulta visibile a meno di non essere mascherata da un nome introdotto da B11.
  • Regola 2: Un nome di un locale parametro introdotto in un blocco di un metodo, è visibile nel blocco dal punto di dichiarazione fino alla fine del blocco. Non possono esistere due o più locali con lo stesso nome, anche in blocchi interni innestati nel metodo.

Importazione qualificata

Nel caso in cui abbiamo due classi con lo stesso nome, una creata da noi e una offerta dalla libreria Java, per importare la classe giusta usiamo l’importazione qualificata.

Argomenti variabili (vararg)

Java consente di programmare metodo il cui numero dei parametri è variabile. Tutto ciò si ottiene utilizzando i tre punti …. Dentro un metodo può esistere al più un vararg e se esiste deve essere inserito come ultimo parametro. Il contenuto del vararg viene trasformato in un array.

System.out.printf e vararg

Nel metodo: System.out.printf(String s, Object … args) la stringa s indica le informazioni di formato, i rimanenti oggetti (in numero variabile) rappresentano le entità da stampare.

Formati printf

  • %n.mf (double) - n numero tot colonne, se il numero è più grande sarà scritto completamente, m cifre dopo la virgola
  • %nd (interi)
  • %ns (stringhe)

Ereditarietà, dynamic binding e polimorfismo

Java consente di programmare una classe per differenza di un’altra (ereditarietà). Tutto ciò che ci serve lo ereditiamo, ciò che non utilizzeremo verrà ridefinito.

Il pronome super

Il pronome super viene usato come riferimento alla super classe. Quando super è usato per invocare esplicitamente un costruttore della super classe cui si delega parte del processo di costruzione, dev’essere la prima istruzione del costruttore.

Relazione di ereditarietà

La classe esistente viene chiamata classe base (super class). La classe che eredita dalla classe base viene chiamata classe derivata o particolare (sotto classe). La relazione di ereditarietà è ben definita se un oggetto della classe derivata si può utilizzare in tutti i contesti in cui è atteso un oggetto della classe base (principio di sostituibilità dei tipi). La sottoclasse eredita tutti i metodi della super classe, se non ci va bene quell’implementazione ridefiniamo i metodi (override).

Assegnazione tra oggetti come “proiezione”

Avendo due classi: Punto e Disco (che eredita da Punto) se: l’assegnazione da particolare a generale corrisponde per es. ad una proiezione di un punto dello spazio cartesiano (con coordinate x, y e z) sul piano X-Y (la coordinata z è ignorata). In Java, dopo l’assegnazione p=d, p punterà ad un oggetto riferito da d, ma p lo vede con gli “occhiali” imposti dalla sua classe di appartenenza Punto. Pertanto, i campi che non appartengono all’oggetto della sottoclasse vengono ignorati.

Tipo statico e tipo dinamico di un oggetto

Dopo l’assegnazione p=d, si dice che p ha tipo statico (legato alla dichiarazione) Punto e tipo dinamico Disco. Il tipo statico dice cosa si può fare su p. Il tipo dinamico dice quale particolare metodo va in esecuzione, se uno della super classe o uno della sottoclasse.

Assegnazione dal generale al particolare

Non si può assegnare un oggetto da generale a particolare. Tuttavia, se p ha tipo dinamico Disco (controllabile con l’operatore instanceof), si può di fatto cambiare punto di vista su p (casting) in modo da vederlo come Disco e quindi accedere a tutte le funzionalità di Disco.

Dynamic binding e polimorfismo

Il dynamic binding si riferisce alla proprietà che invocando un metodo su un oggetto come p, dinamicamente possa essere eseguita la versione definita in Punto o quella definita in Disco, in dipendenza del tipo dinamico posseduto da p. Polimorfismo significa “più forme” ed esprime la proprietà che un oggetto possa appartenere a più tipi. Proprio perché sussiste il polimorfismo, si ha l’effetto del dynamic binding.

Ereditarietà e ridefinizione

Per essere una vera ridefinizione, occorre normalmente rispettare la sua intestazione (signature). Se cambia qualcosa nell’intestazione (nome del metodo, tipi dei parametri), allora si tratta di overloading anziché di ridefinizione.

Ereditarietà singola

In Java ogni classe può essere erede di una singola classe (ereditarietà singola). La costruzione di gerarchia di classe avviene come una struttura ad albero.

Antenato cosmico Object

In Java, ogni classe eredita direttamente o indirettamente da Object (radice di tutte le gerarchie di classi). I metodi seguenti ammettono già un’implementazione in Object che necessariamente è generica. Essi di norma vengono ridefiniti per avere un significato “tagliato su misura” delle nuove classi:

  • String toString() -> ritorna lo stato sotto forma di stringa
  • boolean equals( Object x ): uguaglianza superficiale, due oggetti sono uguali se sono in aliasing, hanno lo stesso indirizzo; uguaglianza profonde, si va a controllare lo stato dei due oggetti
  • int hashCode() -> ritorna un numero intero unico per this. Se due oggetti sono uguali secondo equals(), allora il loro hashCode deve essere uguale, se due oggetti hanno lo stesso hashCode non è detto che siano uguali.

Struttura dati eterogenee

Se dichiariamo: Object[] v = new Object[10]; si possono memorizzare in v oggetti di qualunque classe concreta (ereditarietà). L’array è per tanto eterogeneo.

Variabile di ambiente

Le variabili di ambiente hanno un nome ed un valore, e riconosce l’ambiente del S.O.. Consente di effettuare un settaggio valevole quando il codice è eseguito.

Anteprima
Vedrai una selezione di 13 pagine su 60
Appunti per Esame Programmazione orientata agli oggetti Pag. 1 Appunti per Esame Programmazione orientata agli oggetti Pag. 2
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 6
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 11
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 16
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 21
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 26
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 31
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 36
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 41
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 46
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 51
Anteprima di 13 pagg. su 60.
Scarica il documento per vederlo tutto.
Appunti per Esame Programmazione orientata agli oggetti Pag. 56
1 su 60
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze economiche e statistiche SECS-P/08 Economia e gestione delle imprese

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher stefano-brusco2001 di informazioni apprese con la frequenza delle lezioni di Programmazione orientata agli oggetti e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università della Calabria o del prof Nigro Libero.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community