NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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í.

Diskuze – Rekurze

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 14:37

V Javě se přece dá programovat deklarativně.

Odpovědět
11.4.2013 14:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:11.4.2013 14:59

"V objektovém jazyku nezáleží na pořadí deklarace tříd, metod ani proměnných. Podstatné je zapouzdření, co je čeho součástí. Na pořadí záleží obvykle až ve chvíli, kdy do bloku napíšu víc příkazů za sebe. Nemusí to však platit vždy, ty příkazy často bývají na sobě nezávislé.

Zpravidla je přece jedno, v jakém pořadí například volám settery jednoho objektu."

Na pořadí deklarací tříd, metod ani proměnných nezáleží, ale záleží na pořadí příkazů uvnitř těch metod.
Na pořadí příkazů nezávisí právě v deklarativním programování, tam popíšeš problém a pak se hledá řešení, ale deklarativní/im­perativní a objektový/neob­jektový přístup jsou na sobě nezávislé, klidně můžeš programovat objektově imperativně, tam pak na pořadí provádění příkazů záleží.

"V Javě se přece dá programovat deklarativně."
To je možné (předpokládám, že je to nějaká obdoba LINQ z C# ?), ale to z ní nedělá (ani LINQ nedělá z C#) deklarativní jazyk, i když už můžeš některé části programu napsat deklarativně, stále je to primárně imperativní jazyk.

Odpovědět
11.4.2013 14:59
https://www.facebook.com/peasantsandcastles/
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Lukáš Hruda:11.4.2013 15:05

Pokud vím, tak všechny C-like jazyky jsou imperativní a mělo by se v nich asi podle toho také programovat. OOP je podtyp imperativního programování, ne jiný typ.

 
Odpovědět
11.4.2013 15:05
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 15:19

Zkusil jsem přepsat příklad od Homo tak, aby nezáleželo na pořadí příkazů. Jednotlivé bloky je možné libovolně přeházet, ale zapouzdření se musí dodržet. Vlastně jsem to ani moc upravovat nemusel. Není to ovšem praktické, protože tam nemám DI.

class PrintDir {
    public static void main(String[] args) {
        new PrintDir();
    }

    public PrintDir() {
        try {
            for(Object p : ds){
                System.out.println(p.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    DirectoryStream ds = Files.newDirectoryStream(pathToIterate, filter);

    Path pathToIterate = FileSystems.getDefault().getPath("C:");

    DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>(){
        @Override
            public boolean accept(Path entry) throws IOException {
                return Files.isDirectory(entry);
            }
    };
}
Odpovědět
11.4.2013 15:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:11.4.2013 15:28
DirectoryStream ds = Files.newDirectoryStream(pathToIterate, filter);
Path pathToIterate = FileSystems.getDefault().getPath("C:");

Tohle v Javě funguje? Že nejdřív použiješ nějakou proměnnou a pak ji teprve nadeklaruješ?

Odpovědět
11.4.2013 15:28
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 15:33

Úplně v pohodě. Java s tím nemá problém.

Odpovědět
11.4.2013 15:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:11.4.2013 15:44

To je zajímavé, zajímalo by mě, jak to na pozadí funguje o_O

Odpovědět
11.4.2013 15:44
https://www.facebook.com/peasantsandcastles/
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Lukáš Hruda:11.4.2013 15:53

Řekl bych že program nejdříve vytvoří data a teprve potom je inicializuje. Třeba tohle...

public int a = b;
public int b = 1000;

...nefunguje.
Každopádně já bych to nedělal. I v objektovém jazyce by kód měl mít přeci nějakou logickou strukturu a neměl by používat věci které logicky ještě nebyly vytvořeny.

 
Odpovědět
11.4.2013 15:53
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:11.4.2013 16:00

Jednoduše. U všeho, co je mimo metody, nezáleží na pořadí. Proto také do třídy píšu nejprve testovací třídu, pak metodu main(), pak konstruktor, pak veřejné metody a nakonec privátní metody. Proměnné objektu obvykle dávám před konstruktory, ale mohou být kdekoli. Totéž s objekty anonymních tříd.

Odpovědět
11.4.2013 16:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Lukáš Hruda
Luboš Běhounek Satik:11.4.2013 16:03

Souhlasím, musí to působit hodně zmatečně, když vidím třeba ve funkci použitou nějakou proměnnou, která se tam ani nepředává parametrem a ani nebyla vytvořena do té doby, tak bych ji hledal mezi vlastnostmi třídy a asi bych byl hodně zmatený, až bych ji ani tam nenašel, ještě že C# tuhle šílenost nedovoluje :)

Odpovědět
11.4.2013 16:03
https://www.facebook.com/peasantsandcastles/
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 10 zpráv z 85.