Sei sulla pagina 1di 16

1

Software Architecture Lab


www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
ProgrammazioneconJava
Incapsulamento,overloading ecostruttori
INCAPSULAMENTO
Metodidiistanza,incapsulamento,overloadingecostruttori 2
2
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Incapsulamento
Lincapsulamentopermettedisepararelinterfaccia dallimplementazione
linterfaccia contienecichevisibileallesterno(cioachiutilizzalaclasseincapsulata)
limplementazione tuttiidettagliimplementativichesivogliononascondereachiutilizza
laclasseincapsulata
Chevantagginelleffettuareincapsulamento?
Riusodelcodice
Unprogrammatorecheusaunmetodochestatodefinitodaaltrinonnecessitadiconoscerei
dettagliimplementativi(ilbody!)
Ilprogrammatoredevosolo conoscerecosa ilmetodofaenoncome lofa
esempio:voiutilizzateilmetodoSavi t chI n. r eadI nt ( ) sapendocheleggedainputstandardun
valoreintero,manonvisietemaichiesticomelofa(enonviinteressa!!!!)
Possibilitdimodificarelimplementazione(adesempioperrenderelaclassepi
efficiente)senzacheleclassicheutilizzanoquellamodificataseneaccorgano
miaccorgochelimplementazionedelmetodolacuiinterfacciacercaCarattereutilizzaun
algoritmotroppoinefficiente,lomodificolasciandoinalteratalinterfaccia
Statodelloggettosempreconsistente
incapsulogliattributiepermettolaloromodificaattraversometodicheappartengono
allinterfacciaecheeffettuanoicontrolli
Metodidiistanza,incapsulamento,overloadingecostruttori 3
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Esempioincuicambiolimplementazione
publ i c cl ass Li neaTel ef oni ca{
publ i c St r i ng numer o;
publ i c St r i ng r est i t ui sci Pr ef i ssoI nt er nazi onal e( ) {
St r i ng nazi one = numer o. subst r i ng( 0, 4) ;
r et ur n nazi one;
}
}
Inblucicheappartieneallinterfaccia
Innerocicheapprtieneallimplementazione
publ i c cl ass Li neaTel ef oni ca{
publ i c St r i ng numer o;
publ i c St r i ng r est i t ui sci Pr ef i ssoI nt er nazi onal e( ) {
St r i ng nazi one = " " ;
f or ( i nt i =0; i <4; i ++) {
nazi one = nazi one + numer o. char At ( i ) ;
}
r et ur n nazi one;
}
}
tuttocichedichiaro
public appartieneallinterfaccia
Li neaTel efoni ca
+ numero: String
+ restrituisciPrefissoInternazionale() : String
Li neaTel efoni ca
+ numero: String
+ restrituisciPrefissoInternazionale() : String
Metodidiistanza,incapsulamento,overloadingecostruttori 4
3
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Esempio
LaclasseSemafororappresentaunsemaforodiunincrocio
stradale
publ i c cl ass Semaf or o{
publ i c St r i ng col or e;
publ i c voi d cambi aCol or e( ) {
i f ( col or e. equal s( " r osso") ) {
col or e = " ver de" ;
} el se {
i f ( col or e. equal s( " ver de") ) {
col or e = " gi al l o" ;
} el se {
i f ( col or e. equal s( " gi al l o" ) ) {
col or e = " r osso" ;
}
}
}
}
}
Semaforo
+ colore: String
+ cambiaColore() : void
Semaforo
+ colore: String
+ cambiaColore() : void
Metodidiistanza,incapsulamento,overloadingecostruttori 5
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Esempio
LimplementazionediSemaforoincapsulata?
PossomodificarelimplementazionesenzachelaclasseTestSemaforodebba
moficarla?
No!CambioiltipodicoloredaStringainteilmainnonfunzionapiu!
PossoignorareidettagliimplementativiinfasediutilizzodellaclasseSemaforo?
No!Avendolapossibilitdiaccedereacolore,devosaperedichetipo
Loggettos1rimanesempreinunostatoconsistente?
No!Possoassegnareilcoloreblusenzaalcunproblema.Masimaivistounsemaforo
blu?
publ i c cl ass Semaf or o{
publ i c st at i c voi d mai n( St r i ng a[ ] ) {
Semaf or o s1 = new Semaf or o( ) ;
s1. col or e = " r osso" ;
s1. cambi aCol or e( ) ;
s1. cambi aCol or e( ) ;
s1. col or e = " bl u" ; / / Er r or e
}
}
Metodidiistanza,incapsulamento,overloadingecostruttori 6
4
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Realizzarelincapsulamento
Distinguerefrainterfacciaeimplementazione
Gliattributidiistanzasonoundettaglioimplementativo,ilsignificato
datodalleoperazionichelemanipolano
esempio:IlsignificatodiunSemaforonondipendedalfattochelattributo
coloresiaditipoStringoint,madalfunzionamentodelmetodocambiaColore
Soluzione:modificatoridivisibilitperimpedireachiusaoggetti
accedadirettamenteagliattributiinscrittura
esempio:impedireachiusaoggettiSemaforodiaccedereall'attributo
colore,mettendoadisposizionesoloilmetodocambiaColore
Permetteresolostativalidiperglioggetti
Lostatodeglioggettideveconteneresemprevalorivalidi
esempio:blunonunvalorevalidoperilcolorediunSemaforo
Soluzione:controllaretuttelemodifichedellostatoattraversometodi
Metodidiistanza,incapsulamento,overloadingecostruttori 7
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Modificatoripublic eprivate
Nonconsideratabuonanormaprogrammativadichiararegli
attributidiistanzapubl i c!
nondevonofarpartedellinterfacciadellaclasse
Taliattributidevonoesseredichiaratipr i vat e!
devonoappartenereallimplementazione (sideveoperareancheper
loroincapsulamento)
Sesiutilizzailmodificatorepubl i c ognialtraclassepu
accedereinmanieradirettaallattributodiistanzaequindi
modificarlodirettamente!
Esempio:
Sorgente (Metodi_03)
Automobi l e
+ velocitaCorrente: int
+ proprietario: String
+ toString() : String
Automobi l e
+ velocitaCorrente: int
+ proprietario: String
+ toString() : String
Metodidiistanza,incapsulamento,overloadingecostruttori 8
5
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Gliattributiprivate
Dichiarareunattributodistanzaprivatecomportacheaccessibile
esclusivamenteallinternodellaclasseincuidefinito
Esempiocorretto:
Sorgente(Metodi_04)
Comegivistopossibiledichiarareancheimetodiprivate
talimetodisonometodidiserviziochevengonoinvocatidaaltri
esempio:
cal col aBase( ) ecal col aAl t ezza( ) sonometodidiservizioperla
classeRettangolocheesportasolometodiperilcalcolodellareaedel
perimetro
Selanormadichiararegliattributidistanzapr i vat e,come
faccioaldifuoridellaclasseadaccedereagliattributistessi?
Automobi l e
- velocitaCorrente: int
- proprietario: String
+ setVelocitaCorrente(velocita :int) : void
+ setProprietario(proprietario :String) : void
+ toString() : String
Automobi l e
- velocitaCorrente: int
- proprietario: String
+ setVelocitaCorrente(velocita :int) : void
+ setProprietario(proprietario :String) : void
+ toString() : String
Metodidiistanza,incapsulamento,overloadingecostruttori 9
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Metodidiincapsulamentooaccesso
Dichiararegliattributidiistanzapr i vat e obbligaachidefiniscala
classedidotarladimetodichepermettonolaccessoagliattributi
stessi
Unmetododiincapsulamentosemplicementeunmetodoche
permetteadunaltraclassedileggereoimpostareilvalorediun
attributodiistanzadichiaratoprivate
Talimetodidevonoappartenereallinterfacciapubblicadellaclasse!
Quandolattributopuessereacceduto
siainscritturacheinletturaoccorrerdotarelaclassedi2metodi
soloinletturaoccorrerdotarelaclassedi1metodo
soloinscritturaoccorrerdotarelaclassedi1metodo
Metodidiistanza,incapsulamento,overloadingecostruttori 10
6
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Namingedesempio
Imetodidiincapsulamentoseguonopiomenolaseguente
convenzione:
inmodifica:set NomeAt t r i but o
inlettura:get NomeAt t r i but o
Esempio:
Sorgente(Metodi_05)
Automobi l e
- velocitaCorrente: int
- proprietario: String
+ setVelocitaCorrente(velocita :int) : void
+ setProprietario(proprietario :String) : void
+ toString() : String
+ getVelocita() : int
+ getProprietario() : String
Automobi l e
- velocitaCorrente: int
- proprietario: String
+ setVelocitaCorrente(velocita :int) : void
+ setProprietario(proprietario :String) : void
+ toString() : String
+ getVelocita() : int
+ getProprietario() : String
Metodidiistanza,incapsulamento,overloadingecostruttori 11
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Lakeywordthis
NellesempiodiAutomobile,nelmetodoset Pr opr i et ar i o( St r i ng
pr opr i et ar i o) hoambiguitnellaseguenteistruzione:
pr opr i et ar i o = pr opr i et ar i o;
Devoesplicitarequaledelle2variabilisiriferisceallattributodiistanza:
t hi s. pr opr i et ar i o = pr opr i et ar i o;
t hi s vuoldirelistanzacorrente
publ i c voi d set Pr opr i et ar i o( St r i ng pr opr i et ar i o) {
t hi s. pr opr i et ar i o = pr opr i et ar i o;
}
Metodidiistanza,incapsulamento,overloadingecostruttori 12
7
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Namingrispettatasempre?
Nonsempreconvenienteutilizzarelaconvenzione
Siutilizzaesclusivamentequandohasenso!
Guardiamoquestoesempio:
Luce
- boolean accesa
+ void accendi()
+ void spegni()
+ boolean isAccesa()
Luce
- boolean accesa
+ void setAccesa(boolean valore)
+ boolean getAccesa()
Metodidiistanza,incapsulamento,overloadingecostruttori 13
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Riassumendo
Quandosidefinisconoclassiusaresempreleseguentiregole:
1. inseriresempreuncommentointestaallaclassechespecificalastrazioneche
rappresenta.Usareicommentipergenerareladocumentazione
2. dichiararetuttigliattributidiistanzaappartenentiallimplementazione
(modificatorepr i vat e)
3. forniretuttigliopportunimetodidiincapsulamentoperleggereemodificare
gliattributidiistanza(appartenentiquindiallinterfacciapubblica,
modificatorepubl i c)
4. forniretuttiimetodidellinterfacciapubblica(modificatorepubl i c)
5. documentaretuttiimetodiinserendoleprecondizionielepostcondizioni
6. dichiarareimetodidiservizioappartenentiallimplementazione(modificatore
pr i vat e)
7. inseriresemprenelladefinizionediclasseilmetodot oSt r i ng( )
Metodidiistanza,incapsulamento,overloadingecostruttori 14
8
OVERLOADING
Metodidiistanza,incapsulamento,overloadingecostruttori 15
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Overloading
Definizioneformale:
operareoverloading diunmetodovuoldireassegnarelostessonome
adueopidefinizionidifferentiallinternodellastessaclasse
ComefaJavaasaperequaledefinizionedeveeseguire?
Javadeterminaladefinizionecorrettasullabasedelnumeroedeltipo
diargomenti
Quandoeperchsifaoverloading?Nonpisemplice
definiremetodiconnomidiversi?
quandodiversimetodisemanticamentefannolastessacosamacon
parametriiningressodiversi.Nonhasensomodificareilnome
Metodidiistanza,incapsulamento,overloadingecostruttori 16
9
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Esempio
LaclasseLi neaTel ef oni ca fornisceancheunmetodoche
permettedirichiamarelultimonumeroselezionato
ladefinizionevamodificatainserendofragliattributidiistanzaanche
unastringachememorizzalultimonumerocomposto
Sorgente (Metodi_06)
Li neaTel efoni ca
- numero: String
- prefissoNazionale: String
- prefissoInternazionale: String
- ultimoNumeroComposto: String
+ isInterurbana(String) : boolean
+ componiNumero(String) : void
+ componiNumero() : void
Li neaTel efoni ca
- numero: String
- prefissoNazionale: String
- prefissoInternazionale: String
- ultimoNumeroComposto: String
+ isInterurbana(String) : boolean
+ componiNumero(String) : void
+ componiNumero() : void
Metodidiistanza,incapsulamento,overloadingecostruttori 17
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Ancorasulloverloading
Nonpossibileoverloadareunmetodomodificandoesclusivamenteil
tipodiritorno!
esempio:
publ i c String t oSt r i ng( ) {
. . .
}
publ i c void t oSt r i ng( ) {
. . .
}
Metodidiistanza,incapsulamento,overloadingecostruttori 18
10
COSTRUTTORI
Metodidiistanza,incapsulamento,overloadingecostruttori 19
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Linizializzazionedeglioggetti
Quandosicreaunoggettobuonanormainizializzareivalori
degliattributi
Comedetto,gliattributivengonoinizializzatiavalorididefault
Nondettochetalivalorisianoeffettivamentequellicorretti.
Comefaccioamodificarli?
utilizzoimetodidiincapsulamento!
possibilepercheleoperazionidiinizializzazione
delloggettovadanooltreallapuraassegnazionedivalori
inizialipergliattributi
sedevocostruireuninterfacciagrafica,vogliochetutteleoperazione
dicostruzionevenganofattenelmomentoincuiistanziologgetto
Metodidiistanza,incapsulamento,overloadingecostruttori 20
11
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Icostruttori
Uncostruttoreunospecialetipodimetododestinatoad
effettuareleinizializzazionidelloggetto
Finoadorasisonocreatioggettigraziealasequentesintassi:
Talesintassicrealoggettoedinizializzagliattributidiistanzaa
valorididefault(chenonnecessariamentesonoquelli
desiderati!)
Usandoicostruttoripossibilecreareoggettiinizializzandolia
valoridesiderati
Ilcostruttoreunmetodospecialechevieneinvocatonel
momentoincuivienecreatounoggetto(esoloinquel
momento!)
Sintassi: new NomeCl asse( )
Esempio: new Aut omobi l e( )
Metodidiistanza,incapsulamento,overloadingecostruttori 21
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Lasintassi
Comeunmetodo,uncostruttoreeseguetutteleistruzioni
specificatenellasuadefinizione
quandosiscriveuncostruttore,occorreperoricordarsicheilsuo
scopoquellodieseguireleazioninecessarieallinizializzzione
delloggetto
esempio:
laclasseLineaTelefonicapossiedeunaseriedimetodichehannocome
precondizionelinizializzazionedellalineastessa:sarebbeopportuno,al
postodiinvocarei3metodidiincapsulamento,inizializzare
opportunamenteloggettolineaconivaloriperi3attributi
Sintassi:
publ i c NomeCl asse( [ l i st a par amet r i f or mal i ] ) {
/ / i ni zi al i zzazi oni
}
NomeCl asse r ef = new NomeCl asse( [ ar goment i ] )
Metodidiistanza,incapsulamento,overloadingecostruttori 22
12
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Conlavecchiamodalit
publ i c cl ass Aut omobi l e {
pr i vat e i nt vel oci t aCor r ent e;
pr i vat e St r i ng pr opr i et ar i o;
publ i c voi d set Vel ci t a( i nt v) {
vel oci t aCor r ent e = v;
}
publ i c voi d set Pr opr i et ar i o( St r i ng p) {
pr opr i et ar i o = p;
}
. . .
}
publ i c cl ass Test Aut o {
publ i c st at i c voi d mai n( St r i ng ar [ ] ) {
/ / Vogl i o cr ear e l aut o di Paper i no con vel oci t 100
Automobile a = new Automobile();
a.setVelocita(100);
a.setProprietario(Paperino);
}
}
Metodidiistanza,incapsulamento,overloadingecostruttori 23
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Conilcostruttore...
publ i c cl ass Aut omobi l e {
pr i vat e i nt vel oci t aCor r ent e;
pr i vat e St r i ng pr opr i et ar i o;
publ i c Aut omobi l e( i nt vel oci t aC, St r i ng pr opr i et ar i o) {
vel oci t aCor r ent e = vel oci t aC;
t hi s. pr opr i et ar i o = pr opr i et ar i o;
}
publ i c voi d set Vel ci t a( i nt v) {
vel oci t aCor r ent e = v;
}
publ i c voi d set Pr opr i et ar i o( St r i ng p) {
pr opr i et ar i o = p;
}
. . .
}
publ i c cl ass Test Aut o {
publ i c st at i c voi d mai n( St r i ng ar [ ] ) {
/ / Vogl i o cr ear e l aut o di Paper i no con vel oci t 100
Automobile a = new Automobile(100, Paperino);
}
}
Metodidiistanza,incapsulamento,overloadingecostruttori 24
13
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
...Sehovincolisuivalori
publ i c cl ass Aut omobi l e {
pr i vat e i nt vel oci t aCor r ent e;
pr i vat e St r i ng pr opr i et ar i o;
publ i c Aut omobi l e( i nt vel oci t aC, St r i ng pr opr i et ar i o) {
setVelocita(velocitaC);
t hi s. pr opr i et ar i o = pr opr i et ar i o;
}
public void setVelcita(int v) {
if(v>=0 && v <= 180) {
velocitaCorrente = v;
} else {
velocitaCorrente = 0;
}
}
publ i c voi d set Pr opr i et ar i o( St r i ng p) {
pr opr i et ar i o = p;
}
. . .
}
publ i c cl ass Test Aut o {
publ i c st at i c voi d mai n( St r i ng ar [ ] ) {
/ / Vogl i o cr ear e l aut o di Paper i no con vel oci t 100
Automobile a = new Automobile(100, Paperino);
}
}
Metodidiistanza,incapsulamento,overloadingecostruttori 25
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Possoancorausarelistanziazioneclassica?
Considerandolesempioprecedente,laseguenteistruzionelecita?
NO!Perch?
perchnonesisteuncostruttorenellaclasseAut omobi l e chenonaccettain
ingressoparametri(chiamatocostruttoredidefault)!
Perchprimaeralecita?Eperchpotevoistanziareoggetti?
senonvienedefinitouncostruttoreallinternodiunaclasse,neviene
assegnatounodidefault(costruttoredidefault)chenonaccettainingresso
parametrielacuiimplementazionepiomenolaseguente:
Aut omobi l e a = new Aut omobi l e( ) ;
publ i c cl ass Aut omobi l e {
. . .
publ i c Aut omobi l e( ) {
}
}
Metodidiistanza,incapsulamento,overloadingecostruttori 26
14
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Overlodareicostruttori
Sempre!
ovviamentedovehasenso
chesignificarenderelaclassepiflessibile
Overlodareicostruttorivuoldirerealizzarepicostruttoriche
inizializzanolpggettovariandolalistadeiparametriformali
neicostruttoriincuinonvienerichiestoilvalorediinizializzazionedi
unopiattributi,devono,nellimplementazione,comunque
inizializzaretaliattributi
Metodidiistanza,incapsulamento,overloadingecostruttori 27
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Esempio:definizioneclasseAutomobile
publ i c cl ass Aut omobi l e {
pr i vat e i nt vel oci t aCor r ent e;
pr i vat e St r i ng pr opr i et ar i o;
publ i c Aut omobi l e( i nt vel oci t aC, St r i ng pr opr i et ar i o) {
set Vel oci t aCor r ent e( vel oci t aC) ;
t hi s. pr opr i et ar i o = pr opr i et ar i o;
}
publ i c Aut omobi l e( St r i ng pr opr i et ar i o) {
vel oci t aCor r ent e = 0;
t hi s. pr opr i et ar i o = pr opr i et ar i o;
}
publ i c Aut omobi l e( i nt vel oci t a) {
set Vel oci t aCor r ent e( vel oci t a) ;
t hi s. pr opr i et ar i o = nul l ;
}
publ i c Aut omobi l e( ) {
vel oci t aCor r ent e = 0;
t hi s. pr opr i et ar i o = nul l ;
}
. . .
}
Metodidiistanza,incapsulamento,overloadingecostruttori 28
15
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Esempio:usoclasseAutomobile
publ i c cl ass Test Aut omobi l e {
publ i c st at i c voi d mai n( St r i ng a[ ] ) {
/ / Vogl i o cr ear e una aut o con vel oci t cor r ent e 100
/ / e pr opr i et ar i o Paper i no
Aut omobi l e a1 = new Aut omobi l e( 100, Paper i no) ;
/ / Vogl i o cr ear e una aut o con pr opr i et ar i o Paper i no
Aut omobi l e a2 = new Aut omobi l e( Paper i no) ;
/ / Vogl i o cr ear e una aut o con vel oci t cor r ent e 130
Aut omobi l e a3 = new Aut omobi l e( 130) ;
/ / Vogl i o cr ear e una aut o con val or i di def aul t
Aut omobi l e a2 = new Aut omobi l e( ) ;
. . .
}
}
Metodidiistanza,incapsulamento,overloadingecostruttori 29
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Richiamareuncostruttoredaunaltro
Comenotato,icostruttorivistinellesempiocompionole
stesseazioni:
inizializzareilvaloredivel coi t aCor r ent e edipr opr i et ar i o
comodoinvocaredauncostruttoreunaltrocostruttore
passandoigiustiargomenti
atuttiglieffettilinvocazionediunmetodo
Regolapiomenogenerale:
implementoilcostruttore(a)cheaccettainingressoivaloripertutti
gliattributidiistanzainizializzabiliconpassaggiodiparametri
implementoicostruttoricheaccettanoiningressounsottoinsiemedei
valoriaccettatidalcostruttore(a)invocandoilcostruttore(a)stesso
comesefosseunmetodo
Metodidiistanza,incapsulamento,overloadingecostruttori 30
16
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Lakeywordthis
Perfareci,noninvocoesplicitamenteilcostruttoreconilnome,ma
utilizzolakeywordt hi s (deveesserelaprimaistruzionenelladefinizione
delmetodo)
publ i c cl ass Aut omobi l e {
pr i vat e i nt vel oci t aCor r ent e;
pr i vat e St r i ng pr opr i et ar i o;
publ i c Aut omobi l e( i nt vel oci t aC, St r i ng pr opr i et ar i o) {
set Vel oci t aCor r ent e( vel oci t aC) ;
t hi s. pr opr i et ar i o = pr opr i et ar i o;
}
publ i c Aut omobi l e( St r i ng pr opr i et ar i o) {
t hi s( 0, pr opr i et ar i o) ;
}
publ i c Aut omobi l e( i nt vel oci t a) {
t hi s( vel oci t a, nul l ) ;
}
publ i c Aut omobi l e( ) {
t hi s( 0, nul l ) ;
}
. . .
}
Metodidiistanza,incapsulamento,overloadingecostruttori 31
Software Architecture Lab
www.sal.disco.unimib.it
Software Architecture Lab
www.sal.disco.unimib.it
Esercizi
Individuaremetodidiincapsulamentoecostruttori
perunaclassecherappresentaunautomobilecaratterizzatada:
velocitaCorrente
velocitaMassima
numeroDiTelaio
unaclassecherappresentaunavideocassetta.Lavideocassetta
caratterizzatada
untitolo,
unadurata
ilfattochesiaprotettaomenoinregistrazione
Metodidiistanza,incapsulamento,overloadingecostruttori 32