[ miljannet @ 07.02.2014. 18:22 ] @
Pozdrav, poceo sam da radim javu, do duse radim programiranje vec neko vreme ali sam tek sad poceo sa javom dosta puta sam prestajao i opet pocinjao i sada sam odlucio da radim i da ne prestajem kako radim tu neke primere cini mi se kao da ih nikada ja sam ne bi mogao napisati na primer trenutno radim nizove, evo ga kod:

Code:

public class TroDimenzionalnaMatrica 
{
    public static void main(String args[])
    {
        int troDim[][][]= new int[3][4][5];
        int i,j,k;
        
        for(i=0;i<3;i++)
            for(j=0;j<4;j++)
                for(k=0;k<5;k++)
                    troDim[i][j][k]=i*j*k;
        
        for(i=0;i<3;i++)
        {
            for(j=0;j<4;j++)
            {
                for(k=0;k<5;k++)
                    System.out.print(troDim[i][j][k]+" ");
                System.out.println();
            }
            System.out.println();
        }
                    
    }
}


Ja razumem svaki deo ovog programa i razumem zasto se koji deo koristi i sve mi je jasno, ali sada kada bi morao sam da napisem ovaj program totalno bi se izgubio i ne bi znao sta radi dok sada dok gledam kod ovaj sve mi je jasno, ne znam da li je to zato sto sam ne siguran u sebe ili postoji neki drugi razlog... Imam volje da ucim ali ovakve stvari mi se cesto dogadjaju kad treba sam da napisem da se skroz izgubim, ne znam da li je to nedostatak prakse i vezbanja ili ovo nije jednostavno za mene, sta vi mislite ? Da li je iko od vas imao slican problem ?
[ Rapaic Rajko @ 07.02.2014. 21:12 ] @
Nedostatak vezbanja, nista drugo. Pricam iz licnog iskustva, takodje sam javu vise puta pocinjao.

Nisam pocetnik u drugim jezicima, ni blizu. Tako da sam odabrao tutorijal za ucenje, i sledecu metodologiju:

1) Procitam lekciju, dobro je prostudiram, da budem siguran da razumem.
2) Zatim prodjem prilozeni kod/primer iz lekcije. Posto nisam pocetnik, najcesce nema poteskoca oko razumevanja STA i KAKO u primeru radi.
3) Zatim sednem i (NetBeans, eclipse) iz glave pisem taj isti primer. U 2 od 3 puta zapnem; e to je upravo taj deo koji tebe muci. Od prepoznavanja do stvarnog baratanja jezikom tanka je crta (al je treba preci).
4) Tek sad radim prilozeni zadatak iz lekcije :), koji dodje ko slag na tortu. Jos ako imas neku ideju, pa zacinis zadatak, ili iskombinujes nesto iz prethodnih lekcija - uha. Ali opet kazem, ja nisam pocetnik tako da... kapiras.

Samo budi uporan i ne prekidaj. Java (za razliku od nekih drugih jezika) ima MNOSTVO pratecih klasa koje sve treba znati (skoro pa napamet; uh), i to zacas vetri iz glave. Ali je najbitnije ovladati jezikom toliko da mozes da razvijas/pises sopstvene ideje; a kad do toga dodjes, java ce te ODUSEVITI :)

Pozz

P.S. Odakle sam ja ucio: http://docs.oracle.com/javase/tutorial/java/index.html . Pitke, kratke, odlicne lekcije.
[ Rapaic Rajko @ 07.02.2014. 21:52 ] @
Evo recimo, primer koji si prepisao gore. Odmah bode oci da su dimenzije array-a zakucane (3, 4, 5); u zargonu BETON kodiranje.

Eto ti lepa vezbica: deklarisi promenljive, dodeli im dimenzije u kodu (3, 4 i 5), i zatim prilagodi ostatak koda tome. Jos ako dodas UNOS dimenzija iz konzole, pa zatim ispis... ;)

Pozz
[ nemnesic @ 07.02.2014. 21:59 ] @
ja iskreno mrzim ovakve primere i zadatke!
Ovako nesto su nas ucili u sredjoj. Ako hoces nesto lepo da naucis a i pritom da ti bude zanimljivo onda radi neki real life problem.
Znaci postavi sebi zadatak (ne matematicki ili neke glupe mozgalice) vec nesto prirodno.

Npr: Napravi telefonski imenik
Napravi listu prijatelja i kad im je rodjendan i nadji ko je nasjtariji...
Kome je rodjendan sutra...itd itd.

znaci neki real life primer da bi ti bilo zanimljivo. Nemoj ovakve primere da gledas.

-nn
[ miljannet @ 07.02.2014. 23:20 ] @
Pricao sam sa jednik programerom o tome kako poceti i sta,rekao mi je probaj da radis mesec dana svaki dan bar po sat vremena da steknes naviku posto ja nisam navikao da ucim.Rekao je kad ti to predje u naviku i kad pocnes da radis ice ti mnogo lakse. Kupio sam knjigu za javu ima oko 1086 stranica valjda je dobra, ne znam ali to je najbolje sto sam mogao da nadjem, zadao sam sebi cilj da za 4 meseca uradim celu knjigu.Na primer kao sto si mi ti Rajko sada rekao samo vezba,vezba,vezba. Kontao sam da mi nije u cilj da uradim celu knjigu, svih tih 1086 strana za ta 4 meseca. Mnogo bih srecniji bio kad bi za ta 4 meseca uradio bar 350 stranica ali da ih razumem da svaku vezbu izvezbam i da imam tu neku osnovu.

Taj link sto si mi dao : http://docs.oracle.com/javase/tutorial/java/index.html cesto koristim ali se malo slabije snalazim posto je engleski, razumem ja engleski kada citam ali ima tu nekih novih reci za koje nisam nikada cuo pa me skroz zbune. Trazio sam po netu i svaki koristan link o Javi sam sam zabelezio, napravio sam profil na StackOverflow za koji sam cuo da je mnogo koristan toku ucenja i kad budem kasnije ako bog da trazio posao. Ono sto sada hocu je da radim sporije i da za svaku lekciju nadjem na netu nekih zadataka i kasnije kad budem presao neki odredjeni broj strana i stekao neko znanje kao sto nemnesic kaze probam neki real life primer jer se na tome najlakse uci. Nadam se da cu uspeti da postignem moj cilj. :)
[ PeleZr @ 08.02.2014. 08:30 ] @
Kao sto rece @nemnesic, najbolje ces nauciti iz real life primera. Naidjes na konkretan problem i onda istrazujes kako da ga resis.

Po meni, knjige jesu korisna stvar, ali radom primera iz knjige mozes da naucis samo osnovu, moras da naucis kako da resavas probleme na koje ces kasnije redovno nailaziti. Znam da ovo moze da bude frustrirajuce i da na kraju ispadne da si potrosio brdo vremena na nesto sto moze da se resi u par linija koda, ali si za to vreme isprobao dosta razlicitih stvari i video kako sta funkiconise
[ Rusi @ 08.02.2014. 13:53 ] @
Programiranje je definitivno teorija, praksa na deseti, teorija, praksa na deseti,... Koji god problem da se pojavi je samo jos jedno novo iskustvo koje ce ti olaksati svaki naredni problem. Kada se zapne, potrazi se preko googla sa dobrim upitom o problemu i to sto ti se pojavi i prepoznas neku slicnost treba prouciti jer time ces samo jos dodatno prosiriti percepciju prepoznavanja problema i resavanja istih.
Potrebno je vreme da se sve slegne u glavi a do tada mislis da neces nikada shvatiti jer fali ona nit - i ako razumem ovo nisam siguran sta sam zaista i uradio. To je onaj period kada treba da se 'slegne' u glavi. Ja takodje vise volim real life problem da resavam, nekako lakse barat sa time i shvatam sta se desava u zadatku. Dok ovi jednostavni matematicki zadaci kolko su laki tolko i stvaraju konfuziju pocetniku. Kada krenes da prosirujes zadatke onda ces znati da si krenuo bespovratno da napredujes. Takodje u svemu ovome zamka je i ta, na koju sam i sam upao kao i vecina, da vise vreme posvecujem teoriji i onda mislim da znam nesto, sednem da uradim i shvatim da ne ide. Tu veoma lako opadne moral i motivacija.
[ casperns2 @ 08.02.2014. 15:10 ] @
I meni se desava da kada gledam napisan kod sve razumem zasto je to tako ali ako treba sam da napisem bude mnogo teze ili uspem posle nekoliko pokusaja i ispravljanja gresaka koje mi Eclipsa prijavi.

Mene zanima nesto drugo kod ucenja , da li posle prvog osnovnog dela gde se uci o klasama,metodama, definisanjima i svim tim osnovnim stvarima (bar po onom tutorijalu po kom ja ucim) , da li je dobro uciti ono sto te zanima ili redosledom kako je dato u primerima(svo vreme uvek uvezbavam osnove jave dok dobro ne savladam ali uvek nesto novo ubacujem u ucenje). Konkretno sada ide deo gde se objasnjava Polimorfizam, Apstraktne klase, enumeracija , vektori, serijalizacija, java 7 dokumentacija i nove klase u javi 7 .... Taj sav deo mi je dosadan i ne drzi me pri ucenju. Da li bi pogresio ako bi trenutno to "preskocio" i ucio ono sto me vise zanima ... na primer graficki korisnicki interfejs ... a u medjuvremenu kada zatreba uciti "preskocene lekcije" ili kasnije njih uciti ....
[ casperns2 @ 08.02.2014. 18:48 ] @
I jos jedno pitanje za iskusnije programere koji su dugo u tim vodama .... Za korisnicki graficki interfejs su se koristili paketi javax.swing i java.awt ali sada je razvijena nova generacija alata za GUI i internet alplikacije , JavaFX . Da li moze neko da mi kaze da li je to alat koji ce zameniti ove stare ili je promasaj kompanije SUN , tj. da li je vec popularan i standard za GUI??
[ blekmor @ 10.02.2014. 20:05 ] @
Ako razumiješ šta radi ovaj kod, onda nemaš razloga da preispituješ svoj "programerski intelekt". Programiranje je zanat. Jedino ograničene osobe nisu sposobne da nauče da programiraju(pričam o osnovnim stvarima). U prevodu - samo vježbanje.
Ja takodje ne vjerujem u "učenje po knjizi". Knjiga je osnova, ali čitanje knjige i učenje kako je tu napisano nije efikasno. Te knjige pišu stručnjaci koji su uglavnom matematički obrazovani, te stoga cijene formalnost. Svaka knjiga ima neke stvari na početku koje početnik neće moći da razumije, ali oni ih jednostavno ne mogu izostaviti, pa se mnogi početnici isprepadaju odmah u startu. Preporučujem da se knjiga prvo prelista. Bukvalno da vidiš šta u tom jeziku ima, šta se tu dešava, kako se šta radi, šta može a šta ne može, bez ikakvog zadržavanja i detaljisanja. Nakon toga uradiš par "školskih primjera" i onda se bacaš na neke realne probleme koji su tebi zanimljivi. Kada zapneš - otvoriš odgovarajuće poglavlje i tražiš dalje.

Po mnogima najbolja knjiga za neki programski jezik, je čuvena knjiga "programski jezik C" koju su napisali kreatori tog jezika. Ta knjiga na prvih 20 strana ti onako na brzinu ispriča manje-više sve šta ima u tom programskom jeziku, a onda na ostalih 100+ strana ponovi to sve detaljno, u onom formatu kako je većina knjiga iz programskih jezika napisane.
Uzmimo primjer osnovnih tipova brojeva (int,long,char,double...) i konverzije tipova. Ta priča se nalazi u svakoj programerskoj knjizi, i to na samom početku. To je osnova. Ali to jedan početnik ne može da razumije. Pogotova ako taj početnik nema neko minimalno formalno tehničko obrazovanje iz računarstva. Postoji veliki problem sa stručnom literaturom za početnike. Kada si uhodan i znaš 101 programski jezik i imaš nekog iskustva, knjige tog formata se žvaću za 2-3-4 dana, ali početnici imaju problem. Stoga nemoj da očajavaš! Moj prijedlog:
1. skeniraj knjigu poglednom, ništa detaljno
2. uradi neke školske primjere iz te knjige, ne moraš ih znati prekucati detaljno, ali da ih razumiješ tačno
3. uzmi realan problem koji te zanima, rješavaj ga. Kada naidješ na problem gledaj prvo u toj knjizi koju si prethodno skenirao pogledom, pa tek onda na internetu.

@casperns2
To što te "ne drži" je jako bitno za objektno orjentisano programiranje. Bitno je da pročitaš, da znaš neke naj naj najosnovnije stvari. Vremenom ćeš morati da koristiš sve to, ali tada ćeš i da učiš. Nema smisla da učiš nešto čemu ne vidiš svrhu. Ako ne vidiš svrhu, ne možeš ga ni naučiti. Osnova je da znaš šta je to, a detaljno ćeš ga učiti kada vremenom budeš imao potrebu da iskoristiš sve to i kada uvidiš da je to sve ustvari jako bitno i korisno i super... Mislim da početnike uopšte ne treba zamarati sa "naprednijim" konceptima oop-a, ali je neophodno da Java programer zna šta je polimorfizam. Ne mora da razumije šta je to, čak i ne može da razumije. Vremenom će mu nadoći.

Pozdrav i hrabro !
[ jablan @ 11.02.2014. 19:20 ] @
Java je generalno loš jezik za učenje OOP koncepata.
[ nemnesic @ 11.02.2014. 19:57 ] @
Citat:
jablan: Java je generalno loš jezik za učenje OOP koncepata.


Aj pojasni ovo malo bolje molim te!
[ jablan @ 11.02.2014. 20:11 ] @
Java je komplikovan jezik prepun kompromisa (naravno, nije tako badava - zbog toga je robustan, moćan i generalno ima dobre performanse). Ali, njegov OOP model je previše komplikovan za početnika, uvodi jako puno koncepata koji nisu zaista neophodni da bi se shvatilo OOP. Interfejsi, polimorfizam, apstraktne klase, primitivni tipovi - sve to predstavlja prepreku početniku prilikom učenja (a nije neophodno za OOP), posebno ako je Java prvi jezik sa kojim se susreće. Da ne govorim o tome da Java i nije čisti objektni jezik.

Ne kažem da je nemoguće naučiti OOP kroz javu, hiljade ljudi idu tim putem, ali to je daleko od idealnog načina, i vrlo često se dešava sledeći sindrom:

Citat:
Taj sav deo mi je dosadan i ne drzi me pri ucenju. Da li bi pogresio ako bi trenutno to "preskocio" i ucio ono sto me vise zanima ...
[ casperns2 @ 11.02.2014. 20:16 ] @
Evo i mene kao bas aktivnog i uveliko zagrejanog pocetnika, koji svaki dan kada dodje sa posla u 5 ubija se od ucenja do uvece do 10 , bas zanima zasto nije dobro sto ja ucim Javu od pocetka ako zelim da naucim javu.
[ casperns2 @ 11.02.2014. 20:21 ] @
To se slazem da ima dosta stvari koje su za mene komplikovane i koje su svugde na pocetku knjiga, ali sam odlucio da ih preskocim pa kao sto blekmor rece ucicu ih kada mi zatrebaju a do tad cu procitati da cisto znam sta su i kako otprilike funkcionise .

[ jablan @ 11.02.2014. 20:46 ] @
To je sve ok. Ali isto možeš da kažeš "baš me zanima što nije dobro što ja učim da vozim Erbas A380 od početka ako ja želim da naučim da vozim Erbas A380". :) Ne kažem ja da ne može, možda je i gubljenje vremena da prvo naučiš Cesnu, ali većina pilota ipak prvo nauči Cesnu. :) Malo banalizujem, ali ne mnogo.

Druga stvar, koliko kontam ti učiš sebe radi, da bi se time bavio, tako da i možeš da ispreskačeš neke stvari, pišeš mehanički, a šta to što kucaš znači pohvataš kasnije (samo, ne zavaravaj se da se to neće videti na kvalitetu tvog koda). Ali ovi koji uče za faks, pa posle moraju to da reprodukuju za ocenu, pa ne znaju koje će pitanje da im se padne, pa moraju sve da nabiflaju, za njih je to pravi pakao ako ulete pravo grlom u Javu. ;)
[ casperns2 @ 11.02.2014. 21:30 ] @
Ucim radi sebe da bih za par godina (skroman sam i realan) mogao da radim i zivim od programiranja. A to poneko preskakanje nadam se da mi se nece previse odbiti od glavu,brzo ce i to doci na red da se mora nauciti, mada zadovoljan sam kako ide za sada ucenje. Jedino sto mi se ne svidja je to sto kako vise znam o javi, sve vise vidim koliko ustvari ne znam i koliko toga mnogo moram da znam ...

Kad vec pomenu avione , ja to ucenje jave vidim kao ucenje da vozis auto(stim da je 1050 puta lakse nauciti voziti auto). Krenes sa ucenjem i da se ne bi cimao sa menjacem odmah kupis auto sa automatskim menjacem i vozis, ali si ogranicen svojim sposobnostima za voznju. Mozda to ne bude nikada imalo posledice i uvek vozis automatik ali je uvek dobro znati koristiti i menjac kada nemas sve idealne uslove ... ;) , tako i javu ako se pocne previse preskakati i zaobilaziti dosta pojmova i koristiti od starta pomocne alate , naucice se nesto programirati ali ce to biti jako ograniceno ili lose ... bar po mom nekom misljenju:)
[ tuolarips @ 11.02.2014. 21:47 ] @
Citat:
jablan:
Interfejsi, polimorfizam, apstraktne klase, primitivni tipovi - sve to predstavlja prepreku početniku prilikom učenja (a nije neophodno za OOP), posebno ako je Java prvi jezik sa kojim se susreće.


Kako nije neophodno za OOP? Interfejsi, polimorfizam, apstraktne klase - to su sve osnovni koncepti objektno orijentisanog programiranja.

Citat:
jablan:
Da ne govorim o tome da Java i nije čisti objektni jezik.


Kako to da Java nije cist objektno orijentisan jezik? Sta je to cini "prljavom"? :) I meni je Java bila prvi objektno orijentisan jezik, i sasvim je dobro posluzila svrsi. Mada ja sam misljenja da izbor programskog jezika za ucenje bilo kog tipa nije od velikog znacaja.
[ jablan @ 12.02.2014. 07:07 ] @
Kao prvo, zamolio bih vas da ovo ne shvatate lično, kao i da pažljivo čitate šta pišem. Nigde nisam napisao da Java nije dobar jezik ili da ga ne treba koristiti (i sam ga koristim povremeno).

Citat:
tuolarips: Kako nije neophodno za OOP? Interfejsi, polimorfizam, apstraktne klase - to su sve osnovni koncepti objektno orijentisanog programiranja.

Nisu. Ništa od toga ti zapravo ne treba da bi radio OOP (dobro, polimorfizam treba, ali ne moraš uopšte da ga budeš svestan). OOP ima samo par osnovnih koncepata, to su objekti, poruke (iliti metode) i klase (koje su isto objekti). Proguglaj malo o istoriji OOP i Alanu Keju.

Citat:
tuolarips: Kako to da Java nije cist objektno orijentisan jezik? Sta je to cini "prljavom"? :)

Primitivni tipovi, npr. Činjenica da klase nisu objekti itd. Takođe te upućujem da proguglaš. No, sve je to sa dobrim razlogom tako, ne bi ni valjalo da je Java čisti OO jezik.
[ Rapaic Rajko @ 12.02.2014. 10:35 ] @
jablan, a koji je to 100% OOP jezik? ;)

Java je upravo TOTALNI OOP jezik. 'Ajde pokusajte da napisete bilo koje parce koda (java fajl) bez reci "class" ;). U Delphi-ju, C++-u i bilo kojem jeziku starije generacije (nastali od starijih jezika) to mozete; 'ladno pisete kod/primer/vezbicu sa 3 for petlje, kome za to trebaju klase/objekti. U javi, nece da moze: mora klasica, pa static metoda main(), pa redom. Poenta je da za RAZUMEVANJE reci STATIC treba ohohoh razumevanje OOP-a ;) .

Druga je stvar sto OOP koncept jave odstupa u nekim stvarima od ustaljenih tekovina OOP-a (recimo, odsustvo non-virtual metoda); ali dobro, to je neko vidjenje autora jezika, nacin da se nateraju koderi da slede zacrtanu filozofiju jave kao jezika.

A to za apstraktne klase i polimorfizam, neobicno mi da je toliki problem. Rado cu napisati poruku ovde i objasniti (slikovito!) te koncepte; kad ih skapirate, tek onda uvidjate SNAGU i moc OOP-a.

Pozz
[ Rapaic Rajko @ 12.02.2014. 10:42 ] @
Citat:
casperns2:
Evo i mene kao bas aktivnog i uveliko zagrejanog pocetnika, koji svaki dan kada dodje sa posla u 5 ubija se od ucenja do uvece do 10 , bas zanima zasto nije dobro sto ja ucim Javu od pocetka ako zelim da naucim javu.


Podsecas me na nekog ( ) od pre nekih 20+ godina. Savet: ne preteruj, jer umor ume da obeshrabri coveka; ali ni ne odustaj .

Pozz

[ jablan @ 12.02.2014. 10:52 ] @
Citat:
Rapaic Rajko: jablan, a koji je to 100% OOP jezik? ;)

Jbg Rajko, ako sad moram da guglam umesto vas... Evo odavde pa nadalje, nije svet počeo sa Javom i Delfijem...

http://en.wikipedia.org/wiki/O...nted_programming#OOP_languages

Opet, nemojte me pogrešno razumeti, i ja sam učio OOP na neefikasan način - baš kroz taj Delfi (tačnije, objektni Paskal), ali baš zbog toga se trudim da dam savet koji će nekom možda olakšati život i uštedeti vreme i živce. A ako sam rekao nešto što nije tačno, molim da me se argumentovano pobije. ;)
[ tuolarips @ 12.02.2014. 11:15 ] @
Citat:
jablan: Kao prvo, zamolio bih vas da ovo ne shvatate lično, kao i da pažljivo čitate šta pišem. Nigde nisam napisao da Java nije dobar jezik ili da ga ne treba koristiti (i sam ga koristim povremeno).


U kom tacno trenutku sam te optuzila da si rekao da Java nije dobar jezik i da ga ne treba koristiti? Ipak bih ja tebe morala da zamolim da pazljivo citas :)

Citat:
jablan:
Nisu. Ništa od toga ti zapravo ne treba da bi radio OOP (dobro, polimorfizam treba, ali ne moraš uopšte da ga budeš svestan). OOP ima samo par osnovnih koncepata, to su objekti, poruke (iliti metode) i klase (koje su isto objekti). Proguglaj malo o istoriji OOP i Alanu Keju.


Bilo bi jako deprimirajuce kada bih nakon svega morala da guglam o OOP. Sa ovim sto si napisao se apsolutno ne slazem. Smatram da neko ko zeli da nauci koncepte objektno orijentisanog programiranja mora da zna mnogo vise od toga sta znaci objekat i sta je to metoda ili klasa. Ne bih nikako rekla da ne mora biti svestan polimorfizma. Taj neko u tom slucaju nije naucio sustinu. Argument kojim te pobijam zapravo ne postoji, jer se meni sad cini da se mi raspravljamo o nivou znanja koje se podrazumeva pod "osnovni koncepti OOP".
[ jablan @ 12.02.2014. 11:31 ] @
Citat:
tuolarips: Argument kojim te pobijam zapravo ne postoji, jer se meni sad cini da se mi raspravljamo o nivou znanja koje se podrazumeva pod "osnovni koncepti OOP".

Ajd da se držimo činjenica, pa ti prosudi da li argumenti postoje ili ne:

Ja manje-više svakodnevno radim u jeziku koji se smatra jednim od čistih OO jezika. Međutim, taj jezik ne poznaje koncepte apstraktne klase, ne-virtuelne metode, niti interfejsa. Ne postoji ključna reč "static".

Da li to znači da ja (pretpostavimo sada da ja ne znam nijedan drugi programski jezik) ne poznajem "osnovne koncepte OOP"?

Citat:
Bilo bi jako deprimirajuce kada bih nakon svega morala da guglam o OOP.

Izvini, ali zašto bi to bilo deprimirajuće? Smatraš da nema ničeg novog što bi mogla o tome da naučiš? Ili smatraš da istorija razvoja OOP nije bitna?
[ Rapaic Rajko @ 12.02.2014. 11:37 ] @
(samo bez persiranja na forumu, pls :) )

Procitah; pa imao bih par primedbi (uzgred, nije ni wiki sveto slovo (proguglati!)) , ali u ovom slucaju zacudo dosta toga stoji.

Po meni, osnovna premisa koja deli OOP i non-OOP jezike bi trebalo da bude mogucnost deklarisanja procedure/funkcije bez deklarisanja klase; drugim recima, mozete li u nekom jeziku napisati naredbu/kod izvan METODE.

Pa po tome (wiki), Delphi je naknadno doradjen jezik za podrsku OOP-a; u njemu (i dalje) mozete napisati 'golu' proceduru/funkciju; tako gledano, nije strogi OOP jezik. Sasvim tacno; i to je upravo ono sto pocetnike navodi na pogresan put, da klase uce i koriste 'kad nista drugo ne pomaze' (wizards).

Medjutim, deklarisanje jave kao half-OOP jezika je prestroga (dis)kvalifikacija; samo zato sto postoje primitivni tipovi koji nisu objekti... hm. Istini za volju, java ima i klase za primitive (Integer, Float, Long itd.). Medjutim, stoji fact da su svi java fajlovi OPISI klasa. Drugim recima, 'ajde nek neko deklarise primitivnu varijablu (npr. int) IZVAN neke klase (odnosno, da nije field/polje klase); nece da moze. Ne znam sta da kazem...

Pozz

P.S. jablan, svakako zahvaljujem na prosledjenom linku; dobro je osmotriti i drugo vidjenje/misljenje (mislim na wiki).
[ Rapaic Rajko @ 12.02.2014. 11:45 ] @
jablan, koji jezik koristis (ako nije tajna)?

Izvini, ali 'izvorni' OOP bez pojmova (kljucnih reci) abstract i virtual je lapsus. Da ne trazimo/kopamo sad po istoriji/konceptima OOP-a; mislim, mozemo ovako do sutra . (to je upravo moja zamerka javi: nema 'virtual', PODRAZUMEVA se)

Pozz
[ jablan @ 12.02.2014. 11:59 ] @
Citat:
Rapaic Rajko: (samo bez persiranja na forumu, pls :) )

Nisam persirao (malo V), već je bilo upućeno ne samo tebi, već i drugima koji su podigli obrve kad sam rekao da Java nije čist OO jezik. :) Inače, tebe znam i lično, a i po godinama sam bliži tebi nego verovatno većini drugih sa teme. ;)

Citat:
Po meni, osnovna premisa koja deli OOP i non-OOP jezike bi trebalo da bude mogucnost deklarisanja procedure/funkcije bez deklarisanja klase; drugim recima, mozete li u nekom jeziku napisati naredbu/kod izvan METODE.

Definicija ima logike, samo treba imati u vidu da postoje OO jezici gde se kôd ne mora eksplicitno uokviriti klasom da bi negde pripadao, već je sasvim moguće da npr. kompajler implicitno kreira klasu i/ili metodu (makar i anonimnu) u kojoj taj kod obitava. Scala, na primer, omogućava da napišeš kôd koji bukvalno glasi:

Code:
println("Hello, World!")


i to će raditi, i pored toga što je Scala, za razliku od Jave, čist OO jezik.

Citat:
Medjutim, deklarisanje jave kao half-OOP jezika je prestroga (dis)kvalifikacija; samo zato sto postoje primitivni tipovi koji nisu objekti...

Pa nije samo zato. Neka opšteprihvaćena definicija čistog OO jezika je ta da je u njemu sve objekat. Sve vrednosti, brojevi, karakteri, stringovi, zatim klase, pa i blokovi koda, treba da budu objekti.

No, tu se već dolazi do sfera koje su manje-više akademske prirode. Java bez sumnje jeste OO jezik i OO programiranje je prirodan i primarni način programiranja u Javi. Moja jedina zamerka je što je Javin OO model bespotrebno previše komplikovan za nekog ko tek ulazi u OO vode. Jedini gori jezik za OO početnika je verovatno C++. :)

BTW, jezik koji ja najčešće koristim je Ruby.

[Ovu poruku je menjao jablan dana 12.02.2014. u 13:23 GMT+1]
[ Rapaic Rajko @ 12.02.2014. 12:10 ] @
Hm, taj koncept mi je ipak nov ('SVE je objekat'), deluje kao dobra misaona vezba. Bolje da ne kopam dalje, jos ucim javu

Ako si ti jablan na koga mislim, znamo se oko 10 godina, jel da?

Pozz
[ jablan @ 12.02.2014. 12:14 ] @
Citat:
Rapaic Rajko: Hm, taj koncept mi je ipak nov ('SVE je objekat'), deluje kao dobra misaona vezba. Bolje da ne kopam dalje, jos ucim javu :D

Koncept svakako nije nov (Smalltalk je objavljen 1980.), ali tek u zadnjih 10-ak godina pojavljuju se mainstream jezici sa tim konceptom.

Citat:
Ako si ti jablan na koga mislim, znamo se oko 10 godina, jel da? :)

Da, da, i možda godinu-dve duže.. :P
[ gosha @ 12.02.2014. 13:02 ] @
Batali JAVU i vrati se na osnove. Engleski paralelno sa:
Khan Academy
EDx

CS50x: Introduction to Computer Science - Harvard - (Languages include C, PHP, and JavaScript plus SQL, CSS, and HTML.)
6.00.1x is an introduction to computer science as a tool to solve real-world analytical problems - MIT - ako odradis Python na KhanAcademy uzmi ovaj kurs zato što se radi u Python-u


Poz. Goran
[ tuolarips @ 12.02.2014. 13:13 ] @
Citat:
jablan: Izvini, ali zašto bi to bilo deprimirajuće? Smatraš da nema ničeg novog što bi mogla o tome da naučiš? Ili smatraš da istorija razvoja OOP nije bitna?


Ne smatram ni jedno ni drugo. Bilo bi deprimirajuce zato sto ovde pricamo o osnovnim konceptima i bazicnim stvarima. Ako bih o tome morala da guglam ne bih se osecala bas najsrecnije. :)

Ne vidim zasto si moje postove okarakterisao "dizanjem obrva"? :) Ja ovo vidim kao diskusiju, a ne kao raspravu. Ponovicu, slazemo se oko svega osim oko toga sta je napredni a sta osnovni OOP pojam, ispravi me ako gresim. Evo primera koji demonstrira banalnost naseg neslaganja: apstraktna klasa i interfejs jesu OOP pojmovi. Ti smatras da pocetnik s tim ne treba da bude upoznat, dok ja mislim suprotno. I to je nase jedino neslaganje. Stvar o kojoj diskutujemo je subjektivne prirode, pa je davati "objektivne" argumente nemoguce izvesti. :)
[ blekmor @ 12.02.2014. 17:31 ] @
Citat:
tuolarips: Evo primera koji demonstrira banalnost naseg neslaganja: apstraktna klasa i interfejs jesu OOP pojmovi. Ti smatras da pocetnik s tim ne treba da bude upoznat, dok ja mislim suprotno. I to je nase jedino neslaganje. Stvar o kojoj diskutujemo je subjektivne prirode, pa je davati "objektivne" argumente nemoguce izvesti. :)


Apstraktna klasa se može smatrati OOP pojamom, ali nije mnogo bitan OOP pojam, a definitivno nije jedan od osnovnih. Apstraktna klasa postoji čisto da bi softver možda bio elegantniji, i da bi možda malo olakšala dizajn istog.
Interfejs uopšte nije OOP pojam. Intefejs služi za interakciju objekata sa okolinom, i kao takav je shvaćen i postoji mnogo duže nego OOP koncepti.
To što je Java iskoristila interfejs kao sredstvo realizacije polimorfizma preko dinamičkog vezivanja i alternativu za višestruko nasledjivanje je nešto drugo.

Početnik treba da zna sintaksu i osnovnu semantiku Jave kao OOP jezika (sintaksa, objekti, vidljivost, statičke metode-polja...) i da zna da tu postoji još nešto (neko nasledjivanje i tako nešto) kako bi se ti objekti mogli lakše dizajnirati i reuse-ovati i ljepše dizajnirati. Kada razumije osnovne koncepte i kako da napiše neke programe u Javi koji koriste neke objekte i tako to, vremenom će mu doći u glavu priča oko polimorfizama, apstrakcije, ovo-ono...
To je poenta ove teme.





[ tuolarips @ 12.02.2014. 17:54 ] @
Pojam interfejsa je dosta sirok, slazem se. Ali sam si rekao sledece:

Citat:
To što je Java iskoristila interfejs kao sredstvo realizacije polimorfizma preko dinamičkog vezivanja i alternativu za višestruko nasledjivanje je nešto drugo.


Dakle, interfejs u kontekstu objektno orijentisanog programiranja ima nove uloge. Te uloge si sam naveo. One ga cine OOP konceptom u Javi.

Dalje, po meni onaj ko ne zna sta je polimorfizam, enkapsulacija, nasledjivanje itd, ne zna OOP. Da ce nekom "vremenom uci u glavu" pomenuti koncepti, ne verujem. Oni treba lepo da se shvate i to nije nesto sto se uci uputno praksom. Ali, opet kazem, to je samo moje skromno misljenje. :)
[ jablan @ 12.02.2014. 17:58 ] @
Problem je što java ima jako strmu krivu učenja. Uzmite npr. "Hello world", dakle najbanalniji primer programa sa kojim se početnik može sresti:

Code:

public class HelloWorld { 
   public static void main(String[] args) { 
      System.out.println("Hello, World");
   }
}


Čovek normalno poželi da zna šta znači to što je upravo ukucao u editor. Hajde ono println("Hello, World"), to skapira odmah. Ali šta sa

Code:

public

class

HelloWorld

static

void

main

String

[]

args

System.out


Ogroman je to zalogaj i uopšte nije za čuđenje što dosta ljudi dignu ruke odmah na početku.
[ casperns2 @ 12.02.2014. 18:36 ] @
Ako vec pricamo o ucenji mislim da ja ovde najvise ucim..a da li cu nauciti pokazace vreme . Ono zbog cega sam preskocio polimorfizam , aprstraktne klase i slicno je jer ja u realnim zadacima koje vezbam nigde ne nailazim na te pojmove. Skoro ceo tutorijal sam prosao i samo se polimorfizam koristio u primercima u poglavlju gde se on objasnjavao .

Ono sto skoro u vecini zadataka skoro uvek koristim su petlje, nasledjivanje, definisanje metoda, liste, nizovi, kako pozvati ili napraviti novi metod ... I ja to vezbam i to mi je bitno da dobro savladam jer to koristim u skoro svakom zadatku. Polimorfizam i slicne korisne pojmove cu nauciti detaljno kada pocnem da pisem komplikovanije programe gde cu uvideti prednos i olaksanje ako sve to znam. Za sada mi je dovoljno teoretski sto znam sta su a naucicu da se sluzim sa njima kada mi pocnu biti neophodni.

Kao sto jablan rece, kada se pocne uciti java, najosnovni kod "Hello World" je pun pojmova koje tesko koji pocetnik ce razumeti, a nisam ni ja i jednostavno sam znao da moraju biti tu a zasto nisam imao pojma, i nisam se opterecivao, kasnije, kroz svaku lekciju i primer sam saznavao sta su i cemu sluze . Onaj ko zeli da nauci naucice to pre ili kasnije, sad neko ko ima na primer profesora ili nekoga da pita da mu se u startu objasne neki pojmovi bice mnogo lakse i mozda nece preskakati kao ja ali ja koji ucim sve sam od kuce i iz knjige ne mogu sve odmah da naucim . Kao sto sam vec negde rekao, nije da ne bih mogao sesti i nauciti sve o tim pojmovima, niti smatram da je komplikovano ali jednostavno mi se ne uci jer trenutno nigde nemam njihovu primenu kada radim primere iz knjige ili ako sam smisljam neke realne zadatke ...

[ keepgoing @ 12.02.2014. 19:32 ] @
gosha:
Citat:
Batali JAVU i vrati se na osnove. Engleski paralelno sa:
Khan Academy
EDx

CS50x: Introduction to Computer Science - Harvard - (Languages include C, PHP, and JavaScript plus SQL, CSS, and HTML.)
6.00.1x is an introduction to computer science as a tool to solve real-world analytical problems - MIT - ako odradis Python na KhanAcademy uzmi ovaj kurs zato što se radi u Python-u


@gosha & @casperns2
+1 za pitona

Meni je CS106a(Java) bio bolji nego CS50.
Znaci nista 'public static void main(String[] args)' - za pocetak 'turnLeft, turnRight' i vozas "Karel". Profa Sahami je sjajan i nema sanse da se smoris.. Naravno, i Malan (kad pomislim na njega, uvek mi prvo padne na pamet onaj tenkre Dan Balan ) je dobar ali je Sahami odlican.
Posle toga mozes na CS106b a zatim na CS107.

Introduction to Java Programming, Comprehensive Version, 9th Edition je verovatno najtemeljnija knjiga za javu na trzistu (2000 stranica) ali je vrlo pitka.
Sad videh da ima i 10th izdanje.

I onda, kada svaki primer iskucas/prekucas po 72x i potrosis godinu zivota shvatis da taj brak nije za tebe i pozelis:
puts "Hello, World" .
[ blekmor @ 12.02.2014. 19:36 ] @
@tuolarips

Tvrdim da početnik ne može da razumije i shvati poentu polimorfizma i dinamičkog vezivanja. Pazi, može da zna šta je to, kako da pokaže na primjeru, ali garantujem da ne može da razumije u smislu da mu je jasno za šta se koristi i kada treba iskoristiti te pogodnosti. Da razjasnim - početnik, u smislu ove teme, je onaj koji uči programski jezik Java, a ne onaj koji zna čitavu sintaksu i koji zna da iskodira algoritme; taj nije početnik.
Oslabiću malo ovo što tvrdim, neću reći da tvrdim ovo za svakog početnika, nego da tvrdim za veliku većinu početnika.

Ja, kada sam bio početnik u gore opisanom smislu, sam znao otprilike te pojmove. Znao sam na ispitu da kažem šta je polimorfizam, din. vezivanje, apstraktna klasa i ostalo. Tek vremenom, kada sam radio neke druge stvari u Javi mi je postalo jasno šta je to sve ustvari i za šta se koristi. Vjeruj mi, i kada sam učio, i kada sam naučio sam bio medju boljima.

Moj stav je da početnik ne treba da se zamara tim stvarima. Treba da pročita, otprilike, šta je to, ali je besmisleno da razbija glavu, gubi strpljenje i volju kada dodje do priče vezane za te stvari i razočara se kad ih ne razumije iz prve.

Naravno, ne tvrdim da je moj način ispravan, ali ja mislim da tako treba da se uči programski jezik Java, konkretno.

Možda oštro pišem, pa izgleda da te napadam ili ovo ili ono... Ali sve je ovo opušteno, razmjena informacija i te fore...
pozdrav :)
[ tuolarips @ 12.02.2014. 20:11 ] @
Blekmor, slazem se sa svim sto si rekao. Nije upitno da polimorfizam ne treba da bude medju prvim stvarima koje ce pocetnik da nauci. Ucenje naravno treba da se odvija postepeno. Ono sto ja tvrdim jeste da pocetnik u jednom trenutku treba da se posveti shvatanju polimorfizma (i ostalih stvari koje smo spominjali). Jablan je u jednom trenutku rekao da pocetnik ne treba da bude svestan polimorfizma, a moje je misljenje da je to neophodno da bi neko mogao da kaze da zna koncepte OOP. Prosto ne mogu da zamislim osobu koja kaze "ja znam osnove objektno orijentisanog programiranja" a da pri tom nikad nije cula za polimorfizam.

Ne brini, ne izgleda mi da me napadas. Isto tako nikom odavde ne treba da izgleda da ja napadam. :)
[ jablan @ 13.02.2014. 09:09 ] @
Citat:
tuolarips: Ono sto ja tvrdim jeste da pocetnik u jednom trenutku treba da se posveti shvatanju polimorfizma (i ostalih stvari koje smo spominjali). Jablan je u jednom trenutku rekao da pocetnik ne treba da bude svestan polimorfizma, a moje je misljenje da je to neophodno da bi neko mogao da kaze da zna koncepte OOP.

Početnik u čemu, Javi ili OOP? Pošto dobar deo koncepata koje sam pomenuo (npr. interfejsi, apstraktne klase, statičke promenljive) ne postoji u nekim drugim, ništa manje OO, jezicima. Drugim rečima, da li ti misliš da neko mora da nauči Javu da bi ovladao konceptima OOP, ili dopuštaš mogućnost da OOP može da se savlada i kroz neke druge jezike (koji ne poznaju gorenavedene koncepte)?
[ tuolarips @ 13.02.2014. 16:50 ] @
Citiracu sebe:

Citat:
Mada ja sam misljenja da izbor programskog jezika za ucenje bilo kog tipa nije od velikog znacaja.


Jasan ti je odgovor na prvi deo pitanja. Sto se tice drugog dela, ako u okviru terminologije datog programskog jezika ne postoji "interfejs", postoji sigurno neki analog kojim se realizuje enkapsulacija i polimorfizam. Priznajem da ipak nisam trebala toliko da se vezem za pojam interfejsa jer vidim da upada previse u oci, a razumem i zasto.
[ Branimir Maksimovic @ 15.02.2014. 03:51 ] @
Ako uzmemo u obzir dva nova i pretpostavljam veoma perspektivna jezika Go and Rust, videcemo
da je interfejs in, a klase i nasledjivanje out ;)
Jablan gleda iz svoje perspektive. Mislim da od Jave nema objektno orijentisanijeg
jezika ;)
Interesantan clanak za one koje zanima:
http://lwn.net/Articles/548560/
[ casperns2 @ 15.02.2014. 09:04 ] @
Sta je buducnost to se nikada ne zna, sadasnjost je lako videti sta je a to je ono za cim je najveca potraznja, tj. znanjem kog programskog jezika mozes najbolje unovciti svoje vreme i trud, od kvaliteta znanja jezika zavisi i nivo primanja i polozaj u firmi.

Najveci razlog sto malo ko ce ih uciti je jako slaba literatura za njih(predpostavljam), ponuda posla za njih je trenutno mala i tesko se nalazi pomoc, nije sigurno da ce biti jezici buducnosti a iskreno i ja kada bih eksperimentisao sa nekim ne svakidasnjim programiranjem ucio bih vestacku inteligenciju ...i to je neki vid programiranja ... ;)

Za HTML , web dizajn i pravljenje sajtova sam imao solidno predznanje pre pocetka ucenja jave. Ali smatram da ce mi se vreme i trud ulozeni u ucenje Jave(kasnije i Android) vise isplatiti nego da sam naucio HTML i slicne jezike koji su mi neuporedivo laksi za ucenje.

PS. Samo iznosim moje misljenje sa shvatanjem da bolje znate programiranje ali imam neka svoja razmisljanja. Kod pojma objektno orijentisanijeg
jezika koje je Branimir spomenuo i rekao Java da to nije , sto mene zanima da li je Java OO jezik ili nije osim cisto neke diskusije nebitne za samo programiranje. Moje je da je naucim i koristim i da mi resava zadatke sa stavom u cosku negde,koji mi je najmanje bitan da je to OO jezik. Danas je stav da je OO jezik, sutra to neko dokaze i usvoji se da nije OO jezik, meni ce biti svejedno, ja cu i dalje pisati isti kod i kod ponude trazenja posla pisace poznavanje Jave a ne OO jezika ... Inace lep vikend svima ;)
[ casperns2 @ 27.02.2014. 15:11 ] @
Posle odlaganja resio sam da se vise posvetim oblastima koje sam preskakao do sada a na neke nisam ni nailazio. I sve ovo do sada sto sam ucio mi tako jednostavno izgleda kada pocnem da citam objasnjenja i kako funkcionise ovo ...... polimorfizam, interfejsi , kopiranje i kloniranje objekata, kastovanje objekata , staticke metode , apstraktne klase, enumeracije, kolekcije....

Nije da nije jasno kako sta funkcionise kada citam ali sve ovo povezati sam , kada sta upotrebiti , tako zapetljano sada izgleda .... nadam se da ce biti kao sa predhodnim oblastima koje su isto tako izgledale slozeno na pocetku a sada izgledaju tako prosto....

Samo me zanima da li ove oblasti koje sam nabrojao se ne smatraju pocetnickim , to jest da li sa znjanjem primenje tih metoda moze se reci da se java solidno zna. Pitam jer kako ucim stalno otkrivam nesto novo (znam da se nikada ne moze sve ni nauciti) pa cisto da znam gde se nalazim sa ucenjem...
[ jablan @ 27.02.2014. 15:17 ] @
Najlakše ćeš videti gde si sa učenjem ako nađeš bilo koji open-souce projekat i uzmeš da ga čitaš. Ako provaljuješ šta radi koji kôd, čemu služi koja klasa itd, onda si dobar.
[ Andrej013 @ 28.02.2014. 05:12 ] @
Citat:
casperns2:
Posle odlaganja resio sam da se vise posvetim oblastima koje sam preskakao do sada a na neke nisam ni nailazio. I sve ovo do sada sto sam ucio mi tako jednostavno izgleda kada pocnem da citam objasnjenja i kako funkcionise ovo ...... polimorfizam, interfejsi , kopiranje i kloniranje objekata, kastovanje objekata , staticke metode , apstraktne klase, enumeracije, kolekcije....

Nije da nije jasno kako sta funkcionise kada citam ali sve ovo povezati sam , kada sta upotrebiti , tako zapetljano sada izgleda .... nadam se da ce biti kao sa predhodnim oblastima koje su isto tako izgledale slozeno na pocetku a sada izgledaju tako prosto....

Samo me zanima da li ove oblasti koje sam nabrojao se ne smatraju pocetnickim , to jest da li sa znjanjem primenje tih metoda moze se reci da se java solidno zna. Pitam jer kako ucim stalno otkrivam nesto novo (znam da se nikada ne moze sve ni nauciti) pa cisto da znam gde se nalazim sa ucenjem...

Vidi, prvo, to sto si do sada naucio je mnogo i za svaku pohvalu ali moras jos dosta da ucis da bi dosao do nivoa da neko kaze sebi-e ovaj mali zna po nesto, vredi da ga placam 500eura mesecno.
Sledeci korak bi trebalo da ti bude savladavanje nekih osnovnih mehanizama u Javi. Najjednostavniji primer je overriding equals metode i hash code-a, zasto su bitni, u kakvoj su vezi sa kolekcijama (na primer HashMap) dalje, izuzeci, generics, a u isto vreme bi trebalo da utemeljis sve koncepte koje si gore nabrojao do te mere da ih u potpunosti razumes i da si u stanju da ih bez naprezanja objasnis. Kad to sve savladas, mozes da sa ponosom kazes da znas najosnovnije. Posle toga uzmes lepo effective java i polako prelistavas. Neces sve razumeti, ali pokusaj. Svaki paragraf sadrzi vredne mudrosti o kojima treba razmisliti, prihvatiti ih i usvojiti. Knjiga se sporo cita.

Nakon toga(ili paralelno sa effective java) moras da ucis multithreading. To je velika tema kojoj valja posvetiti vreme. Kada to savladas, mozes da kazes da nisi vise pocetnik. Najlakse je ako shvatis da je to polje koje moras da naucis, narocito u danasnjem svetu multiprocesorskih racunara. Knjiga koju najtoplije preporucujem je "java concurrency in practice", a Core Java Volume I ima dobar uvod u tu oblast.

Takodje, povremeno udji u debug mode u eclipse-u. Pomaze da intuitivno pocnes da razmisljas o objektima koje pravis.

Glavno je da znas da ti treba vise volje da prihvatis osnovne koncepte kada si pocetnik nego napredne kada vec imas malo iskustva, tako da si najtezi period pregrmeo. Sada ce biti sve zanimljivije i zanimljivije :)
[ casperns2 @ 28.02.2014. 21:07 ] @
Hvala Andrej puno na savetu ...
[ casperns2 @ 04.03.2014. 19:45 ] @
Pozdrav, evo par dana radim interfejs i Apstraktne klase, pa ako bi mi samo neko otklonio neko neke nedoumice.

Na primer uradim ceo zadatak sa par klasa i podklasa bez upotrebe interfejsa ili apstraktne klase

Ako hocu sada u istom zadatku da koristim interfejs cela razlika u zadatku mi je sto cu da dodam interface klasu gde su prazne metode...

Ako hocu da koristim Apstraktnu klasu cela raznila u odnosu na klasican kod je sto cu da napravim neki metod da bude abstract i da nema telo metoda , koje bi kasnije pravio u izvedenim klasama.

E sad mene zanima da li vi koristite ove metode i jesu li neki standardi da se koriste. Mozda u velikim projektima razumem da se koristi gde imamo interfej LETETI pa da se predefinise kasnije ako imamo avion ili zivotinje ili decije igracke koji su delovi razlocitih paketa ili klasa ali u nekim zadatcima gde nema takvih slicnih imena metoda ne vidim zasto bi koristio .

Tako isto i za apstraktne klase, koliko sam razumeo jedina je razlika sto u baznoj klasi nije definisana neka metoda a kasnije kada se u izvedenim klasama definise ide sve normalno, ali ako istu metodu definisemo null vrednoscu ili nulom za odredjene tipove podataka ne vidim neku korist njene upotrebe. Na primer ako hocu u klasi Povrsina da definisem metod Povrsina bez apstraktne klase bi isao
Code:
public double povrsina(){
        return 0;
    }


a ako bi koristio apstraktnu klasu u celom kodu svih klasa sve sto se menja je ovo i dodavanje reci abstract u naslov klase :
Code:
public abstract double povrsina();


Da li ja nisam dobro razumeo ova dva pojma ili se oni ozbiljnije koriste pri vecim projektima gde ima svrhe za njihovu upotrebu .. ???
[ blekmor @ 04.03.2014. 20:44 ] @
Prvo što moraš da shvatiš je da poenta nasledjivanje u OO jezicima nije samo da izvučeš neke zajedničke osobine nekih klasa, da implementiraš te zajedničke osobine i da ih nasledjuješ kako bi "uštedio prostor" tj manje kodirao. Poenta nasledjivanja je da iskoristiš osobinu polimorfizma i dinamičkog vezivanja. Konkretan primjer:
želiš da napraviš neka vozila (kamion, automobil....), a pored toga želiš da napraviš servis za sva vozila. Kako ćeš to uraditi? Možeš da napraviš klasu ServisVozila i da implementiraš metod u toj klasi za svako vozilo, npr
Code:
public void popraviKamion(Kamion klijent){
 // provjeri auspuh
 klijent.podaciAuspuh();
 //...
 // provjeri kocnice
 klijent.podaciKocnice();
 //...
}

public void popraviAutomobil(Automobil klijent){
 // provjeri auspuh
 klijent.podaciAuspuh();
 //...
 // provjeri kocnice
 klijent.podaciKocnice();
 //...
}

ili da iskoristiš nasledjivanje, pa da ubješ više muva jednim udarcem, i omogućiš servisu da popravlja i neka druga vozila. Napraviš Abstraktnu klasu Vozilo koje ima ove metode (podaciAuspuh(),podaciKocnice()..). Ukoliko je za svako vozilo identična implementacija nekog metoda, implementiraš ga odmah u abstraktnoj klasi, ukoliko nije, metod proglasiš abstraktnim. Zatim napraviš nove klase (Automobil,Kamion..) koje nasledjuju abstraktnu klasu Vozilo, i implementiraš za svaku vrstu vozila metode koje su abstraktne u nadklasi, odnosno koje su specifične za svaku vrstu vozila. Zatim ćeš u klasi ServisVozila da napraviš samo jedan metod, koji kao parametar prima objekat tipa Vozilo i radi sa njim. Da li ćeš kasnije tom servisu da proslijediš Automobil, Kamion ili neko drugo vozilo , to nije ni bitno. Osobina koja se zove "dinamičko vezivanje" će da "skontao" šta je tu ustvari prosledjeno i da uradi ono što treba sa datim objektom.
To je poenta nasledjivanja.

Nasledivanje se, u Javi, može obezbjediti direktnim nasledjivanjem klase. Kako Java ne prepoznaje višestruko nasledjivanje(da jedna klasa nasledi više drugih klasa), to se "simulira" preko interfejsa. Ako ponovo pogledaš gornji primjer vidjećeš da bi program radio apsolutno isto ukoliko bi umjesto apstraktne klase koristio interfejs Vozilo, a u vrstama vozila(automobil,kamion) implementirao taj interfejs...

Abstraktna klasa i interfejs, su u ovom smislu, skoro pa ekvivalentni.

Abstraktna klasa se koristi ukoliko znaš koje sve metode i osobine želiš da izdvojiš za neki skup klasa, i ukoliko neke metode znaš kako da implementiraš tako da implementacija odgovara svim "podklasama", ali ne znaš kako da implementiraš sve (npr podaci za aspuh se dobijaju isto za svako vozilo i taj metod implementiraš, dok se podaci za kočnice ne dobijaju isto za automobil i kamion, pa taj metod ne implementiraš(ključna riječ abstract), i ostaviš podklasama da svaka implementira po svojim potrebama). Nedostatak abstraktne klase je to što je njena svrha da je neko naslijedi, te taj neko neće moći da naslijedi ni jednu drugu klasu.

Interfejs nije klasa, tako da ne zauzima to mjesto za nasledjivanje, i može ga implementirati svako, pošto svako može implementirati beskonačno mnogo interfejsa. Sa druge strane interfejs ne može sam da implemnetira ni jedan metod, za razliku od abstraktne klase, te ćeš možda morati malo više da kucaš ukoriko koristiš njega.

Ja jako rijetko koristim abstraktne klase, uvjek ću prije iskoristiti interfejs. To ne znači da ne trebaš da koristiš abstraktne klase, nego da ih ja, iz navike, zaobilazim.

Pozdrav
[ jablan @ 05.03.2014. 07:28 ] @
U vezi tvog primera sa apstraktnom klasom i praznom metodom:

Možeš ti da zameniš apstraktnu klasu običnom klasom sa metodom koja vraća null, ali time ostavljaš prostor za grešku (da neko instancira klasu koja nije predviđena za to i da pozove metode koje nisu predviđene za pozivanje). Apstraktna klasa ne može da se instancira i praktično ti sprečavaš tu mogućnost greške na compile-time nivou.

Interfejsi su u Javu uvedeni zato što Java ne podržava višestruko nasleđivanje - inače bi sve mogao da uradiš sa apstraktnim klasama.
[ casperns2 @ 05.03.2014. 20:23 ] @
Hvala ljudi na odgovorima, sada je mnogo jasnije cemu sluze,tj. zasto ih koristiti . Koliko mi se cini na prvi pogled bar kada vezbam zadatke nisu komplikovani za primenu, sta vise, na nista jednostavnije nisam ni naisao do sad , samo znati kada i sta primeniti ...

Jos malo oko Interfejsa i dolazim do dela koji je bas Andrej spominjao sta bi sledece trebalo uciti , kolekcije, izuzetci, ugnjezdene klase,LinkedList,HashMap, finally ... "Sledeci korak bi trebalo da ti bude savladavanje nekih osnovnih mehanizama u Javi. Najjednostavniji primer je overriding equals metode i hash code-a, zasto su bitni, u kakvoj su vezi sa kolekcijama (na primer HashMap) dalje, izuzeci, generics, a u isto vreme bi trebalo da utemeljis sve koncepte koje si gore nabrojao do te mere da ih u potpunosti razumes i da si u stanju da ih bez naprezanja objasnis.

Pozdrav i hvala jos jednom svima na savetima, sobzirom da samo uvece imam vremena za ucenje zadovoljan sam kao ide ali i svestan da sam jos dugo ima da plovim pocetnickim vodama, jos dosta ispisanog koda mora proci kroz prste...