петак, 17. јун 2016.

Događaji u C# programskom jeziku


Event – događaj u C# programskom jeziku je način da klasa ili objekat pruži obaveštenje drugim klasama ili objektima da se nešto važno dogodilo. Klasa koja generiše događaj naziva se publisher – izdavač dok klasa koja prima ili obrađuje događaj se naziva subcriber – pretplatnik. Klasa publisher definiše kad će se generisati događaj dok klasa subscriber odlučuje koja će se akcija preduzeti. Obično klasa pretplatnik sadrži čitavu listu metoda koji se pozivaju kad se izazove događaj i takve metode takođe zovemo subscribers - pretplatničke metode. Kada programeri rade sa događajima, uglavnom se to odnosi na programiranje aplikacije sa grafičkim okruženjem ili web aplikacijama, zato što su takve aplikacije vođene događajima. Na primer kad god vi kliknete na neku stavku u meniju ili neko dugme na formi mišem; vi zapravo aktivirate određeni događaj i na osnovu pokrenutog događaja se izvršava kod koji se nalazi u proceduri događaja za stavku menija ili dugmeta koje ste pritisnuli. Kako će ceo tok programa da se izvršava zavisi od događaja koje korisnik aktivira sve do izlaska iz aplikacije. Zato kažemo da su navedene aplikacije vođene događajima. Događaji se retko koriste u konzolnim aplikacijama ali i u njima mogu da imaju svoju primenu.


( Događaji u C# programskom jeziku )

Deklaracija događaja je jednostavna, stime da su događaji namenjeni da se koriste sa delegatima. Jednostavno tip događaja mora da bude delegat i zato ispred delegata mora da se nalazi ključna reč event. U .Net Framework-u su događaji bazirani na EventHandler delegatu. O delegatima čitajte ovde, a sintaksa za deklarisanje događaja je sledeća:


event DelegatDogadjaja imeDogadjaja;

Kao i kod delegate, pretplata na događaj se vrši operatorom +=

ImeDogadjaja += new DelegatDogadjaja (ImeMetode);

Dok se odjava, otkazivanje pretplate vrši operatorom -=

ImeDogadjaja -= new DelegatDogadjaja (ImeMetode);

Pre generisanja događaja se uvek proverava da li događaj ima null vrednost:

if (ImeDogadjaja != null)
{
    ImeDogadjaja.Invoke();

}

Događaje će te najbolje naučiti koristeći praktične primere. Pogledajte jedan od njih.

Praktičan primer događaja

четвртак, 16. јун 2016.

Delegati u C# programskom jeziku



Delegati su neka vrsta pokazivača na metode koji su objektno orjentisani i strogo tipizirani. Najjednostavnije rečeno delegat je referenca na metodu. Najlakše će te ih razumeti ukoliko zamislite da su delegati potpis metoda. Delegati vam omogućavaju da se logika vaše aplikacije u vašim metodama potpuno razdvoji od aplikacija koje su ih pozvale. Inače mnogi programeri ne shvataju zašto bi koristili delegate kad mogu pozvati metodu i ne vide njihovu svrhu. Delegati su predviđeni za situacije u kojima metodama želite da prenosite druge metode. Ja razumem da ste vi navikli da metodama prenosite podatke preko parametara ali ne i metode. Međutim postoje situacije u kojima će vaš metod umesto da za obradu podataka, poziva drugi metod i da bi situacija bila još komplikovanija vi čak i ne znate koji je taj drugi metod koji će se pozivati. Jer to možete znati jedino u fazi izvršavanja i zbog toga je neophodno pozivanje metode preko parametra i zato se koriste delegati.



( Delegati u C# programskom jeziku )

Delegati se često koriste kada radite sa nitima, klasama biblioteka i događajima. Delegate koje nameravate da koristite prvo treba da definišete. To u prevodu znači da vi definisanjem delegata saopštavate kompajleru koju vrstu metoda vaš delegat predstavlja. Svaki delegat se definiše unutar imenskog prostora ili klase. Zatim pravite jedan ili više primeraka tog delegata. Delegati mogu biti i sa i bez parametara. Sintaksa za delegata izgleda ovako; prvo se definiše delegat korišćenjem ključne reči delegate:

public delegate string ImeDelegata(string patrametar);

Delegat se može instancirati ovako:

public ImeDelegata mojDelegat = null;

Delegatu se može dodati referenca koristeći += operator:

mojDelegat += TestMetoda;

ili

mojDelegat = new ImeDelegata(TestMetoda);

Delegatu se takođe može ukloniti referenca koristeći -= operator:

mojDelegat -= TestMetoda;

Sve ovo vam može zvučati i izgledati nerazumljivo ali kad pogledate praktične primere upotrebe delegata, shvatićete koliko je to jednostavno. Ono što je najbitnije treba da razumete da se delegati izvršavaju dinamički; u toku izvršavanja; i da delegat može pokazivati na bilo koju metodu koja ima isti potpis kao i delegat. Pogledajte jednostavan primer kako se koristi delegat sa više metoda.

Primer upotrebe delegata

недеља, 12. јун 2016.

Generičke liste u C# programskom jeziku


Prvo sam vam objasnio šta su negeneričke kolekcije; pogledajte ovde; zatim sam vam pokazao šta su generici i kako se prave; pogledajte ovde; i sad su došle na red generičke liste s kojima možete sva tri posta zaokružiti u jednu veliku celinu o svim kolekcijama uopšteno. Sa poznavanjem kolekcija vaše programiranje ali i čitanje koda drugih programera će vam biti mnogo efikasnije. Mada i dalje ostajem pri tome da po pitanju pravljenja igrica, posebno za Windows Phone aplikacije ili UWP – Universal Window Platform aplikacije izbegavate kolekcije jer su skupe. U svakom slučaju testirajte. Ali za sve ostale vrste aplikacija, kolekcije jednostavno olakšavaju programerima kodiranje i smanjuju kod. Kolekcije su uglavnom povezane za rad sa podacima koji potiču iz baza podataka, klasa ili drugih datoteka; često su isprepletene sa drugim programerskim aktivnostima poput taskova, događaja, delegata ili jednostavno služe da ispune neku kontrolu u programima sa grafičkim okruženjem; poput ListBox-a ili ComboBox-a; ali u jedno možete biti sigurni; gde su kolekcije tu su i podaci i kad manipulišete sa podacima vi to jednostavno radite preko kolekcija.



( Generičke kolekcije olakšavaju programiranje )

Uglavnom, sve što važi za generike to važi i za generičke liste. Sve generičke liste se nalaze u imenskom prostoru System.Collection.Generic; sve su parametorizovane kako bi izbegle boxing i unboxing objekata i kad radite sa generičkim listama tada radite sa tipom podataka koje ste definisali; svi elementi u kolekciji moraju da imaju isti tip podataka; i sve generičke liste su takođe safe type. Tokom vašeg programiranja češće će te koristiti generičke liste nego što će te praviti svoje generike jer već postojeće generičke liste mogu da odrade mnogobrojne poslovne zahteve. I pored toga što neke generičke liste imaju isti naziv poput negenerički kolekcija; razlikuju se po tome što zahtevaju parametre pri samoj deklaraciji iste. Znači, generičke liste koristite kada znate koji tip podataka hoćete da koristi vaša lista i kad hoćete da svaki elemenat u kolekciji bude istog tipa.

Generička kolekcija List<>


недеља, 05. јун 2016.

Šta su generici i kako se prave?


Pod pojmom generici u većini slučajeva se podrazumevaju sve klase koje sadrži imenski prostor System.Collection.Generic. Često se generičke klase, generičke liste ili uopšteno sve generičke kolekcije svrstavaju pod pojmom generici, ali za iskusnije programere kad kažete generici to se uglavnom misli na generičke klase, metode, strukture i sve što zahteva parametre. Znači češće se misli na nešto što ste vi sami isprogramirali da bude generičko dok pod pojmom generičke liste se misli na generičke liste koje već postoje u imenskom prostoru System.Collection.Generic. U prethodnom postu „Negeneričke kolekcije u C# programskom jeziku“ sam objasnio šta su negeneričke kolekcije, koje postoje u System.Collection imenskom prostoru i dao sam vam jednostavan primer kako da pravite vlastitu negeneričku klasu iako se takve retko prave. Takođe sam vam naveo da su generičke kolekcije za razliku od negenerički kolekcija; one kolekcije koje su parametorizovane; znači moraju imati određen tip podataka i svi elementi u kolekciji moraju biti istog tipa podataka.


( Generici u C# programskom jeziku )


Jednostavno, generičke kolekcije koriste se kad želite da svi elementi u kolekciji budu istog tipa podataka i zato su type safe. Izuzetno su korisni kada želite da izbegnete hard kodirane tipove i ne morate da pamtite koja vrsta podataka se koristi. Takođe nemate potrebe ni za eksplicitnom konverzijom. To se sve odnosi i na generike i na generičke liste i uopšteno na sve generičke kolekcije. Inače pod pojmom generici ću se isključivo baviti pravljenjem vlastitih generički kolekcija. Vi ćete u vašim programima često koristiti već napravljene generičke liste iz klasa .Net-a, ali će te takođe često dolaziti u situaciju da sami pravite svoje generike. Još samo jedna napomena. Ukoliko pravite igrice, korišćenje uopšteno svih kolekcija se smatra skupo, uzima više memorije i može usporiti igricu, pa u tom slučaju preporučujem da izbegavate kolekcije iako programerima olakšavaju posao. Inače u poslovnim aplikacijama, kolekcije se koriste konstantno ali generičke kolekcije. Kada pokrenete Microsoft Visual Studio, primetiće te da se imenski prostor System.Collection.Generic insertuje u vašim aplikacijama dok to nije slučaj sa imenskim prostorom System.Collection. To vam je takođe znak da treba da koristite generičke kolekcije ako već koristite kolekcije.

Generička klasa sa jednim parametrom

понедељак, 30. мај 2016.

Negeneričke kolekcije u C# programskom jeziku


Verovatno se sećate šta su nizovi iako sam nizove opisao među prvim postovima C# programskog jezika; pogledajte ovde. Za razliku od nizova kolekcije su vam veći progres od nizova i mnogo se više koriste u programiranju. Tačnije kolekcije predstavljaju skup objekata kojima je moguće pristupati elemenat po elemenat. To u praksi znači da je kolekcija set objekata kojima se pristupa korišćenjem petlje foreach. Razlika između nizova i kolekcija je pre svega u tome što u većini nizova unapred trebate odrediti veličinu, dok to sa kolekcijama nije slučaj. Kolekcije imaju mnogo više funkcionalnosti nego nizovi. Ali pogledajte prvo od čega se sastoji kolekcija.



( Grafički prikaz kolekcija u C# programskom jeziku )

Kolekcije se nalaze u imenskom prostoru System.Collection. Mogu da budu generičke i negeneričke. Generičke kolekcije su parametorizovane, znači moraju imati određen tip podataka i svi elementi u kolekciji moraju biti istog tipa. Generičke kolekcije se za razliku od negenerički kolekcija nalaze u imenskom prostoru System.Collections.Generic i omogućavaju vam type safe i nemate potrebe za konverzijom vaših podataka. Dok negeneričke kolekcije rade sa tipom podataka object. Na taj način vi negeneričke kolekcije možete koristiti da u njih smestite podatke različitog tipa podataka koje možete kasnije koristiti konverzijom istih kastingom. Negeneričke klase nisu type safe i retko se koriste. Svaka kolekcija da bi uopšte bila kolekcija pre svega mora da implementira enumerator koji može da prođe kroz sve elemente u kolekciji. To u prevodu znači da svaka kolekcija koristi interfejse IEnumerable ili interfejs ICollection koji je izveden iz interfejsa IEnumerable dok se obadva interfejsa nalaze u imenskom prostoru System.Collections. Interfejs ICollection koriste sofisticiranije kolekcije, dok vi takođe možete u vašim klasama koristiti koju hoćete. Međutim neke kolekcije koriste i interfejse IList, negeneričku kolekciju stavki kome se može pristupiti preko indeksa ili IDictionary negeneričku listu parova kojima se pristupa kroz ključ ili vrednost. Vi i sami možete da pravite čak vaše kolekcije ukoliko nasledite apstraktnu baznu klasu CollectionBase u vašu klasu. Kolekcije se deklarišu instanciranjem jer kolekcije jesu klase i isto se deklarišu:

Kolekcija MojaKolekcija = new Kolekcija ();


Posle deklaracije možete da vašoj kolekciji dodajete elemente, menjate, brišete i druge aktivnosti u zavisnosti kakvu kolekciju koristite. Negeneričke liste su vam ArrayList, Queue, Stack, Hashtable i SortedList. Pa krenimo redom.

ArrayList kolekcija


петак, 27. мај 2016.

Asinhrono, async i await višenitno programiranje

Dolaskom C# programskog jezika verzije 5, u C# programski jezik su uključene dve nove ključne reči async i await, dve komande koje ne idu jedna bez druge. Laički rečeno, tamo gde vidite da je metoda definisana sa async, u toj metodi trebate imati i ključnu reč await. Njihova magija je u tome što one omogućavaju višenitno programiranje ali bez direktnog formiranja niti. Sve do pojave asinhronog programiranja, svi vaši .Net programi bez dodatnog programiranja su sve operacije izvršavale sekvencijalno. To u prevodu znači da su se operacije izvršavale jedna po jedna i svaka operacija je morala čekati da se svaka prethodna operacija izvrši do kraja. Kad god napravite aplikaciju poput Windows Form, ona poseduje samo jednu nit; Main thread – glavnu ili UI nit; i sad zamislite da u toj niti koristite I/O operaciju. Vaš Windows će tada čekati dok vi pristupate nekom fajlu na hard disku ili mreži dok god se vaša operacija ne izvrši do kraja. Zbog toga Windows pauzira vašu nit tako da on ne koristi ni jedan CPU resurs ali na taj način zadržava memoriju.


( Asinhronizovano programiranje )

Asinhrono programiranje je jednostavno rešilo ovaj problem, jer asinhrono programiranje za razliku od sekvencijalnog ili sinhronog programiranja vam omogućava da vi pokrenete neku metodu i nastavljate da radite neki drugi posao dok se metoda ne završi. Inače sa sinhronim programiranjem pokrećete neku metodu; morate da čekate da se metoda izvrši do kraja; prosledi vam se neki rezultat i onda se nastavlja vaše izvršavanje programa. Danas se u programiranju koristi i jedna i druga varijanta u zavisnosti da li radite sa I/O operacijama ili jednostavno vam je potrebno više vremena da se izvrši neka metoda. Danas celi koncept Funkcionalnog programiranja je daleko bolji kad se radi preko asinhronizovani delegata, dok na primer UWP ili Phone aplikacija bez asinhroni metoda je nezamisliva jer svaka metoda koja radi duže od 2 sekunde je neprihvatljiva. Asinhrono programiranje se koristi kad imate kompleksne upite koje uzimaju dosta vremena, šaljete email-ove ili radite sa fajlovima. Nadam se da vam je sad jasno koliko je asinhrono programiranje bitno, ali takođe treba da znate da asinhronizovano programiranje nije lako jer se vi morate pobrinuti da ništa ne krene pogrešno, takođe je komplikovano debugovanje i održavanje istog. Ključnu reč async koristite da markirate metodu za asinhronizovanu operaciju. Na taj način vi samo dajete signal vašem kompajleru da će se nešto asinhronizovano desiti. Kompajler tada transformiše vašu kod u programersku C# paradigmu koju zovemo state machine. Znači pokreće sinhronično trenutnu nit, ali vam omogućava da vašu metodu razdvojite u više delova. Kad koristite await ključnu reč, kompajler će generisati kod koji će te videti bez obzira da li je vaša asinhronizovana operacija završena. Ako se vaša metoda samo sinhronizovano nastavlja, u prevodu nije završena; onda će state machine spojiti sa kontinuiranom metodom koja će se pokrenuti kada se task završi. Prepustiće kontrolu pozivajućoj niti i ta nit će se moći koristiti za drugi posao. Imajte u vidu da asinhronizovana metoda može da vrati rezultat samo kao void, Task i Task<T>.

Kako izgleda neki praktični primer asinhronog programiranja?


понедељак, 23. мај 2016.

Šta je to Moj Profit Sistem?

Sve dok učite, programirate iz hobija, bavite se kreativnošću i ne tražite nikakav novac za vaš trud i rad ili pak uspevate da i nešto naplatite kroz rad u nekoj kompaniji gde je vaš posao isključivo programiranje, dizajn, grafika, data, serveri, možda animacije i specijalni efekti; možda dobro prolazite i kao freelancer; možete reći sebi da poprilično uživate u poslu kog volite. Međutim, šta ako želite da isprogramirate neku vašu aplikaciju ili igricu; šta ako želite da napravite vaš proizvod ili uslugu koju će te prodavati drugima ili šta ako jednostavno želite pokrenuti vlastiti startup i vlastitu firmu? Tada morate ući u jedan sasvim drugi svet; svet preduzetništva, liderstva, istraživanja, marketinga, prodaje i radom sa klijentima. A gde su tu još druge veštine poput oratorskih sposobnosti i držanja govora pred masama ljudi? Sve to od vas zahteva ogroman napor, rizik, poznavanje poslovanja, izlazak iz komforne zone ali i ogromna materijalna sredstva.



Moj Profit Sistem je mesto gde će te naći pre svega stručnjake, agencije, vebinare, kurseve, konsultante i ljude različitih stručnih i poslovnih profila. Moj Profit Sistem bar za sada nije mesto gde učite kodiranje ali je definitivno mesto gde učite sve ostalo. Posebno je naklonjen ljudima koji rade za bilo koju MLM kompaniju ili se bave bilo kojom vrstom marketinga i prodajom. Moj Profit Sistem je sistem kakav dosad nije viđen u Srbiji i regionu ali vam je dostupan na srpskom jeziku. Često me ljudi koji čitaju moj blog pitaju gde mogu pronaći neki dobar kurs za Facebook, kako da koriste Snapchat, Google AdWards, Google Analytics, kako da naprave prodajnu stranu, email listu i mnoštvo drugih stvari. Odgovor je vrlo jednostavan, sve to možete pronaći na Moj Profit Sistemu. Tamo su ljudi i stručnjaci za takva pitanja, tamo su kursevi i tamo se možete konsultovati sa agencijama i stručnjacima koji se godinama bave sa takvim rešenjima i kome je to posao da znaju. Naravno, sve to ima svoju cenu ali ta cena nije ni približna koliko vas neznanje u poslu može da košta. Mi programeri jesmo ljudi specifičnog razmišljanja, volimo da znamo svaku klasu i metodu kako radi ali takođe znamo da neke stvari je bolje da nam neko drugi odradi ili pomogne. Ono što većina programera ne zna, ali znaju softver inženjeri na velikim projektima; da u jednom velikom projektu programiranje je samo 6% troškova kompanije dok bagovi i greške mogu da koštaju i do 65% sredstava celog projekta i pored dobro plasiranog proizvoda na tržište. U preduzetništvu greške su još rizičnije i brzo vas mogu dovesti do bankrota. Igrica za prodaju se ne pravi pre nego što se ne ispita tržište i verovatnoća prodaje iste. Na marketingu i prodaji se greške najviše plaćaju. Moj Profit Sistem vam neće rešiti sve probleme i troškove poslovanja; ali će vam definitivno olakšati i rešiti mnoge komplikacije i uštedeti i vreme i materijalna sredstva. Ja sam zahvaljujući odličnom stručnom timu ljudi u Moj Profit Sistemu i odličnim gostima na vebinarima toliko toga naučio za tako kratko vreme o poslovnom svetu i stvarima za koje nikad nisam ni pomislio niti čuo; da preporučujem svakom da se registruje ovde. Ulaganje pre svega u samog sebe, lični razvoj i edukaciju se uvek isplati.

Da li ja mogu da ponudim u Moj Profit Sistem okruženju moje usluge i ono čime se ja bavim?