PDA

Pogčedajte punu verziju : objektno orjentisano programiranje


milenko76
28. 02. 2009., 14:13
Treba mi savet kako da krenem.Po struci sam fizicar i ovo ce mi trebati.Imam ideje da pocnem da uzimam casove ali ne znam od koga?Kako ce krece cena casa?Ako neko ima ideje daj nek pomaze.

Vladimir Rodic
28. 02. 2009., 14:39
Treba mi savet kako da krenem.Po struci sam fizicar i ovo ce mi trebati.Imam ideje da pocnem da uzimam casove ali ne znam od koga?Kako ce krece cena casa?Ako neko ima ideje daj nek pomaze.

Mozes uzeti knjigu nekog objektno orijentisanog jezika, na primer Java i tu ce ti biti opisano i objektno orijentisano programiranje, a mozes i da odes na fakultet i odslusas neko predavanje na tu temu. Mi smo imali ceo predmet koji se je zvao OOP...

Ivan
28. 02. 2009., 17:23
"Objektno orjentisani nacin misljenja" - Matt Weisfeld, Izdavac: CET

- Odlicna knjiga za uvod u OOP, a nakon nje mozes da uzmes bilo koju knjigu za pocetnike nekog OOP jezika.

Jin Kazama
02. 03. 2009., 17:46
Ma, C++ je zakon, nadji neku dobru knjigu i netrebaju ti casovi. Ako si totalni pocetnik u programiranju mozda je bolje da pocnes sa C-om. On je skoro isto kao C++ samo nije objektno orijentisan, a lakse ga je savladati za pocetnike.

Eniac
03. 03. 2009., 00:07
uf, ne bih se slozio da je C++ laksi za ucenje od Jave... Java je dosta lep jezik za pocetnike, brzo se uci i daje lepu osnovu za kasnije sto je i razlog sto se ponajvise izucava na fakultetima

Dragi Tata
03. 03. 2009., 15:53
Ajde da se jablan ne muči nego da ja kažem: Ruby ti je jedini "čist" OO jezik koji se koristi u stvarnom svetu. Tj, ima i SmallTalk ali je taj klinički mrtav.

Mada, ja sam lično uvek bio pristalica fleksibilnosti nauštrb "čistote" pa radije koristim ružne i moćne jezike kao što je C++ i Perl.

LiquidBrain
03. 03. 2009., 15:59
Ajde da se jablan ne muči nego da ja kažem: Ruby ti je jedini "čist" OO jezik koji se koristi u stvarnom svetu. Tj, ima i SmallTalk ali je taj klinički mrtav.

Mada, ja sam lično uvek bio pristalica fleksibilnosti nauštrb "čistote" pa radije koristim ružne i moćne jezike kao što je C++ i Perl.

Ja sam radio kao smalltalk developer :)

smallTalk nije mrtav :)

jablan
03. 03. 2009., 17:26
I Pajton (Python) i Rubi (Ruby) su milina za učenje, imaju jako blagu krivu učenja a opet nude neke vrlo moćne koncepte (objektni i funkcionalni). Plus što oba nude interaktivnu konzolu i učenje se svodi na beskrajnu igru i eksperimentisanje. Jedino što posle "prizemljenje" na češće korišćene jezike može da zaboli.

Uporedite banalan "Hello world" u Javi i u Pajtonu (http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python/Hello,_World) (ajd da ne bude da stalno forsiram Rubi), pa ćete videti da čovek koji se prvi put susreće sa programiranjem može prilično dugo da bulji u Javinu verziju (http://java.sun.com/docs/books/tutorial/getStarted/application/index.html) ne znajući šta ga je snašlo... "public? static?! String[] args?! WTF!"...

Takođe, mislim da ne postoji potreba za časovima - oba jezika su vrlo lagana za samostalno učenje, na netu ima puno dobrih knjiga i tutorijala (naravno, podrazumeva se da vladaš engleskim). Časovi su tu za one koji nemaju volju da uče nego iz nekog razloga moraju da uče na silu.

Dragi Tata
03. 03. 2009., 18:37
I Pajton (Python) i Rubi (Ruby) su milina za učenje

Jesu, ali čovek pita za OOP a u tom svetlu ne bih preporučio Python koji ima prilično kilavu podršku za OOP, za razliku od Rubija.

Petar Marić
03. 03. 2009., 19:28
Hm, u kom smislu kilavu?

Dragi Tata
03. 03. 2009., 20:49
@ Python Zealot :D

Da se razumemo, ja u stvari više volim Python, samo govorim sa stanovišta učenja OOP-a.

1) U Rubiju je sve objekat, čak i brojevi. U Pythonu je vidljiva razlika između ugrađenih i korisničkih tipova.
2) Podrška za privatne članove koja je u Python-u više stvar konvencije
3) Sintaksa: "self" u Pythonu kod poziva metoda.

degojs
04. 03. 2009., 02:25
1) U Rubiju je sve objekat, čak i brojevi. U Pythonu je vidljiva razlika između ugrađenih i korisničkih tipova.

Pa sad.. da li je prirodnije i razumljivije da brojevi budu brojevi ili tamo neki.. objekti?

nn.nn
04. 03. 2009., 07:47
Pa sad.. da li je prirodnije i razumljivije da brojevi budu brojevi ili tamo neki.. objekti?

A šta su brojevi onda kad su samo "brojevi"? Nisu li to ti... objekti? Da ne bude zabune, ozbiljno pitam. Zašto je taj koncept (brojevi kao objekti) posebno težak za razumevanje za nekog ko barata OOP? Zar to nije samo jedna apstrakcija?

Uostalom, čini mi se kad god se pominje to sa brojevima, to je da bi se naglasilo da je Ruby do temelja objektno orjentisan. Ne vidim šta tu može praktično da pravi problem kad treba da sedneš nešto da kodiraš. Mada može i stojeći, ako imaš odgovarajući sto (http://www.sitstandsolutions.com/deskrange.html). ;)

Lična nota: ja sam Ruby učio kao, praktično, totalni početnik u programiranju, ako izuzmemo NAR-1 i 2, nekakav teorijski (papirni) Basic, nešto malo shell skriptovanja i povremeno očijukanje (bez pipanja) sa kodom u nekim drugim jezicima. Ne tvrdim da sam nešto mnogo napredovao, ali nisu brojevi ono što mi je možda bilo teško da razumem.

kaizen
04. 03. 2009., 09:28
Pa sad.. da li je prirodnije i razumljivije da brojevi budu brojevi ili tamo neki.. objekti?

Prirodnije i razumljivije samo za nekog ko ni ne razume koncept OOPa.

Broj (ili da budemo precizniji, instanca broja) je odličan primer objekta:
* ima stanje (vrednost), koje je u ovom slučaju nepromenljivo, google:"immutable object"
* ima ponašanje izgrađeno oko tog stanja (koristi ga i zavisi i od njega, dobar primer su aritmetičke operacije)
* ima hijerarhiju (Float, Integer...)

Milos Vukotic
04. 03. 2009., 10:01
Nije u tome poenta... Prirodnije je da broj bude broj jer smo ih tako naučili još prije osnovne škole, jednako kao što je prirodnije za biologa da ljude s kojima svakodnevno komunicira posmatra kao ljude a ne kao žive organizme koji stupaju u interakciju, ili kao što je nekom banderašu jednostavnije da posmatra struju kao struju a ne kao sinusoidalne oscilacije elektrona duž provodnika... Broj je broj :)

kaizen
04. 03. 2009., 10:48
Nije u tome poenta... Prirodnije je da broj bude broj jer smo ih tako naučili još prije osnovne škole ...

Tvojom logikom, parče kôda koje sledi je potpuno neprirodno i nerazumljivo, jer Bože moj, drugačije smo učili iz matematike:

i = i + 1

:1074:

ivanhoe
04. 03. 2009., 10:53
njah, a jel prirodnije onda da string bude niz slova, a ne objekat? I niz isto tako, zasto je prirodnije da je niz objekat nego da je broj objekat?

osnovna OOP ideja je da svaki komad informacije ume sam da se snadje sa svojim vrednostima, bez da neko sa strane petlja po tome direktno, i po toj logici najnormalnija je ideja da svi tipovi podataka treba da budu objekti, sa geterima i seterima i pridruzenim metodama koje handluju operacije nad njihovim vrednostima..

Petar Marić
04. 03. 2009., 11:16
1) U Rubiju je sve objekat, čak i brojevi. U Pythonu je vidljiva razlika između ugrađenih i korisničkih tipova.
Koliko znam i broj je objekat (http://docs.python.org/c-api/int.html), što se uostalom može proveriti i u konzoli:
In [1]: broj = -5

In [2]: broj.
broj.__abs__ broj.__int__ broj.__reduce_ex__
broj.__add__ broj.__invert__ broj.__repr__
broj.__and__ broj.__long__ broj.__rfloordiv__
broj.__class__ broj.__lshift__ broj.__rlshift__
broj.__cmp__ broj.__mod__ broj.__rmod__
broj.__coerce__ broj.__mul__ broj.__rmul__
broj.__delattr__ broj.__neg__ broj.__ror__
broj.__div__ broj.__new__ broj.__rpow__
broj.__divmod__ broj.__nonzero__ broj.__rrshift__
broj.__doc__ broj.__oct__ broj.__rshift__
broj.__float__ broj.__or__ broj.__rsub__
broj.__floordiv__ broj.__pos__ broj.__rtruediv__
broj.__getattribute__ broj.__pow__ broj.__rxor__
broj.__getnewargs__ broj.__radd__ broj.__setattr__
broj.__hash__ broj.__rand__ broj.__str__
broj.__hex__ broj.__rdiv__ broj.__sub__
broj.__index__ broj.__rdivmod__ broj.__truediv__
broj.__init__ broj.__reduce__ broj.__xor__

In [2]: broj.__abs__()
Out[2]: 5

In [3]: abs(broj)
Out[3]: 5

In [4]: broj.__abs__?
Type: method-wrapper
Base Class: <type 'method-wrapper'>
String Form: <method-wrapper '__abs__' of int object at 0x002D7F68>
Namespace: Interactive
Docstring:
x.__abs__() <==> abs(x)

3) Sintaksa: "self" u Pythonu kod poziva metoda.
self nije deo sintakse već je obična promenljiva - možeš je zvati i this i that, ali znaj da ćeš time oneraspoložiti druge Python programere. Uostalom pročitaj šta o self misle Bruce Eckel (http://www.artima.com/weblogs/viewpost.jsp?thread=239003) i Guido van Rossum (http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html).

Milos Vukotic
04. 03. 2009., 11:17
Tvojom logikom, parče kôda koje sledi je potpuno neprirodno i nerazumljivo, jer Bože moj, drugačije smo učili iz matematike:

i = i + 1

:1074:
:1011: Grešiš, sinak, mojom logikom je prirodnije da se držimo onoga što lakše i brže završava posao :)

A tvojom logikom je prirodnije da pišem 2.increaseValue(2) nego 2+2 :)
I nemoj da si pomenuo operatore i overloading i ostalo, 2+2 je 2+2 i neću ni da razmišljam o tome :)

Htjedoh reći da je, kad unaprijediš svoje znanje u bilo kojoj oblasti, moguće to znanje primijeniti i na svakodnevni život i redefinisati shvatanje davno usvojenih stvari, ali da je često znatno jednostavnije držati se starog znanja.
Možeš npr. imati doktorat iz dinamike fluida ali ne znači da ćeš efikasnije napuniti čašu vode ako koristiš Stoksovu formulu i Bernulijevu jednačinu, samo ćeš izgubiti vrijeme.

Petar Marić
04. 03. 2009., 11:22
Evo još jednog, boljeg, dokaza da broj zaista jeste objekat:
In [1]: type(5)
Out[1]: <type 'int'>

In [2]: isinstance(5, object)
Out[2]: True

In [3]: issubclass(int, object)
Out[3]: True

kaizen
04. 03. 2009., 11:26
:1011: Grešiš, sinak, mojom logikom je prirodnije da se držimo onoga što lakše i brže završava posao :)

A tvojom logikom je prirodnije da pišem 2.increaseValue(2) nego 2+2 :)


Zarobljen si u PHP sintaksi. U Rubiju je + metoda objekta kao i svaka druga (dakle i tamo se piše 2+2)

jablan
04. 03. 2009., 11:40
A tvojom logikom je prirodnije da pišem 2.increaseValue(2) nego 2+2 :)
Mislim da mešaš sintaksu i semantiku. 2+2 je podjednako validan poziv metoda kao i 2.increaseValue(2), samo što si ti navikao na ovu drugu sintaksu. Na kraju krajeva, šta je po tebi 2? Bajt? Skup bitova? Flip-flopova?

Sa druge strane, šta je po tebi objekat? Faktura? StavkaFakture?
Grešiš, sinak, mojom logikom je prirodnije da se držimo onoga što lakše i brže završava posao
Uz rizik da započnem još jednu besmislenu raspravu, zašto ono što je tebi lakše mora da i meni i nekom sa strane bude lakše? Na kraju krajeva, Rubi je jedan od najekspresivnijih jezika današnjice i ima vrlo malo mesta za "lakše i brže".

Milos Vukotic
04. 03. 2009., 12:04
Rekoh ja da mi ne pominjete operatore i overloading, znam za to odavno (šta ćit'o, rušio! :) ) ali dobro de...
Dakle, nisam nijednom pomenuo Ruby, ne pričam o ekspresivnosti Ruby-ja nego o potrebnim nivoima apstrakcije i potrebi da se popravlja nešto što nije pokvareno. Broj je broj.
To ne znači da ja ne razumijem da se broj može posmatrati kao objekat i da mi nije jasno sve što pričate, niti da hoću vama da nametnem svoje shvatanje. Jednostavno, ne želim da razmišljam o tome zašto i kako je 2+2=4, kontaš? :)

Udaviću s metaforama, ali valjda se konačno shvati što sam pjesnik htio da kažem: bogatiji je znanjem onaj koji teorijski dobro poznaje Sunčev sistem, ali ne znači da je efikasniji od onoga koji na to gleda samo logikom da Sunce izlazi i zalazi i da se danju radi a noću spava.
Nijedna krajnost nije dobra, trudim se izganjati neku najefikasniju sredinu :)

jablan
04. 03. 2009., 12:20
Jednostavno, ne želim da razmišljam o tome zašto i kako je 2+2=4, kontaš? :)
Ama ko te tera da razmišljaš o tome da li je 2 objekat ili nije? Da li razmišljaš o tome kako bajtovi idu u registre procesora i koje se mašinske instrukcije izvode kad u <ovde umetni svoj omiljeni jezik> napišeš 2+2?

Poenta je u tome što ti (a i neki drugi učesnici) shvatate OOP kao koncept koji je naknadno nakalemljen na neko imaginarno "zdravorazumsko programiranje" (iako nešto takvo zapravo ne postoji), a to shvatanje nije bez osnova jer je većina tekućih jezika evoluirala iz C-a veštačkim dodavanjem objektne orijentisanosti u C++-u - otud i tvoja averzija od "preopterećenja operatora" - iako je to jedan potpuno veštački koncept.

Jezici koji su u startu projektovani kao OO jednostavno nemaju tih problema "neprirodnosti" o kojima govoriš, samo sintaksu koja je manje ili više bliska ljudima iz C galaksije.

Milos Vukotic
04. 03. 2009., 12:41
Pomalo smo ovdje u situaciji "ja u klin ti u ploču", priznaćeš :)

jablan
04. 03. 2009., 13:01
Samo još jedno da pitam (nevezano za ono što si ti pričao):

Zašto bi ovo:

a = a & 5;
(u npr C-u)

bilo išta "prirodnije" od:

5.times {puts 'Hello world!'}
(u Rubiju)
?

U prvom slučaju ti si dobio intuitivno potpuno neshvatljiv koncept toga da je broj zapravo skup bitova, a u drugom podjednako neshvatljiv (ali podjednako koristan) koncept da je broj objekat. I šta sad? Ne vidim da se neko bunio zbog ovog prvog, a svi udarili u dreku zbog ovog drugog...

Dragi Tata
04. 03. 2009., 15:53
Pa sad.. da li je prirodnije i razumljivije da brojevi budu brojevi ili tamo neki.. objekti?

Pitaš me za mišljenje?
Prirodnije je i razumljivije da budu brojevi, naravno - nizovi bitova. Smeštati koncept kao što je integer u nekakve hijerarhije je potpuno besmisleno i skupo. Uopšte uzev, ti "čisti" OO jezici kao što je Smalltalk i Ruby mi "iduckaju na živce" (posebno Smalltalk) i kao što rekoh za scripting uglavnom koristim Perl i to onaj stari prljavi proceduralni, bez "O" od objektnog :D Sav "production code" mi je u C++u za koji ni rođena majka (dobro, otac) ne kaže da je "čist OOP", i da se ja pitam izbacio bih iz njega pola "OO" konstrukcija koje ga samo nepotrebno komplikuju.

Međutim, ako pogledaš naslov teme - čovek želi da nauči OOP. Za učenje OOP-a, ja ipak predlažem "čist OOP" jezik, dakle može da bira: Smalltalk ili Ruby.

ivanhoe
04. 03. 2009., 16:26
Osnovno pitanje je sta se dobija u programiranju time sto ces imati brojeve kao objekte, ako ces i dalje 99% vremena u kodu da pises 2+2 ?

Sa stanovista programera tebi je isto, da li ces da pises 5.neka_funkcija ili neka_funkcija(5) i nema neke bitne razlike, a sa stanovista performansi gubis, jer za obicno sabiranje 2 broja umesto 2-3 masinske instrukcije, imas sigurno neko krljanje po stacku, jumpove i cuda...

ali dobro, zato i postoje razni jezici, pa svako radi u onome sto mu lezi...

degojs
04. 03. 2009., 21:04
Prirodnije i razumljivije samo za nekog ko ni ne razume koncept OOPa.

Broj (ili da budemo precizniji, instanca broja) je odličan primer objekta:
* ima stanje (vrednost), koje je u ovom slučaju nepromenljivo, google:"immutable object"
* ima ponašanje izgrađeno oko tog stanja (koristi ga i zavisi i od njega, dobar primer su aritmetičke operacije)
* ima hijerarhiju (Float, Integer...)

U svim jezicima u kojima sam radio do sada uvek se pravila razlika između istih u odnosu na klasične objekte. Implementacija rada sa brojevima (kao prostim tipovima) sigurno je drugačija, čak je i poznato da postoji izvesni "penal" ako se brojevi koriste kao objekti (otud i operacije kao box i unbox, zar ne).

Ako misliš da svi ti dizajneri tih jezika ne razumeju koncept OOP-a, mogu da ti kažem da imaš malo mnogo visoko mišljenje o sebi.

Iskreno, koliko ljudi razmišlja na takav način, kako si ti nabrojao gore, o brojevima? Verovatno niko. Mislim ajmo pametovati.. ne razmišljate o brojevima kao objektima jer ne razumete OOP. Aha, šipak.

kaizen
04. 03. 2009., 21:25
U svim jezicima u kojima sam radio do sada uvek se pravila razlika između istih u odnosu na klasične objekte. Implementacija rada sa brojevima (kao prostim tipovima) sigurno je drugačija, čak je i poznato da postoji izvesni "penal" ako se brojevi koriste kao objekti (otud i operacije kao box i unbox, zar ne).

Upravo tako, zbog performansi, a ne zbog toga što je "prirodnije i razumljivije" kako si ti rekao.

degojs
04. 03. 2009., 21:29
^A ne, nisu u pitanju samo performanse u pogledu brzine. Već i činjenica da a=5 može lepo da "legne" na određenu memorijsku lokaciju, bez ikakvog dodatnog overheada koji objekti nose sa sobom. Vidiš, to je meni prirodno i jednostavno.

kaizen
04. 03. 2009., 21:33
Već i činjenica da a=5 može lepo da "legne" na određenu memorijsku lokaciju

http://www.youtube.com/watch?v=zQuRgV1hlEY&feature=related

dinke
04. 03. 2009., 21:36
Za učenje OOP-a, ja ipak predlažem "čist OOP" jezik, dakle može da bira: Smalltalk ili Ruby.
Ajd da svejedno pitam uz opasnost da ispadnem glup u drustvu. Zasto Java nije "cist" OOP jezik? Samo zato sto ima "proste" tipove podataka (oh dodjavola brojevi nisu objekti) ili postoji neki drugi razlog za koji ne znam?

Ja bih inace za OOP preporucio Javu bez obzira da li je definisan kao cist ili prljav. :)

degojs
04. 03. 2009., 21:42
^^Nisam siguran da razumem šalu (verovatno ne razmišljam dovoljno OOP), pa ću da se vratim na temu.

Jednostavno, ne slažem se sa Nemanjinim da je učenje OOP-a lakše u jeziku u kom se sve, pa i brojevi, tretira kao objekti. Ne vidim da to smeta, ali ni da je bitno. Lično ne vidim problem da se OOP uči u jeziku koji ima i druge, proste, tipove podataka.

// bingo, preteče me Dinke :)

Dragi Tata
04. 03. 2009., 23:37
Pazite, ako želiš da naučiš neku paradigmu za programiranje najbolje je da se držiš jezika koji je ograničen na tu paradigmu ili "čist". Za strukturno proceduralno programiranje Pascal je zakon, za funkcionalno Haskell a za objektno Smalltalk (može i Ruby). Npr, ako želiš da naučiš funkcionalno programiranje u nekom "nečistom" funkcionalnom jeziku kakav je npr ML, lako će da ti se desi da nastaviš da programiraš u imperativnom stilu prosto zato što ti je to dozvoljeno. Haskell ti ne dozvoljava da programiraš imperativno i ako koristiš Haskell naučićeš funkcionalno programiranje. Prebaci analogiju na objektno progrmiranje - sa Javom možeš ladno da programiraš proceduralno i da misliš da programiraš objektno. Što se Pythona tiče, u njemu je proceduralno programiranje ne samo moguće nego i lepše od objektnog - ne znam zašto bi iko poželeo da objektno programira u Pythonu :D

Što se Jave tiče, da dodam da je i inače ne smatram dobrim jezikom za učenje programiranja - objektnog ili inače.

degojs
04. 03. 2009., 23:53
ne znam zašto bi iko poželeo da objektno programira u Pythonu

Kao što ni ja ne vidim zašto bi iko poželeo da u brojevima vidi immutable objekte (ne kažem da ti zastupaš takvo mišljenje, itd, samo se nadovezujem).

Može li? Može, ali meni to jednostavno nikako ne leži, više mi je to u fazonu imamo macolu pa je sad sve klin, udri brale :)

"Objekat" je tako apstraktan pojam da sve može da se proglasi za isti, pa naravno i brojevi. Samo meni to nikako nije prirodna (a još manje potrebna) asocijacija.

jablan
04. 03. 2009., 23:57
Što se Jave tiče, da dodam da je i inače ne smatram dobrim jezikom za učenje programiranja - objektnog ili inače.
Slažem se. Po meni je učenje programiranja u Javi ravno učenju vožnje u kamionu. :)

Dragi Tata
05. 03. 2009., 00:08
"Objekat" je tako apstraktan pojam da sve može da se proglasi za isti, pa naravno i brojevi. Samo meni to nikako nije prirodna (a još manje potrebna) asocijacija.

Pazi primer. Da izmislimo sad objektni jezik i da ga nazovemo "O" (kladim se da jezik tog imena već postoji ali me mrzi sad da gledam). Neka ima klasičan objektni sistem u kome su sve klase ivedene iz "Object". Recimo i da ima statički tip sistem. U neko doba želimo da dodamo kolekcije u standardnu biblioteku. Logično, te kolekcije će da čuvaju refernce tipa Object (nemamo šablone/generics). E, sad treba da dodaš celobrojne vrednosti u jednu takvu kolekciju. Ako su celobrojne vrednosti objekti, ništa lakše. Ako nisu? Može boxing ili paralelni objekti za svaki "neobjektni tip", i to sve manje više radi u C#/Javi (mada sam vide jako zanimljive bagove kao posledicu boxinga) ali ako govorimo o učenju OOP-a da li je to nešto što pomaže ili odmaže?

japan
05. 03. 2009., 00:23
Kao što ni ja ne vidim zašto bi iko poželeo da u brojevima vidi immutable objekte (ne kažem da ti zastupaš takvo mišljenje, itd, samo se nadovezujem).

Može li? Može, ali meni to jednostavno nikako ne leži, više mi je to u fazonu imamo macolu pa je sad sve klin, udri brale :)

"Objekat" je tako apstraktan pojam da sve može da se proglasi za isti, pa naravno i brojevi. Samo meni to nikako nije prirodna (a još manje potrebna) asocijacija.

ajde kad se povela brica o brojevima kao objektima, da se nadovezem na nju - broj i jeste objekat, ako pogledas malo istoriju, videces da je broj nastao kao potreba coveka da kvantifikuje stvari, da prebroji svoje ovce, i sl. apstrakcija broja se pojavila mnoooogo kasnije, a formalizacija svega toga tek nedavno (par vekova). nije slucajno sto deca uce da sabiraju sabirajuci jabuke, a ne brojeve - uce tako jer je to prirodno, broj kao pojam nikako nije prirodan nego je apstrakcija jabuka, krusaka, cega god... i to dolazi tek kasnije, sa iskustvom.

prevedeno na OOP, meni jeste logicno da broj bude objekat, tacnije interfejs, pa da se dalje razvija hijerarhija na prirodne, racionalne, realne, kompleksne... kako i jeste. a da li ce operacije nad brojevima da budu u obliku metoda ili operatora, potpuno je nebitno.

sto se teme tice, slazem se sa tatom da je za ucenje neke paradigme najboje koristiti jezik koji se te paradigme navise i drzi. da li ces ti posle da se prebacis na skrnavu javu ili C++, nebitno je, to vec zavisi od okolnosti, ali ce ti paradigma ostati zauvek.

degojs
05. 03. 2009., 00:24
Eh, eh :D

Nemanja, ne sporim ja da pojednostavljivanje type sistema ("sve je objekt") ima prednosti, ali evo da ja isto pitam jednu stvar: da li tebe nešto poput "2+7-1" upućuje, asocira, kako god da nazoveš, da radiš sa nekakvim (immutable) objektima ili sa brojevima?

Ovaj, da li se ti odlučuješ da kucaš "2+7-1" ili rađe koristiš fluent interfejs tipa 2.add(7).minus(1)? Ili možda nalaziš prirodno da radiš operator overload (as opposed to: da ne moraš da ga radiš uopšte) za +, - i ostale uobičajene operacije nad brojevima?

Jednostavno, ne vidim da brojevima odgovara ta apstrakcija.

degojs
05. 03. 2009., 00:26
ajde kad se povela brica o brojevima kao objektima, da se nadovezem na nju - broj i jeste objekat

Aman-zaman, neću uopšte da vam sporim da broj jeste objekat, jer praktično SVE jeste objekat.
Samo, da li ti kada radiš sa brojevima tako to "doživljavaš" - da radiš sa nekakvim immutable objektima? Ozbiljno?

japan
05. 03. 2009., 00:33
^ opet sad prica o jabukama :) brojeve dozivljavas tako kako ih ti opisujes samo zato sto su te tako naucili. nemas pojma sta su, ali znas kako se radi sa njima.

sve u svemu, ako imas broj kao objekat, imas "cistiji" OO jezik, i to je sve. tebi ta cistoca nije bitna, vise ti odgovara da to bude blize realnom svetu, i to je ok ;)

degojs
05. 03. 2009., 01:02
^Tako su nas sve naučili i dalje uče tako.

Ako je tebi toliko OOP način rada sa brojevima lakši i prirodniji, samo ti de, pa udri 2.add(7).minus(1), odnosno može i 2+7-1, ali to je onda uz operator overload upravo da bi se pobeglo "nazad", gde brojevi i ne liče na objekte. Mislim da je ivanhoe lepo već pojasnio, da ne ponavljam.

Dragi Tata
05. 03. 2009., 01:26
Jednostavno, ne vidim da brojevima odgovara ta apstrakcija.

Ama pazi, slažem se. Kao što rekoh, OOP čistunstvu u praksi ne nalazim mesta. Ali ovde govorimo o učenju OO paradigme i u tom svetlu mislim da je korisno čak i brojeve predstavljati objektima.

japan
05. 03. 2009., 01:32
kakav covek jbt :)

degojs, lakse mi je da radim sa brojevima, ali kad pricamo o OO paradigmi, onda mi je _logicno_ sve bude objekat, pa i broj. to sto sam ja naucio da sabiram i oduzimam na taj nacin, ne znaci da broj ne zasluzuje da bude objekat. pogotovo ako tek ucim OO.

isto kao sto sam naucio da racunam u dekadnom sistemu, i ne tvrdim da treba da se radi u binarnom, iako se na kraju, pri dnu procesora radi.

degojs
05. 03. 2009., 01:39
^Kettle, meet pot ;)

Kad ti je logično da brojeve tretiraš kao objekte onda lepo "2.add(7).minus(1)", a nemoj a bežiš od istog u ono staro "2+7-1" jer znaš ono "if it walks like a duck and quacks like a duck..."

Eto.

japan
05. 03. 2009., 01:47
ne vredi...

ivanhoe
05. 03. 2009., 02:04
Aj malo da vratim ovu pricu iz orbite oko Jupitera malo nazad na Zemlju :)

Mislim da je za nekog ko krece da uci da programira OO vrlo bitno da u startu nauci jednu stvar: kad mu OO koristi, a kad je prakticnije sve zapakovati u jednu metodu koja ce biti efikasna. Takodje mislim da je zgodno da se ucenje krene u nekom jeziku koji je lak, i sa kojim ces moci da dobijas poslove, jer tesko ce neko nesto nauciti citajuci knjige, programiranje se uci tako sto se programira. Tako da je moja preporuka neki od major jezika tipa C# ili cak PHP.

Da me ne shvati niko pogresno, python i ruby su ok jezici, ali su toliko drugaciji od svega ostalog da ce coveku posle biti tesko da predje, a zbog izbora poslova u Srbiji ce zavrsiti radeci ili C# ili Javu ili PHP, pre ili kasnije.

nn.nn
05. 03. 2009., 07:49
Aj malo da vratim ovu pricu iz orbite oko Jupitera malo nazad na Zemlju :)

Mislim da je za nekog ko krece da uci da programira OO vrlo bitno da u startu nauci jednu stvar: kad mu OO koristi, a kad je prakticnije sve zapakovati u jednu metodu koja ce biti efikasna. Takodje mislim da je zgodno da se ucenje krene u nekom jeziku koji je lak, i sa kojim ces moci da dobijas poslove, jer tesko ce neko nesto nauciti citajuci knjige, programiranje se uci tako sto se programira. Tako da je moja preporuka neki od major jezika tipa C# ili cak PHP.

Da me ne shvati niko pogresno, python i ruby su ok jezici, ali su toliko drugaciji od svega ostalog da ce coveku posle biti tesko da predje, a zbog izbora poslova u Srbiji ce zavrsiti radeci ili C# ili Javu ili PHP, pre ili kasnije.

Čovek je fizičar i, izuzev ako misli da menja struku, verovatno mu OOP treba zbog nečeg konkretnog. S obzirom da ne znamo šta je to, tvoja argumentacija, iako ispravna u opštem slučaju, ne mora biti važna za konkretan slučaj. Moguće je da postoji "language of choice" za tu vrstu problema.

tesla
05. 03. 2009., 09:28
C#, B#, stay # :beer:

cvele
05. 03. 2009., 09:38
Pa ako je pitanje koji oo jezik uciti, a odgovor pitanje da li je prirodnije da broj bude objekat, namece se zakljucak da je ova tema otisla dodjavola jos na polovini prve strane :D

srdjan
05. 03. 2009., 10:10
brojeve dozivljavas tako kako ih ti opisujes samo zato sto su te tako naucili. nemas pojma sta su, ali znas kako se radi sa njima.

Mnoge stvari ljudi rade brzo i lako jer su na jedan nacin naucili osnovne koncepte zivota.

Svi govore maternjim jezikom i koriste sajtove, knjige, elektronske uredjaje, idu u skole jezika... umesto da cela porodica govori esperanto.

Slicno je i sa idejom: 2 = broj, faktura = objekat.

Nije bitno da se covek prilagodi OOP, vec obrnuto.

Zato ni jedan od idealnih OOP jezika nije odmakao previse od akademske rasprave, za razliku od Jave, C#, C++

milenko76
05. 03. 2009., 10:29
Hvala svima na odgovorima,bogme velika se prasina digla.Sve sam procitao mislim da cu da krenem od jave,generalno trebace mi oo programiranje.

kaizen
05. 03. 2009., 11:09
Nije bitno da se covek prilagodi OOP, vec obrnuto.
Zato ni jedan od idealnih OOP jezika nije odmakao previse od akademske rasprave, za razliku od Jave, C#, C++


Ja zapravo vidim da se OOP u mejnstrim jezicima prilagodio mašinama (zbog performansi) a ne čoveku kako ti tvrdiš, otud i ta nekonzistentnost u pogledu tipova podataka.

kaizen
05. 03. 2009., 11:38
Jel ovo to prilagođavanje čoveku:

Integer.valueOf(int)

Returns a Integer instance representing the specified int value

merjadok
05. 03. 2009., 11:43
^ http://mindprod.com/jgloss/autoboxing.html

Inače, čudi me da čoveku niko nije predložio JRuby (http://jruby.codehaus.org/)/IronPython (http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython)/Jython (http://www.jython.org/Project/) ... spojimo lepo i korisno.

bluesman
05. 03. 2009., 12:08
^ A šta je tu korisno? :D

merjadok
05. 03. 2009., 12:16
Good question :)

Korisno u smislu da će eventualni prelazak na neki mainstream jezik možda biti laganiji, mada moguće je da se varam.

degojs
05. 03. 2009., 14:50
A što na ovom forumu ima ljudi iz Danske...

Danish Pro Talk ;)

Dragi Tata
05. 03. 2009., 16:06
Lepo je biti praktičan i učiti korisne stvari, ali treba malo misliti i "out of the box". Da sam ja početkom 90-ih gledao šta se traži u Srbiji, naučio bih Clipper :D.

Sad npr. lagano učim IronScheme - nije da mislim da ću ovaj jezik da koristim na poslu, ali nije loše malo proširiti vidike i naučiti neke tehnike programiranja kojima nisam izložen svakodnevno na poslu.

bluesman
05. 03. 2009., 16:08
Nisam razmeo na šta se odnosi tvoj danski komentar, ali moje pitanje je bilo zašto je korisno da početnik krene da UČI neki "egzotični" (u smisli nedovoljno poznat i korišćen) jezik, da bi kasnije prešao na nešto drugo? Zašto ne počneš odmah da učiš to drugo? :)

(Uvali mi se Dragi Tata): Pa baš to, pričamo o početniku... malo je rano da neko ko uči da programira krene odmah da "proširuje vidike". Za njega je i izraz i = i+1 "proširivanje vidika" :)

Dragi Tata
05. 03. 2009., 16:16
Ja zapravo vidim da se OOP u mejnstrim jezicima prilagodio mašinama (zbog performansi) a ne čoveku kako ti tvrdiš, otud i ta nekonzistentnost u pogledu tipova podataka.

Zavisi kom "čoveku". Krajnji korisnik itekako ceni performanse.

Što nas vraća na 1950-te i Lisp vs Fortran. Prvi je napravljen tako da bude "blizak čoveku", tj programeru nauštrb performansi, a drugi "blizak mašini". Oba imaju svoje mesto, mada ja za obrazovne svrhe preporučujem prvi.

Dragi Tata
05. 03. 2009., 16:17
(Uvali mi se Dragi Tata): Pa baš to, pričamo o početniku... malo je rano da neko ko uči da programira krene odmah da "proširuje vidike". Za njega je i izraz i = i+1 "proširivanje vidika" :)

Ja sam razumeo da on zna programiranje i da želi da proširi vidike OO paradigmom. Ako sam pogrešio, izvinjavam se :)

degojs
05. 03. 2009., 16:30
Nisam razmeo na šta se odnosi tvoj danski komentar, ali moje pitanje je bilo zašto je korisno da početnik krene da UČI neki "egzotični" (u smisli nedovoljno poznat i korišćen) jezik, da bi kasnije prešao na nešto drugo? Zašto ne počneš odmah da učiš to drugo? :)

(Uvali se ovaj Tata opet;))

Danski komentar? Ma uopšte, na to da se poteže tolika priča oko toga da li nam je razumljivije na brojeve gledati kao najobičnije brojeve ili ćemo da ih teramo u kalup "sve je objekt" samo zato što možemo.. pa da ih opet na kraju koristimo kao i dok OO jezika nije ni bilo (tipa "2+7-1") - kao što je Ivanhoe već komentarisao.

Kontam, možda u Danskoj (a Dansku pominjem na konto pređašnje rasprave o Rubiju) decu u školi uče drugačije pa im je jednostavnije da kasnije brojeve vide prvo kao nekakve immutable objekte..

kaizen
05. 03. 2009., 16:43
Pa sad.. da li je prirodnije i razumljivije da brojevi budu brojevi ili tamo neki.. objekti?

Vidim, ovaj rezultat je veoma prirodan i razumljiv za početnika:


System.out.println(100000 * 100000);

degojs
05. 03. 2009., 17:00
^Ma jes, razumljivije je napisati nešto tipa:

100000.multiplyby(100000)

Whatever, dude...

kaizen
05. 03. 2009., 17:02
Ma jes, razumljivije je napisati nešto tipa:

100000.multiplyby(100000)

Whatever, dude...

?

Piše se najnormalnije:


puts 100000 * 100000

caboom
05. 03. 2009., 17:02
definitivno +1 za javu - sjajna je za vezbe brzog kucanja, nemam celulita na prstima... ;)

degojs
05. 03. 2009., 17:06
Piše se najnormalnije:

Kôd:


puts 100000 * 100000



I tako si bukvalno svoje brojeve-kao-objekte uzeo da tretiraš kao primitivne tipove u pogledu sintakse.. Šta ti tu vidiš drugačije nego pre, kada OO jezici nisu ni postojali? Upravo si pobegao od klasične OO sintakse..

Još jednom, vrati se na onu poruku što je Ivanhoe napisao, mrzi me da tupimo jedno te isto.

kaizen
05. 03. 2009., 17:18
I tako si bukvalno svoje brojeve-kao-objekte uzeo da tretiraš kao primitivne tipove u pogledu sintakse.. Šta ti tu vidiš drugačije nego pre, kada OO jezici nisu ni postojali? Upravo si pobegao od klasične OO sintakse..

"tretiranje brojeva kao primitivnih tipova" -- mislim stvarno :) to ti prvo padne na pamet? A ne aritmetika?

dinke
05. 03. 2009., 17:21
definitivno +1 za javu - sjajna je za vezbe brzog kucanja, nemam celulita na prstima... ;)
Slazem se, Java je za seka perse. Predlazem da batalimo ove "visoke" programske jezike i krenemo sa OOP abstrakcijom na nivou asemblera.

Mada ... i to je za seka perse, mozda je najbolje da idemo sa nizovima nula i jedinica koje cemo upisivati direktno na hdd pomocu magneta privezanih za prste ... ma kome jos treba tastatura.

dinke
05. 03. 2009., 17:23
http://imgs.xkcd.com/comics/real_programmers.png

Jes da je o editorima ali ... :))

degojs
05. 03. 2009., 17:33
definitivno +1 za javu - sjajna je za vezbe brzog kucanja, nemam celulita na prstima...

Uzmi neki editor/IDE koji je izašao u poslednjih 10-tak godina. Iznenadićeš se..

Npr. Visual Studio, otkucam "cw TAB TAB" a on to lepo odmah okrene u Console.WriteLine(*) pa još kursor postavi gde sam stavio *, pametan mali :)

Tresnem "for TAB TAB" a on pametan razvio to u čitav "for(int *=0; *<*; *++){}" blok, pa opet stavio kursor gde treba, pa kad to popunim, opet udarim TAB a on poskoči na sledeću poziciju, veseljak pravi :)

I tako redom.. ista stvar i sa Java okruženjima, koliko me sećanje služi.

P.S.
E da, ne znam da li si primetio: besplatno je brale.

japan
05. 03. 2009., 17:34
mislio sam da necu vise, ali me nekako uvek vuce da odgovorim kad se degojs ovako uhvati necega. :)

ako ti nije logicno i jasno "2.add(1).substract(7)", a jeste "2+1-7", onda ti je verovatno logicnije i "2++" nego "2.increment()"?

dva plus sta? dva plus plus? dva plus koliko?


ne znam sta si se toliko uhvatio sa sintaksu, i sam si rekao da uvek mozes da preopteretis operator. nebitno koja je cena toga.

i nije bitno da li se brojevi sabiraju operatorima, pozivom metoda ili u poljskoj notaciji, to je samo sintaksa. bitno je sta su oni u sustini.

arapske novine se citaju zdesna na levo, pa su opet novine, imaju istu sustinu.

kaizen
05. 03. 2009., 17:34
Treba mi savet kako da krenem.Po struci sam fizicar i ovo ce mi trebati.Imam ideje da pocnem da uzimam casove ali ne znam od koga?Kako ce krece cena casa?Ako neko ima ideje daj nek pomaze.

(sa "malim" zakašnjenjem) Premalo informacija si dao, da bi dobio kvalitetan odgovor. Zašto će ti trebati? Planiraš da praviš softver vezano za to čime se baviš? Imaš li iskustva u programiranju? Ako da, kakav softver (namena, distribucija/korišćenje)? Zašto mora da je OOP jezik? Takvi su zahtevi ili bi ti želeo?

i možda besmisleno, ali može ti uštedeti vreme i živce:

Da li postoji opcija da "naručiš i kupiš" softver, a ne da ga sam praviš?

caboom
05. 03. 2009., 17:36
@degojs/dinke - mislim da ste promasili poentu :) anyway, back to fast typing lessons ... whoooashhh...

nixa
05. 03. 2009., 17:46
^ što , baš je zanimljivo da rantujemo :D

degojs
05. 03. 2009., 17:52
arapske novine se citaju zdesna na levo, pa su opet novine, imaju istu sustinu.

Arapi sa tim nemaju problema, ja imam. Drugačije smo naučeni, ali i ne vidim da stoji paralela sa onim o čemu pričamo. Otkucaj ti srpske novine sa desna na levo pa daj nekom da čita, da vidiš kako nema veze..

Brale, počeli smo žešće da tupimo, mrzi me da se natežemo više, ozbiljno :) Ako baš zahtevaš, javi, pa ću detaljnije na tu tvoju poruku, ali ne vidim više smisao, ako ti ne vidiš do sada..

Dragi Tata
05. 03. 2009., 17:57
Slazem se, Java je za seka perse. Predlazem da batalimo ove "visoke" programske jezike i krenemo sa OOP abstrakcijom na nivou asemblera.

Dinke, ovde ne poredimo Javu sa C-om nego sa Rubijem :) Moja primedba je da je Java jezik previše *niskog* nivoa apstrakcije za učenje OOP-a.

bluesman
05. 03. 2009., 17:59
Na kraju se postavlja pitanje čemu sve to? :)

Kada bi vi recimo znali kako izgleda recimo kod softwera koji se prodaje kao ebay storefront software (da ne reklamiram link) mislim da bi se ispovraćali. Ja sam imao zadatak da ga implementiram na jedan sajt i odustao sam pa sam napisao svoj kod... A opet kada bi znali koliko se taj software prodaje, mislim da bi vam opet pripala muka :) Yebesh oop :)

kaizen
05. 03. 2009., 17:59
System.out.println(100000 * 100000);


Inače degojs nisam siguran da si razumeo poentu moje poruke sa ovim parčetom koda. Netačan rezultat koji se dobija je direktna posledica upotrebe tzv. "primitivnih" tipova podataka.

jablan
05. 03. 2009., 18:07
Yebesh oop :)
Da onda lepo pozatvaramo radnje i uposlimo Indijce? Jebeš učenje i napredovanje, jebeš razmenu znanja, jebeš forume... Što ne odrade Indusi, odradiće naši magični editori i svi zadovoljni...

Dragi Tata
05. 03. 2009., 18:09
Ja sam imao zadatak da ga implementiram na jedan sajt i odustao sam pa sam napisao svoj kod...

Eto, sam si odgovorio na pitanje "čemu sve to".


Yebesh oop :)

Tu se manje-više slažem. Napravili su celu religiju od obične programerske paradigme.

Dragi Tata
05. 03. 2009., 18:15
Inače degojs nisam siguran da si razumeo poentu moje poruke sa ovim parčetom koda. Netačan rezultat koji se dobija je direktna posledica upotrebe tzv. "primitivnih" tipova podataka.

Strogo govoreći, nije. Problem je u operatoru za množenje koji sasvim lepo može da se napravi tako da baci izuzetak kod integer overflow situacija i sa "primitivnim" brojevima.

U stvari, priznajem da sam iznenađen da čujem da Javin operator za množenje nije tako urađen.

kaizen
05. 03. 2009., 18:19
Strogo govoreći, nije. Problem je u operatoru za množenje koji sasvim lepo može da se napravi tako da baci izuzetak kod integer overflow situacija i sa "primitivnim" brojevima.

Nije šija nego vrat :) Pa bacanje izuzetka je takođe zbunjujuć i neočekivan rezultat za početnika (ne zaboravi konteks oko čega je započeta rasprava, a to je da je "prirodnije i razumljivije da broj nije objekat"). Jedini prirodan, razumljiv i očekivan ishod je da dobije ispravan rezultat množenja.

Dragi Tata
05. 03. 2009., 18:28
Nije šija nego vrat :) Pa bacanje izuzetka je takođe zbunjujuć i neočekivan rezultat za početnika (ne zaboravi konteks oko čega je započeta rasprava, a to je da je "prirodnije i razumljivije da broj nije objekat"). Jedini prirodan, razumljiv i očekivan ishod je da dobije ispravan rezultat množenja.

Hteo sam da kažem da je sasvim moguće da operator za množenje detektuje integer overflow i sa primitivnim tipovima a da li će da baci izuzetak ili da bude pametan pa vrati tačan rezultat (što i nije uvek moguće uostalom - šta ako ne postoji integer tip dovoljno veliki da "spakuje" rezultat?) to opet nema veze sa objektima već sa implementacijom operatora množenja.

degojs
05. 03. 2009., 18:33
Inače degojs nisam siguran da si razumeo poentu moje poruke sa ovim parčetom koda. Netačan rezultat koji se dobija je direktna posledica upotrebe tzv. "primitivnih" tipova podataka.

NE. To je ograničenje kompajlera, a ne prostih tipova podataka. Kompajler koji bi po difoltu te vrednosti tretirao kao npr. long ili double neće imati problem, a i dalje su "primitivi" u pitanju.

kaizen
05. 03. 2009., 18:33
... pa vrati tačan rezultat (što i nije uvek moguće uostalom - šta ako ne postoji integer tip dovoljno veliki da "spakuje" rezultat?)

U tome je i moja poenta zašto "krivim" tip podatka. Kada je broj objekat, čuvanje vrednosti je unutrašnja stvar objekta pa može biti realizovana na razne načine. Da demonstriram:


>> 10000000.class
=> Fixnum
>> 10000000.class.superclass
=> Integer



>> 100000000000000000000000.class
=> Bignum
>> 100000000000000000000000.class.superclass
=> Integer



>> 10000000 * 100000000000000000000000
=> 1000000000000000000000000000000

kaizen
05. 03. 2009., 18:41
NE. To je ograničenje kompajlera, a ne prostih tipova podataka. Kompajler koji bi po difoltu te vrednosti tretirao kao npr. long ili double neće imati problem, a i dalje su "primitivi" u pitanju.

ma daj, a kada izađe iz njihovih okvira?

Kako ne vidiš da je problem isti kao kada ne enkapsuliraš neki objekat. Umesto da radiš sa interfejsom broja a da te ne zanima kako je realizovano njegovo čuvanje u memoriji, ovde radiš direktno sa tom vrednošću.

degojs
05. 03. 2009., 18:46
Kada izađe iz okvira tih tipova podataka, slažem se da brojevi kao objekti imaju prednost. Živ mi bio, pa kad izađeš iz okvira double tipa, pa se čujemo.. Jednostavno: koliko često se to tebi dešava na poslu?

Dragi Tata
05. 03. 2009., 18:47
U tome je i moja poenta zašto "krivim" tip podatka. Kada je broj objekat, čuvanje vrednosti je unutrašnja stvar objekta pa može biti realizovana na razne načine.

Kapiram. Mada, ako imaš BigNum tip, tvoj primer opet može da radi lepo i sa "primitivnim" brojevima kao argumentima - glavno je da postoji overload operatora za množenje koji vraća BigNum objekat. Doduše, onda se problem javlja sa izrazima tipa:


int rezultat = 10000000 * 10000000;


Još jedan tipičan primer Lisp vs Fortran filozofije :)

Inače, da malo zezam Dinketa, u assembleru je trivijalno rešiti ovaj problem - samo proveriš overflow flag posle svake aritmetičke operacije :D

kaizen
05. 03. 2009., 18:50
Kada izađe iz okvira tih tipova podataka, slažem se da brojevi kao objekti imaju prednost.

:1090: :1029:

degojs
05. 03. 2009., 18:52
:)

Da zaključimo, prelazimo na brojeve kao objekte jer na sveto NIKAD može da se desi da izađemo iz okvira long ili double tipa. Kog datuma je to crveno slovo u kalendaru? :)

Dragi Tata
05. 03. 2009., 18:57
:)

Da zaključimo, prelazimo na brojeve kao objekte jer na sveto NIKAD može da se desi da izađemo iz okvira long ili double tipa.

Nemoj da si previše siguran. Integer overflow je ozbiljan sigurnosni problem. Vidi recimo ovde: http://www.phrack.org/issues.html?issue=60&id=10#article

Ja često koristim ovo: http://www.codeplex.com/SafeInt da izbegnem integer overflow.

degojs
05. 03. 2009., 19:02
^Ako bi po difoltu koristio long (64), koliko često bi imao taj problem?

BTW, prvi link nešto neće.

degojs
05. 03. 2009., 19:07
E da, Nemanja, imam još jedno pitanje za tebe: jesi li ti ono pre radio nešto vezano baš za intenzivan rad sa (velikim?) brojevima? Čini mi se, ako si ti bio u pitanju, da reče da se tu uopšte ne koriste danas main-stream jezici (OOP ili ne), već Fortran?

Dragi Tata
05. 03. 2009., 19:10
^Ako bi po difoltu koristio long (64), koliko često bi imao taj problem?

BTW, prvi link nešto neće.

Pitanje "koliko često" se ne postavlja kod sigurnosnih propusta. Ako "evil-doer" provali da imaš overflow problem on će lako da ti prebaci 64-bitni long.

Meni link radi. Uostalom, samo udari search za "Integer Overflow" i naći ćeš puno interesantnih stvari.

degojs
05. 03. 2009., 19:12
Pitanje "koliko često" se ne postavlja kod sigurnosnih propusta. Ako "evil-doer" provali da imaš overflow problem on će lako da ti prebaci 64-bitni long.

Zašto bih ja imao overflow problem, mislim, nije li to moguće sprečiti nekakvom proverom?

Odnosno, hoću da pitam - da li ti je u praksi zaista potrebno da imaš tačan rezultat van opsega long tipa? Ako nemaš potrebu, onda to ne vidim kao problem.

Dragi Tata
05. 03. 2009., 19:12
E da, Nemanja, imam još jedno pitanje za tebe: jesi li ti ono pre radio nešto vezano baš za intenzivan rad sa (velikim?) brojevima? Čini mi se, ako si ti bio u pitanju, da reče da se tu uopšte ne koriste danas main-stream jezici (OOP ili ne), već Fortran?

Jeste, za numeričke kalkulacije je Fortran ne tata nego deda :) Kod takvih primena OOP slabo prolazi.

degojs
05. 03. 2009., 19:17
^ kaizen, eat that :D

:1090: :1029:

Dragi Tata
05. 03. 2009., 19:26
Zašto bih ja imao overflow problem, mislim, nije li to moguće sprečiti nekakvom proverom?

Jeste, što da nije. Npr, lako je dokazivo da:


int i = 1 + 2;


Nikad neće dovesti do overflow-a. Problem je kad imaš integere koje direktno ili inderektno unosi korisnik. Onda praktično pre svake operacije koja može da dovede do overflow-a moraš da vršiš proveru. Npr:

http://www.daniweb.com/code/printsnippet260.html

kaizen
05. 03. 2009., 19:31
^ kaizen, eat that :D

:1090: :1029:

:) pa dobro sad, ja ne znam Fortran, tako da se neću upuštati u raspravu šta to Deda Fortran magično radi sa numeričkim kalkulacijama što ne mogu unuci ...

degojs
05. 03. 2009., 19:42
Samo da dodam, upravo proverio, imamo malo pomoć u samom jeziku (naravno, gde ne mora, onda se ne preporučuje):

checked (C#)

The checked keyword is used to control the overflow-checking context for integral-type arithmetic operations and conversions. It can be used as an operator or a statement according to the following forms...

degojs
05. 03. 2009., 19:46
pa dobro sad, ja ne znam Fortran, tako da se neću upuštati u raspravu šta to Deda Fortran magično radi sa numeričkim kalkulacijama što ne mogu unuci ...

E ebi ga. Ni meni se ne ide u raspravu "šta ako long ili double nisu dovoljno veliki" jer nešto nisam siguran da je meni, a i tebi, to stvaran problem - da mi je potreban tačan rezultat van opsega tih tipova.

Dragi Tata
05. 03. 2009., 20:39
Samo pazi - te "fortranske" kalkulacije se izvode sa floating point brojevima a ne integerima. Kod floating point brojeva, često je hardver u stanju da uhvati overflow. Npr, na Windowsu takva stvar završava SEH-om STATUS_FLOATING_OVERFLOW

degojs
05. 03. 2009., 21:34
Pa dobro sad, float, int, whatnot, bitno objekte i Rubi ne koriste :)

merjadok
06. 03. 2009., 12:50
On topic:
Milenko, pošto si napisao da si zainteresovan za časove, možda ne bi bilo loše da podgledaš neka (još bolje sva) predavanja sa sledećeg linka:

http://see.stanford.edu/SEE/lecturelist.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111

Topics focus on the introduction to the engineering of computer applications emphasizing modern software engineering principles: object-oriented design, decomposition, encapsulation, abstraction, and testing.

Pozdrav,

filmil
07. 03. 2009., 11:40
Još jedan tipičan primer Lisp vs Fortran filozofije :)

Извињавам се што упадам усред озбиљне расправе, али...

Wooooohooooo!!!

ф