IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:3.4.2013 19:17

Zdravíčko, narazil jsem na něco, na co jsem ještě zatím nenarazil. Ukážku kód

SoundPlayer player = new SoundPlayer("audio/twsWav.wav");
 player.Play();
    player.Site.Component.Site.Component.Site.Component.Site.Component.Site.Component.Site.Component.Site  // a vhůru do nekonečna a možná ještě dál - BuzzRakeťák

Může mi to někdo vysvětlit ?

Odpovědět
3.4.2013 19:17
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michael Olšavský:3.4.2013 19:21

:D dost dobrý
To vypadá, že někdo nazval proměnnou stejně jako třídu. Tzn. v Site je proměnná Component Component a v Component zase odkaz na rodiče Site.

 
Nahoru Odpovědět
3.4.2013 19:21
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Michael Olšavský
Petr Nymsa:3.4.2013 19:24

Je to třída poskytující .NET. Aspoň jsem to tak našel :D. Nemáš s ní zkušenosti ? Nevím, jestli jde zjistit délka a aktuální čas přehrávání. Celkem by se mi to hodilo :)...ale jinak fakt nevím co má být tohle :D

Nahoru Odpovědět
3.4.2013 19:24
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Michael Olšavský:3.4.2013 19:40

Tak to nevím :-/ Aktuální čas můžeš pomocí timeru, délku možná přes Stream, ale třída SoundPlayer je hodně omezená. Možná by bylo lepší podívat se po nějakých alternativách.

Ještě si můžeš zkusit prostudovat tohle: http://www.drdobbs.com/…or/222500141?…

 
Nahoru Odpovědět
3.4.2013 19:40
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Michael Olšavský
Petr Nymsa:3.4.2013 19:59

No koukal jsem an natáhnutí knihoven z Windows Media Playeru, ovšem tam toho je zase moc :D

Nahoru Odpovědět
3.4.2013 19:59
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:3.4.2013 20:51

Vyjádřil by se k tomu "zanoření" někdo ještě ze zbehlejších ? :p David Hartinger , Kit ,.... Michael Olšavský má nejspíše pravdu, ale chtěl bych vědet jestli jste se setkali už s něčím podobným :)

Nahoru Odpovědět
3.4.2013 20:51
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:3.4.2013 21:09

Prostě stránka má odkaz na komponentu a komponenta odkaz na stránku :) Stejně můžeš udělat třeba pes.Pan.Pes.Pan a do nekonečna. Třídy by vypadaly takhle:

public class Pes
{
  public Pan Pan {get; set;}
}


public class Pan
{
  public Pes Pes {get; set;}
}

public void Main()
{
  Pes pes = new Pes();
  Pan pan = new Pan();
  pes.Pan = pan;
  pan.Pes = pes;
  pes.Pan.Pes.Pan.Pes.Pan...
}
Editováno 3.4.2013 21:11
Nahoru Odpovědět
3.4.2013 21:09
New kid back on the block with a R.I.P
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Hartinger
Petr Nymsa:3.4.2013 21:15

Ok :) K čemu je tohle dobrý ? Předpokládám že to je špatný návrh ? :)

Nahoru Odpovědět
3.4.2013 21:15
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:3.4.2013 21:16

Pán se dostane na svého psa a pes na svého pána, na tom není nic špatného. Můžu se do nekonečna ptát kdo je pán psa a toho pána kdo je jeho pes atd ;-)

Nahoru Odpovědět
3.4.2013 21:16
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:3.4.2013 21:17

V C# je možné pojmenovat objekt stejně jako třídu ? :-O

 
Nahoru Odpovědět
3.4.2013 21:17
Avatar
Odpovídá na Lukáš Hruda
Michael Olšavský:3.4.2013 21:17

Jojo. Dokonce to samo poté "zjistí" co chceš použít, ikdyž si tím zamezíš některé možnosti. Jako například statiku.

Editováno 3.4.2013 21:18
 
Nahoru Odpovědět
3.4.2013 21:17
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Lukáš Hruda
David Hartinger:3.4.2013 21:21

Také jsem nad tím přemýšlel, nevím :D Musel bych to zkusit, jestli by se to zkompilovalo. Každopádně když bych chtěl Property jako třídu, nějak se to řešit musí. Dělal jsem teď dlouho v PHPčku, takže jsem z toho zas zdegenerovaný :)

Nahoru Odpovědět
3.4.2013 21:21
New kid back on the block with a R.I.P
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Hartinger
Petr Nymsa:3.4.2013 21:22

To mi stejně nedává smysl, nebo spíše se mi moc nelíbí to použití. Ale využití to má, to je fakt :)

Nahoru Odpovědět
3.4.2013 21:22
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:3.4.2013 21:24

Teď jsem to zkoušel v Javě a tam to jde taky, ale připadá mi to jako strašná prasárna :D V C++ nemůžu vytvořit ani proměnnou která se jmenuje stejně jako nějaká existující třída.

 
Nahoru Odpovědět
3.4.2013 21:24
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:3.4.2013 21:25

No samozřejmě to není k tomu, abys to psal do kolečka, to je jen vedlejší efekt, protože ty objekty na sebe navzájem odkazují :D

Nahoru Odpovědět
3.4.2013 21:25
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Lukáš Hruda
David Hartinger:3.4.2013 21:27

Tak tady to není proměnná, ale metoda :) V Javě by tab bylo getPan() a setPan() v C# je Pan s velkým P, který interně funguje jako metoda.

Nahoru Odpovědět
3.4.2013 21:27
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:3.4.2013 21:33

Pan je tady reference na objekt typu Pan ne? Proměnná, metoda, funkce, pole, to je fuk, v C++ se nic nemůže jmenovat jako nějaký datový typ, k tomu aby se předešlo kolizím slouží namespace.

 
Nahoru Odpovědět
3.4.2013 21:33
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Lukáš Hruda
David Hartinger:3.4.2013 21:35

Pan je tady tzv. vlastnost, interně se vygenerují 2 metody, setter a getter. Nevím jaká omezení mají C# a Java, ale asi toho dost poznají z kontextu a tady by to nemělo vadit.

Nahoru Odpovědět
3.4.2013 21:35
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Kit:4.4.2013 9:53

S C# nedělám, ale v OOP je vázání objektů do kruhu normální, podobně jako u síťových databází. Teprve u hierarchických databází to bylo znemožněno, ale v OOP to zůstalo.

Nahoru Odpovědět
4.4.2013 9:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:4.4.2013 10:19

V Javě je zvyklostí třídy pojmenovávat PascalCase. Objekty, metody, proměnné a formální parametry camelCase. Ke kolizím mezi názvy tříd a názvy jejich instancí tedy nedochází.

Obecně nedoporučuji používat stejné názvy tříd a jejich instancí. Ani v běžném životě se pes obvykle nejmenuje Pes a už vůbec se člověk nejmenuje Člověk, ale třeba Franta.

Nahoru Odpovědět
4.4.2013 10:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Kit
Lukáš Hruda:4.4.2013 14:22

Proto si myslím, že je to prasárna a přijde mi zvláštní že zrovna jazyky jako C# a Java, které dost dbají na bezpečnost, to umožňují.

 
Nahoru Odpovědět
4.4.2013 14:22
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:4.4.2013 14:27

Java to IMHO neumožňuje. V ní se shoduje název konstruktoru s názvem třídy a to je OK. Nezkoušel jsem to, ale instance se musí jmenovat jinak než třída.

Nahoru Odpovědět
4.4.2013 14:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Kit
Lukáš Hruda:4.4.2013 14:54

Já zkoušel:

public class Car {...}
...
Car Car = new Car();

A fungovalo to.

 
Nahoru Odpovědět
4.4.2013 14:54
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:4.4.2013 15:03

Jenže zvyklostí v Javě je, že názvy instancí jsou malými a názvy tříd velkými. Takže se to neplete.

Jak už jsem psal: Nevidím důvod, proč pojmenovávat třídu a instanci stejně. Svědčí to spíš o nepochopení OOP.

Nahoru Odpovědět
4.4.2013 15:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Kit
Lukáš Hruda:4.4.2013 16:48

Proto se divím, že to jde.

 
Nahoru Odpovědět
4.4.2013 16:48
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:4.4.2013 16:55

Proč? Pán má prostě psa. Udělám si Pan josef. A pak si udělám Pes azor. josef.Pes = azor; Co jsem na OOP nepochopil? :)

Nahoru Odpovědět
4.4.2013 16:55
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:4.4.2013 16:57

Také se divím, že v Javě je možné tohle:

Integer Integer;
Float Float;
String String;

ale určitě bych nikomu nedoporučoval, aby to někde použil. Je to totiž logický nesmysl.

Nahoru Odpovědět
4.4.2013 16:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:4.4.2013 17:03

Ale ty to máš dobře. Tvůj pes se nejmenuje pes, ale azor. Tvůj pán se nejmenuje pan, ale josef. Mně vadí, když někdo tlačítko pojmenuje tlačítko, které vytvoří jako instanci třídy tlačítko.

Nahoru Odpovědět
4.4.2013 17:03
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:4.4.2013 17:05

To mi také vadí, ale ve třídě Pan se ten pes jmenuje opravdu Pes :)

Nahoru Odpovědět
4.4.2013 17:05
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:4.4.2013 17:16

Ale když už, neměl by to být spíš pes než Pes? :D

 
Nahoru Odpovědět
4.4.2013 17:16
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Lukáš Hruda
David Hartinger:4.4.2013 17:19

Jak jsme říkal, proměnná Pes v sobě v C# skrývá 2 metody pro nastavení a čtení hodnoty. C# tomu říká vlastnost, je to něco mezi proměnnou a metodou, proto je to velkým, aby se to odlišilo :D

Nahoru Odpovědět
4.4.2013 17:19
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:4.4.2013 17:34

Spíš bych řekl, že vlastnost je dvojice metod, které se vně objektu chovají jako jedna proměnná.

Nahoru Odpovědět
4.4.2013 17:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
lcet.m
Člen
Avatar
Odpovídá na Lukáš Hruda
lcet.m:4.4.2013 20:53

No nevím, třeba vlastnost Orientation typu Orientation mi přijde logičtější než jakákoliv jiná možnost...

 
Nahoru Odpovědět
4.4.2013 20:53
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 33 zpráv z 33.