DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Programiranje (http://www.devprotalk.com/forumdisplay.php?f=23)
-   -   objektno orjentisano programiranje (http://www.devprotalk.com/showthread.php?t=7205)

milenko76 28. 02. 2009. 14:13

objektno orjentisano programiranje
 
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

Citat:

Originalno napisao milenko76 (Napišite 66820)
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

Citat:

Originalno napisao Dragi Tata (Napišite 66940)
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 (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 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

Citat:

Originalno napisao jablan (Napišite 66944)
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

Citat:

Originalno napisao Dragi Tata (Napišite 66952)
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

Citat:

Originalno napisao degojs (Napišite 66957)
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. ;)

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

Citat:

Originalno napisao degojs (Napišite 66957)
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

Citat:

Originalno napisao Milos Vukotic (Napišite 66960)
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:

Kôd:

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

Citat:

Originalno napisao Dragi Tata (Napišite 66952)
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, što se uostalom može proveriti i u konzoli:
Kôd:

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)

Citat:

Originalno napisao Dragi Tata (Napišite 66952)
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 i Guido van Rossum.

Milos Vukotic 04. 03. 2009. 11:17

Citat:

Originalno napisao kaizen (Napišite 66961)
Tvojom logikom, parče kôda koje sledi je potpuno neprirodno i nerazumljivo, jer Bože moj, drugačije smo učili iz matematike:

Kôd:

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:
Kôd:

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

Citat:

Originalno napisao Milos Vukotic (Napišite 66966)
: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

Citat:

Originalno napisao Milos Vukotic (Napišite 66966)
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?
Citat:

Originalno napisao Milos Vukotic (Napišite 66966)
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

Citat:

Originalno napisao Milos Vukotic (Napišite 66970)
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:

Kôd:

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

bilo išta "prirodnije" od:

Kôd:

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

Citat:

Originalno napisao degojs (Napišite 66957)
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

Citat:

Originalno napisao kaizen (Napišite 66959)
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

Citat:

Originalno napisao degojs (Napišite 66981)
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

Citat:

Originalno napisao degojs (Napišite 66983)
Već i činjenica da a=5 može lepo da "legne" na određenu memorijsku lokaciju

http://www.youtube.com/watch?v=zQuRg...eature=related

dinke 04. 03. 2009. 21:36

Citat:

Originalno napisao Dragi Tata (Napišite 66978)
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

Citat:

Originalno napisao Dragi Tata
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

Citat:

Originalno napisao Dragi Tata (Napišite 66991)
Š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

Citat:

Originalno napisao degojs (Napišite 66992)
"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

Citat:

Originalno napisao degojs (Napišite 66992)
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.


Vreme je GMT +2. Trenutno vreme je 03:55.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.