Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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.
-
parent::
-
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
-
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?
-
parent::
Nejedná se o extends class.
-
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.
-
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?
-
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 :-)
-
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 ?
-
Opravdu chceme něco v PHP předávat dětem?
-
Slovo rodič může znamenat i nadřazený uzel ve stromové struktuře. Je to správné pojmenování v obou případech.
-
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.
-
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.
-
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ě
class Auto{
function __construct(){
$obj = new Doplnky ( $this);
}
}
-
Předpokládám, že takto je to špatně
proč?
-
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?
-
Předpokládám, že takto je to špatně
proč?
proč to chci udělat nebo proč je to špatně?
-
Předpokládám, že takto je to špatně
proč?
Bylo by to dobře, kdyby tam v parametru nebylo $this.
-
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...
-
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.
-
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.
-
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 má 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).
<?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");
?>
-
Fajn, a jak dostanu do komponenty Doplnky objek třídy Auto? Předpokládám, že takto je to špatně
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áš.
-
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.
-
Je jasné, že má jen zmatek v terminologii. Strčte si... doplněk do auta. KONEC.
-
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.
-
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.
-
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é)