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.
Citace od: Kit kdy 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.
A co tedy je jejich, děda?
Citace od: Lexa kdy 15. 01. 2018, 20:12:17
Citace od: Kit kdy 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.
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?
Citace od: Lexa kdy 15. 01. 2018, 20:12:17
Citace od: Kit kdy 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.
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 :-)
Citace od: Kit kdy 15. 01. 2018, 20:20:17
Citace od: Lexa kdy 15. 01. 2018, 20:12:17
Citace od: Kit kdy 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.
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.
Citace od: prst kdy 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?
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.
Citace od: Lexa kdy 15. 01. 2018, 20:34:08
Citace od: Kit kdy 15. 01. 2018, 20:20:17
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.
Citace od: Kit kdy 15. 01. 2018, 20:41:22
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);
}
}
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?
Citace od: gll kdy 15. 01. 2018, 20:53:50
Citace od: Lexa kdy 15. 01. 2018, 20:47:17
Předpokládám, že takto je to špatně
proč?
proč to chci udělat nebo proč je to špatně?
Citace od: gll kdy 15. 01. 2018, 20:53:50
Citace od: Lexa kdy 15. 01. 2018, 20:47:17
Předpokládám, že takto je to špatně
proč?
Bylo by to dobře, kdyby tam v parametru nebylo $this.
Citace od: Kit kdy 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?
Ano chci, chci se totiž dostat z doplňků přes objekt Auto do class Prislusenstvi, class Upravy atd...
Citace od: Lexa kdy 15. 01. 2018, 20:56:30
Citace od: gll kdy 15. 01. 2018, 20:53:50
Citace od: Lexa kdy 15. 01. 2018, 20:47:17
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.
Citace od: Kit kdy 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?
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.
Citace od: Lexa kdy 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.
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");
?>
Citace od: Lexa kdy 15. 01. 2018, 20:47:17
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áš.
Citace od: Lexa kdy 15. 01. 2018, 20:59:54
Citace od: Kit kdy 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?
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.
Citace od: gll kdy 15. 01. 2018, 21:07:17
Citace od: Kit kdy 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?
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.
Citace od: Kit kdy 15. 01. 2018, 22:24:15
Citace od: gll kdy 15. 01. 2018, 21:07:17
Citace od: Kit kdy 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?
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é)