Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Lexa 15. 01. 2018, 19:32:38

Název: Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa 15. 01. 2018, 19:32:38
Ahojte, když vytvořím třídu s názvem Auto, v ní vytvořím další třídu Doplnky jaký mám nastavit parametr při vytváření třídy Doplnky, abych se dostal na objekty třídy Auto uvnitř třídy Doplnky? Ví někdo? Díky.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: dw 15. 01. 2018, 19:45:54
parent::
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit 15. 01. 2018, 20:07:15
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa 15. 01. 2018, 20:12:17
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
A co tedy je jejich, děda?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa 15. 01. 2018, 20:16:30
parent::
Nejedná se o extends class.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit 15. 01. 2018, 20:20:17
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
A co tedy je jejich, děda?

Nemůžeš tvrdit, že Doplněk je Auto. Dědičnost zde vůbec není. Auto tedy není ani rodičem, ani dědou.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: prst 15. 01. 2018, 20:23:17
Pokud mluvíš o instancích, tak stačí předat instanci třídy Auto, když chceš instanci třídy Auto - docela jednoduché, ne? Nebo jsem to nepochopil?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: <sdfasdfa 15. 01. 2018, 20:27:57
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
A co tedy je jejich, děda?

bud odvozujeme potomka z rodicovske tridy na zaklade kladne odpovedi na otazku JE?
JE (trida) nakladak konkretnejsim pripadem (trida) automobilu.

nebo se vytvareji promenne (members) tridy na otazku MA?
MA automobil kola. zde se trida kolo neodvozuje od automobilu, ale trida auto bude obsahovat promennou kolo, nebo vektor kol pro 4 kola a volant :-)
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa 15. 01. 2018, 20:34:08
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
A co tedy je jejich, děda?

Nemůžeš tvrdit, že Doplněk je Auto. Dědičnost zde vůbec není. Auto tedy není ani rodičem, ani dědou.
Ok, a co je tedy class Doplněk vůči class Auto ?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: YCC 15. 01. 2018, 20:35:46
Opravdu chceme něco v PHP předávat dětem?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: gll 15. 01. 2018, 20:39:06
Slovo rodič může znamenat i nadřazený uzel ve stromové struktuře. Je to správné pojmenování v obou případech.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit 15. 01. 2018, 20:40:02
Pokud mluvíš o instancích, tak stačí předat instanci třídy Auto, když chceš instanci třídy Auto - docela jednoduché, ne? Nebo jsem to nepochopil?

Chce do toho auta dát nepovinné doplňky. Typická kompozice. Vždy získá instanci třídy Auto, se kterým se následně bude dobře pracovat.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit 15. 01. 2018, 20:41:22
Nemůžeš tvrdit, že Doplněk je Auto. Dědičnost zde vůbec není. Auto tedy není ani rodičem, ani dědou.
Ok, a co je tedy class Doplněk vůči class Auto ?

Doplněk je komponentou třídy Auto.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa 15. 01. 2018, 20:47:17
Doplněk je komponentou třídy Auto.
Fajn, a jak dostanu do komponenty Doplnky objek třídy Auto? Předpokládám, že takto je to špatně
Kód: [Vybrat]
class Auto{
  function __construct(){
    $obj = new Doplnky ( $this);
  }
}
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: gll 15. 01. 2018, 20:53:50
Předpokládám, že takto je to špatně

proč?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit 15. 01. 2018, 20:56:01
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa 15. 01. 2018, 20:56:30
Předpokládám, že takto je to špatně

proč?
proč to chci udělat nebo proč je to špatně?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit 15. 01. 2018, 20:58:22
Předpokládám, že takto je to špatně

proč?

Bylo by to dobře, kdyby tam v parametru nebylo $this.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa 15. 01. 2018, 20:59:54
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?
Ano chci, chci se totiž dostat z doplňků přes objekt Auto do class Prislusenstvi, class Upravy atd...
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: gll 15. 01. 2018, 21:02:41
Předpokládám, že takto je to špatně

proč?
proč to chci udělat nebo proč je to špatně?

Proč je to špatně? Proč to chceš udělat asi víš nejlépe ty.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: gll 15. 01. 2018, 21:07:17
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?

myslím to vážně. Rozlišuji mezi programem a reálným světem. Strkání auta do rádia je jen tvá interpretace.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Ondrej Nemecek 15. 01. 2018, 22:01:00
Ahojte, když vytvořím třídu s názvem Auto, v ní vytvořím další třídu Doplnky jaký mám nastavit parametr při vytváření třídy Doplnky, abych se dostal na objekty třídy Auto uvnitř třídy Doplnky? Ví někdo? Díky.

Pokud se bavíme o dědění, tak otázka nemá smysl - Doplnek by skutečně neměl být potomek třídy Auto. Potomkem třídy auto by mohl být například Osobak a Nakladak - mnemotechnická pomůcka Osobak je Auto.

Doplnek je ve skutečnosti součást auta a platí zde skládání. Mnemotechnická pomůcka: Auto Doplnek. Pak otázka může mít smysl a mohlo by to být například takto (dovolil jsem si ponechat české názvy).

Kód: (php) [Vybrat]
<?php

class Auto {

    protected 
$sModel   null;
    protected 
$aDoplnky = array();

    public function 
__construct($sModel){
        
$this->sModel $sModel;
    }

    public function 
pridejDoplnek($oDoplnek){
        
$oDoplnek->nastavAuto($this);
        
array_push($this->aDoplnky$oDoplnek);
    }

    public function 
dejModel(){
        return 
$this->sModel;
    }

    public function 
dejDoplnky(){
        return 
$this->aDoplnky;
    }

    public function 
__toString(){
        
$sToReturn get_class($this) . ' "' $this->sModel '" pocet doplnku ' sizeof($this->aDoplnky) . ' (';
        
$bSeparuj  false;
        foreach (
$this->aDoplnky as $oDoplnek){
            if(
$bSeparuj){
                
$sToReturn .= ', ';
            }
            
$sToReturn .= $oDoplnek;
            
$bSeparuj true;
        }
        
$sToReturn .= ')';
        return 
$sToReturn;
    }

}

class 
Doplnek {

    protected 
$sNazev null;
    protected 
$oAuto  null;

    public function 
__construct($sNazev){
        
$this->sNazev $sNazev;
    }

    public function 
nastavAuto($oAuto){
        if(
$this->oAuto === null){
            
$this->oAuto  $oAuto;
        } else {
            throw new 
Exception("Doplnek je jiz instalovan v jinem aute!");
        }
    }

    public function 
dejNazev()    {
        return 
$this->sNazev;
    }


    public function 
__toString(){
        return 
get_class($this) . ' "' $this->sNazev '" v ' . ($this->oAuto !== null get_class($this->oAuto) . ' "' $this->oAuto->dejModel() . '"'"NULL");
    }


}

$oSkoda = new Auto("Skoda 120");

$oKlima = new Doplnek("Klimatizace");
$oRadio = new Doplnek("Autoradio");
$oTempo = new Doplnek("Tempomat");

print(
$oSkoda  "\n");
print(
$oKlima "\n");
print(
$oRadio "\n");
print(
$oTempo "\n");

$oSkoda->pridejDoplnek($oKlima);
$oSkoda->pridejDoplnek($oRadio);
$oSkoda->pridejDoplnek($oTempo);

print(
$oSkoda  "\n");
print(
$oKlima "\n");

$oGolf = new Auto("WV Golf");

$oNavigace = new Doplnek("Navigace");
$oGolf->pridejDoplnek($oNavigace);
// $oGolf->pridejDoplnek($oTempo); // <-- toto jsme nepovolili

print($oGolf "\n");

?>


Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: . 15. 01. 2018, 22:13:05
Fajn, a jak dostanu do komponenty Doplnky objek třídy Auto? Předpokládám, že takto je to špatně
Kód: [Vybrat]
class Auto{
  function __construct(){
    $obj = new Doplnky ( $this);
  }
}
Na tom teoreticky není nic špatně. Jen bacha na to, že jsi v konstruktoru a co s tím objektem děláš.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Ondrej Nemecek 15. 01. 2018, 22:13:29
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?
Ano chci, chci se totiž dostat z doplňků přes objekt Auto do class Prislusenstvi, class Upravy atd...

On chce mít asi vazbu Auto - Doplnek, což je běžný požadavek. Bude mít relaci buď 1:1 nebo 1:N nebo N:N, podle toho zda eviduje instance nebo jen jejich kategorie (zda eviduje u doplňku například sériové číslo nebo zda mu jen stačí, že je v autě obecně nějaké rádio). Pak sice nebude „auto strčené v rádiu“, ale to rádio může vědět, v jakém autě je nainstalované a může si tudíž držet odkaz na jeho instanci. Zda to je dobrý nápad nebo není se nedá bez dalšího s určitostí říct. Může to vést k cyklickým referencím, což může vadit při serializaci, zhoršuje se přehled o kompetencích atd, nicméně to může  dávat smysl.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: . 15. 01. 2018, 22:14:10
Je jasné, že má jen zmatek v terminologii. Strčte si... doplněk do auta. KONEC.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit 15. 01. 2018, 22:24:15
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?

myslím to vážně. Rozlišuji mezi programem a reálným světem. Strkání auta do rádia je jen tvá interpretace.

No jo, i v reálném světě můžeš auto strčit do rádia. Výsledkem je rádio.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: YCC 16. 01. 2018, 00:06:22
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?

myslím to vážně. Rozlišuji mezi programem a reálným světem. Strkání auta do rádia je jen tvá interpretace.

No jo, i v reálném světě můžeš auto strčit do rádia. Výsledkem je rádio.

Pics or it did not happen.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: kolega 16. 01. 2018, 14:41:56
Qt/C++ tohle dělá tak, že jako první parametr předává pointer na rodiče ...

Takže holt si definovat konstruktor tak, aby se předával rodič (když je to nutné)