#6 Petr
toto urcite nieje cielom kvoli ktoremu sa davaju fieldy ako private ... chovanie ktore si popisal je chovanie immutable objektu (ktory je sice velmi vyhodny ale implementacia je potom znacne narocna) ... normalne objekty sa menia v case
ak je field private potom sa ti vsetko zjednodusi ak by si ten field nahodou chcel odstranit alebo rozsirit ... ak by si mal objekt okno a v nom field material (povedzme ze typu String) a bol by public potom by vsetci uzivatelia pristupovali k typu materialu cez tento field a ocakavaju ze dostanu String ... lenze komunizmus sa skonci a okna sa zrazu zacnu vyrabat z dvoch materialov ... vsetci tvoji uzivatelia su strateny pretoze cakaju ze tvoje okno ma len jeden material ... keby si to mal aspon trochu zapuzdrene a neposkytoval priamo field material (mal by si getter cez ktory sa da dostat k materialu) potom si mozes ten field s materialom dat ako List<String> ... tym padom budes mat realne zachytene ze sa dane okno vyraba z viacerych materialov ... a aby aj ty komunisticky uzivatelia zostali spokojny tak im budes posielat len prvy material zo zoznamu
dalsi problem s fieldami je ze ich nedokazes dat ako povinnu vlastnost do interface cize mutacie daneho objektu su znacne problematicke
preto tu mame teoriu zvanu OOP ... keby si mal objekt okno tak jeho uzivatelov v skutocnosti vobec nezaujima z akeho materialu je vyrobene ... v skutocnosti ich zaujima ake ma izolacne vlastnosti ... kolko svetla prepusti ... to su realne vlastnosti okna a tieto by si mal poskytovat okoliu (samozrejme ak dane okno predavas tak ta bude zaujimat aj material - v tom pripade je to validna vlastnost a je vhodne pouzit 'getter' ako ho pozname)
cize v jave:
public interface Okno {
double priepustnostSvetla();
Object tepelnoIzolacneVlastnosti();
}
public interface StavebnyMaterial {
String narocnostNaInstalaciu();
double vaha();
}
public interface Tovar {
BigDecimal hodnota();
String material();
}
public class MojeOkno implements Okno, StavebnyMaterial, Tovar {
...
}
samozrejme tie vystupne hodnoty neber doslovne urcite sa daju vymysliet aj lepsie
vyhoda interface je ze zachytava len nevyhnutne poziadavky ... implementacia sa potom moze jednoducho zmenit bez ovplivnenia zakaznika