Vienas iš būdų, kuriuos galime įgyvendinti duomenų kapsuliavimas tai yra naudojant priedus ir mutantus. Prieinamų ir mutantų vaidmuo yra grąžinti ir nustatyti objekto būsenos vertes. Išmokime programuoti priedus ir mutatorius „Java“. Kaip pavyzdį naudosime a Asmens klasė su jau apibrėžta valstybe ir konstruktoriumi:
Prieigos metodai
An prieiga metodas naudojamas grąžinti privataus lauko vertę. Vadovaujamasi vardų sudarymo schema, prieš pradedant metodo pavadinimą žodžiu „gauti“. Pavyzdžiui, pridėkime vardo, pavardės ir pavardės prieigos metodus:
Šie metodai visada grąžina tą patį duomenų tipą kaip ir atitinkamas jų privatus laukas (pvz., Eilutė) ir tada tiesiog grąžina to privataus lauko vertę.
Dabar jų vertybes galime pasiekti naudodamiesi objekto Asmuo metodais:
Mutatoriaus metodai
Norint nustatyti privataus lauko vertę, naudojamas mutatoriaus metodas. Vadovaujamasi vardų sudarymo schema, prieš pradedant metodo pavadinimą žodžiu „rinkinys“. Pvz., Pridėkime adreso ir naudotojo vardo laukus:
Šie metodai neturi grąžinimo tipo ir priima parametrą, kuris yra tas pats duomenų tipas kaip ir atitinkamas jų privatus laukas. Tada parametras naudojamas tam privataus lauko vertei nustatyti.
Dabar galima modifikuoti adreso ir naudotojo vardo reikšmes objekto Asmenyje:
Kodėl verta naudoti priedus ir mutatorius?
Nesunku padaryti išvadą, kad galėtume tiesiog pakeisti klasės apibrėžimo privačius laukus viešais ir pasiekti tuos pačius rezultatus. Svarbu atsiminti, kad norime kiek įmanoma paslėpti objekto duomenis. Papildomas buferis Šie metodai suteikia mums galimybę:
- Pakeiskite, kaip duomenys tvarkomi užkulisiuose.
- Pateikite verčių, kurioms nustatyti laukai, patvirtinimą.
Tarkime, kad nusprendžiame pakeisti būdą, kaip saugome vidurinius vardus. Vietoj vienos stygos dabar galime naudoti daugybę stygų:
Įdiegimas objekto viduje pasikeitė, tačiau išorinis pasaulis tam įtakos neturi. Metodai yra vadinami tiksliai tokie patys:
Arba tarkime, kad programa, naudojanti objektą „Asmuo“, gali priimti tik tuos vardus, kuriuos sudaro ne daugiau kaip dešimt simbolių. Mes galime pridėti patvirtinimą į „setUsername“ mutatorių, kad įsitikintume, jog vartotojo vardas atitinka šį reikalavimą:
Dabar, jei mutantas „setUsername“ perduotas vartotojo vardas yra ilgesnis nei dešimt simbolių, jis automatiškai sutrumpinamas.