Category Archives: Programiranje

Polimorfizam ili Switch?

U poslovnim aplikacijama često se javlja potreba za sličnom funkcionalnošću nad entitetima različite vrste u sistemu. Na primer, u trgovini postoje različiti tipovi dokumenata, kalkulacije (ulaz robe), transferi (izlaz robe), nivelacije (promena cena), koji su po podacima koje sadrže vrlo slični. Nad ovim dokumentima se izvršavaju i istoimene akcije: import, eksport, knjiženje, posledice akcija zavise od tipa dokumenta. Kada se knjiži ulaz robe, pored kreiranja odgovarajućeg dokumenta, menjaju se količine robe na stanju, kada se knjiži promena cena, jasno je da se ne menjaju količine robe, ali se zato ažurira cenovnik. Verovatno u glavi već imate primer iz industrije kojom se trenutno bavite.

Cilj je rešenje poslovnog problema ovog tipa, ali i kôd organizovan tako tako da bude što lakši za održavanje i proširivanje. Idealno je rešenje koje dozvoljava da se doda novi slučaj, tj. u našem primeru novi tip dokumenta, ali i nova akcija, na primer izvoz u excel, bez ili sa što manje izmena na postojećem izvornom kôdu. Ovaj problem je poznat i dovoljno čest da je dobio i ime The Expression Problem.

Prikazaću primer rešenja u strukturnom, uz pomoć jedne klase i switch strukture, i objektno orijentisanom pristupu, koristeći polimorfizam i neku vrstu naivnog factory pattern-a. Da bi kôd bio jednostavniji neću koristiti inicijalni primer iz trgovine, već standardne kuce i mace. Dakle, pravimo softverski model koji ce opisati životinje, dovoljne su nam dve vrste Cat i Dog, koje imaju ime Name, i dve funkcije Walk i Talk.

Ukoliko želite da pratite priču kroz kôd, solution sa primerima u C# možete skinuti ovdesadrži četiri projekta, svaki je samostalna konzolna aplikacija sa primerom. Potrebno je da na računaru imate instaliran Visual Studio 2010. 
dalje…

Sign .NET Assembly with Strong Name

Znate da .NET omogućava da digitalno potpišete svoj kôd?

Zašto potpisujemo dll-ove?

Želimo da onemogućimo izmenu asemblija, npr. izmenu naziva ili verzije, ili izmeni samog kôda.

U nekim slučajevima je bitno da identifikujemo da je dll koji koristimo baš taj koji očekujemo. Ukoliko je biblioteka koja proverava da li je validna licenca našeg softvera u posebnom dll-u, relativno je lako podmetnuti drugi dll sa istim potpisom (klasama, metodama…) koji bi uvek vraćao da je licenca validna.

Digitalni potpis

Ideja digitalnog potpisa je da omogući primaocu proveru integriteta podataka koji potiču od pošiljaoca. Pošiljaoc, koji je i potpisnik podataka, ima par kriptografskih ključeva, javni ključ i privatni ključ. Primaocu je dostupan samo javni ključ, što je dovoljno da potvrdi da je poruku, tj. podatke koje je poslao pošiljaoc primio u izvornom obliku. Postoje različiti načini da se implementira digitalno potpisivanje, implementacija Strong name .NET Framwork-a se oslanja na RSA algoritam za enkripciju/dekripciju i SHA-1 heš funkciju.

dalje…

Matematika i programiranje?

Dva događaja su me motivisala da napišem nešto na ovu temu. Naivno pitanje svežeg studenta elektrotehnike da li mu je potrebno da zna logaritme i trigonometrijske funkcije da bi bio dobar programer. Nešto posle tog incidenta, na predavanju o ms sql-u, predavač je pitao da li znamo šta je faktor grupa, gde se slušaoci, profesionalni programeri, nisu baš proslavili. Kao programer, koji je dogurao do zvanja diplomirani matematičar, pronalazim se u ovoj temi. Koliko je znanje matematike potrebno profesionalnom programeru, ako je uopšte potrebno?
dalje…

.NET Enumeration Types & WPF

U prethodnom postu smo se bavili osnovama enuma u C# .NET okruženju. Za efektnu prezentaciju najzahvalnije je napraviti primer koji ima dopadljiv korisnički interfejs, rešio sam da zakačim naše enume na WPF formu. Za ovu akciju je bilo potrebno malo više truda nego što sam se u prvi mah nadao, ali sam sasvim zadovoljan postignutim, što bi rekli ameri: „No pain, no gain“.

Ideja

Želimo da zakačimo (bind) vrednost enuma na grupu chekbox-ova koji omogućavaju prikaz i ažuriranje vrednosti na elegantan način. Enumom smo definisali dane u nedelji, a naša promenljiva predstavlja dane kojima se održava sastanak razvojnog tima. Pa da definišemo naš enum (Enum.cs):

   [Flags]
   public enum Days : byte
   {
      None = 0x0,
      Sunday = 0x1,
      Monday = 0x2,
      Tuesday = 0x4,
      Wednesday = 0x8,
      Thursday = 0x10,
      Friday = 0x20,
      Saturday = 0x40,
      WorkingDays = Monday | Tuesday | Wednesday | Thursday | Friday,
      All = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
   }

dalje…

.NET Enumeration Types

Nabrojivi tipovi ili Enumeration Types su jedan od osnovnih pojmova u .NET jezicima. Iako se relativno često koriste, dešava se da previdimo neke njihove mogućnosti. Rešio sam da malo detaljnije ispitam šta sve može da nam ponudi ovaj poznati koncept.

Enumi su tipovi podataka koji nam omogućavaju da, praktično, dodelimo nazive skupu celobrojnih vrednosti (preciznije vrednostima integralnog tipa). Cilj je brži i jednostavniji razvoj i kasnije održavanje, odnosno čitljivost i jasnoća koda koju dobijamo korišćenjem enum tipova umesto konstanti. Korišćenjem enuma definisali smo listu dozvoljenih vrednosti, dobili IntelliSense podršku i još neke prednosti u odnosu na korišćenje numeričkih konstanti.

dalje…