Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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.

Předmět Autor Datum
a cemu v ni nerozumis?
chytrak 18.07.2016 17:25
chytrak
Nerozumím ani jedné ani druhé větě.
MM10 18.07.2016 17:33
MM10
Ide o to aby boli chranene interne premenne objektov. Napr. ak si vytvorim objekt string, tak niekde…
MM.. 18.07.2016 17:33
MM..
Priklad: Class auto { private: FARBA Farba; public: NastavFarbu(); } ... auto.Farba = ZELENA; // hod…
MM.. 18.07.2016 17:36
MM..
Tak že, když objekt nemůže přímo přistupovat k „vnitřnostem“ jiných objektů, znaméná to, že těmi vni…
MM10 18.07.2016 17:53
MM10
Ano da sa to tak chapat.
MM.. 18.07.2016 17:54
MM..
Já jsem myslel, že ta metoda je jen setter. ktomu settery služí, ne ?
MM10 18.07.2016 17:55
MM10
Metody mozu byt rozne, definicia OOP je vseobecna. Dnes ta metoda moze len nastavit 1premennu, a zaj…
MM.. 18.07.2016 17:59
MM..
Jasně, ale chci se dobrat tomu, že cituji: Každý objekt navenek zpřístupňuje rozhraní, pomocí kteréh…
MM10 18.07.2016 18:02
MM10
Rozhranie je subor/zoznam vsetkych tych funkcii ktore dana trieda poskytuje navonok. Ono sa to kludn…
MM.. 18.07.2016 18:05
MM..
Díky za objasnění. poslední
MM10 18.07.2016 18:26
MM10

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é ?

class Auto {
  private $farba;
  ...
}

a rozhraní je v tomto případě metoda setFarba() ?

class Auto {
  public function setFarba($var)
  {
    $this -> $farba = $var ;
  }
  ...
}

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 ?

Zpět do poradny Odpovědět na původní otázku Nahoru