Šta je novo?

Objektno-orijentisano programiranje

Sollid Sn@ke

Slavan
Učlanjen(a)
04.12.2005
Poruke
9
Poena
301
Moze li neko ukratko da mi objasni pojam objektno-orijentisanog programiranja?
 
Poslednja izmena od urednika:
recimo....shvati to kao automobil....mislim automobil je objekat...i sada ti ne treba da znas sta sve treba da se desi u mehanici i elektronici automobila da bi promenio brzinu vec prosto znas da treba da pritisnes kvacilo i promenis brzinu...e isto je i u obj.programiranju...imas objekat (automobil) i prosto koristis neka njegova svojstva kao na primer automobil.promenibrzinu i objekat ce primeniti navedenu komandu....

e sada ti kreiras u programskom jeziku objekat sa tim nekim svojstvima...i drugi korisnici koriste tvoj objekat i njegova svojstva bez obzira sto ne znaju kako ta svojstva u stvari funkcionisu...prosto ti si "umotao" funkcionalnost u neki objekat...

e sada programski jezici koji omogucavaju ovo i slicne stvari zovu se objektno orjentisani jezici...

nadam se da sam malo pojasnio blize....u svakom slucaju imas dobrih primera na netu pa potrazi...guglaj...

poz
 
OK, dobro...
Moze li se i ovako definisati:
Objektno-orijentisanim programiranjem predstavljamo jedan sistem tako sto ga podelimo na skup objekata (manje celine) koji su medjusobno povezani radi lakseg upravljanja i samog rada...

E sad, mene interesuje objektno-orijentisani Pascal... Sta mi mozete reci oko toga?


Edit: batali taj bold !!!
 
Poslednja izmena od urednika:
Moze i tako da se kaze, al' bi trebalo da se dopuni osnovnim konceptima (nasledjivanje, polimorfizam, enkapsulacija), tj. mehanizmima koji pruzaju zastitu i "reusability" koda.


Malo iskacem iz teme, al' cisto da steknes osecaj da nije sve tako bajno, posto za ceo taj "sistem" moras non-stop da imas source, pa kad nesto izmenis u svom kodu da iskompajliras ceo projekat.


Koncept koji to resava u Windows-u je Microsoftov DCOM (kao naslednik OLE-a), a multiplatformsko resenje je CORBA. Caka je u tome da imas module koji su vec iskompajlirani (u obliku DLL-ova, npr.) i poznati su interface-i (podrazumeva se da imas dokumentaciju) za pristup tim komponentama. Kod takvog koncepta ti je potreban source samo tvog dela projekta (koji ti licno razvijas), a za ostalo te uopste ne zanima kako radi, vec samo sta radi i koristi se uz pomoc pomenutih interface-a.

Nezgodno je sto je ovakav nacin komunikacije medju "objektima" (server-klijent) mnogo sporiji od povezivanja na nivou kompajliranja, al' to cesto nije kriticno.
 
Poslednja izmena:
Sollid Sn@ke je napisao(la):
OK, dobro...
E sad, mene interesuje objektno-orijentisani Pascal... Sta mi mozete reci oko toga?
...uchio se na fon-u do pre dve-tri godine. :wall:
...i konachno otishao u penziju :D

hmm, ako smem da pitam, zashto be interesuje bash oo paskal??
 
ako koristis turbo pascal , preporucujem ti da koristis turbo vision za interface. radio sam bas na fonu pre par godina seminarski i resio da sam pravim graficki interface, i zeznuo se , posto je 2/3 vremena otpalo na to... inace pascal ti je odlican za ucenje ali ti preporucujem da cim savladas osnovno (strukturiranje, oop , pravilno pisanje koda (komentari i uvlacenje linija koda )) predjes na delphi, tj. neko vizuelno programiranje...
inace spomenuo je Delija nasledjivanje , enkapsulaciju i polimorfizam sto je ustvari sastavni deo OOP-a, moras to da uzmes u obzir kada programiras. nasledjivanje je kada kazes za neki novi objekat da bude kao postojeci , znaci ne moras da pises ponovo code, samo novi objekat nasledi sve osobine drugog , vec gotovog, objekta. polimorfizam bi trebalo da je razlicito ponasanje objekta u razlicitim situacijama(recimo "grad" moze da oznacava naseljeno mesto a i vremensku nepodogu, zavisi od konteksta/situacije) a enkapsulacija je sakrivanje "engina" objekta tj. tebe ne zanima kako radi to sto radi vec samo cemu mozes da mu pristupis preko odgovarajucih funkcija i procedura koje cine interface tog objekta... ako je nesto nedoreceno ili pogresno slobodno dodajte posto sam prestao da se bavim programiranjem vec malo vise od par godina:( vazno je da su klase i objekti razlicite stvari. klasa je definicija necega a objekat je konkretno otelotvorenje klase (recimo pojam "auto" je klasa sa odredjenim osobinama a "Hyundai Getz" je objekat koji pripada datoj klasi)...

poz
 
Hm, cini mi se da decko pise neki rad...? Ako hoces da ucis moj savet je da odgodis OOP za jedno 3-4 meseca i prvo naucis C, pa posle gledaj C-oidne jezike...
 
Najbolje ti je da uzme neku od knjiga Thinking in C++ ili Thinking in Java (besplatne su u html formatu na sajtu Bruce-a Eckel-a) i da procitas uvod. Jako lepo i postupno objasnjeno(cak previse sporo za moj ukus).
 
Jeste li primetili vec preovladjujuc pattern odgovora na ovom forumu?

HW: "Imam problem sa xxxxxx, sta da radim?" - "Prodaj to i kupi yyyyyy"

SW: "Imam problem sa xxxxxx, kako da podesim zzzzzz opciju?" - "Deinstaliraj, xxxxx je sr*nje i instaliraj yyyyy - pre toga formatiraj disk i reinstaliraj sistem!"

PROG: "Kako da uradim xxxxx u zzzz jeziku?" - "Zasto u xxxxxx kad mozes u yyyyyy? Ako planiras da budes wwwwww, onda je najbolje da naucis prvo ova dva-tri jezika, pa ako budes tada hteo, da se vratis na ovo o cemu si pitao."


Niko bre da na konkretno pitanje odgovori konkretno, sve nekakve zamene, supstituti i kopernikanski zaokreti ponudjeni.
 
Pa ako coveka zanima objektni Pascal onda neka instalira Delphi i kupi neku knjizicu od 1000-2000 strana koja pocinje sa objasnjavanjem OO programiranja na Pascalu a zatim neka pocne i sa prostim Delphi aplikacijama...

Mada, i ja smatram da ce OO programiranje lakse da mu legne preko C-a(strukture) i onda krene na C++ ili Javu (klase...) jer ima mnogo vise primera po netu, opensource resenja, vise ljudi zna te jezike(lakse ce doci do pomoci) i mnogo vise jezika je izvedeno iz C/C++ nego iz Pascala(da li postoji neki..?)

Sve u svemu jezik i nije toliko bitan koliko programerska logika i OO nacin razmisljanja...
Posle je sve stvar navikavanja na sintaksu, IDE, itd...

Pozdrav!
 
Daleko bilo da je ovo sve što treba da znaš o toj temi. "Najbolji način da se započne put od 10000 kilometara je da se napravi prvi korak" - kineska poslovica (naravno original razdaljinu nije merio kilometrima). Shvati ovo upravo kao pokušaj da se taj prvi korak napravi što bezbolnije.

Pretpostavlja se da si programirao na Pascal-u, C-u ili nekom "običnom" procedurelnom jeziku i da si osetio da ti nešto nedostaje. To "nešto" je viši nivo apstrakcije. OOP nije toliko tehnika programiranja, koliko način razmišljanja. Naravno najbolje je da jezik direktno podržava OOP - to omogućava da razmišljaš direktno koristeći njegova sredstva. Ali čak i na ne-objektnim jezicima, OO razmišljanje se itekako isplati.

Parafraziraću Bjarne Stroustrup-a, tvorca C++-a: Mali program (recimo 1000 linija) može da se napiše u bilo čemu, bilo kako. Ako si dovoljno vešt, na kraju ćeš ga naterati da radi. Ali u velikom programu, ako se nisi pridržavao "lepog programiranja" i koristio odgovarajuće tehnike - naročito OOP, nove greške će se pojavljivati jednako brzo kao što ispravljaš stare.

Razlog tome je što svaki deo programa zavisi od gomile drugih, ali te zavisnosti su toliko zamršene i neintuitivne da ih čak i tvorac teško prati. Kada promeniš jedan deo programa, ne možeš lako da sagledaš na čega sve u stvari to utiče. Naravno, valjanim procedurelnim programiranjem može se prilično dobro modularizovati program i izdvojiti ponovo upotrebljiv kod, ali ako tako radiš - onda već počinješ da misliš na OOP način. Ono što ti nedostaje je bolji način da organizuješ gomilu procedura koje si kroz praksu napisao i da ih bolje povežeš sa strukturama podataka kojima manipulišu.

Vratimo se malo na fakultet, definiciji tipa podataka: "Tip podataka je uređena dvojka čiji je prvi element skup svih dozvoljenih vrednosti za taj tip, a drugi element skup svih operacija koje nad tim vrednostima možemo izvršiti.". Tip je dvojstvo podataka i operacija nad njima.

Ako znaš šta je tip, onda znaš i šta je osnovni pojam OOP-a: klasa. Naime, klasa je ništa drugo do jezičko sredstvo da se definiše tip podataka. Iskompajliraj ovo u glavi: klasa je, znači, način da se u programskom jeziku procedure i funkcije eksplicitno povežu za strukturu podataka. Logično pitanje sledi: "Ali ja sam u parametre procedure mogao da stavim bilo šta - uključujući i strukturu podataka koja me interesuje - na taj način sam povezivao tip sa njegovim operacijama. U čemu je razlika?". Razlika je u (podebljanoj) reči "eksplicitno". U OOP-u procedure koje pripadaju klasi su na više načina "posebne" i sa njima se mogu raditi stvari nemoguće za "smrtne" procedure. Takve procedure se nazivaju metodi.

Pa, šta će ti to u životu? Evo četiri dobra razloga:

Pod jedan, ako imaš klasu Trougao i metod Crtaj (koji joj pripada i vrši iscrtavanje trougla), ništa te ne sprečava da napraviš i klasu Kvadrat koja takođe ima metod Crtaj (koji crta kvadrat). Iako se isto zovu, to su različiti metodi. Znači, štedimo imena i izbegavamo konflikte. Moduli (u Pascal-u su to unit-i) se mogu upotrebiti u ovu svrhu, a neki jezici pružaju i posebne mehanizme u borbi za dodeljivanje logičnih imena (na pr. C++ prostori imena - namespaces ili prilično unapređeni moduli Module-2). Ipak moduli su često preglomazni za ovoj zadatak, pogotovo ako su (kao na Pascal-u) vezani za fizičko skladištenje sorsa - fajlove. U Moduli-2, na primer, moduli mogu da sadrže i podmodule za koje je tačno definisano šta daju spoljašnjem svetu i šta iz njega vide, ali to pomalo liči na gađanje muve maljem od dve tone. Ovako, ako imaš promenljivu t klase Trougao i promenljivu k klase Kvadrat, trougao crtaš sa t.Crtaj a kvadrat sa k.Crtaj - šta ćeš jednostavnije?

A sada dođoh i do pojma objekat. Prosto, objekat je promenljiva neke klase. Drugi naziv je instanca ("primerak"). Klasa je definicija tipa, objekat je konkretan primerak klase. Na pr. kada kažemo da promenljiva t ima tip (klasu) Trougao, drugi način da kažemo to isto je: t je objekat tipa Trougao. Ma, da ne davim, t i k iz prethodnog pasusa su objekti.

Pod dva, svaka klasa može da sakrije ono što želi. Ako imaš pomoćno parče koda koje pozivaju samo metodi unutar klase, napravićeš privatan metod, nevidljiv spolja. Ako si pisao veće programe, ovo si opet radio preko modula (unit-a) sakrivanjem u implementation sekciju (cpp fajl kod C++-a). Međutim, opet rizikuješ da se zatrpaš gomilom modula od kojih svaki koristi svaki i koji su međusobno isprepletani više nego što bi zaista želeo. Ovakvo sakrivanje zove se enkapsulacija. Neki jezici, na pr. C++ i novije verzije Jave, čak mogu da imaju klase unutar drugih klasa, koje opet mogu da budu privatne.

Do sada, uz dovoljno samodiscipline, mogao si da preživiš koristeći klasična sredstva lepog programiranja - pre svega module. Sada ide nešto što se jednostavno ne može uraditi bez OOP-a.

Pod tri i najvažnije: Nasleđivanje je način da već postojeću "roditeljsku" klasu proširiš ili izmeniš i napraviš novu "klasu dete" koja ostaje povezana sa roditeljskom. Ovo je ključ onoga što englezi zovu code-reusability (ponovna iskoristivost koda). Ako već imaš klasu koja radi neznatno manje od onoga što ti treba, zašto ne iskoristiti taj već napisani kod i samo dopisati ono što ti treba? Naravno copy-and-paste programiranje može učiniti da veoma lako "iskoristiš" ono što je već napisano. Ali time dobijaš dve komadeške koda za koje samo ti znaš da bi trebalo da rade istu stvar - dok ne zaboraviš. Sada zamisli da si našao grešku u prvoj kopiji - to znači da treba treba da protrčiš kroz sve ostale i napraviš identične ispravke. Zamisli žurku kada imaš desetak kopija! Samo da te upozorim: nije neobično da ozbiljne biblioteke klasa (kakav je Delphi-jev VCL) imaju i po nekoliko desetina nivoa nasleđivanja. Kakav bi to bio haos da je u pitanju prosto kopiranje istog koda! A efikasnosti se još nismo ni dotakli.

Međutim, kada se sa napravi pravo nasleđivanje, ako promeniš kod u roditeljskoj klasi, automatski si promenio i svu decu. Sa druge strane, u većini jezika, decu možeš dodavati bez rekompajliranja roditelja, obično čak ni ceo izvorni kod nije potreban - dosta je samo interfejs (deklaracija klasa/ metoda bez definicije). Naravno, nema višestrukog kompajliranja (interpretiranja) jednog te istog, pa je sve brže i zauzima manje mesta. Do sada sam govorio uglavnom o metodima, ali nasleđivanjem možeš dodati i nova polja, no o-tom-po-tom (još ne znaš ni kako jedna klasa izgleda kad se napiše u konkretnom programskom jeziku).

Četvrto, tesno povezano sa nasleđivanjem: polimorfizam. Ovo je nešto o čega se početnici u OOP-u najlakše spotaknu, pa nemoj da se sekiraš ako ne svariš sve odmah. Kada naslediš neku klasu, na fizičkom nivou joj dodaš/promeniš metode ili članove (polja), ali na logičkom nivou, ti samo praviš novu vrstu te klase. A'jmo sad, iz neba pa u rebra, pa ko shvati, razumeće: dete jeste roditelj. To znači: tamo gde stoji roditelj, mogu da stavim i dete, naprosto zato što dete sadrži sve što i roditelj (iako verovatno i nešto preko toga). Uoči da obrnuto ne važi. Naime, roditelj nije dete - dete sadrži i nešto što roditelj nema, pa roditelja ne možemo da stavimo svuda gde možemo dete jer će nešto da nam zafali.

A sada suština: čak iako dete stavimo mesto roditelja, ono i dalje ostaje dete. Ako pozovemo metod koji postoji i u roditelju i u detetu, koja od ove dve verzije metoda će biti pozvana zavisi od toga da li smo u vreme izvršavanja stavili roditelja ili dete. Ako smo stavili dete, biće pozvan metod deteta. Na pr. bez obzira što je u vreme kompajliranja parametar neke procedure deklarisan kao roditelj, u vreme izvršavanja možemo u njega da stavimo dete, i ono će nastaviti da se ponaša kao dete.

Inače, ovo je razlog za korišćenje pokazivača u OOP-u.

Dakle suština polimorfizma je: Objekti se isto koriste ali se različito - u skladu sa svojom konkretnom klasom - ponašaju. U vreme kompajliranja nemamo način da odredimo koji će konkretni objekti to biti, ali u vreme izvršavanja za svaki objekat se pozivaju metode klase kojoj pripada, a ne roditeljske klase koja je deklarisana u vreme kompajliranja.

Da opet pozovem u pomoć Bjarne Stroustrup-a: Programski jezik ima dva aspekta: jedan omogućava da mašini narediš šta da radi, a drugi predstavlja konceptualni alat koga ti sam koristiš u razmišljanju o tome kako rešiti problem. Principi koje sam izložio ne samo da postoje u svakom pristojnom objektnom jeziku, već predstavljaju jako dobar način apstrakcije. Više se nećeš gušiti u detaljima dijagrama toga, već ćeš se izmaći, pogledati problem sa visine i početi da ga raščlanjuješ na objekte koji u njemu učestvuje. Te objekte ćeš razvrstati u logične "stablaste" strukture - hijererhije nasleđivanja.

http://www.elitesecurity.org/tema/13240
 
Licno misljenje:

Ne znam zasto se ljudi prilikom objasnjavanja koncepta OO programiranja kao po pravilu hvataju za primere iz knjiga ili predavanja sa automobilima i/ili geometrijskim telima. Nekome ko je vec programirao ili dosta radio na racunaru mislim da je mnogo bolje za primer uzeti button, window, editbox, dropdown, itd kontrole. Em se ne ide u veliku apstrakciju, em su ti objekti ljudima vec bliski i poznati. Vrlo je lako za shvatiti kakve atribute i metode (treba da) ima jedan button ili window. A sa druge strane, to vec predstavlja uvod u konkrene stvari oko OO programiranja.
 
Da nećeš da mu objašnjavam šta su klase, instance, a da čovek ne sedi pored mene...

Ili da mu kažem da instalira net beans i da mu ukratko objasnim kako da poveže dve tri forme i da ih poveže sa access-om... a a....not me...
 
CamBieL je napisao(la):
Da nećeš da mu objašnjavam šta su klase, instance, a da čovek ne sedi pored mene...

Ili da mu kažem da instalira net beans i da mu ukratko objasnim kako da poveže dve tri forme i da ih poveže sa access-om... a a....not me...

Nije mi bas najjasnije kako si dosao do ovoga i to na osnovu mog posta, ali ajde...

Ako sam toliko nerazumljiv, mogu jos jednom da objasnim. Cudi me da ljudi za ilustraciju koriste iskljucivo knjishke primere, a ne i malo maste. Nekome ko je vec programirao ili dugo radi na racunaru (licno misljenje) bolje odgovara primer buttona, nego automobila. Primetio sam da ti ljudi brze i lakse shvataju kada im se na primeru npr. dugmeta objasni sta su atributi (koordinate na ekranu, dimenzije, boja, tekst...), sta metodi (iscrtaj, sakrij, disejbluj...), a bogami i event-driven koncept (onclick, onmouseover...). Ljudi na tako izabranom primeru em mogu da nauce OO koncepte, em se o istom trosku objasni kako neke stvari funkcionisu. Dve ili tri muve istim udarcem.


A kako si sad ti tu upleo net beans i povezivanje formi sa accessom - samo ti znas.
 
Slazem se sa silvergliderom. Definitivno takav pristup daje bolje rezultate.
 
Jeste! Prvo malo nauci C, pa kad pocnes da ucis, seti se da bi mogao i asembler malo da proucis jer ce ti koristiti znanje, ali mogao bi i da programiras direktno na masinskom jeziku (usput se tripujes malo na matriks stil, nule i jedinice)... Prijatelju (GOXY83), nemoj coveka da bacas na muku.

Solid Sn@ke: veoma ces lako da naucis sta je OOP kada pocnes da ga primenjujes, i onda ces da shvatis da si u stvari to i znao. Znaci, predji malo OOP u TPaskalu, i bacaj se na Delphi.

OOP:
Zasniva se na objektima. Ono sto je celina za sebe, je objekat. Pravi se od raznih delova. (TV, automobil, komp, pita od jabuka, covek- su objekti). Svi TV-ovi imaju neke slicne osobine (rade istu stvar, sa malim varijacijama). Ljudi lice jedni na druge... Sve slicne objekte stavljamo u istu grupu objekata koju zovemo klasa. Klasa je SABLON po kome pravimo "zive" primerke objekata.
Znaci:petar, Anica, Milivoje (objekti)... su klasa Ljudi. Samsung, Sony, LG, su klasa televizori. Znaci napravis klasu, i posle samo stancujes objekte po zelji, (kao kalup za kolace, ili sasiju za automobil).
Postoje neki mehanizmi u OOP-u: atributi (opisuju stanje objekta), nasledjivanje, polimorfizam...

atributi: U TPascalu (strukturnom), podaci su bili posebno u kodu, posebno f-je i procedure. Kod OOP je to sve u jedoj celini koja je, pogadjas, objekat. Podaci pokazuju koja je razlika izmedju izmedju tog objekta i drugih objekata iste klase. (Covek-24 god, visina.., tezina... boja ociju..., se razlikuje od - zene, 25 god, visina..., tezina...). I prvi i drugi covek imaju "slicna polja" za unos podataka jer su ista klasa, ali atributi daju razliku medju njima.

nasledjivanje: nasledjivanje ima veze sa klasama (nikako sa objektima). Nasledis polja, metode (procedure i funkcije u Tpascalu) neke klase, u drugoj klasi. Mozes u drugoj klasi da ih koristis kao si ih napisao ponovo. Dodas neko polje i metodu, i eto nove klase, koja ima sve sto ima i prva i jos + dodatna svoja polja ili metode.

polimorfizam: to je nasledjivanje (vrsta nasledjivanja ma sta "neko" drugi rekao), u kome kada nasledis neku klasu, i sve njene metode i polja, mozes da redefinises ponasanje neke metode, da se ponasa drugacije u drugoj nego u prvoj klasi, iako si je nasledio takvu kakva je. Znaci, nasledis metodu iz prve klase koja ispisuje IME na ekranu. U drugoj klasi je izmenis da ti ispise PREZIME, iako je ista metoda. Sta ce da ispise zavisi od toga da li objekat prve ili druge klase prikazuje tu informaciju.

Nadam se da sam ti bar malo pomogao, ali znaj da ti niko ne moze pomoci ukoliko ne sednes i ucis sam.


Kada zavrsis sa OOP konceptima u okviru TPascala, preporucujem da izaberes Delphi, Javu ili C#. Nauci prvo nesto od toga, a posle je sve "slicno" i brzo ces da se presaltujes sa jednog alata (jezika) na drugi. (malo je situacija kada bi radije uradio nesto u C++ nego li u neka od ova tri alata)


Pozdrav
 
Sollid Sn@ke je napisao(la):
E sad, mene interesuje objektno-orijentisani Pascal... Sta mi mozete reci oko toga?
Dobrodosao na forum.
U vezi Pascal-a, mozda ce ovo malo pomoci ... Link .
Sto se tice pojma OOP, e pa nemoze ukratko :) . Salim se naravno, pogledaj u attach.
Poz
 

Prilozi

  • Object Oriented Programming - FAQ.zip
    415.5 KB · Pregleda: 85
thanks...

Posto sam novi na ovom forumu, nizam znao da ne koristite bold, pa se ovom prilikom izvinjavam svima kojima "smeta za oci" :type:
 
NikName je napisao(la):
Jeste! Prvo malo nauci C, pa kad pocnes da ucis, seti se da bi mogao i asembler malo da proucis jer ce ti koristiti znanje, ali mogao bi i da programiras direktno na masinskom jeziku (usput se tripujes malo na matriks stil, nule i jedinice)... Prijatelju (GOXY83), nemoj coveka da bacas na muku.
Naravno da ne treba ići tako daleko, ali C je svakako vrlo korisno znati...
Bar svi ljudi koje ja znam, a znaju C++, dele moje mišljenje...
 
Evo razmislio sam malo i, OK je to da on nauci malo C, jer
C-Like sintaksa ima da mu pomogne kasnije. Ali moja filozofija je da kad naucis Javu, kasnije mozes lako da uporedjujes i kazes sebi "aha TO i TO se razlikuje u C#, a za razliku od njih ovo mozes u C++ (u kome ruku na srce sve moze)...". Znaci put do znanja treba da bude laksi, da nauci prvo koncepte nevezano za jezik, pa onda da savlada sta sve moze koji jezik.

Moj put ucenja je bio ovakav. Poceo sam da ucim C. Islo je kilavo. Zatim sam drndao TPascal, islo je mnogo bolje (jer tacno postoje restrikcije i sve je propisano sta sme a sta ne). Uzeo sa C# (bas kad se pojavio). Kada sam pre dve godine na fakultetu poceo da ucim C, ni izbliza mi nije bio slozen kao kada sam pocinjao. Sada mi uopste nije frka da ucim Javu ili Delphi.

P.S. Kada imas neku zabranu, i posle toga se ukine, veoma ces se lako adaptirati na promenu stanja. Ali, ako ti je sve dozvoljeno, pa ti uvedu zabranu, kako ces se osecati??? (Analogija: C/C++ sa TP/C#/Java...).

Pozdrav
 
1. Ne pucaju svi na to da znaju sve, niti nameravaju da znaju/rade sve.

2. Putevi kojima smo mi isli u savladjivanju znanja ne moraju biti optimalni (ili uopste ispravni) bas za sve ljude - nema fixnih formula.


Ergo, ima mnogo stvari koje je korisno znati, ali prvo treba i tu prvu stvar savladati odnosno nauciti. Kada covek savlada prvi skup znanja, umece dalje i sam da odluci da li mu to radi posao, da li ga sputava, da li mu je potrebno da prelazi na nesto drugo i sta, itd. Te stvari se grade kumulativno. Tako da mislim da coveku u ovom trenutku najvise pomaze odgovor na konkretno pitanje, a ne odmah preusmeravanje na nesto deseto ili nepotrebno "shirenje horizonta". Covek treba da shvati i nauci koncepte i principe, a ne sintaksu. Sintaksa je tu sasvim sekundarna stvar i savladjuje se i uci mnogo lakse i brze (fakticki automatski) ako se barata vec znanjem kako stvari funkcionisu.
 
Poslednja izmena:
Ovako, prvo sam radio (i jos uvek radim) sa Macromedia Flash-om gde sam se susreo sa Action Scriptom, sto mi je znatno pomoglo da shvatim kako napraviti neke kodove uz pomoc kojih bi se izvrsavala neka akcija...Poznavajuci AS, bilo mi je znatno lakse da u skoli shvatim programiranje u Pascalu bolje od mojih drugara...Slusajuci predavanja profesora, pravio sam paralelu sa Action Scriptom i Pascalom i uvideo da ima mnogo slicnosti i da je jedina razlika u tome sto se odredjeni problem zapisuje na razliciti nacin! Koji god program koristili, koncepti su svuda potpuno isti, a odabir programa zavisi iskljucivo od vrste problema...
Mislim da sam do sada, vec nekoliko godina unazad, imao zabranu da nikako ne krecem sa jezikom C...medjutim, sad kad polako shvatam programiranje, odlucujem da polako krenem i sa ucenjem jednog od najpoplarnijih jezika danasnjica (pitanje je koliko ce jos uvek biti medju najpopularnijima)!
 
SS, svaki jezik koji tebi zavrsava posao na dovoljno kvalitetan nacin je za tebe dobar jezik. To je prosto alat i nista vise. Prva stvar kojom treba da se vodis su tvoje potrebe i aspiracije, a ne popularnost jezika. Tek kada suzis izbor (u oblasti koja tebi treba) na recimo dva jezika, onda mozes da upotrebis popularnost kao filter. Kada savladas principe programiranja, uobicajene algoritme i naucis sam da razmisljas u tom pogledu, promena jezika odnosno sintakse bi trebalo da ti je najmanji problem.
 
NikName je napisao(la):
P.S. Kada imas neku zabranu, i posle toga se ukine, veoma ces se lako adaptirati na promenu stanja. Ali, ako ti je sve dozvoljeno, pa ti uvedu zabranu, kako ces se osecati??? (Analogija: C/C++ sa TP/C#/Java...).
Upravo zato preporučujem učenje C-a. Prvo se malo "mrcvariš" sa proceduralnim programiranjem, a onda dođe C++ pa kažeš "e a sad lakši i prirodniji način"... i pride naučiš da ceniš OO jezike...
 
Poslednja izmena:
Ako zeli da ti profesija bude programiranje i da od toga zivis, preporucujem upravo da naucis C, a zatim i C++.

Java, C#, i srodne tehnologije se brze uce, mozda se nekada lakse nadje i posao ali se on manje placa nego neko ozbiljnije programiranje u jeziku C++.
 
Koliko je potrebno vremena da bi se salidno (ilil malo bolje) naucio, na primer, c++...Prvenstveno mislim na ucenje uz pomoc knjiga, raznih tutoriala itd...

Da li se isplati kretati sam na "tako dugacak i tezak put", ili je ipak najbolje cekati fax!!!

p.s. naravno da ocekujem da cu jednoga dana ziveti od programiranja i ostalog...-:)
 
posto tek pocinjes ja bih ti preporucio da prvo radis na pascalu. odlican je za ucenje jer te tera da radis "po propisu" pa samim tim steknes prave navike od samog pocetka. kada to naucis mozes posle da pises "po propisu" koliko hoces i u c-u i u bilo kom drugom jeziku...
malo sam radio sa c-om ali dovoljno da vidim da uopste nije dobar za to da bude prvi programski jezik koji ucis ... uglavnom isplati se , na duze staze , da se par meseci zezas sa pascal-om a posle toga uzmes nesto sto ces stvarno da koristis (ako koristis delphi iskustvo sa pascal-om ce ti biti i izuzetno korisno).


poz
 
Sollid Sn@ke je napisao(la):
Koliko je potrebno vremena da bi se salidno (ilil malo bolje) naucio, na primer, c++...Prvenstveno mislim na ucenje uz pomoc knjiga, raznih tutoriala itd...

Sam C++ nije tesko nauciti. Svi studenti ga savladaju za jedan semestar i to prilicno dobro. Problem je sto to nije dovoljno da bi se napisao cak ni jednostavniji program jer treba dobro poznavati okruzenje u kome se radi (pise, kompajlira, itd.) a za to je potrebno dodatno vreme i sto je jos bitnije - volje i zelje da se nauci zanat. Jos da pomenem da je potrebno upoznati i osnove Windows-a i Windows API-ja kako bi se razumelo kreiranje prozora, reagovanje na dogadjaje, itd.


Sollid Sn@ke je napisao(la):
p.s. naravno da ocekujem da cu jednoga dana ziveti od programiranja i ostalog...-:)

Posto ocekujes da se ovime bavis onda nema druge nego da krenes da ucis za pocetak C. Ja ne mislim da je pascal bolji za pocetak jer se sve svodi na isto samo sto posle bacas u vodu to sto si naucio i ucis drugu sintaksu. Kada naucis C odmah nastavljas dopunjujuci ga sa C++om a ako ti zatrebaju ikada Java i C# moci ces da ih savladas u rekorno kratkom vremenu, ali to vec nije toliko bitno.
 
Dobar je C, odličan je vrlo dobar je, samo je dosadan u p.m. al dobar je... :d

Bez zezanja, ako si ozbiljan u nameri, prvo C pa dalje... za*ebi ove instant programere za 24 časa "uči samo ono što ti treba"... ne! uči redom!
 
Daj Vooodoo, molim te ne pricaj svasta. Kakvim crnim redom? Zasto da danas bilo ko uci C pre C++a? Koliko to ti i drugi "savetnici" zaradjujete mesecno/godisnje od tog programiranja da bi se sa toliko samouverenosti davali takvi saveti? Ispada da se barata sa minimum 30 godina programiranja u svemu i svacemu za basnosnovne sume.

Zao mi je sto moram da prokomentarisem, ali po jos jednoj stvari se ocigledno vidi koliko ko vidi shumu od drveca: kada neko zeli da postane programer, onda je njemu cilj da nauci programiranje, a ne odredjeni jezik. Na zalost, po iznesenim stavovima ovde ispada da je odabir jezika krucijalna i fakticki ciljna stvar u zivotu (buduceg) programera. Ono, naucis C++ i na konju si. Nije nego.
Tamo na hardverskim delovima foruma se nakon nekog vremena uspelo stici (ne svi doduse) do nivoa da ljudi na pitanje "sta da kupim" odgovore sa kontra-pitanjem "za koju namenu?". Ovde niko decka ni da pita sta ga interesuje, sta zna, sta je naucio do sada, sta bi voleo da radi, itd. Nikako da se skrene paznja na oblasti, frejmvorke, platforme, u krajnjem slucaju "principe programiranja" i ostalo - raspalilo se po sintaksi i amin.

Mislim, ono...
 
Nazad
Vrh Dno