![Page 1: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/1.jpg)
1PR22017-2018
PROGRAMMAZIONE28.Astrazionisuida=:implementazionedi=pididatoastraCinJava
![Page 2: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/2.jpg)
AbstractDataType
• Uninsiemedivalori• Uninsiemedioperazionichepossonoessereapplicateinmodouniformeaivalori
• NONècara<erizzatodallarappresentazionedeida>o Larappresentazionedeida>èprivata,senzaeffe<osulcodicecheu>lizzail>podidato
o Larappresentazionedeida>èmodificabilenelcasodiADTmutabili
2PR22017-2018
![Page 3: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/3.jpg)
SpecificareunADT
• LaspecificadiunADTèuncontra<ochedefinisceo valori,operazioniinterminidinome,parametri>po,effe<oosservabile
• Separa&onofconcernso Proge<azioneerealizzazionedelADTo Proge<azioneapplicazionecheu>lizzaADT
3PR22017-2018
![Page 4: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/4.jpg)
SpecificheconJavadoc
• Javadoc:nonesisteunanotazioneformale,masolouninsiemediconvenzioni
• Javadoc:leprincipaliconvenzionio Segnatura(>po)deimetodio Descrizionetestualedelcomportamentoa<eso(astrazionesulcomportamento)
o DalladocumentazionediJavao @param:descrip>onofwhatgetspassedino @return:descrip>onofwhatgetsreturnedo @throws:excep>onsthatmayoccur
4PR22017-2018
![Page 5: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/5.jpg)
Esempio:String.contains
publicbooleancontains(CharSequences)Returnstrueifandonlyifthisstringcontainsthespecifiedsequenceofcharvalues.
Parameters:s-thesequencetosearchfor
Returns:trueifthisstringcontainss,falseotherwise
Throws:NullPointerExcep=on
Since:1.5
5PR22017-2018
![Page 6: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/6.jpg)
Ilnostroformatodellaspecifica
public class NuovoTipo { // OVERVIEW: Gli oggetti di tipo NuovoTipo // sono collezioni modificabili di ...
// costruttori public NuovoTipo()
// EFFECTS: ...
// metodi // specifiche degli altri metodi}
6 PR22017-2018
![Page 7: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/7.jpg)
Alterna>vaequivalente
• Lapre-condizionedelmetodo:dichiaraivincolichedevonovalereprimadellainvocazionedelmetodo(seivincolinonsonosodddisfaTallorailcontra<ononvale)– @requires:l’obbligodelcliente
• Lapost-condizionedelmetodo:dichiaraqualisonoleproprietàchedevonovalerealterminedell’esecuzionedelmetodo(nell’ipotesichelapre-condizionesiavalida)– @modifies:descrivelaportatadellemodificheeffe<uatedurante
l’esecuzione.Sololeen>tàdescri<enellaclausola“modifies”sonoeffeTvamentemodificate
– @throws: leeccezionichepossonoesseresollevate(comeJavadoc)– @effects: proprietàchevalgonosullostatomodificato– @return:ilvalorechevieneres>tuito(comeJavadoc)
7PR22017-2018
![Page 8: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/8.jpg)
Esempio(conVector)
int change(Vector vec, Object oldelt, Object newelt)@requires v, oldelt e newelt sono valori non-null
oldelt appartiene a vec
@modifies vec@effects la prima occorrenza del valore oldelt in
vec viene modificata con il valore newelt & gli altri elementi di vec non sono modificati
@returns l’indice della posizione in vec che
conteneva il valore oldelt e che oracontiene il valore newelt
8PR22017-2018
![Page 9: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/9.jpg)
Osservazione
• Supponiamocheilclientedell’astrazioneinvochiilmetodomachelepre-condizionidelmetodononsianoverificate.Ilcodicedelmetodoèliberodifarequalunquecosadatochenonèvincolatodallapre-condizioneo Èopportunogenerareunfallimentopiu<ostochegeneraredeicomportamen>misteriosi
9PR22017-2018
![Page 10: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/10.jpg)
IntSet
public class IntSet { // OVERVIEW: un IntSet è un insieme modificabile // di interi di dimensione qualunque // costruttore public IntSet( )
// EFFECTS: inizializza this all’insieme vuoto // metodi public void insert(int x)
// EFFECTS: aggiunge x a this public void remove (int x)
// EFFECTS: toglie x da this public boolean isIn(int x)
// EFFECTS: se x appartiene a this ritorna true, // altrimenti false ...}
10 PR22017-2018
![Page 11: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/11.jpg)
IntSet
public class IntSet { ... // metodi ... public int size( )
// EFFECTS: ritorna la cardinalità di this public int choose( ) throws EmptyException
// EFFECTS: se this è vuoto, solleva // EmptyException, altrimenti ritorna un // elemento qualunque contenuto in this}
11 PR22017-2018
![Page 12: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/12.jpg)
Esempidiuso
myIntSet=newIntSet();:IfmyIntSet.IsIn(50)thenSystem.out.println(…)//Usocorre@o:myIntSet=50;//Usononcorre@o
12PR22017-2018
![Page 13: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/13.jpg)
Specificheeimplementazioni
SupponiamocheImplsiaunapossibileimplementazionedellaspecificadell’astrazioneSImplsodddisfaSse
o ognicomportamentodiImplèuncomportamentopermessodallaspecificaS
o “icomportamen>diImplsonounso<oinsiemedeicomportamen>specifica>daS”
SeImplnonsoddisfaS,alloraImploppureSnonsono“correT”o pragma>camenteèmegliocambiarel’implementazionechelaspecifica
13PR22017-2018
![Page 14: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/14.jpg)
Specifiche
• Potremmoavereduespecifichedifferen>dellostessaastrazione
• Magarivorremmoancheconfrontarle!!
14PR22017-2018
![Page 15: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/15.jpg)
Esempio
int find(int[ ] a, int value) { for (int i = 0; i < a.length; i++) if (a[i] == value) return i; return -1; }
• SpecificaAo requires:valueèunvalorememorizzatonell’arrayao return:indiceitalechea[i]=value
• SpecificaBo requires:valueèunvalorememorizzatonell’arrayao return:ilpiùpiccoloindiceitalechea[i]=value
• SpecificaCo return:l’indiceitalechea[i]=value,oppure-1nelcasoincuivaluenon
siamemorizzatonell’arraya
15PR22017-2018
![Page 16: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/16.jpg)
Valutazione
• Unaspecifica“forte”– difficiledasoddisfare(maggiorenumerodivincolisull’implementazione)
– faciledausare(ilclientedell’astrazionepuòfaremaggioriassunzionisulcomportamento)
• Unaspecifica“debole”– faciledaverificare(faciledaimplementare,moltoimplementazionilapossonosoddisfare)
– difficiledausareperilminornumerodiassunzioni
16PR22017-2018
![Page 17: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/17.jpg)
Unavisioneformale
• Unaspecificaèunaformulalogicao S1èpiùfortediS2seS1implicaS2
• LoavetevistoformalmenteaLPPo trasformatelaspecificainunaformulalogicaepoiverificatel’implicazione(S1⇒S2)
17PR22017-2018
![Page 18: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/18.jpg)
Astrazionisuida>:implementazione
• Sceltafondamentaleèquelladellarappresentazione– comeivaloridel>poastra<osonoimplementa>interminidialtri>pi• >piprimi>viogiàimplementa>• nuovi>piastraTchefacilitanol’implementazionedelnostro
– tali>pivengonospecifica>– metodologia:iterazionedelprocessodidecomposizionebasatosuastrazioni
– lasceltadevetenercontodellapossibilitàdiimplementareinmodoefficienteicostru<orieglialtrimetodi
• Poivienel’implementazionedicostru<oriemetodi
18PR22017-2018
![Page 19: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/19.jpg)
Larappresentazione
• Ilinguaggicheperme<onoladefinizionedi>pididatoastraThannomeccanismimoltodiversitraloroperdefinirecomeo ivaloridelnuovo>posonoimplementa>interminidivaloridialtri>pi
• InJava,glioggeTdelnuovo>posonosemplicementecollezionidivaloridialtri>pio definite(nellaimplementazionedellaclasse)dauninsiemedivariabilidiistanzaprivate! accessibilisolodaicostru<oriedaimetodidellaclasse
19PR22017-2018
![Page 20: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/20.jpg)
Definireun>poinJava
• Uninsiemedivariabilidiistanza(devonoesseredell’ogge<oenondellaclasse)o private:devonoessereaccessibilisolodaicostru<oriedaimetodidellaclasse
• Ivaloriesplici>chesivedonosonosoloquellicostrui>daicostru<orio piùomenoicasibasediunadefinizionericorsiva
• Glialtrivalorisonoeventualmentecalcola>daimetodio rimanenascostal’eventualestru<uraricorsiva
20PR22017-2018
![Page 21: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/21.jpg)
Usi“correT”delleclassiinJava
• Nelladefinizionediastrazionisuida>o leclassicontengonoessenzialmentemetodidiistanzaevariabilidiistanzaprivate! eventualivariabilista>chepossonoservire(maè“sporco”!)peravereinformazionecondivisafraoggeTdiversi
! eventualimetodista>cinonpossonocomunquevederel’ogge<oeservonosoloamanipolarelevariabilista>che
21PR22017-2018
![Page 22: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/22.jpg)
I>pirecordinJava
• Javanonhaunmeccanismoprimi>voperdefinire>pirecord(lestructdiC)o maèfacilissimodefinirlio ancheseconunadeviazionedaidiscorsimetodologicicheabbiamofa<o! larappresentazionenonènascosta(nonc’èastrazione!)! noncisonometodi! difa<ononc’èunaspecificaseparatadall’implementazione
22PR22017-2018
![Page 23: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/23.jpg)
Un>porecord
class Pair {// OVERVIEW: un tipo record
int coeff, exp; // costruttore Pair(int c, int n) {
// EFFECTS: inizializza il “record” con i // valori di c ed n coeff = c; exp = n;
}}
• Larappresentazionenonènascosta– dopoavercreatoun’istanzasiaccedonodire<amentei“campidelrecord”
• Lavisibilitàdellaclasseedelcostru<oreèristre<aalpackageincuifigura• Noncisonometodidiversidalcostru<ore
23PR22017-2018
![Page 24: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/24.jpg)
ImplementazionediIntSet
public class IntSet {// OVERVIEW: un IntSet è un insieme modificabile
// di interi di dimensione qualunque private Vector els; // la rappresentazione // costruttore public IntSet( ) {
// EFFECTS: inizializza this all’insieme vuoto els = new Vector( );
}...
}
• UninsiemediinterièrappresentatodaunVector– piùada<odell’array,perchéhadimensionevariabile
• Glielemen>diunVectorsonodi>poObject– nonpossiamomemorizzarcivaloridi>point(usiamoInteger!)
24PR22017-2018
![Page 25: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/25.jpg)
ImplementazionediIntSet
public void insert(int x) { // EFFECTS: aggiunge x a this
Integer y = new Integer(x); if (getIndex(y) < 0) els.add(y); } private int getIndex(Integer x) {
// EFFECTS: se x occorre in this ritorna la // posizione in cui si trova, altrimenti -1 for (int i = 0; i < els.size( ); i++) if (x.equals(els.get(i))) return i; return -1; }
• Nonabbiamooccorrenzemul>pledielemen>– sisemplifical’implementazionediremove
• IlmetodoprivatoausiliariogetIndexritornaunvalorespecialeenonsollevaeccezioni– vabeneperchéèprivato
• Notarel’usodelmetodoequalssuInteger25
![Page 26: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/26.jpg)
ImplementazionediIntSet
public void remove(int x) { // EFFECTS: toglie x da this
int i = getIndex(new Integer(x)); if (i < 0) return; els.set(i, els.lastElement( )); els.remove(els.size( ) - 1);
}public boolean isIn(int x) { // EFFECTS: se x appartiene a this ritorna
// true, altrimenti false return (getIndex(new Integer(x)) >= 0);
}
• Nellarimozione,sel’elementoèpresente,ciscrivosopral’ul>mocorrenteedeliminol’ul>moelemento
26PR22017-2018
![Page 27: PROGRAMMAZIONE 2 8. Astrazioni sui da ...pages.di.unipi.it/gadducci/PR2-17/PR2-17-008.pdfdato astra hanno meccanismi molto diversi tra loro per definire come o i valori del nuovo](https://reader035.vdocumenti.com/reader035/viewer/2022062509/60f01b958fd6b65b12039299/html5/thumbnails/27.jpg)
ImplementazionediIntSet
public int size( ) { // EFFECTS: ritorna la cardinalità di this return els.size();
}public int choose( ) throws EmptyException {
// EFFECTS: se this è vuoto, solleva // EmptyException, altrimenti ritorna un // elemento qualunque contenuto in this if (els.size() == 0) throw new EmptyException(“IntSet.choose”); return ((Integer) els.lastElement()).intValue();
}
• AncheselastElementpotessesollevareun’eccezione,inquestocasononpuòsuccedere.Comemai?
27PR22017-2018