Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

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

Jaroslav Gergic
Jaroslav Gergic (neregistrovaný)
8. 3. 2002 12:56 Nový

Plne objektovy?

celé vlákno

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.

nil
nil (neregistrovaný)
10. 3. 2002 15:23 Nový

"Java je zbastardeny Smalltalk pre C++karov. :-))"

celé vlákno

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 :(

Jan Svec
Jan Svec (neregistrovaný)
16. 3. 2002 10:47 Nový

Re: "Java je zbastardeny Smalltalk pre C++karov. :-))"

celé vlákno

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.

Petr Babiš
Petr Babiš (neregistrovaný)
18. 3. 2002 17:08 Nový

atribut __dict__

celé vlákno

> 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__

Zasílat nově přidané příspěvky e-mailem