
Objasnění citace v OOP
Ahoj, může mi prosím někdo objasnit tuhle větu (OOP) ?
Zapouzdření – zaručuje, že objekt nemůže přímo přistupovat k „vnitřnostem“ jiných objektů, což by mohlo vést k nekonzistenci. Každý objekt navenek zpřístupňuje rozhraní, pomocí kterého (a nijak jinak) se s objektem pracuje.
Ide o to aby boli chranene interne premenne objektov. Napr. ak si vytvorim objekt string, tak niekde v tom objekte jeho implementacia si musi drzat aj adresu a dlzku apod, ale nikto to nesmie vediet zmenit priamo aby to neposkodil, ale ma pouzivat len metody stringu ako ze prilepit alebo pridat pismeno alebo priradit novy string, a objekt si interne svoje veci svojimi metodami nastavuje tak ako potrebuje. Nikto zvonku nema mat moznost priamo zmenit nejaku adresu alebo dlzku stringu apod, ptz ten string napr. musi uvolnit alokovanu pamat ked zanika, a keby mu niekto pomenil interne pointre, bol by potom z toho bordel a crashujuca aplikacia. Preto je vyhoda OOP ze objekty mozu mat chranene interne premenne.
Bez OOP by bolo vsetko viditelne kdesi ako globalne premenne a ktokolvek by mohol menit cokolvek = bordel a nebezpecie chaosu v premennych.
Priklad:
Class auto
{
private:
FARBA Farba;
public:
NastavFarbu();
}
...
auto.Farba = ZELENA; // hodi error lebo to je fuj.
auto.NastavFarbu(ZELENA); //spravne
...
Zmysel je v tom ze ta fcia NastavFarbu trebars moze robit aj dalsie veci, napr. nahlasit to na policiu ze si prestriekal auto :D, a preto je nastavovanie premennych priamo fuj, lebo potom je bordel.
Tak že, když objekt nemůže přímo přistupovat k „vnitřnostem“ jiných objektů, znaméná to, že těmi vnitřnostmi se myslí vlastnosti/proměnné ?
a rozhraní je v tomto případě metoda setFarba() ?
Ano da sa to tak chapat.
Já jsem myslel, že ta metoda je jen setter. ktomu settery služí, ne ?
Metody mozu byt rozne, definicia OOP je vseobecna. Dnes ta metoda moze len nastavit 1premennu, a zajtra pride poziadavka zakaznika ze to musi este aj hlasit prezidentovi, tak uz bude metoda robit tych veci viac. Nepotrebujes tomu davat extra nazvy. Je to len metoda ako kazda ina. A bol to len priklad, nebudem ti tu vypisovat alokaciu RAM pre string a podobne zlozitejsie veci.
Jasně, ale chci se dobrat tomu, že cituji:
Každý objekt navenek zpřístupňuje rozhraní, pomocí kterého (a nijak jinak) se s objektem pracuje.
Pořád nevím co je myšleno tím rozhraním. Je to teda prostě jakýkoliv setter, getter či jakákoliv metoda která je nastavena jako public ?
Rozhranie je subor/zoznam vsetkych tych funkcii ktore dana trieda poskytuje navonok. Ono sa to kludne aj definuje dopredu, podla toho co sa od danej triedy ocakava.
Díky za objasnění.