Category Archives: Knjige

Objektno Orjentisano Programiranje- treći dio


Polimorfizam (en. Polymorfism)

Polimorfizam predstavlja najsofisticiraniju osobinu OOP pri kojoj jedan objekat može ispoljavati različite osobine. Naime, pored standarnih funkcja koje se mogu definisati u klasi, OOP koncept dozvoljava da se definišu virtuelne metode. Virtuelne metode se implementiraju na potpuno isti način kao i regularne samo što u svojoj deklaraciji imaju prefiks virtual. Kada se metoda deklariše kao virtualna, polimorfizam dolazi do izražaja samo u slučaju kada se definišu klase koje su izvedene iz bazne klase.
U izvedenim klasama virtuelne metode se mogu “preklopiti” (en. override) tako da imaju potpuno drugačiju implementaciju od one koja se nalazi i baznoj klasi. Na taj način jedan objekat tipa bazne klase može imati dvije različite osobine pri pozivu jedne te iste metode u zavisnosti od toga na koji način je objekat instanciran. Polimorfizam predstavlja jedan od najvažnijih i najznačajnijih fenomena OOP i treba ga koristiti kad god za to postoji potreba.
Virtualne metode se u izvedenim klasama mogu ali i ne moraju deklarisati sa ključnom riječju virtual. Međutim, kod nekih programskih jezika poput C# potrebno je dodati ključnu riječ overide. Virtuelne metode osim u ključnoj riječi za programera nemaju posebnih implementacijskih zahtjeva. Osim što u slučaju kada programiramo sa C++, moramo voditi računa da polimorfizam radi samo u slučaju pointera na objekte. Dakle u koliko instanciramo objekat na stack memoriji ne pokreće se virtuelni mehanizam i nemamo polimorfizam. Razlog zašto polimorfizam radi samo ako su u pitanju pointeri i heap memorija je jednostavan u koliko se poznaje priroda nastanka C++ jezika. Kako je C++ jezik izrastao iz C jezika, koji ima statičnu veličinu za svaki formirani objekat na staku, otud dolazi razlog da se virtualne metode nemogu mijenjati na tako statički definisanom objektu. Međutim u koliko se objekat klase instancira na heap dinamičkoj memoriji, tabela sa virtuelnim metodama se povezuje se i vrši prepoznavanje metoda poziva u vrijeme izvršavanja.
Kako rade virtualne metode može se objasniti na slijedeći način: Prilikom kompajliranja formira se tabela u koju se smještaju virtulne metode iz bazne i svih izvedenih klasa. Prilikom poziva interpreter pretražuje virtualnu tabelu sa listom virtuelnih metoda te poziva onu virtuelnu metodu iz one klase iz koje je objekat instanciran.
Kada govorimo o instanciranju objekata u slučaju bazne i izvedene klase možemo imati sljedeće slučajeve:
1. Objekat tipa bazne klase instanciran sa baznom klasom.
2. Objekat tipa bazne klase instanciran da izvedenom klasom.
3. Objekat tipa izvedene klase instanciran sa izvedenom klasom.
Kada objekat pozove virtuelnu metodu možemo dobiti slijedeće slučajeve shodno gore instanciranim varijantama objekta:
1. Izvršava svirtualna metoda iz bazne klase.
2. Izvršava se metoda iz izvedene klase.
3. Izvrsava se metoda iz izvedene klase.
U drugom slučaju imamo pojavu polimorfizma, dok se u prvom i trećem slučaju radi o standardnom pozivu metode. Sljedeći listing prikazuje naš primjer poziva metode Status iz bazne klase Osoba i izvedene klase Student.

//glavna ulazna funkcija
int main()
{  

	Osoba* os1 = new Osoba();
	Osoba* os2 = new Student();
	Student* os4 = new Student();  

	cout << "Osoba.Status(Osoba) vraća: " << os1->Status().c_str() << endl;
	cout << "Osoba.Status(Student) vraća: " << os2->Status().c_str() << endl;
	cout << "Student.Status(Student) vraća: " << os4->Status().c_str() << endl;  

	system("Pause");
	return 0;
}

Vidimo da u drugom slučaju kada imamo bazni tip Osoba koja je instancirana preko izvedenog tipa Student, pojavu polimorfizma. Istu situaciju bi imali u koliko bi pokrenuli C# verziju napisanog programa. Izlaz ovog programa dat je na narednoj slici:

Osoba.Status(Osoba) vraća: Osoba
 Osoba.Status(Student) vraća: Student
 Osoba.Status(Student) vraća: Student
 -------------------------------------------
 Press any key to continue...
Advertisements

Objektno Orjentisano Programiranje- drugi dio


Strukture Klase

Kako se može vidjeti iz prethodno prkazanih listina, strukturu klase čini nekoliko dijelova:
– kontruktori i destruktori
– tipovi,
– metode.
Svaka klasa posjeduje specijalne metode koje se pozivaju prilikom instanciranja i prije samog uništavanja objekta. U principu najmanje jedan konstruktor i desktruktor može postojati u klasi, odnosno moguće je definisati više od jednog konstruktora, dok jedan destruktor može postojati u klasi. Osnovna osobina konstruktora i destruktora jeste naziv koji mora biti isti kao naziv pripadajuće klase. Kod destruktora ispred naziva se nalazi specijalan simbol tilda. Konstruktor kao metoda nema mogućnost vraćanja vrijednosti, dok može prihvatati argumente kao i svaka druga metoda. Konstruktor koji ne prihvata niti jedan argument zovemo defoltni konstruktor. Konstruktore razlikujemo ne po nazivu (jer svi imaju isti naziv) već po njihovim argumentima. Npr. ukoliko imamo klasu Osoba, koja posjeduje dva konstruktora: Osoba() i Osoba(string ime, string datum). Drugi konstruktor se razlikuje od prvog po argumentima ime i datum. Klasa može imati samo jednog desktruktora, koji se poziva kada se objakat unuštava iz memorije. Tom priliko delociraju se članovi klase koje smo instancirali u heap memoriji ili neki drugi memorijski resursi. Na donjem listingu vidimo kako se deklarišu konstruktori odnosno desktruktor.
Svaka klasa može definisati proizvoljan broj svojih članova. Članovi klase mogu biti osnovni tipovi poput int, char, i dr, kao i svaki drugi izvedeni tip poput time_t odnosno svaka druga klasa. Svaki tip koji je definisan unutar određene klase postaje članom te klase. Kako smo ranije naglasili ono što klasu razlikuje od osnovnih tipova jeste mogućnost deklaracije metoda unutar same klase. Metode koje se deklarišu unutar klase zovemo metode članice, ili kratko članice klase. Metode članice deklarišu se na isti način kao i kod proceduralnog programiranja. Dijelovi metode članice jeste: nivo pristupa, tip vraćanja rezultata, naziv članice, argumenti koje metoda članica prihvata. Kod C++ u tijelu klase samo deklarišemo metodu članicu dok se njena implementacija nalazi izvan klase, s tim što ispred naziva metode nevedemo naziv klase, a zatim naziv metode (vidi donji listing).
Kod C# unutar klase istovremeno deklarišemo i implementiramo klasu. Primjeri deklaracije i definicije klase vidimo na litnigu 8.1, 8.2 i 8.3.
8.1.3 Enkapsulacija koda (en. Encapsulation)
Prvi i osnovni koncept OOP jeste enkapsulacija, koja podrazumijeva implementaciju ponašanja objekta unutar samog tipa. Ovo znači da globalne metode koje se definišu kod proceduralnog programiranja više ne koriste za implementaciju, već da se implementacija isključivo radi preko metoda članica klase. Pored toga što se implementacija enkapsulira u sami tip, uvodi se i kontrola pristupa ovako enkapsulirane implementacije na način da je objekte lakše kontrolisati i zabraniti neovlašten pristup. Gledano sa strane kontrole pristupa članovima klase postoje osnovna tri stepena pristupa koji posjeduju svaki OO jezik:
1. public – javni pristup članu klase. Svaki član koji je dekorisan sa public može biti korištem sa svakog nivoa pristupa tokom programiranja.
2. protected- zaštićeni pristup. Osim članova klase u kojoj je definisan, ovom članu može prostupiti samo još članovi izvedene klase.
3. private – zaštićeni pristup. Ovako označenom članu klase mogu pristupiti samo članovi iste klase.
Specifično za određene programske jezike (c++, c# ili java) postoje još neki nivoi pristupa, poput internal koji dopušta pristup svim članovima istog prostora imena. Međutim ovdje ćemo se zadržati isključivo na osnovna tri pristupna nivoa jer su podržani u svakom OOP jeziku.
Možemo kazati da enkapsulacija vrši preslagivanje koda u metode članice klase koje se označavaju raličitim nivoima pristupa, što kod čini sigurnijim, lakše razumljivijim i lakšim za održavanje. Instanca klase odnosno objekat pristupa samo javno označenim metodama članica. Kako je ranije naglašeno ovakav pristup omogućava lakše organizovanje tima programera u razvijanju istog projekta. Svaki član tog tima lahko može koristiti sve objekte koji su drugi članovi tima razvili, poznavajući samo načine komunikacije sa objektima, bez poznavanja njihove implementacije.
Pokušajmo fenomen enkapsulacije odnosno OOP koncepta objasniti preko realnog primjera. Pretpostavimo jedan fakultet na univerzitetu koji ima nekoliko smjerova. Na fakultetu rade profesori, asistenti i ostali zaposlenici. Oni su svi u službi obrazovanja studenata. Student nakon završetka srednje škole upisuje fakultet. Na samom početku student u studentsku službu predaje osnovne podatke o rođenju, državljanstvu, općem ispjehu u srednjoj školi. Zaposlenica u studentskoj službi otvara novi karton studenta u koji će upisivati sve relevantne informacije o studentovom uspjehu na fakultetu. Kada se otvori novi karton studenta, počinje njegov studentski život ali ne i studiranje. Da bi student imao validan status studenta potrebno je da upiše semestar. U koliko je samo upisao fakultet upisuje prvi semestar. Zatim student pohađa nastavu i polaže kolokvije, pismene ispite, a na kraju za svaki predmet polaže usmeni ispit kojim zaključuje pohađanje predmeta i dobija konačnu ocjenu. Nakon polaganja određenog broja predmeta, student završava semestar i upisuje naredni, i sve tako do kraja studija. Na kraju studija radi diplomski rad kao završni rad. Tokom studiranja student može imati i druge aktivnosti na fakultetu npr. može biti član neke studentske organizacije ili pak neke neformalne grupe za promicanje znanja u nauci ili sportu. Može biti član nekog sportskog tima sa fakulteta i sl. Sve u svemu student kroz studiranje ima pregršt prepreka a i mogućnosti da sa fakulteta izađe kao osposobljena osoba i budući zaposlenik neke kompanije ili državne ustanove. Na osnovu ovog kratkog opisa jednog procesa postavlja se zadatak da modeliramo ovaj proces i napišemo program.
Na samom početku analize ovog procesa možemo identifikovati nekoliko entiteta: fakultet, zaposlenici, profesori, asistenti, smijerovi, predmeti, semestri, student, i drugi manje značajni entiteti. Naravno u ovom primjeru nećemo modelirati sve identifikovane entitete, niti ćemo u detalje opisivati osobine i ponašanje entiteta. Kao primjer uzet ćemo entitet “student” i napisati program koji će opisati neke od njegovih osobina.
Entitet student ima ime prezime, datum rođenja, i ostale detalje koji nisu isključivo vezani samo za studenta, oni mogu biti vezani i za nastavnika kao i za ostale zaposlenike na fakultetu. Stoga kao zajednička osobina svih definisat ćemo klasu Osoba koja će posjedovatri zajedničke osobine studenta, zaposlenika, profesora i asistenata. Primjer ovako definisanog tipa možemo vidjeti na listinzima 1 i 2 za C++, a u listingu 3 za C# programski jezik. U pomenutim listinzima vidimo kako su podaci strukturirani u samom tipu. Svaka osoba posjeduje ime i prezima, datum i mjeto rođenja, bilo da se radi o studentu, profesoru ili nekom drugom entitetu.
Da bi uvidjeli razlike u implementaciji između OOP i proceduralnog programiranja, napisat ćemo kako bi izgledao ovaj program kad bi koristili proceduralno programiranje. U tom smislu definisali bi strukturu Osoba u koju bi stavili osnovne podatke studenta, a pored strukture u glavnom programu bi napisali nekoliko procedura koje bi nam koristile za promjenu statusa studenta, polaganje ispita, upisa godine i druge operacije. Ovo znači da bi glavni program kontrolisao i mijenjao status studenta zajedno sa svim drugim entitetima koje smo pobrojali na početku analize. U C++ gore rečeno mogli bi implementirati na sljedeći način:

struct Osoba
{
    string  imePrezime;
    time_t  datumRodjenja;
    string  mjestoRodjenja;
};  

Osoba osoba;  

void InitOsobe(string ime, string datum)
{
	osoba.imePrezime = ime;  

	//konverzija string u datum
	struct tm tm = { 0 };
	strptime(datum.c_str(), "%d/%m/%Y", &tm);
	osoba.datumRodjenja = mktime(&tm);
}  

string Status()
{
	return "Osoba";
}

Uspoređivanjem OOP implementacije sa implementacijom prikazanom na listingu 8.4, možemo uočiti nekoliko značajnih razlika, prvenstveno načinom definisanja određenih dijelova koda, sigurnosti implementacije, mogućnosti pojavljivanja logičke i kompajlerske greške i drugim aspektima. Kada se porede ove dvije implementacije moguće je zapaziti nekoliko vrlo važnih značajki:
1. Kod OOP koncepta glavni program ne posjeduje implementaciju oko mijenjanja ponašanja objekta tipa Osoba u odnosu na proceduralnu implementaciju,
2. Kod OOP glavni program i svaki drugi modul ne može pristupiti implementaciji sve dok objekat tipa Osoba nije instanciran,
3. Samo instanca Osobe može pristupiti i promijeniti njegovo stanje.
4. Pristup članovima klase:ime, datum i mjesto rođenja, … postižemo kontrolisanim načinom.
Sve navedeno označava prvu karakteristiku OOP koncepta koju zovemo enkapsulacija ili enkapsuliranje implementacije u samu klasu. Vanjski objekti pristupaju metodama klase samo preko njegove instance, dok nekim dijelovima prstup je zabranjen. Proceduralna implementacija koju smo prikazali u Listingu 4 predstavlja sasvim otvorenu implementaciju te svaki dio implementacije može biti mijenjan. S druge strane metode koje smo implementirali se mogu pristupiti u svakoj situaciji bez obzira da li imamo instancu osobe ili ne.

Nasljeđivanje (en. Inheritance)

Dva su načina definisnja nove klase u OOP. Prvi način je da deklarišemo novu klasu definišući njen naziv, a zatim ostale dijelove, odnosno impelmentiramo metode članice. Drugim načinom klasu definišemo tako što ćemo iskoristiti već postojeću klasu i naslijediti svu njenu implementaciju. Drugim načinom uveliko iskorištavamo postojeću implementaciju koju smo već napisali, ili koju je već neko drugi napiso, a zatim dodajemo novu implementaciju koja je potrebna. U procesu nasljeđivanja nova klasa koja se formira zovemo izvedena klasa, dok se baznom klasom zove klasa iz koje smo naslijedili postojeću implementaciju.
Iz same definicije nasljeđivanja vidimo da je ono usmjereno na ponovno korištenje već postojećih implementacija, što je bio jedan od osnovnih problema modularno-proceduralnog programiranja. Sa ovim fenomenom OOP sada možemo izvoditi nove tipove podataka koji imaju već implementiranu osnovnu logiku. Nasljeđivanje najbolje objašnjavamo na primjerima. Ukoliko se vratimo na naš primjer, uočavamo da entiteti student, profesori, asistenti i zaposelnici imaju dosta zajedničnih atributa poput imena, datuma i mjest arođenja i sl. U tom kontekstu možemo iskoristiti baznu klasu Osoba u kojoj su određene zajedničke osobine svih osoba na fakultetu i formirati specijalnu klasu Student koja će reprezentirati isključivo osobine vezane za studente fakulteta. Implementacija ovako zamišljene klase prikazuje donji listing.

class Student : public Osoba
{
//konstruktori klase
public:
	Student();
	Student(string ime, string datum);
	~Student();  

//clanovi klase /atributi
private:
	bool aktivan;
	int semestar;  

	//javne metode clanica
public:
	float ProsjekOcjena();  

	//javne metode clanice
public:
	virtual string Status();
};

Pri definisanju nove klase nasljeđivanjem postoje određena pravila koja je potrebno imati na umu. U principu pri definisanju izvedene klase cijelokupna implementacija bazne klase se nasljeđuje osim konstruktora i privatno označenih članova. Zato je ovo dobro imati na imu tokom implementacije da se određeni članovi klase označe korektnim pristupnim novoom. U slučaju proceduralne implementacije uočavamo da ovaj fenome se ne može implementirati na ovakav način, pa bi u slučaju entiteta Student morali definisati drugi potpuno novu strukturu u koju bi stavili sve članove strukture Osoba, i dodali done članove.

Cloud Computing – Računanje u oblacima


Cloud computing ili računanje u oblaku možemo definisati kao kompjutersku evoluciju započetu prije 30 godina, a predstavlja integraciju nekoliko tehnologija (Autonomic Computing, Grid Computing, Utility Computing and Virtualization) smještenu u udaljenim i čuvanim data centrima. Iako je samo par godina u širokoj upotrebi, uveliko je promijenila način na koji koristimo kompjuter ne samo u poslovnom domenu, već i u drugim društvenim segmentima. Društvene mreže, mobilne tehnologije, te usluge na internetu poput Skypa i drugih servisa za komunikaciju, dijeljenje datoteka i fotografija, industrija zabave i dr. bazirani su na cloud computing tehnologiji, a da toga nismo ni svjesni.

Od ENIAC-a do Oblaka – kratka historija

Kroz kratku historiju, kompjuterska nauka prošla je nekoliko faza. Danas se mnogi slažu da kompjuterska era započinje na samom kraju II Svjetskog rata, odnosno pojavom ENIACa – prvog kompjutera, 1945 godine. Ovaj po dimenzijama gigantski kompjuter projekat je američke vojske koja je nastojala ubrzati izračunavanje elemenata za gađanje artiljerijskih oruđa. Odmah nakon završetka ovog projekta započinju drugi projekti sličnog tipa, a nedugo zatim Von Neumann udara temelje arhitekture savremenog računara koja je i danas aktuelna. Sve do pojave integralnih kola računari koji su izrađivani predstavljali su gigantske mašine sa mogućnostima manjim od današnjeg prosječnog mobitela. Od šesdesetih godina prošlog vijeka računari su izrađivani od integralih kola tzv. mikročipova, u koje su mogle stati stotine tranzistora, pa se dimenzije mainframe računara znatno smanjivale tokom narednih godina. Pojavom tranzistora primjena kompjutera i kompjuterske nauke počela je dobijati sve veći primat u raznim privrednih granama, institutima a posebno u industriji zabave. Kompanija Intel je 1971. godine proizvela prvi mikroprocesor „Intel 4004“, koji je predstavljao je cjelokupnu procesorsku jedinici na jednom čipu. Ovo se smatra i početkom četvrte generacije računara, a obilježena je i pojavom danas najvećih i najznačajnijih kompanija Microsoft i Apple. Ove kompanije zajedno sa Dell i Intelom započinju masovnu proizvodnju kućnih računara. Kućni odnosno personalni računari (PC) imali su neusporedivo manje dimenzije u odnosu na mainframe računare. Poređenja radi, prvi PC-evi imali su dimenzije slične današnjim desktop računarima, sa dijagonalama monitora oko 14”. U to vrijeme najpopularniji kućni računari koji su najviše prodavani bili su Commodore 64 , Amiga, ZX Spectrum i dr. PC-ovi ove generacije bili su jeftini u tolikoj mjeri da su se mogli kupovati od strane entuzijasta i profesionalca. Ulazno izlazne jedinice ovih računara predstavljali su tastature slične današnjim, te  kasetofone i televizijske ekrane.

zxspectrum48k

Početkom osamdesetih godina započinje prodaja kućnih računara sa operativnim sistemom koji su razvijani u Microsoftu u početku MS DOS (od kraja 70-tih) a zatim Windows (od 1985. godine), Apple koji razvija Mac OS (od 1984. godine), te Linux (od 1991.godine) koji je predstavljao i početak ere otvorenog koda (en. open source).

Devedesete godine prošlog vijeka označene su kao početak informatičke revolucije koja je na izvjesan način izmjenila svijet. Kućni računari postaju standard bez kojih se ne može zamisliti bio koja ljudska aktivnost. Kompanije povezuju kompjutere u mrežu iza koje stoje serveri koji obslužuju klijentske kompjutere podacima, bazama podataka, mail serverima, pristupom na interent i dr. Drugim riječima devedesete godine označavaju početak nove kompjuterske ere nazvane: Klijent-Server.  Kao posljedica Klient-Server arhitekture započinje masovna upotreba interneta, koji je početom 21. stoljeća omogućio pojavu društvenih mreža koje postepeno preuzimaju ulogu osnovnog medija za komunikaciju.

Vrhunac razvoja današnje kompjuterske nauke predstavlja pojava tzv. računanja u oblacima (en. Cloud Computing) ili kratko Oblak (en. Cloud),  pri kojem korisnik uz pomoć bilo kojeg uređaja povezanog na internet pristupa na cjelokupnu kompjutersku infrastrukturu, koja je smještena u velikim data centrima rasprostranjenim po svijetu. Ovim se Klijent-Server arhitektura zamjenjuje novom paradigmom arhitekture u oblacima.

Oblak omogućava optimizirano korištenje Klijen-Server arhitekture na način da se koristi onda kada je potrebna i u onom kapacitetu koji je potreban. S druge strane cijena koštanja ovakve usluge plaća se samo onda kada se i realno koristi. Ovakav koncept iz temelja mijenja način korištenja IT infrastrukture.
Danas, najveći cloud provideri su Microsoft, Amazon, IBM i Google.

Zašto Cloud Computing

Danas svaka veća kompanija pa čak i one koje zapošljavaju desetak ljudi imaju svoje IT sektore koji se bave poslovima oko instalacije, konfuguracije i održavanja IT infrastrukture i servisa. Aktivnosti unutar IT sektora mogu biti raznovrsne: od instalacije, konfiguracije i održavanja lokalnog servera. Na takvim serverima nalaze se osnovni servisi  poput domain kontrolora, file servera, mail servera,  web servera, servera baza podataka, exchange servera. S druge strane svaki od nabrojanih servisa imaju način i procedure instalacije, konfiguracije a kasnije i održavanja. Za to su potrebni ljudski resursi koje čini uglavnom zaposlenici koji moraju proći dodatne škole administracije i konfiguracije pomenutih servisa. Njih uglavnom čine grupe IT administratora, web, db, exchange administratora i sl. Često se kompanije odlučuju da web server hostaju na poznatim hosting providerima, dok administraciju rade sami. Ovo su osnovne aktivnosti koje svaka kompanije ima i koja se svakodnevno susreće.

cloudcomputingPNG
Iako primarni posao kompanije nije IT, ona je prisiljena da u svojoj strukturi ima IT sektora koji obezbjedjuju da kompanija radi. Kad kompanija planira neki projekat obavezna stavka svakog projekta jeste IT infrastruktura, koja se ogleda u nabavci servera, serverskih softvera, mrežne opreme i sl. Za realizaciju ovih stavki projekat mora da izvrši nabavku hardverske i softverske opreme, mora angažovati eksternu kompaniju da istu opremu instalira u koliko nema velike IT serktore. Kada se infrastruktura instalira istu je potrebno održavati. Možemo kazati da svaki projekat u značajnoj mjeri čini IT infrastruktura.
Oblak nudi sve ono što Klijent-Server arhitektura može ponuditi, i to bez kupovine fizičkog hardvera i bez troškova onda kad ta oprema nije potrebna. Kompanije sa Oblakom unapređuju potrebe i poslove nabavke i održavanja IT infrastrukture, a troškove optimizira na način da plaća samo ono što i potroši.

1.    Primjer SQL Servera baze podataka

Uzmimo primjer da kompanija treba novi SQL Server ili Oracle na kojem će vrtiti svoj knjigovodstveni program, kao i nekoliko drugih djelatnosti poput evidencije radnog vremena registracijom ulaska i izlaska sa posla, te praćenja transporta u udaljene prodajne salone ili odjele. Kompanija takodjer ima mjesece u godini u kojim će se prodaja i proizvodnja odnosno transport udvostučuje u odnosu na prosječne mjesece. S druge strane kolektivni godišnji odmor kompanija ima svake godina u kojem se u kompaniji i poslovnicama drži samo minimalan broj zaposlenika. Prodaja je takodjer svedena na minimum što implicira da će zahtjevi za pristupom bazama podataka biti upolovljena od prosjeka.
–    U tu svrhu IT Serktor je planirao nabavku jednog servera na kojem se vrti Windows Server 2012 R2 Standard edicija, sa Instaliranim SQL Serverom 2012 Standard edicijom ili nekom od verzija Oracle. Kako se radi o najmanje 20 radnih mjesta koja trebaju da pristupaju bazi podataka potrebno je jos uračunati u 20 CAL ova.
–    Ne ulazeci u cjene pojedinih usluga investicija o kojoj se ovdje radi prelazi desetak hiljada maraka, kao i to da će u u pogledu realizacije projekta biti uključeno preko 10-tak zaposenika, kao i treće firme u uspostavljanju infrastrukture i umrežavanja.
–    Vrijeme potrebno za realizaciju ovog projekta kreće se i do mjesec dana, u koliko nabavka i instalacija opreme i infrastrukture bila dostupna na skladuištu dobavljača.
–    U pogledu ljudskih resursa potrebno je edukovana osoba za instalaciju hardvera, te osoba za instalaciju Windows i SQL Servera.
Ukoliko bi ovu istu uslugu zakupili u oblaku, cijeli projekat od početka do kraja trajao bi svega nekoliko minuta, a cjelokupan posao bi mogao izvrsiti u običan referent nabave. Dok će plaćanje biti samo za zakup SQL baze podatake, bez da kupuje Windows Server OS.
Kompanija u koliko se odluči kupiti uslugu SQL Servera u oblaku, kupiti samo uslugu zakupa SQL baze podataka, i to tako da će kupiti samo onoliko memorijskog prostora koliko joj je zaista potrebno. Ona to može učiniti na način da u prvoj godini naruči samo 1 GB bazu podataka jer očekuje da joj baza neće preći tu granicu.
Ovakav scenario je dosta čest u praksi, a predstavlja jedan od čestih scenarija kad kompanije odlučuje o prelasku na Cloud.

2.    Primjer zakupa Web Sajta

Pretpostavimo da kompanija želi da razvija svoj vlastiti web Sajt u kome joj je potrebno baza podataka koja će servisirati ovaj sajt, a takodjer biće joj potrebno i prošireni servisi poput slanja push notifikacija na mobilne telefone klijenata koji su pretplaćeni za određene usluge na sajtu. S druge strane, Web Sajt ima neravnomjeru posjećenost, te se u određenim vremenskim periodima očekuje iznimno velika posjećenost web sajtu. U periodu velike posjećenosti sajta, postojaće dnevni vremenski intervali od nekoliko sati u kojem se očekuje iznimno velika posjećenost. S druge strane web sajt će u određenim vremenskim periodima imati vrlo malu ili skoro nikakvu posjećenost u kojem se očekuje samo nekoliko posjetilaca dnevno. Mobilni servisi koji će biti dostupni na sajtu imaće mogućnost slanja informacija pretplaćenim korisnicima informacije u obliku push notifikacija na sve tri mobilne platforme: Windows Phone, Android te iOS. Očekuje se da će push notifikacije u početu imati vrlo malo korisnika, koji bi se vremenom postupno povećavali. Baza podataka koja će servisirati Web Sajt takodjer će vremenom zahtjevati sve veći memorijski prostor.
–    Ovakav scenario vrlo je čest i zahtjeva poprilično investiranje kako u infrastrukturu tako i softver. Pored hardvera kompanija mora voditi računa o internetskoj vezi koja može da zadovolji ovakav scenario.
–    Održavanje web sajta odnosno web servera pretstavlja značajnu stavku ovakog projekta. Potrebno je zaposliti barem jednog administratora da administrira ovaj web sajt. Isto tako zbog optimizacije troškova ovaj administrator mora da zna administrirati bazu podataka, kao i održavati ostale servise na serveru.
–    O financijskoj strani ovdje ne treba ni spominjati kao je projekat vrlo zahtjevan i iziskuje popriličnu sumu novaca.
–    Implementacije cjelokupnog sistema, u smislu instalacije, konfiguracije deploymenta i testiranja trajala bi najmanje mjesec dana testnog perioda, da bi se Web server podesio na optimalan način.
Kada bi ovakav scenaio trebali implementirati u oblaku, cjelokupna konfiguracija i deployment bi mogao trajati jedan dan, je usluga koja bi se mogla zakupiti za ovaj scenario nepredviđa nikakvu dodatnu instalaciju sistemskog softvera.
Internet pristup ovom sajtu je odgovornost provajdera u ovom slučaju Microsoft Data Centra koji garantira 99,9% dostupnost. Baza podataka bi se konfigurirala kao i u prethodnom slučaju, a povećavala bi se shodno potrebi.
Pri instalaciji web sajta u Oblaku nije potrebno razmisljati o web serveru, niti o protoku, on se dinamicki može podešavati, a placa se samo onliko koliko je potroseno.
Ista je situacija kada se kompanije odluči da hosta svoje web rješenje na neke od klasičnih hosting providera. U tom slučaju Cloud platforma je u prednopsti je je skaliranje rješenja odnosno rezervisanje resursa koje je potrebno fleksibilno u odnosu na standardne providere. Na Cloud platformi moguće je raditi AutoScaling gdje se je moguće postići optimalan balans izmedju resursa koje zakupljujemo i stvarnih potreba koje su potrebne da vaše rješenje bude dostupno klijentima.

3.    Primjer zakupa Virtualnih masina

Kompanija treba testno okruženje u kojem će testirati proizvod koji trenutno razvija. Za testiranje novog proizvoda potrebno je 3 Windows Server 2012 R2 koja su povezana u klaster. Na sve tri mašine potrebno je instalirati standardnu grupu alata. Konfiguracija klastera omogućuje nesmetan rad Workflowa koji vrše prenos podataka iz jednog sistema u drugi. Proizvod koji se testira predstavlja skup Workflowa koji se pokreću na nekoliko načina. Jedan od načina jeste preko slanja REST zahtjeva, drugi način predstavlja pokretanje od strane WCF servisa, dok treći način jeste da se Workflowi pokreću jednaput i vrte se u neprekidnoj petlji sa određenom pauzom između petlji.

On premise rješenje bez virtualizacije

  • U nekom od scenarija bilo bi potrebno kupiti 3 fizičke mašine,
  • Zatim mrežnu opremu i sve ostalo što ide uz to.

On premise rješenje sa virtualizacijom

  • Nabavka hardverske opreme dostatne da se može instalirati 3 vritualne mašine koje bi se povezale u klaster, a onda instalirali potrebni servisi, serverske komponente, te konfigurisalo okruženje.
  • Kupovina ostale opreme

U oba slučaja pitanje vremena realizacije ovakvog scenarija ne može biti manje od nekoliko dana. S druge strane, fizička oprema koju smo kupili ostaje u trajnom vlasništvu i kompanija trpi troškove održavanja bez obzira da li se oprema poslije koristi ili ne.

U oblaku ovaj scenario se implementira za nekoliko sati, zakupom 3 virtualne mašine, te zakupom i konfiguracijom virtualne mreže, koje bi se sinhronizirala sa mrežom kompanije. AD useri bi se mogli sinhronizirati. Cjelokupni procec bi trajao dosta kraće. Primjer instalacije jedne virtualne mašine sa Windows OS u Microsoft Azure ne traje više od 3 minute [13], pa se cjelokupni proces instalacije i konfiguracije smanjuje na minimum.

Ono što u ovom scenariju je najvažnije jeste to da kad više ne trebamo da testiramo rješenje, i onda kada više ne trebamo virtualne mašine, mi ih jednostavno obrišemo, a samim tim više nemamo nikakvih financijskih obaveza.

Zadnji primjer predstavlja plastičan primjer kako hardverska oprema koju kompanija treba privremeno može biti zamjenjena cloud servisima koje zakupimo na određeni vremenski period, a samim tim izbjegavamo kupovinu opreme koju poslije testnog perioda moramo skladištiti, održavati i čekati neki drugi projekat ili da je iskoristimo za neku drugu svrhu, ili da je prodamo pod polovnu opremu trećem licu.

Uvod i osnovni pojmovi Cloud Computinga

Cloud Computing (CC) ili kraće Cloud odnosno Oblak,  predstavlja aktivnost pri kojoj se klijentski uređaj (mobitel, tablet, PC, i dr.) putem interneta spoji na udaljeni računar, radi korištenja određenog cloud servisa. Najjednostavniji primjer korištenja oblaka jeste pregled mailova na poznatim mail serverima: Hotmail, Gmail i td. Primjer korištenja Skype usluge također predstavlja oblak, jer Skype usluga se nalazi na udaljenim serverima koji su globalno dostupni sa bilo kojeg uređaja: PC, tablet, mobitel, TV i sl. Iz primjera vidimo da se korištenje servisa na udaljenim serverima pojavio i prije nego što se Oblak pojavio kao usluga. Međutim, Oblak predstavlja mnogo širi i veći pojam, a navedeni primjeri čine samo jedan od mnogobrojnih servisa koje Oblak nudi.

Kada se govori o Oblaku važno je znati da kad nešto nije u Oblaku, kažemo da je „On Premise“ ili „On Prem“. „On Premise“ je engleski izraz kada  želimo kazati da je softver kojeg koristimo instaliran u zgradi odnosno prostoriji u kojoj se nalazimo.
Osnovni pojam Oblaka jeste „Cloud Servis“ ili prevedeno kao servis u oblaku, ponekad ćemo ga zvati samo servis. Cloud Servise predstavlja servis koji je dostupan korisniku preko pristupne tačke (en. endpoint) a smješten je u udaljenom datacentru,  kojem korisnik pristupa preko interneta.
Drugi jako čest pojam Oblaka jeste „Cloud Clients“ ili cloud klijenti koji predstavljaju konzumente cloud servisa. Cloud klijenti mogu biti desktop kompjuteri, laptopi, tableti, pametni telefoni, IoT (internet of things) uređaji odnosno svaki uređej koji posjeduju internet vezu i internet pretraživač mogu doprijeti do pristupne tačke cloud servisa. Neki od cloud servisa poput vistualnih mašina ili baze podataka zahtjevaju posebne aplikacije za pristup. RDP Remote Desktop Protokol aplikacija može se koristi pri pristupu udaljenih Windows ili Linux virtualnih mašina. Ili SQL Managment Studio za prstup SQL baze podataka.
Svaka usluga koja se naručuje od Cloud Providera isporučuje se u obliku cloud servisa, kojem je poznata pristupna tačke. Npr. ukoliko smo od Cloud Providera naručili virtualnu mašinu određenih karakteristika Cloud Provider nam je obezbijedio endpoit, u ovom slučaju ip adresu preko koje pristupamo toj virtualnoj mašini. U koliko smo zakupili bazu podataka u oblaku, cloud provider nam je obezbjedio pristupnu tačku u obliku stringa konekcije. Znači svaka cloud usluga isporučuje se u obliku cloud servisa kojem pristupamo preko pristupne tačke.
Pojam oblak (en. Cloud) predstavlja skup servisa smještenih na udaljenoj fizičkoj lokaciji, a koji su globalno dostupni s bilo kojeg uređaja pomoću Interneta. Servisi su instalirani u velikim datacentrima rasporedjeni na svim kontinetima i koji su međusobno povezani. Prema vrsti usluga koje Oblak nudi, Cjelokupnu Cloud Platformu možemo podijeliti na tri kategorije:
1.    Infrastruktura kao servis, (en.Infrastructure As A Service, IAAS),
2.    Platforma kao servis, (en. Platform As A Service, PAAS) i
3.    Softver kao servis, (en. Software As A Service, SAAS).

screen-shot-2015-06-09-at-2-13-05-pm1
Pored podjele prema vrsti usluga, Oblak se može podijeliti i prema vrsti isporuke (deployment):
•    Privatni Oblak, Private Cloud
•    Javni Oblak, Public CLoud
•    Hibridni Oblak,  Hybrid Cloud

Infrastruktura kao servis, IAAS

Osnovni način korištenja oblaka jeste kroz korištenje IAAS servisa. Kad kažemo IAAS servis prvenstveno se misli na korištenje virtualnih mašina u oblaku. Razvojem virtualizacijske tehnologije koja se danas ogleda kroz korištenje tri najpopularnije tehnologije VMWare, VirtualBOX  i Hyper-V virtualizacija je razvijena do savršentsva. Gotovo da ni ne postoji okolina i scenario da se preko pobrojanih tehnologija, u većoj ili manjoj mjerni, ne može virtualizirati. Ustvari bez razvoja virtualizacije oblak sigurno ne bih ni postojao danas.

Koncept IAAS sastoji se u korištenju hardverske infrastrukture u oblaku kroz korištenje virtualnih mašina, virtualnih mreža, i ostale infrastrukture. Cloud provideri koji nude ovu vrstu cloud servisa izgradili su cloud operativne sisteme koji podržavaju veliki broj virtualizacijskih mašina, koje se skaliraju prema zahtjevima korisnika. Skaliranje virtualnih mašina korisnik definiše kako na samom početku instalacije, tako i tokom samog korištenja mašine. Primjera radi Microsoft Azure omogućuje skaliranje virtualnih mašina na bilo kojem nivou i vremenu. A pored skaliranja, virtualne mašine se mogu povezivati u tzv. dostupne skupove (en. „aviability sets“) koji omogućavaju kontinualni prelazak na drugu virtualnu mašinu u slučaju pada sistema prve. Pored virtualnih mašina IAAS nudi dodatne resurse u obliku virtualnih diskova, blokova za pohranu podataka,  prostora za spremanje datoteka, firewallova, load balancers i sl.

Platform As A Service, PAAS

PAAS usluga u oblaku jedna je od najraširenijih i najpoznatijih usluga. PAAS usluga podrazumijeva da će cloud provider osigurati korisniku svu potrebnu hardversku infrastrukturu, operativni sistem, te skup softvera koji čini platformu, dok u domenu korisnika je obezbjeđenje aplikativnog softvera i podataka. Najbolji primjera PAAS usluge jeste baza podataka. Cloud provider obezbjeđuje svu potrebnu hardversku opermu, Operativni sistem, te platformu, koja je u ovom slučaju server baze podataka, to je najčešće Microsoft SQL Server, Oracle ili neki drugi server baze podataka. Kupac ovakve usluge ne treba da brine ni o hardverskim problemima, niti o zakrpama ili redovnim nadogradnjama kako za operativni sistem tako i za softver koji čini platformu, a koji se pojavljuju u toku korištenja ove usluge. Ono o čemu kupac u ovom slučaju vodi računa jeste klijentski softver koji pristupa bazi podataka kao i o samim podacima.

Software as A Servie, SAAS

Software as a service podrazumijeva kompletnu uslugu gdje cloud provider obezbijedjuje hardversku i mrežnu opremu, operativni sistem, i ostali potreni softver. Korisnik u ovom slučaju samo koristi preinstalirani softver, koji će koristiti podatke od korisnika. Najbolji primjer ovakve vrste cloud servisa jeste korištenje nekog od poznatih mail servisa, poput Outlook.com, GMAil.com i sl. U zadnje vrijeme sve više PAAS usluga se pojavljuje na internetu. Microsoft je nekoliko svojih najpopularnijih proizvoda osigurao kako na tradicionalan način tako i u obliku PAAS usluge. Najbolji primjer ovoga jeste Office365 koji predstavlja skup proizvoda iz familije Microsoft proizvoda poput Word, Excel, PowerPoint i sl. Drugi primjer ovakve usluge jeste Skype, Sharepoint i sl.

 

Objektno Orjentisano Programiranje- prvi dio


Objektno orijentisano programiranje (OOP) predstavlja način programiranja pri čemu se definišu objekti koji poprimaju osobine objekata iz realnog svijeta. Nastao na ovom konceptu, OOP s jedne strane proširuje funkcionalnosti osnovnih i izvedenih tipova na način da implementaciju enkapsulira (ugrađuje) u sami tip, dok s druge strane uvodi nove osobine tipova poput nasljeđivanja i polimorfizma koji daju nove funkcionalnosti i način implementacije. Sve tri paradigme OOP (enkapsulacija, nasljeđivanje i polimorfizam) čine objektno orjentisano programiranje efikasnije, lakše za kolaboraciju i održavanje te u većem dijelu rješava probleme proceduralnog programiranja.

Klase

Tipovi podataka u čistom OO jeziku poput C# označavaju se klasama, koje se mogu podijeliti na osnovne i izvedene tipove. Programski jezik poput C++, osnovne tipove ne tretira kao klase, dok klasama označava samo izvedene odnosno apstraktne tipove. Osnovne tipove poput integer, double, float, bool, char u čisto OOP jeziku zovemo klasama jer u sebi enkapsuliraju metode koje nam omogućuju rad nad samim tipovima, na isti način kako to radimo i sa izvedenim tipovima. Izvedeni tipovi su svi tipovi koji su definisani od strane programera.
U čistom objektno orijentisanom programskom jeziku ne postoji mogućnost izvršavanja koda koji nije dio neke klase, odnosno koji nije definisan unutar određene metode kao članice klase. S druge strane ovo implicira da se u objektno orijentisanom programiranju može izvršiti samo onaj kod koji je definisan unutar određene klase, odnosno instanciranjem objekta i poziva neke metode članice. Ovom činjenicom se shvata naziv objektno orijentisano programiranje, kao programirnje objekata.
Naravno, programski jezici nužno ne poštuju ovu strogu činjenicu, a pored toga imaju mogućnost izvršavanja koda izvan objekata klase. Kako je ranije naglađeno programski jezik koji ima ovakvu dualnu osobinu jeste C++. C++ programski jezik je objektno orijentisani jezik koji podržava sve osobine OO koncepta, dok istovremeno predstavlja klasični proceduralno orjentisani jezik. Zbog te činjenice danas C++ jezik predstavlja najrasprostranjeniji i najviše korišten programski jezik. Pogodan je kako za programiranje sistemskih komponenti operativnih sistema i drivera za uređaje, tako i za projekte zasnovane na poslovnoj logici. Deklaracija klase u C++ sa pripadajućim članovima možemo predstaviti u obliku prijera tipa Osoba.

class Osoba
{
    //konstruktori/destruktor klase
public:
    Osoba();
    ~Osoba();  

//clanovi klase /atributi
private:
	string  imePrezime;
	time_t  datumRodjenja;
	string  mjestoRodjenja;  

	//javne metode clanica
public:
	void Init (string ime, string datum);  

	//javne virtualne metode clanice
public:
	virtual string Status();
};

Prethodni listing predstavlja deklaraciju klase Osoba. Implementacija klase u smislu implementacije konstruktora, destruktora i metoda Init i Status nalazi se izvan tijela klase, a često u posebnoj cpp datoteci. Primjer implementacije klase Osoba vidimo na sljedećem listingu.

//defoltni konstruktor
Osoba::Osoba()
{
    imePrezime = "n/a";
}  

//destruktor klase
Osoba::~Osoba()
{
}  

//virtuelna metoda koja vraca status osobe
string Osoba::Status()
{
	return "Osoba";
}  

//postavljanje imena i datuma rodjenja osobe
void Osoba::Init(string ime, string datum)
{
	imePrezime = ime;  

	//konverzija string u datum
	struct tm tm = {0};
	strptime(datum.c_str(), "%d/%m/%Y", &tm);
	datumRodjenja = mktime(&tm);
}

Prethodni listing čini implementacija kontsruktora koji se poziva prilikom formiranja objekta Osoba, dok se implementacija dstruktora nalazi odmah iza. Metoda Init postavlja ime i datum rođenja za osobu, dok metoda Status vraća string sa nazivom vrste osobe.
C# i Java predstavljaju najpopularnije OO programske jezike pored C++, u kojima sve počinje sa objektima, i nije dozvoljeno definisanje metode izvan klasa. Specijalna metoda koja označava ulaznu ili početnu tačku zove se main metoda. Ovu metodu je dovoljno definisati u bilo kojoj klasi, a kompajler će je prepoznati kao početnu metodu i označiti je kao ulaznu tačku programa. Primjer listing 1 i 2 u C# izgledaju na slijedeći način:

public class Osoba
{
	//konstruktori/destruktor klase
	public Osoba()
	{
		imePrezime = "n/a";
}  

~Osoba()
	{  

	}  

	//clanovi klase /atributi
	private string      imePrezime;
	private DateTime    datumRodjenja;
	private string      mjestoRodjenja;  

	//javne metode
	public void Init(string ime, string datum)
	{
		imePrezime = ime;
		DateTime dat;
		if(DateTime.TryParse(datum, out dat))
			datumRodjenja= dat;
	}  

	//javne virtualne metode clanice
	public virtual string Status()
	{
		return "Osoba";
	}
};

Iz prethodnih listinga možemo vidjeti određenu razliku u deklarisanju i implementaciji klase i njenih članova. U C++ vidimo da je deklaracija i implementacija metoda članica klase razdvojena. Za razliku od C++ u C# deklaracija i implementacija klase u C# se ne razdvajaju, tako da se svaka metoda članica deklariše i implementira na jednom mjestu.