Cemu sluzi OOP?

KillaBeez

Obećava
Poruka
83
Za sad me vrlo zanima programiranje (objektno-orijentisano) , cini mi se zanimljivim i sve to, ali za sta se tacno programiranje primenjuje? Kada bi me recimo neko zaposlio kao programera sta bi ja sve mogao da tu radim?
Verovatno vam pitanje izgleda debilno, al eto... :lol:
 
To je programska paradigma koja je nastala sa teznjom da se neki softver moze iskoristiti vise puta. Ideja je da se spoljasnji svet modeluje pomocu objekata, i da ti objekti interaguju medjusobno.

Sve sto mozes da uradis sa OOP paradigmom, odnosno odredjenim jezikom iz te paradigme, mozes da uradis i sa nekim jezikom iz proceduralne paradigme...
Samo sto sa OOP dobijas lakse citljiv i razumljiviji kod koji je kasnije lakse debug-ovati i odrzavati. Naravno ovo je sve povrsno, OOP paradigma uvodi mnoge koncepte poput polimorfizma, nasledjivanja itd, kako bi do neke granice olaksala programiranje, u tom smislu da se pise kod koji izgleda prirodnije, ako tako mogu da se izrazim (modelovanje objekata koji medjusobno komuniciraju, sto je sigurno prirodnije i blize stvarnom svetu nego pisanje cisto sekvencijalnih programa) i omogucava da se neki delovi softvera koriste i u drugim projektima (naravno pod uslovom da se sve to dobro dizajnira).

Dakle, u OOP paradigmi, osnovna jedinica bi bila objekat.

OOP paradigmu mozes savladati kroz ucenje nekog konkretnog jezika iz te paradigme. Mozda Java npr.
C++ takodje, samo sto je on dosta komplikovaniji od Jave, zbog pokazivaca i raznih drugih stvari.
 
Poslednja izmena:
Objektno-orijentisano programiranje je korisno iz prostog razloga što je jednostavnije kod većih projekata i što ti se ne može desiti da slučajno pozoveš neku metodu ili objekat tamo gde ne bi trebalo. Kreiranjem neke klase u zasebnom fajlu ti možeš napraviti beskonačan broj objekata koji će imati osobine te klase, što je mnogo brže nego kod proceduralnog programiranja, a takođe možeš kreirati klase koje su podskupi nekih klasa (podklase) koje sadrže osobine prethodne klase, ali uvode i neke nove osobine (recimo class MountainBike implements Bike { } u kojoj ćeš dodati neke pojedinosti za planinske bicikle). Takođe možeš da napraviš više fajlova sa različitim klasama pa da ih sve zajedno pozoveš i tako po potrebi koristiš ono što ti treba (recimo povlačenje informacija o korisnicima iz baze podataka, keširanje sadržaja, primena nekog algoritma itd). Imaš još jednu paradigmu koja se zove funkcionalno programiranje, možeš i nju da istražiš ako te zanima, a ima i ona u nekim slučajevima prednosti u odnosu na OOP i proceduralno programiranje :)
 
Dve danas dominantne paradigme programiranja su:
1. proceduralno programiranje
2. objektno orijentisano programiranje
OO programiranje je bliže ljudskom načinu razmišljanja, dok je proceduralno bliže računarskom "načinu razmišljanja" - eto, to je najkraće moguće objašnjenje.
 
Objektno orijentisani kod je recimo dosta lakše modifikovati - izmena jednog dela koda neće zahtevati izmene u ostalim delovima koda.
Mada je istina da kod malih programa oo paradgima nema neku značaju prednost nad proceduralnom paradigmom.
Ako hoćeš da naučiš OOP, počni od četiri osnovna koncepta - to su:
1.apstrakcija
2.enkapsulacija
3.nasleđivanje
4.polimorfizam

Ovo je vrlo dobro objašnjenje suštinske razlike između proceduralnog i OO programiranja:

 
Zanimljivo ali objektno razmisljanje i izrazavanje van programiranja uopste nije lakse razumljivo coveku.
Znaci covek je takodje proceduralan u svom razmisljanju i izrazavanju.

Pa normalno! OO jezici puput Jave i C# nisu prirodni jezici tipa srpski, engleski, jako su daleko od toga, ali su makar malko bliži ljudskom razmišljanju i izražavanju od proceduralnih jezika poput C jezika, Cobol-a.
Suština je da jedan program (tj. jednu prodecuru) razbijamo na više delova (tj. objekata/klasa) - svaki taj deo programa onda ima svoje promenljive i funkcije (koje se u OO terminologi nazivaju atributi i metode) i ti delovi programa onda međusobno komuniciraju.

Naravno, pored objektno orijentisanog i proceduralnog programiranja, postoje i druge paradigme programirnja, npr. event-driven programiranje, logično programiranje, funkcionalno programiranje... itd, mada ja npr. uopšte ne znam ništa o logičkom i funkcionalnom programiranju, a i ne znam kada sam zadnji put čuo i video da neka firma traži Haskell ili Prolog programera, dakle samo objektno orijentisano, proceduralno i event-driven programiranje imaju komercijalni značaj, sve ostale paradigme programiranja imaju samo akademski značaj.
 
@Umri_muski, kada vidiš dobru trebu na ulici, u kafiću ili bilo gde drugde, da li je razdvajaš na grudi, zadnjicu, noge, lice i ostale delove tela ili ih posmatraš kao nešto što njoj suštinski pripada i sve to kao celinu? Možda zvuči malo glupo primer, ali posmatraj objekat kao neku osobu ili stvar u realnom životu, a promenljive kao osobine i metode kao akcije. Pre bih rekao da proceduralno posmatramo vreme i život, ali ne i objekte oko nas.

- - - - - - - - - -

Pa normalno! OO jezici puput Jave i C# nisu prirodni jezici tipa srpski, engleski, jako su daleko od toga, ali su makar malko bliži ljudskom razmišljanju i izražavanju od proceduralnih jezika poput C jezika, Cobol-a.
Suština je da jedan program (tj. jednu prodecuru) razbijamo na više delova (tj. objekata/klasa) - svaki taj deo programa onda ima svoje promenljive i funkcije (koje se u OO terminologi nazivaju atributi i metode) i ti delovi programa onda međusobno komuniciraju.

Naravno, pored objektno orijentisanog i proceduralnog programiranja, postoje i druge paradigme programirnja, npr. event-driven programiranje, logično programiranje, funkcionalno programiranje... itd, mada ja npr. uopšte ne znam ništa o logičkom i funkcionalnom programiranju, a i ne znam kada sam zadnji put čuo i video da neka firma traži Haskell ili Prolog programera, dakle samo objektno orijentisano, proceduralno i event-driven programiranje imaju komercijalni značaj, sve ostale paradigme programiranja imaju samo akademski značaj.

Srborus, u poslednje vreme je funkcionalno programiranje dosta zastupljeno - baci pogled na Clojure, Haskell, Erlang (oni su čak zastupljeni i u web razvoju). Čak je i JavaScript funkcionalan u jednom svom delu, a i drugi jezici mogu podržavati tu paradigmu. Event-driven jezici su bazirani na korisnikovim akcijama (klik miša, prelazak preko elementa, selektovanje teksta i slično), a takvi su i ovi jezici iz palete Microsoft .NET.
 
C# je tačno 358 puta traženiji od Haskella. :D

total_pl_demand.jpg


C# 25.07
Haskell 0.07

http://www.sergejusz.com/jobads_analysis/uk_it_skills.htm
 
Burazeru, pogledaj datum na vrhu :D Najplaćeniji jezici trenutno su Java, C++, Ruby, PHP, Python i Javascript, a ima i C# svoj deo kolača tu, ali ne toliko koliko pokazuje ovaj grafik :)

Haskell definitivno ima svoju primenu u razvoju softvera, ali nije toliko popularan kao imperativni jezici iz prostog razloga što je praksa da se počinje sa imperativnim jezicima, a mnogi tokom svoje karijere ni ne saznaju za druge paradigme programiranja poput funkcionalnog (nažalost).
 

Back
Top