Názory k článku Létající cirkus (6)

  • Článek je starý, nové názory již nelze přidávat.
  • 8. 3. 2002 12:56

    Jaroslav Gergic (neregistrovaný)

    Muzete prosim specifikovat, co dle Vas znamena "plne objektovy"? Dle poucek se za zakladni vlastnosti objektoveho systemu povazuje: skladani (composition), polymorfismus (polymorphism) a zapouzdreni (encapsulation). Nekdy se jeste pridava dedicnost (inheritance). Vsechny tyto vlastnosti Python ma (pomineme-li, ze zapouzdreni je dano jen konvenci). Co mu tedy chybi? Je pravda, ze Python nema explicitni system typu (relace subtype/supertype), ovsem typove systemy mohou byt ortogonalni k objektovym vlastnostem jazyka.

  • 10. 3. 2002 15:23

    nil (neregistrovaný)

    Pre mna ako cloveka, co mal tu cest sa oboznamit so SmallTalk-om, je kazdy iny "objektovo-orientovany" jazyk menej "objektovy" ako Smalltalk. Preco?

    V Smalltalku je vsetko objekt. (Okrem tych veci, co su metody :)
    Teda nie je tam klucove slovo if, for, ani "{" a "}".(while, ...)

    Ako sa bez toho zaobidu?
    Jednoducho.(mozno to tak v mojom podani nebude vyzerat, ale je to len otazka zvyku.)

    Ked sa zavola nejaka metoda objektu, teda "posle sa mu message", tak sa vykona telo tej metody, a vrati sa nejaky objekt.

    Napriklad: 3>5
    Objektu (reprezentujucemu cislo)3 sme poslali message > s parametrom 5.
    Vysledkom je singleton objekt triedy False - podtriedy triedy Boolean.

    Jemu( objektu False) mozeme zasa poslat dalsi message(zavolat funkciu) - napriklad:
    False ifTrue: aBlock

    kde aBlock je nejaky objekt triedy Block = vytvori ho kompilator zo sady prikazov nachadzajucich sa medzi "[" a "]" (je to vlastne nahrada zlozeneho prikazu v C/C++/Jave = "{bla;bla;}" )

    Toto cele bol vlastne priklad na if:
    Smalltalk:
    3>5 ifTrue: aBlock

    C/C++/Java:

    if(3>5){
    aBlock;//teda tu by bolo viac prikazov za sebou - napriklad 20, jeden, alebo ziadny :)
    }


    Este priklad na for cyklus:
    C/C++:
    int sum = 0;
    for(int i=1;i<=10;i++){
    sum+=i;
    }
    return sum;

    Smalltalk:
    |sum|
    sum=0
    1 to: 10 do: [each| sum=sum+each]
    ^sum

    Vlastne ten priklad na for je nakoniec takmer metoda(funkcia):

    |sum| - zadeklarovali sme si pomocnu premennu sum
    sum = 0 - nastavili sme jej pociatocnu hodnotu

    1 to: 10 do: [each| sum=sum+each]

    objektu 1 sme poslali message to:do: s dvomi parametrami: 10 a [each| sum=sum+each]
    (v C++ by to vyzeralo asi takto:

    Integer::todo(Integer* a,Block* aBlock){
    //a tu by bol nejaky kod
    }
    //a takto by sa to mozno volalo
    Integer a = new Integer(1);
    a->todo(10,new Block("[each| sum=sum+each]"))
    )

    Este vysvetlenie toho bloku:[each| sum=sum+each]
    each je docasna premenna, ktora by mala postupne nadobudat hodnoty 1 az 10, jej hodnotu pripocitavame k sum

    ^sum - tento prikaz znamena "return sum"

    Zaver: toto bolo len vysvetlenie(aspon dufam) "cistej objektovosti" Smalltalku, co sa tyka rezervovanych slov.

    Krasa Smalltalku sa vsak naplno prejavuje ked sa pracuje s cislami - Integer, Double, velke cisla - vsetky su podtriedami Number, a deju sa tam pekne konverzie - su tam totiz aj zlomky :) (cize napr.sa da spolahlivo porovnavat double a double - nie ako v C/C++/Jave.)

    Navyse vsetko(?) v systeme sa da zmenit, ak sa nam nieco nepaci :), nie su tam typy, ....

    P.S. Prepacte, ze je to take dlhe, a mozno miestami trochu nepresne - uz 5 rokov som v Smalltalku nic neurobil, a ani predtym to nebolo nic moc, ale mam ho rad.

    P.S.2: Ten nadpis(Java je ...) som pocul od pana M.L. asi tak pred piatimi rokmi :) Napriek tomu teraz programujem v Jave :(

  • 16. 3. 2002 10:47

    Jan Svec (neregistrovaný)

    Docela poucny prispevek. Se Smalltalkem jsem do styku neprisel, ale jeden cas jsem se ucil Objective-C a to bylo (tedy alespon si myslim) inspirovano Smalltalkem. Zajimave by bylo, kdyby nekdo o nem napasl serialek.

    Frazi "Python je plne objektovy jazyk" jsem nepouzil jen kvuli tomu, aby se neozyvali lide, kteri si mysli, ze tomu tak neni.

    PS: Prominte delsi odezvu, ale cely minuly tyden jsem se nedostal na inet.

  • 18. 3. 2002 17:08

    Petr Babiš (neregistrovaný)

    > Python nepoužívá žádného zkráceného zápisu pro
    > přístup k instančním atributům, vždy se musí používat
    > zápisu self.atribut (viz řádek (4) v definici třídy
    > pes).

    nenapsal jste o atributu __dict__ (lokalni jmenny prostor tridy ulozeny ve slovniku), ktery uspesne pouzivam pri formatovani retezcu, napr:

    >>> print 'barva srsti: %(barva)s, delka srsti: %(delka)s' % punta.__dict__
    barva srsti: hneda, delka srsti: 4

    stejnym zpusobem jej lze pouzit i v metode tridy pomoci volani self.__dict__

  • 17. 2. 2013 0:37

    Rýpal (neregistrovaný)

    Slovo "samozřejmostí" bych vypustil - vzhledem k tomu, že Python se snaží být blbuvzdorný podobně jako třeba Java nebo C# a ty právě z tohoto důvodu od vícenásobné dědičnosti upustili.