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


Linguaggio Java - Fondamenti di informatica, Appunti di Fondamenti di informatica

Nozioni medio-base sul linguaggio Java

Tipologia: Appunti

2020/2021
In offerta
30 Punti
Discount

Offerta a tempo limitato


Caricato il 08/03/2022

Luca_Iovene
Luca_Iovene 🇮🇹

4

(1)

4 documenti

1 / 29

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Con programmazione orientata agli oggetti si indica un paradigma di programmazione.
Secondo tale paradigma un programma viene visto come un insieme di oggetti software che
interagiscono tra loro.
Un oggetto modella un aspetto della realtà d'interesse:
Memorizza i dati necessari a rappresentare tale aspetto
-
Offre le funzionalità per operare su tali dati
-
Per esempio il nostro televisore può essere un oggetto.
I dati memorizzati sono l'elenco dei canali, livello di luminosità o contrasto
-
Le funzionalità sono cambiare canale, sintonizzazione ecc.
-
Un oggetti viene quindi utilizzato tramite le sue funzionalità.
Per farlo si deve conoscere quali sono le funzionalità e come si usano, ossia conoscere la sua interfaccia.
Non è necessario conoscere come sono realizzati gli oggetti per usarli.
È bene però che chi usa un oggetto non abbia la possibilità di operare su di esso in un modo diverso da
quello previsto dalla sua interfaccia (incapsulamento).
Gli oggetti quindi interagiscono tramite le loro interfacce, e quando un oggetto ne deve utilizzare un
altro, in fase di progettazione basta conoscere l'interfaccia del secondo oggetto per poterlo utilizzare.
Ogni oggetto può essere composto di altri oggetti.
L'approccio orientato agli oggetti rende più semplice la creazione di applicazioni complesse, infatti così
facendo i diversi oggetti che compongono l'applicazione possono essere progettati e realizzati
separatamente anche da sviluppatori diversi sempre a patto che si conoscano le interfacce gli uni degli
altri.
Questo approccio rende inoltre più semplice la manutenzione, infatti in caso di errori o di miglioramenti
del software si può intervenire solo sugli oggetti coinvolti.
Un concetto correlato a quello di oggetto ed altrettanto importante è il concetto di classe.
Nella programmazione orientata agli oggetti non si progettano e realizzano singoli oggetti, ma insiemi di
oggetti dello stesso tipo, cioè classi di oggetti.
Una classe descrive come sono fatti gli oggetti di un certo tipo:
Quali dati memorizzano e quali funzionalità offrono
-
In un certo senso il progetto di oggetti di un certo tipo (una specie di prototipo per le funzioni in C)
-
Gli oggetti sono quindi istanze di una classe, che hanno in comune gli stessi dati e le stesse funzionalità.
D13-
Programm…
Programmazione Orientata agli Oggetti
martedì 21 settembre 2021
18:51
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
Discount

In offerta

Anteprima parziale del testo

Scarica Linguaggio Java - Fondamenti di informatica e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

Con programmazione orientata agli oggetti si indica un paradigma di programmazione. Secondo tale paradigma un programma viene visto come un insieme di oggetti software che interagiscono tra loro. Un oggetto modella un aspetto della realtà d'interesse:

  • Memorizza i dati necessari a rappresentare tale aspetto
  • Offre le funzionalità per operare su tali dati Per esempio il nostro televisore può essere un oggetto.
  • I dati memorizzati sono l'elenco dei canali, livello di luminosità o contrasto
  • Le funzionalità sono cambiare canale, sintonizzazione ecc. Un oggetti viene quindi utilizzato tramite le sue funzionalità. Per farlo si deve conoscere quali sono le funzionalità e come si usano, ossia conoscere la sua interfaccia. Non è necessario conoscere come sono realizzati gli oggetti per usarli. È bene però che chi usa un oggetto non abbia la possibilità di operare su di esso in un modo diverso da quello previsto dalla sua interfaccia (incapsulamento). Gli oggetti quindi interagiscono tramite le loro interfacce, e quando un oggetto ne deve utilizzare un altro, in fase di progettazione basta conoscere l'interfaccia del secondo oggetto per poterlo utilizzare. Ogni oggetto può essere composto di altri oggetti. L'approccio orientato agli oggetti rende più semplice la creazione di applicazioni complesse, infatti così facendo i diversi oggetti che compongono l'applicazione possono essere progettati e realizzati separatamente anche da sviluppatori diversi sempre a patto che si conoscano le interfacce gli uni degli altri. Questo approccio rende inoltre più semplice la manutenzione, infatti in caso di errori o di miglioramenti del software si può intervenire solo sugli oggetti coinvolti. Un concetto correlato a quello di oggetto ed altrettanto importante è il concetto di classe. Nella programmazione orientata agli oggetti non si progettano e realizzano singoli oggetti, ma insiemi di oggetti dello stesso tipo, cioè classi di oggetti. Una classe descrive come sono fatti gli oggetti di un certo tipo:
  • Quali dati memorizzano e quali funzionalità offrono
  • In un certo senso il progetto di oggetti di un certo tipo (una specie di prototipo per le funzioni in C) Gli oggetti sono quindi istanze di una classe, che hanno in comune gli stessi dati e le stesse funzionalità.

D13-

Programm…

Programmazione Orientata agli Oggetti

martedì 21 settembre 2021 18:

I diversi oggetti di una stessa classe hanno cicli di vita indipendenti: ogni oggetto viene creato e distrutto indipendentemente dagli altri oggetti della stessa classe. Infatti in ogni momento i diversi oggetti hanno una diversa configurazione dei loro dati, hanno cioè un diverso stato.

Classi e oggetti

Un programma è la definizione di un certo numero di classi. Ogni classe ha un nome e descrive le caratteristiche di una tipologia di oggetti:

  • come gli oggetti sono fatti: attributi (detti anche proprietà o campi)
  • cosa gli oggetti sanno fare: metodi (quali servizi offrono a chi li vuole usare) L'insieme dei metodi di un oggetto costituisce la sua interfaccia e definisce il suo comportamento due istanze (oggetti) di una stessa classe sono:
  • simili, perché hanno gli stessi attributi e lo stesso comportamento diversi, perché hanno cicli di vita indipendenti, cioè si possono usare in modo diverso e i loro attributi assumono in generale valori diversi nel tempo

lo stato di un oggetto è l'insieme di valori assunti dai suoi attributi in un determinato istante di tempo, proprio come una fotografia istantanea durante il corso rappresenteremo le classi con il modello UML (Unified Modeling Language). Il nome di una classe descrive la tipologia di oggetti rappresentata da quella classe. In ogni linguaggio esistono regole sintattiche sui caratteri utilizzabili per definire il nome di una classe, in Java il nome di una classe non può:

  • il primo carattere non può essere una cifra non può contenere caratteri speciali (simboli di punteggiatura, spazi bianchi, operatori aritmetici, parentesi,...)

oltre alle regole, in java esistono delle convenzioni diffuse per definire il nome di una classe che facilitano la comprensione del codice: Ogni parola inizia con la maiuscola e tutte le altre lettere sono minuscole e le parole devono essere concatenate tra loro

Per quanto riguarda gli attributi, questi definiscono le proprietà strutturali degli oggetti della classe. ogni attributo deve memorizzare un valore di un certo tipo. Un attributo sarà quindi paragonabile ad una varabile: come tutte le variabili l'attributo può assumere un solo valore alla volta, ma tale valore può variare molte volte nel tempo, cioè durante il ciclo di vita di un oggetto

come ogni variabile, un attributo è descritto da:

  • un tipo, detto tipo dell'attributo (o dominio)
  • un nome che lo identifica rispetto ai tipi ne esistono due macro-categorie:
  • tipi primitivi: numeri interi, numeri reali, caratteri e il tipo booleano
  • tipi di riferimento: sono tipi che vengono definiti al momento della creazione della classe. rispetto ai nomi degli attributi ci sono anche qui delle regole e sono le stesse delle classi, anche le convenzioni sono analoghe ma nei nomi composti da più parole la prima ha iniziale minuscola, mentre le altre parole maiuscole. (Esempio: nomeCliente)

l'invocazione di un metodo che ha un tipo di ritorno diverso da void costituisce una espressione:

  • il valore dell'espressione è il valore restituito dal metodo al termine della sua esecuzione
  • si dice anche che all'invocazione del metodo rimane associato il valore che il metodo restituisce gli attributi e i metodi di un oggetto si chiamano anche attributi e metodi di istanza in una classe è tuttavia possibile definire anche attributi e medo di classe (o statici) per distinguere attributi e metodi di classe, ogni linguaggio prevde una parola chiave da specificare all'atto della definizione
  • come vedremo più avanti, java richiedde la parola chiave static nella notazione grafica UML, gli attributi e i metodi di classe vengono sottolienati

D14-Uso- Classi… UnÊprogrammaÊjavaÊèÊcompostoÊdaÊunÊinsiemeÊdiÊclassi. IlÊcodiceÊdiÊogniÊclasseÊvaÊscrittoÊinÊunÊfileÊdiÊtestoÊcheÊhaÊilÊnomeÊdellaÊclasseÊeÊl'stensioneÊ.java UnaÊdelleÊclassiÊcheÊcompongonoÊilÊprogrammaÊdeveÊcontenereÊunÊmetodoÊspecialeÊchiamatoÊ"main". EÊl'esecuzioneÊdelÊprogrammaÊiniziaÊeÊterminaÊconÊl'ultimaÊistruzioneÊdelÊmain. IlÊmetodoÊspecialeÊmainÊèÊunÊmetodoÊdiÊclasseÊcheÊrappresentaÊunÊservizioÊoffertoÊdallaÊclasseÊcheÊsiÊrichiedeÊdiÊ eseguire. IÊfileÊdelleÊvarieÊclassiÊdiÊunÊprogrammaÊpossonoÊtrovarsiÊdistribuitiÊinÊdiverseÊdirectory. RealizzeremoÊilÊprimoÊprogrammaÊcheÊchiameremoÊPrimoProgÊcheÊscriveràÊilÊmessaggioÊ"ilÊmioÊprimoÊprogramma". IlÊprogrammaÊèÊcompostoÊdaÊ3Êclassi: String:ÊèÊunaÊclasseÊmoltoÊusata,ÊfornitoÊdagliÊsviluppatoriÊdiÊjava;ÊunÊsuoÊoggettoÊrappresentaÊunaÊqualunqueÊ sequenzaÊfinitaÊdiÊcaratteri.

OutputWindows:ÊclasseÊfornitaÊdagliÊautoriÊdiÊquestoÊcorso;ÊunÊsuoÊoggettoÊrappresentaÊunaÊfinestraÊgraficaÊnellaÊ qualeÊèÊpossibileÊscrivereÊmessaggi

PrimoProg:ÊèÊlaÊclasseÊcheÊdovremoÊscrivereÊnoi,ÊedÊèÊquellaÊcheÊconterràÊilÊmetodoÊspecialeÊmain,ÊdalÊqualeÊavràÊ inizioÊl'esecuzioneÊdelÊprogramma

PerÊusareÊlaÊclasseÊOutputWindowsÊciÊbastaÊconoscereÊlaÊsuaÊinterfacciaÊossiaÊl'intestazioneÊdeiÊmetodi. InÊparticolareÊciÊbastaÊsapereÊcheÊuseremoÊilÊmetodo VoidÊwrite(StringÊs) InÊjava,ÊlaÊstrutturaÊdelÊcodiceÊdiÊunaÊclasseÊrifletteÊquellaÊutilizzataÊconÊlaÊnotazioneÊgraficaÊUML PerÊilÊmomentoÊvogliamoÊimparareÊaÊscrivereÊclassiÊmoltoÊsempliciÊsenzaÊattributiÊeÊconÊunÊsoloÊmetodo,ÊossiaÊilÊmain. LaÊclasseÊPrimoProgÊavràÊproprioÊquestaÊstruttura;ÊilÊsuoÊmetodoÊmainÊdovràÊcreareÊunÊoggettoÊdiÊtipoÊOutputWindowÊeÊ invocareÊilÊmetodoÊwriteÊsuÊtaleÊoggetto,ÊpassandogliÊcomeÊparametroÊattualeÊlaÊstringaÊ“ilÊmioÊprimoÊprogramma”

Uso di classi e oggetti

martedìÊ2ÊnovembreÊ2021 08:

gliÊeventualiÊparametriÊattualiÊcheÊilÊcostruttoreÊsiÊaspettaÊdiÊricevere: NewÊ<nomeÊcostruttore>Ê(<parametriÊattuali>) PerÊcreareÊl'oggetto,Êl'istruzioneÊnewÊriservaÊunoÊspazioÊnellaÊmemoriaÊfisicaÊ(RAM)ÊdelÊcalcolatore

  • InÊtaleÊspazioÊvengonoÊscritteÊtutteÊleÊinformazioniÊsull'oggettoÊcreato,ÊcioèÊilÊsuoÊstatoÊedÊiÊsuoiÊmetodi AffinchéÊl'oggettoÊcreatoÊpossaÊessereÊutilizzato,Êl'istruzioneÊnewÊrestituisceÊilÊsuoÊriferimento (cheÊequivaleÊ all'indirizzoÊdellaÊzonaÊdiÊmemoriaÊdoveÊrisiedeÊl'oggetto).

DopoÊaverÊcreatoÊl'oggetto,ÊilÊnewÊrichiamaÊilÊcostruttoreÊspecificato,ÊilÊqualeÊinizializzeràÊloÊstatoÊdiÊtaleÊoggetto LaÊparolaÊchiaveÊnewÊèÊunÊoperatore:

  • L'operatoreÊnewÊèÊunÊoperatoreÊunario,ÊcioèÊapplicatoÊadÊunÊsoloÊoperandoÊ(ilÊcostruttoreÊcheÊloÊsegue) l’operatoreÊnewÊrestituisceÊilÊriferimentoÊall’oggettoÊcreato,ÊcioèÊall’istruzioneÊnewÊeseguitaÊrimarràÊassociatoÊilÊ riferimentoÊall’oggetto

laÊcreazioneÊdiÊunÊoggettoÊtramiteÊilÊnew(piùÊilÊcostruttore)ÊèÊquindiÊun’espressioneÊilÊcuiÊtipoÊèÊilÊtipoÊriferimentoÊ definitoÊdallaÊclasseÊdell’oggetto

  • GUARDAREÊSLIDEÊ31ÊeÊ PerÊassegnareÊunÊvaloreÊadÊunaÊvariabileÊriferimentoÊsiÊdeveÊusareÊilÊsimboloÊ"="Ê(operatore di assegnazione) UnaÊvariabileÊriferimentoÊhaÊunaÊzonaÊdiÊmemoriaÊ(ram)Êassociata,ÊcheÊserveÊperÊmemorizzarÊilÊsuoÊvaloreÊcorrenteÊ(ilÊ riferimentoÊadÊunÊoggetto) GUARDAREÊSLIDEÊ35ÊeÊ InÊjavaÊnonÊc'èÊmodoÊdiÊaccedereÊeÊmanipolareÊiÊriferimenti. PerÊquestoÊmotivoÊunaÊvariabileÊriferimentoÊpuòÊessereÊusataÊnelÊprogrammaÊperÊindicareÊl'oggettoÊcheÊreferenziaÊ senzaÊbisognoÊdell'operatoreÊdiÊindirezioneÊ(*) MentreÊiÊpuntatoriÊsonoÊindirizziÊdiÊmemoria,ÊiÊriferimentiÊpotrebberoÊancheÊessereÊimplementatiÊinÊmanieraÊdiversa. UnaÊistruzioneÊcompostaÊpuòÊessereÊscompostaÊinÊistruzioniÊpiùÊsemplici: OutputWindowoutÊ=ÊnewOutputWindow(); Diventa: OutputWindowout; outÊ=ÊnewOutputWindow();

FaseÊoperativa

VediamoÊoraÊcom'èÊpossibileÊoperativamenteÊeffettualeÊleÊseguentiÊattività:

  • ScritturaÊdelÊprogramma
  • CompilazioneÊdelÊprogramma
  • EsecuzioneÊdelÊprogramma PerÊalcuniÊdettagliÊtecniciÊsiÊrimandaÊalÊtestoÊdiÊriferimentoÊdelÊcorso GUARDAREÊSLIDEÊ

Package

VogliamoÊoraÊcapireÊmeglio:

  • inÊcheÊmodoÊsiÊpossanoÊutilizzareÊclassiÊgiàÊpronteÊinÊPrimoProg(oÊinÊaltreÊclassiÊcheÊrealizzeremo)
  • InÊcheÊmodoÊsiaÊpossibileÊcompilareÊedÊeseguireÊcorrettamenteÊprogrammiÊcompostiÊdaÊpiùÊclassi AÊtalÊfineÊdefiniamoÊcos'èÊilÊpackage UnÊpackageÊinÊJavaÊrappresentaÊunÊgruppoÊdiÊclassiÊconÊfunzionalitàÊaffiniÊ(es.Êgrafica,Êinput/output,Ê…) EsisteÊunaÊassociazioneÊtraÊpackageÊeÊdirectory:
  • perÊdefinireÊunÊpackageÊdiÊnomeÊx,ÊoccorreÊcreareÊunaÊdirectoryÊdiÊnomeÊx
  • perÊdefinireÊunÊpackageÊyÊinternoÊadÊx,ÊoccorreÊcreareÊunaÊdirectoryÊyÊall’internoÊdiÊx ogniÊclasseÊCÊdiÊunÊpackageÊxÊvaÊscrittaÊinÊunÊfileÊC.javaÊall’internoÊdellaÊdirectoryÊx;Êall’inizioÊdelÊfileÊC.javaÊvaÊ riportataÊlaÊspecifica:ÊpackageÊx;

SeÊinÊunÊfileÊC.javaÊnonÊèÊspecificatoÊilÊpackageÊdiÊappartenenza,ÊlaÊclasseÊCÊvieneÊassociataÊadÊunÊcosìÊdettoÊpackageÊdiÊ defaultÊ UnaÊclasseÊpuòÊutilizzareÊliberamenteÊclassiÊdelÊsuoÊstessoÊpackageÊ(aÊmenoÊcheÊnonÊsianoÊprivate) UnaÊclasseÊpuòÊutilizzareÊsoloÊclassiÊpubblicheÊdiÊunÊpackageÊdiversoÊdalÊsuo:

  • èÊnecessarioÊutilizzareÊunaÊdirettivaÊdiÊimportazione,ÊcheÊspecifichiÊl’interoÊpercorsoÊdellaÊclasseÊcheÊsiÊvuolÊusare; adÊesempio,ÊseÊunaÊclasseÊAÊdeveÊusareÊun’altraÊclasseÊBÊdiÊunÊpackageÊyÊinternoÊadÊunÊpackageÊx,ÊnelÊfileÊA.javaÊ devoÊscrivere:ÊimportÊx.y.B
  • ScrivendoÊimportÊx.y.*ÊpotròÊusareÊtutteÊleÊclassiÊcheÊappartengonoÊdirettamenteÊalÊpackageÊyÊall’internoÊdiÊx

APIÊdiÊJava

JavaÊoffreÊunÊampioÊinsiemeÊdiÊclassiÊgiàÊpronteÊperÊl'uso,ÊsuddivideÊinÊpackage QuestaÊlibreriaÊdiÊclassiÊsiÊchiamaÊAPIÊ(ApplicationÊProgrammingÊInterface)ÊdiÊjava. OgniÊpackageÊdell’APIÊdiÊJavaÊhaÊcomeÊradiceÊunÊpackageÊdiÊnomeÊjavaÊoppureÊjavax. LaÊclasseÊStringÊsiÊtrovaÊnelÊpackageÊsiÊtrovaÊnelÊpackageÊjava.langÊeÊquindiÊnonÊc'èÊbisognoÊdiÊimportarla InÊquestoÊcorsoÊvengonoÊforniteÊclassiÊaggiuntiveÊaÊquelleÊdell'APIÊdiÊJavaÊ(es.ÊlaÊclasseÊOutputWindow).

AncoraÊsullaÊclasseÊOutputWindow

LaÊclasseÊoffreÊaltriÊtreÊcostruttoriÊoltreÊaÊquelloÊvisto:

  • OutputWindowÊ(StringÊs):ÊpermetteÊdiÊspecificareÊilÊtitoloÊdellaÊfinestraÊdiÊoutput
  • OutputWindowÊ(intÊaltezza,ÊintÊlarghezza):ÊpermetteÊdiÊspecificareÊleÊdimensioniÊdellaÊfinestraÊdiÊoutput OutputWindowÊ(stringÊs,ÊintÊaltezza,ÊintÊlarghezza):ÊpermetteÊdiÊspecificareÊtitoloÊeÊdimensioniÊdellaÊfinestraÊdiÊ output

D15-Tipi- Variabili… IlÊtipoÊdiÊdatoÊèÊunoÊspecificoÊdominioÊdiÊvalori,ÊeÊleÊdueÊprincipaliÊcategorieÊinÊjavaÊsono:

  • TipiÊprimitivi:ÊdatiÊdiÊtipoÊnumerico,Êcaratteri,Êboolean
  • TipiÊriferimento:ÊriferimentiÊadÊoggetti UnaÊvariabileÊèÊunÊcontenitoreÊcheÊpuòÊmemorizzareÊvaloriÊdiÊunoÊspecificoÊtipoÊdiÊdato,ÊdettoÊtipo della variabile. L'espressioneÊèÊunÊcostruttoÊdelÊlinguaggioÊalÊqualeÊrimaneÊassociatoÊunÊvaloreÊdiÊunoÊspecificoÊtipoÊdiÊdato,ÊdettoÊtipo dell'espressione. IÊtipiÊriferimentoÊsonoÊassociatiÊalleÊclassi:
  • QuandoÊvieneÊdefinitaÊunaÊclasseÊCÊrestaÊautomaticamenteÊdefinitoÊilÊtipoÊriferimentoÊC UnaÊvariabileÊdiÊtipoÊCÊmemorizzaÊsolamenteÊriferimentiÊadÊoggettiÊdellaÊclasseÊC LaÊsintassiÊperÊdefinireÊunaÊvariabileÊriferimentoÊdiÊtipoÊCÊèÊloÊstessoÊperÊdefinireÊunaÊvariabileÊqualsiasi. InÊrealtàÊunaÊvariabileÊriferimentoÊpuòÊancheÊmemorizzareÊilÊvaloreÊnull.
  • NullÊèÊunaÊparolaÊchiaveÊdelÊlinguaggioÊJavaÊcheÊindicaÊunÊvaloreÊdiÊriferimentoÊcostante:ÊilÊnullo. AdÊunaÊespressioneÊriferimentoÊdiÊtipoÊCÊrimaneÊassociatoÊunÊriferimentoÊdiÊtipoÊC
  • LeÊvariabiliÊdiÊtipoÊCÊeÊilÊletteraleÊnullÊsonoÊespressioniÊelementariÊdiÊtipoÊC AltreÊespressioniÊriferimentoÊdiÊtipoÊCÊsono ○ IstruzioniÊdiÊcreazioneÊdiÊoggettiÊdiÊtipoÊC ○ InvocazioniÊdiÊmetodiÊcheÊrestituisconoÊunÊriferimentoÊdiÊtipoÊC

IÊtipiÊprimitiviÊinÊJavaÊsonoÊunÊinsiemeÊpredefinitoÊeÊnonÊestendibileÊeÊmodellanoÊtipiÊdiÊdatiÊparticolarmenteÊfrequentiÊinÊogniÊ programma. LeÊespressioniÊintereÊhannoÊvaloriÊdiÊtipoÊbyte,Êshort,ÊintÊoÊlong. IÊletteraliÊeÊleÊvariabiliÊintereÊsonoÊespressioniÊelementari;ÊJavaÊoffreÊdegliÊoperatoriÊaritmeticiÊcheÊconsentonoÊdiÊcomporreÊ espressioniÊcomplesse GliÊoperatoriÊaritmeticiÊdiÊbaseÊsonoÊgliÊstessiÊdelÊC. ComeÊinÊC,ÊsiÊpossonoÊusareÊparentesiÊperÊforzareÊleÊregoleÊdiÊprecedenzaÊdegliÊoperatori

  • siÊpossonoÊusareÊsoloÊparentesiÊtonde,ÊconÊunÊlivelloÊqualunqueÊdiÊannidamento AncheÊinÊjavaÊcomeÊinÊCÊesistonoÊgliÊoperatoriÊdiÊassegnazioneÊcomposta:

Tipi di variabili ed espressioni

lunedìÊ8ÊnovembreÊ2021 14:

AncheÊinÊJavaÊisÊpuòÊavereÊunaÊsituazioneÊdiÊoverflowÊoÊunÊunderflowÊaÊseguitoÊdell'esecuzioneÊdiÊunÊcalcolo. LeÊespressioniÊinÊvirgolaÊmobileÊsonoÊdiÊtipoÊdouble oÊfloat. QuandoÊvieneÊdefinitaÊunaÊvariabileÊdiÊtipoÊcharÊvieneÊassociatoÊunÊcarattereÊdell'alfabetoÊUnicode. IÊletteraliÊcharÊsonoÊsingoliÊcaratteriÊcheÊsiÊpossonoÊesprimereÊtraÊapiciÊsingoli. GUARDAREÊDIAPOSITIVE SiÊpuòÊfareÊilÊcastingÊesplicitoÊperÊforzareÊlaÊconversioneÊdiÊunÊvalore AÊdifferenzaÊdelÊCÊinÊJavaÊesisteÊesplicitamenteÊunÊtipoÊperÊrappresentareÊiÊvaloriÊdiÊverità. PerÊrappresentareÊquestiÊvaloriÊbasterebbeÊunÊbitÊmaÊinÊrealtàÊvengonoÊutilizzatiÊ8Êbit. SiÊpossonoÊusareÊancheÊgliÊoperatoriÊlogiciÊeÊsonoÊgliÊstessiÊdelÊC:

  • &&ÊAND
  • ||ÊOR
  • ^ÊORÊLOGICOÊESCLUSIVOÊ(XOR)
  • !ÊNEGAZIONE JavaÊnasceÊconÊl'intentoÊdiÊtrattareÊogniÊdatoÊcomeÊseÊfosseÊunÊoggetto,ÊtuttaviaÊiÊtipiÊprimitiviÊfannoÊeccezione. GUARDAREÊDIAPOSITIVE

Autoboxing

L'importanzaÊdelleÊclassiÊwrapperÊèÊlegataÊall'esigenzaÊdiÊpoterÊcreareÊcollezioniÊdiÊdatiÊprimitiviÊcheÊpossanoÊessereÊ manipolatiÊcomeÊfosseroÊdegliÊoggetti. PerÊagevolareÊilÊpassaggioÊdaÊunaÊdatoÊdiÊtipoÊWÊadÊunÊdatoÊdiÊtipoÊprimitivoÊwÊeÊviceversa,ÊleÊrecentiÊversioniÊdiÊJavaÊ adottanoÊdeiÊmeccanismiÊautomaticiÊdiÊconversioneÊimplicitaÊchiamatiÊautoboxing.

LaÊclasseÊMath

GliÊoperatoriÊmatematiciÊdiÊbaseÊperÊiÊtipoÊprimitiviÊnonÊsonoÊsempreÊsufficientiÊperÊeffettuareÊcalcoliÊmatematiciÊcomplessi. QuestaÊclasseÊnonÊvaÊimportataÊperchéÊinclusaÊnelÊpackageÊjava.langÊeÊoffreÊsoltantoÊmetodiÊpubbliciÊstaticiÊcheÊquindiÊvanno applicatiÊdirettamenteÊsugliÊoggetti.

LaÊclasseÊString

IÊsuoiÊoggettiÊrappresentanoÊstringheÊossiaÊsequenzeÊdiÊcaratteri.

Fino ad ora abbiamo imparato a:

  • Scrivere il main di una classe
  • Richiamare una classe e i suoi metodi Oggi realizzeremo ad esempio la classe Rettangolo simile a quella gia vista nella lezione D13. Un oggetto di tale classe avrà attributi:
  • Base
  • Altezza Avrà il seguente costruttore e i seguenti metodi: public Rettangolo (double b, double a): costruttore che permette di specificare base e altezza dell'oggetto creato
  • Public double perimetro()
  • Public double frazioneDiArea (double f)
  • Public void cambiaDimensioni Public static int rettCreati() : restituisce il numero di oggetti della classe Rettangolo creati fino a questo momento

Da notare che nel costruttore non viene specificato cosa viene restituito La struttura della classe Rettangolo sarà la seguente: Public class Rettangolo{ //attributi … //costruttori … //metodi … } Gli attributi di un oggetto debbono servire a memorizzare il valore della sua base e dell'altezza durante tutta la vita dell'oggetto Nella definizione di una classe, le variabili di istanza di classe si dichiarano all'interno del corpo della classe ma al di fuori dei corpi dei metodi Per inizializzare una variabile di istanza, cioè del su stato è tipicamente eseguita nel costruttore. Tuttavia nel momento in cui viene creato un nuovo oggetto la JVM assegna dei valori di default alle variabili e poi il costruttore le modifica. Le variabili di istanza possono essere inizializzate anche contestualmente alla loro dichiarazione. Il costruttore ha il compito di assegnare un valore iniziale alle variabili di istanza. Sappiamo che un costruttore è un metodo speciale:

  • Non ha variabili di ritorno
  • Genera un nuovo oggetto Se in una classe non si definisce un costruttore essa viene dotata automaticamente di un costruttore di default. Tale costruttore non ha parametri e non modifica gli attributi GUARDARE DIAPOSITIVE

Realizzazione di classi

martedì 9 novembre 2021 10:

Il costruttore della classe Rettangolo deve copiare i valori dei suoi parametri formali nelle variabili di istanza dell'oggetto su cui è stato invocato. Per farlo dovremmo scrivere questo codice Public Rettangolo (double b, double a) { This.base = b; This.altezza = a; } Il metodo perimetro serve a restituire il perimetro e ovviamente non ha parametri perché ha tutto ciò che gli serve all'interno dell'oggetto. E si scrive così Public double perimetro() { Double p; P = (this.base + this.altezza) * 2; Return p; } Allo stesso modo creiamo il metodo frazioneDiArea Possiamo, come già detto, creare delle variabili di classe, con il seguente codice: Private static int numIstanze = 0; Si riconosce che è una variabile di classe perché è statica. La variabile di classe inizia ad esistere nel momento in cui viene richiamata la classe per la prima volta. Per incrementare questo genere di variabile lo faremo all'interno del costruttore e per modificare questo genere di variabile dobbiamo scrivere Rettangolo.numIstanze++; Scriviamo all'inizio Rettangolo e non This perché è un attributo di classe e quindi va scritto il nome della classe. Una volta scritto il codice di una classe è buona prassi verificarne la correttezza. Una strategia che seguiremo in questo corso è quello di realizzare delle semplici classi di test:

  • Una classe di test per una classe C ha soltanto il metodo speciale main
  • Consente di eseguire tutti i metodi della classe da provare

In Java se scrivessimo b = a il nuovo array non conterrebbe la copia degli elementi, bensì copieremmo il riferimento agli elementi di a, un po' come se in C copiassimo il valore di un puntatore dentro un altro. Per copiarlo effettivamente dovremmo fare come in C ossia elemento per elemento dentro un ciclo for. PER ESEMPI GUARDARE IL PDF ElencoPre… TestElenco… A questo punto possiamo capire il parametro che compare nell'intestazione del metodo main. Tale parametro è un array di stringhe che viene convenzionalmente chiamato args. Ma a cosa serve quel parametro? Quando lanciamo un programma il main viene eseguito al momento dell'avvio del programma e nel momento in cui noi scriviamo: Java C Noi lanciamo l'esecuzione del programma C con gli argomenti che vengono passati al main e salvati dentro l'array args che avrà tanti argomenti quanti sono i parametri passati. Guardare slide 35 per esempio sull'uso.

Array a più dimensioni

Fin'ora abbiamo lavorato con array a singola dimensione ma esiste anche l'array di array. In parole povere abbiamo un array i cui elementi sono a loro volta degli array. Ovviamente si può andare anche oltre creando array tridimensionali e così via ma raramente li useremo. La sintassi è sempre la stessa. Quando io creo un array mi viene restituito un riferimento che noi memorizziamo in una variabile di tipo array. Nel caso di array di interi, tutte le celle verranno inizializzate a 0. Negli array bidimensionali quindi bisogna tenere conto che l'array a indica la prima parte monodimensionale, mentre a[i] indica l'array presente nella cella i di a. Seguendo questo ragionamento se creiamo un array a[5][3], se scriviamo a.lenght ci viene restituito 5, ma se scriviamo a[i].lenght ci viene restituito 3. Anche se noi li abbiamo considerati uguali, in realtà gli array bidimensionale sono più potenti rispetto alle matrici, infatti negli array bidimensionale possiamo fare in modo che ogni riga abbia una lunghezza diversa, essendo ogni riga un altro array.

Per farlo o indichiamo i singoli elementi al momento della dichiarazione oppure dichiariamo un array di righe specificate ma poi senza argomento dentro le parentesi quadre delle colonne e quindi specificando successivamente la grandezza delle colonne: double[][] a = new double[4][]; a[0] = new double[3]; a[1] = new double[2]; a[2] = new double[3]; a[3] = new double[1]; Per scandire gli elementi di un array bidimensionale dobbiamo usare un ciclo, quindi esattamente come facevamo in C con un doppio ciclo for uno dentro l'altro. Adesso faremo un esempio creando una classe Matrice i cui oggetti rappresentano matrici di numeri reali. GUARDARE SLIDE 55 PER LISTA METODI Matrice

conÊunaÊsempliceÊsotto-classe. PerÊquesteÊmotivazioniÊabbiamoÊbisognoÊ dell'istruzioneÊsuper(parametro,Êparametro,…) LaÊparolaÊsuper,ÊcomeÊilÊthisÊhaÊunÊdoppioÊuso: PerÊindicareÊl'oggettoÊsulÊmetodoÊinvocatoÊ (this.nome)

PerÊchiamareÊall'internoÊdelÊcostruttoreÊunÊ altroÊcostruttore

SeÊperÊesempioÊavessiÊunÊmetodoÊconÊloÊstessoÊ nomeÊdentroÊunaÊsotto-classeÊalloraÊconÊthisÊ indichereiÊilÊmetodoÊdellaÊsotto-classe,ÊinveceÊ usandoÊsuperÊusereiÊilÊmetodoÊdellaÊsuper-classe.

OverridingÊdiÊmetodi

ComeÊabbiamoÊgiàÊdettoÊunaÊsotto-classeÊereditaÊ iÊmetodiÊdellaÊsuper-classe. PeròÊdeiÊmetodiÊcheÊnoiÊereditiamoÊpossiamoÊ ridefinirliÊeÊmodificarliÊaÊnostroÊpiacimento. UnaÊclasseÊderivataÊpuòÊavereÊquindi:

  • MetodiÊereditatiÊ(eÊnonÊsovrascritti)
  • MetodiÊereditatiÊ(eÊsovrascritti)
  • MetodiÊpropri

AdombramentoÊdiÊvariabili

AnalogamenteÊaiÊmetodiÊancheÊleÊvariabiliÊ ereditateÊpossonoÊessereÊridefinite. InÊquestoÊcasoÊsiÊparlaÊdiÊadombramentoÊ(oÊ shadowing)ÊdellaÊvariabile. MentreÊl'overridingÊdeiÊmetodiÊèÊmoltoÊutileÊeÊ concessa,ÊloÊshadowingÊvieneÊmoltoÊsconsigliato. NonostanteÊsiaÊsconsigliatoÊèÊcomunqueÊ permessoÊperÊmodificareÊunaÊclasseÊbaseÊsenzaÊ invalidareÊleÊsotto-classi.

IlÊmodificatoreÊprotected

AbbiamoÊvistoÊcheÊunaÊclasseÊestesaÊereditaÊgliÊ attributiÊdiÊunaÊclasseÊbaseÊmaÊseÊsonoÊprivateÊ nonÊsiÊpossonoÊusare. IlÊmodificatoreÊprotectedÊciÊvieneÊinÊaiutoÊ permettendoÊalleÊsotto-classiÊsoltantoÊdiÊusareÊgliÊ attributiÊdellaÊclasseÊbase.

AÊsuaÊvoltaÊunaÊsotto-classeÊpuòÊessereÊusataÊ comeÊclasseÊbaseÊperÊun'ulterioreÊsotto-classe. PerÊesempioÊpotreiÊcreareÊunaÊclasseÊAtleta poiÊ unaÊsotto-classeÊcalciatore eÊpoiÊaÊsuaÊvoltaÊunaÊ sotto-classeÊportiere. InÊJavaÊnonÊèÊammessaÊl'ereditarietàÊmultiplaÊcioèÊ laÊpossibilitàÊcheÊunaÊsotto-classeÊderiviÊdaÊdueÊ classiÊbasi. Infine,ÊèÊpossibileÊdefinireÊunaÊclasseÊinÊmodoÊcheÊ nonÊsiaÊpossibileÊestenderla,ÊusandoÊlaÊparolaÊ chiaveÊfinal: PublicÊfinalÊclassÊPortiereÊ{} IlÊmodificatoreÊfinalÊpuòÊessereÊapplicatoÊancheÊ adÊunÊmetodoÊperÊevitareÊdiÊessereÊsovrascritto.

Polimorfismo

AbbiamoÊdettoÊcheÊun'istanzaÊdiÊunaÊclasseÊ derivataÊèÊancheÊun'istanzaÊdellaÊclasseÊbase. CiòÊsignificaÊcheÊovunqueÊioÊmiÊaspettiÊunÊoggettoÊ diÊtipoÊdellaÊsuper-classe,ÊpossoÊpassareÊunÊ oggettoÊdelÊtipoÊdellaÊsotto-classe. SeÊnoiÊperÊesempioÊscrivessimo:ÊAtletaÊaÊ=ÊnewÊ TennistaÊ(…); IÊmetodiÊcheÊpotremmoÊinvocareÊsarebberoÊsoloÊ quelliÊdiÊAtletaÊquestoÊperchéÊalÊmomentoÊdellaÊ creazioneÊèÊstatoÊriservatoÊspazioÊperÊunÊoggettoÊ diÊtipoÊAtleta. QuindiÊinÊgenerale:ÊciòÊcheÊioÊpossoÊinvocareÊsonoÊ soloÊiÊmetodiÊdefinitiÊnellaÊclasseÊcheÊdescriveÊ l'oggetto. NelÊcasoÊdiÊaÊsoloÊiÊmetodiÊdiÊAtleta. SeÊperÊesempioÊscrivessimoÊquestoÊcodice: AtletaÊaÊ=ÊnewÊTennistaÊ(…); MettiamoÊcasoÊperÊesempioÊcheÊdentroÊTennistaÊ ilÊmetodoÊtoStringÊvengaÊsovrascrittoÊalloraÊ nonostanteÊaÊsiaÊunÊoggettoÊdiÊAtleta,ÊvieneÊ eseguitoÊilÊmetodoÊdiÊTennista.