





















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
Nozioni medio-base sul linguaggio Java
Tipologia: Appunti
1 / 29
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!






















In offerta
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:
Programm…
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.
Un programma è la definizione di un certo numero di classi. Ogni classe ha un nome e descrive le caratteristiche di una tipologia di oggetti:
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ò:
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:
l'invocazione di un metodo che ha un tipo di ritorno diverso da void costituisce una espressione:
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”
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
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:
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
VediamoÊoraÊcom'èÊpossibileÊoperativamenteÊeffettualeÊleÊseguentiÊattività:
VogliamoÊoraÊcapireÊmeglio:
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:
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).
LaÊclasseÊoffreÊaltriÊtreÊcostruttoriÊoltreÊaÊquelloÊvisto:
D15-Tipi- Variabili… IlÊtipoÊdiÊdatoÊèÊunoÊspecificoÊdominioÊdiÊvalori,ÊeÊleÊdueÊprincipaliÊcategorieÊinÊjavaÊsono:
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
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:
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.
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.
IÊsuoiÊoggettiÊrappresentanoÊstringheÊossiaÊsequenzeÊdiÊcaratteri.
Fino ad ora abbiamo imparato a:
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:
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:
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
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.
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:
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.
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.
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.