You are on page 1of 12

2016

INTERNA OBUKA

AUTOR: SLAVIMIR LJ. VESI

JKP BEOGRADSKI VODOVOD I KANALIZACIJA | DELIGRADSKA 28, 11 BEOGRAD

Sadraj
1. .NET framework, Visual Studio, C# - osnove ................................................................................................................. 2
1.1. Osnovni pojmovi ....................................................................................................................................................... 2
1.2. .NET Framework ...................................................................................................................................................... 3
1.2.1. CLR Common Language Runtime ................................................................................................................. 4
1.2.2. CTS Common Type System ......................................................................................................................... 11
1.2.3. CLS - Common Language Specification ......................................................................................................... 11
1.2.4 CLI Common Language Infrastructure .......................................................................................................... 11

1. .NET framework, Visual Studio, C# - osnove


1.1. Osnovni pojmovi
Uopteno govorei, okvir (eng. framework) je realna ili konceptualna struktura ija je namera da podri ili da
vodi razvoj izgradnje ili neega to iri strukturu u neto korisno.
Softverski okvir (eng. software framework) u irem smislu je platforma za razvoj softverskih aplikacija. On
obezbeuje osnovu na kojoj progameri programiraju, tj. prave programe za specifine platforme. U svetu raunara
platforma se najee odnosi na operativni sistem - OS (eng. operating system) raunara. Npr. ako pravite aplikaciju
za mobilne telefone iji je operativni sistem android, tada moete da kaete da pravite aplikaciju za android platformu.
Softverski okvir (eng. software framework) moe da sadri predefinisane funkcionalnosti koje mogu da se koriste da
procesiraju ulazno-izlazne operacije (eng. I/O), da upravljaju hardware-om i da imaju interakciju sa sistemskim softwareom. Dakle, framework moe da ubrza razvoj software-a, na nain da programeri ne izmiljaju toak svaki put kada prave
novu aplikaciju, ve da koriste apstrakciju u vidu framework-a koja obezbeuje generike funkcionalnosti.
Programeri mogu da menjaju generiki obezbeene funkcionalnosti framework-a i da ga prilagode specifinoj
upotrebi tj. software-u koji prave, bez obzira da li su u pitanju: konzolne aplikacije (terminal), aplikacije sa grafikim
korisnikim interfejson (eng. GUI), Web aplikacije, mobilne aplikacije i td. Softverski okviri najee sadre: programe,
kompajlere, biblioteke koda (eng. code library), skupove alata i API-je (eng. application programming interface) koji
svi zajedno obezbeuju razliite komponente da bi se omoguio razvoj softverskog projekta ili reenja.
Primer:
Predpostavimo npr. da je potrebno da iseete papir 5 X 5 metara. Vi to moete veoma jednostavno da uradite. Zamislite
nakon toga da vas pitam da je potrebno da iseete jo 1000 primeraka istih dimenzija. Umesto da premeravate 1000
puta, jasno je da ukoliko napravite okvir 5 X 5 metara, to e vam znaajno ubrzati posao. Dakle, vi ste definisali okvir
koji moe da radi zadatak tog tipa. Analogno, umesto da izvodite isti zadatak ponovo i ponovo za isti tip aplikacije, vi
kreirate framework imajui sve ove funkcionalnosti zajedno u jednom paketu i na taj nain obezbeujete apstrakciju vaoj
aplikaciji i to je jo vanije svim narednim kreiranim aplikacijama.
Framework je slian API-ju, iako tehniki framework ukljuuje u sebe API. Framework slui kao osnova za
programiranje, dok API obezbeuje pristup elementima koje podrava framework. API je skup komandi, funkcija,
protokola i objekata koje programeri koriste kada kreiraju software ili vre razmenu podataka sa eksternim sistemom.
API programerima obezbeuje operacije koje oni izvravaju preko standardnih komandi, na nain da ne moraju da piu
kod od nule. Npr. mobilni API-ji, obezbeuju komande za detekciju dodira na ekranu kao to su tipkanje, prevlaenje,
rotacija i td.
Softverski okvir (eng. software framework) u uem smislu, ukljuuje specifine framework-e unutar ireg
programerskog okruenja. Npr. vei broj Java framework-a, kao to su Spring, Java Collections Framework (JCF) mogu
da se koriste da kreiraju Java programe. Takoe Entity Framework, je tehnologija objektno-relacioniog mapiranja (eng.
ORM), ija je svrha da u .NET aplikacijama obezbedi entitete, tj. klase i njihove objekte koji su povezani sa tabelama u
SQL Server-u, Microsoft-ovim sistemom za upravljanje relacionionim bazama podataka (eng. RDBMS), i na taj nain
omogue razvoj .NET aplikacija koje rade sa bazama podatka bez potrebe da programeri moraju da znaju dva
programska jezika, C# i SQL i dve programerske paradigme objektno-orjentisanu i relacionu, ve da se kompletna
aplikacije isprogramira samo u C#, tj. da se koristi samo jedna programerska paradigma objektno-orjentisana.
Softverski okviri se oslanjaju na Holivudski Princip (eng. Hollywood Principle): "Don't call us, we'll call you.",
to znai da korisniki definisane klase, npr. nove podklase, primaju poruke od predefinisanih klase framework-a.

U daljem nastvaku u koristiti naziv framework, da bih oznaio softverski okvir o kojem u govoriti u nastavku, u ovom
sluaju .NET framework.

1.2. .NET Framework


.NET Framework je softverski okvir, razvijen od strane Microsoft-a, namenjen da radi prevashodno pod Windows
platformom.
Tokom 80-ih godina personalni raunari (PC), su koristili operativni sistem DOS (eng. Disk Operating System).
Kada se pojavio Windows operativni sistem, on je imao napredniji korisniki interfejs u odnosu na karakterni koji je imao
DOS, a to je grafiki korisniki interfesj GUI, a i radio je tako to se instalirao nad DOS-om. Aplikacije koje se izvravaju
u Windows-u zahtevaju Windows izvrno okruenje (eng. runtime environment). Aplikacije kao to je Word zahtevaju
Windows, i u tom periodu ste mogli preko DOS-a da pokrene Windows, napite svoj dokument u Word-u i zatvorite
Windows i nastavite da radite u DOS-u. Dakle, Windows aplikacije sadre konzistentan API za komunikaciju sa
drajverima (eng. drivers), ureajima (eng. devices) i td. Ljudi koju su razvijali drajvere za tampae u asemblerskom
jeziku u tom trenutku za DOS su izgubili posao, jer nije bilo vie potrebe da to rade jer je Windows u sebi imao sve te
drajvere interno. To je otprilike situacija 90-ih. Preimo sada u 2001. godinu, situacija je veoma slina, samo na drugi
nain. .NET se nalazi nad Windows operativnim sistemom, kao to se Windows nalazio nad DOS-om. .NET aplikacije
zahtevaju .NET izvrno okruenje. .NET aplikacije obezbeuju konzistentan API koji radi sa Windows-om, tipovima
podatka, strukturama podatka i td. Mnogi programeri iz ovog razloga vide .NET izvrno okruenje vide kao Windows
nad Windows-om ili operativni sistem unutar operativnog sistema koji obezbeuje vie servisa i mogunosti
aplikacijama i programerima. .NET obezbeuje okruenje koje rukuje sa tipove podataka, upravlja memorijom, rukuje
sa API-ima i jo mnogo toga. Pre .NET-a razvoj softvera je zahtevao znanje u veem broju tehnologija i alata za Windows
operativni sistem. Najee se koristio COM (eng. Component Object Model) programski model koji je omoguavao
programerima da naprave biblioteke koda koje mogu da se dele izmeu razliitih programskih jezika. Npr., C++
programer je mogai da napravi COM biblioteku koju je mogao da koristi programer u Visual Basic-u. Jeziki-nezavisna
priroda COM-a je bila veoma korina, ali COM je imao komplikovanu infratrukturu, nestabilan programski model i u tom
trenutku to je bilo jedino mogue na Windows OS-u. Bez obzira na kompleksnost i ogranienja COM-a, veliki broj
aplikacija su uspeno kreirane na ovaj nain. Danas, velika veina aplikacija za Windows se ne kreira preko COM
modela, ve se Desktop aplikacije, Web aplikacije, servisi i biblioteke ponovo upotrebljivog koda kreiraju upotrebom
.NET platforme. .NET obezbeuje objektno-orjentisani pogled na Windows, jer .NET framework grupie veliki broj
funkcionalnosti koje grupie u klase.
Programski jezik C# i .NET platforma su uli u upotrebu tokom 2002. godine, i vremenom su se razvijali i danas mogu
da podre mnoge ne-Windows platforme, kao to su Mac OS X i neke Linux distribucije. Neke vane karakteristike .NETa su:
Interoperabilnost sa postojeim kodom Postojee COM aplikacije mogu da se poveu sa postojeim .NET
software-om i obratno. Jo od 4.0 verzije .NET framework-a interoperabilnost je jo uproenija preko kljune
rei dynamic.

Podrka za vei broj programskih jezika .NET aplikacije mogu da se kreiraju sa veim brojem programskih
jezika (C#, Visual Basic, F# i td.).
Zajednika maina za izvravanje koda koju dele svi .NET-aware jezici Jedan aspekt ove maine (eng.
engine) je dobro definisan skup tipova koju svaki .NET-aware jezik razume
Integracija jezika .NET podrava nasleivanje (eng. inheritance) , rukovanje izuzecim (eng. exception
handling) i debagovanje (eng. debugging) koda. Npr., moete da definiete osnovnu klasu u C# - u, a zatim
da nasledite ovaj tip u Visual Basic-u.
Obimna biblioteka osnovnih klasa (eng. base class library) Ova biblioteka omoguava kao neki zaklon od
sloenosti API poziva niskog nivoa i nudi konzistentan objektni model koji koriste .NET-aware jezici.
Uproeni deployment model Za razliku od COM, .NET biblioteke nisu registrovane u sistemski registar
(system registry). .NET platforma dozvoljava viestruke verzije istog .dll a da postoji na istoj maini.
3

Tri osnovna koncepta u .NET-u su:


CLR Common Language Runtime
CTS Common Type System
CLS Common Language Specification

1.2.1. CLR Common Language Runtime


Sa programerskog stanovita .NET moe da se posmatra kao izvrno okruenje i obimna biblioteka osnovnih
klasa - BCL (eng. Base Class Library).
Izvno okruenje .NET-a se naziva CLR - Common Language Runtime. Osnovna uloga CLR-a je da locira,
uita i upravlja .NET objektima. CLR takoe vodi rauna velikom broju detalja niskog nivoa kao to su upravljanje
memorijom (eng. memory management), hostovanje aplikacije (eng. application hosting), koordirniranje nitima (eng.
coordinating threads) i sprovoenje osnovne sigurnosne provere (eng. basic security checks), type safety,
upravljanje izuzecima (eng. exception handling), skupljanje smea (eng. garbage collection), pored mnogih drugih
detalja niskog nivoa. CLR je virtuelna maina za Microsoft-ov .NET framework i upravlja izvravanjem .NET programa.
Svi programi napisani u .NET framework-u se, bez obzira na programski jezik, izvravaju od strane CLR-a.

1.2.1.1 Izvravanje .NET programa


Da bi smo videli kako se izvravaju programi u .NET-u, uporediemo izvravanje programa pre .NET-a i izvravanje
.NET programa. Pre nego to se pojavio .NET aplikacije pod Windows platformom su se razvijali programskim jezicima
Visual Basic 6 - VB6, C++ i td. Izvravanje programa pre .NET-a izgleda kao na slici 1.

VB 6

ne .NET aplikacija

VB6 kompajler

Assembly (.dll ili .exe)


Native Code / Machine
Code
Operativni sistem
slika 1. izvravanje programa pre .NET-a
Ukoliko koristimo VB 6 programski jezik i razvijemo aplikaciju i kompajliramo je, upotrebom kompajlera za jezik,
generisae se sklop (eng. assembly). Assembly ima ekstenziju .dll ili .exe, u zavisnosti od tipa aplikacije koju kreiramo.
4

Ovaj assembly u sebi sadri prirodni (eng. native code) ili mainski kod (eng. machine code), koji operativni sistem
moe da razume, jer razume samo nule (0) i jedinice (1). Problem ovog tipa aplikacija, jeste u tome to njihovi sklopovi
(eng. assembly) sadre mainski kod, koji je podeen za taj operativni sistem nad kojim je aplikacija kompajlirana.
Ukoliko bih uzeo sada taj assembly i pokuao da ga pokrenem nad drugim operativnim sistemom, npr. Linux-u on se
nee pokrenuti, jer taj assembly sadri prirodan kod za operativni sistem na kojem je inicijalno kompajliran. Dakle,
aplikacije nisu portabilne.
Pogledajmo sada kako se izvravaju .NET aplikacije. U .NET-u moete programirati u nekoliko programkih jezika C#,
Visual Basic, C++, J#, ali postoje i drugi jezici. Kada koristimo neki od pomenutih jezika i razvijemo .NET aplikaciju i
nakon toga kompajliramo, mi takoe dobijemo sklop (eng. assembly), ali ovaj sklop ne sadri mainski tj. nativni kod,
ve sadri IL (eng. Intermediate Language), koji se jo u literaturi naziva MSIL (eng. Microsoft Intermediate
Language) ili CIL (eng. Common Intermediate Language) ili upravljivi kod (eng. Managed Code). Tu je razlika izmeu
sklopova u aplikacijama pre .NET-a i sklopova .NET-a. Sklopovi pre .NET-a sadre nule (0) i jedinica (1). Ukoliko sada
pokrenete sklop (eng. assembly) koji je dobijen u .NET-u, operativni sistem ga nee razumeti i nee uspeti da ga
pokrene. To znai da je potrebno da bude neko izmeu koji e konvertovati IL (eng. Intermediate Language) u mainski
kod. To radi izvrno okruenje CLR - Common Language Runtime. Pogledajmo sliku 2.

C#

VB

C++

J#

drugi

.NET Aplikacija
kompajliranje upotrebom odgovarajuih
kompajlera (C#, VB, C++, J#)

Assembly (.dll ili .exe)


Intermediate Language (IL)

C
L
R

IL (Intermediate
Language)
JIT kompajler

Native code

Operativni sistem
slika 2. izvravanje .NET programa
5

Prilikom instalacije .NET-a na raunaru 2 vane komponente se instaliraju:


1. .NET Framework Class Library
2. CLR Common Language Runtime
CLR je srce izvrenja programa u .NET-u. Kada program pokuava da se pokrene, znamo da Intermediate Language
ne moe da bude razumljiv od strane operativnog sistema, dakle sklop (eng. assembly) se ne pokree nad operativnim
sistemom, ve postoji jo jedan sloj CLR. Unutar CLR-a, se nalazi jedna vana komponenta JIT kompajler (eng.
just-in-time compiler), koji uzima Intermediate Language kao ulaz i generie mainski kod, nativni kod (eng. native
code) koji moe da bude razumljiv od strane OS-a. Dakle, izvravanje .NET programa se sprovodi u 2 koraka:
KORAK 1 iz izvornog koda (eng. source code) u Intermediate language od strane odgovarajueg jezikog
kompajlera
KORAK 2 Intermediate language je konvertovan u nativni kod od strane JIT kompajlera, a JIT kompajler se
nalazi unutar CLR-a.
Dakle, CLR je izvrno okruenje (eng. runtime environment) za .NET aplikacije.
ta su prednosti u izvravanju programa na ovaj nain ?
1. portabilnost (eng. portability) dokle god platforma implementira CLR, .NET platforma moe da se pokrene,
zato to JIT kompajler na toj platformi preuzima odgovornost za konvertovanje IL-a u nativni kod koji ta platforma
moe da razume. Na ovaj nain .NET aplikacije su portabilne sa jedne platforme na drugu. CLR je virtuelno
okruenje koje to omoguava.
2. garbage collection - Ukoliko imamo klasu Customer i kreiramo objekat te klase u VB6 ili C++. Tada je memorija
rezervisana, tj. alocirana za taj objekat. Kada zavrimo sa upotrebom tog objekta, kao programer smo odgovorni
za oslobaanje, tj. dealociranje memorije za taj objekat. U suprotnom ono to se deava je memory overflow
exception, zato to objekat nije oien iz memorije i u nekom trenutku aplikacija e da pukne. U .NET-u taj
problem ne postoji vie. Kao programer vi koristite objekte i nakon toga zaboravite na njih. Garbage collection
isti te objekte iz memorije, koji vie nisu u upotrebi. Na taj nain kao programeri nismo odgovorni za upravljanje
memorijom (eng. memory management) i oslobaamo se posla koji je ranije bio neophodan. Dakle, garbage
collection radi automatsko upravljanje memorijom.
Pogledajmo sada kako izgledaju ekstenzije sklopova (eng. assembly). Napraviemo sada jednu konzolnu aplikaciju u
Visual Studio-u. Pokrenimo neku verziju Visual Studio-a, npr. Visual Studio 2013, Start -> All Programs -> Visual Studio
2013 -> Visual Studio 2013, kao na slici 3.

slika 3. Visual Studio 2013


6

Napravimo sada novu konzolnu aplikaciju: File -> New -> Project, kao na slici 4.

slika 4. kreiranje aplikacija


Otvara se dialog za kreiranje projekta. Sa leve strane ekrana odaberite jezik u kojem elite da programirate, npr. C#, a
odaberite tip aplikacije Console Application iz srednjeg dela. Pored toga, kreirajte folder C:\Obuka i odberite ga kao
lokaciju na kojoj elite da snimite aplikaciju, kao na slici 5 i pritisnite dugme OK.

slika 5. kreiranje konzolne aplikacije


Na taj nain je kreirana konzolna aplikacija, kao na slici 6. Ukoliko pogledate srednji deo ekrana vidite da je kreirana
klasa Program.cs, dok se unutar prozora Solution Explorer nalazi reenje (eng. solution) u kojem se nalazi konzolna
aplikacija ConsoleApplication1.
7

slika 6. konzolna aplikacija


Pogledajmo sada C# kod, klase Program.cs.
using
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
}
}

Dodajmo sada jednu liniju koda unutar Main() metode da odtampamo poruku na ekranu.
Console.WriteLine("Zdravo");
Tako da sada Main() metoda izgleda:
static void Main(string[] args)
{
Console.WriteLine("Zdravo");
}

Sada emo da Build-ujemo kod tako to emo desnim dugmetom mia kliknuti na Solution i odabrati opciju Build Solution,
kao na slici 7., na taj nain smo formirali sklop (eng. assembly). Nakon toga emo otvoriti folder gde se nalazi aplikacija
8

tako to emo kliknuti desnim dugmetom mia na ConsoleApplication1 i odabrati opciju Open Folder in FileExplorer.

slika 7. Build-ovanje Solution-a


Preko opcije OpenFolder in FileExplorer smo otvorili folder gde se nalazi reenje.
C:\Obuka\ConsoleApplication1\ConsoleApplication1
Nakon toga uite u folder bin, a u njemu u folder Debug, dakle na lokaciju:
C:\Obuka\ConsoleApplication1\ConsoleApplication1\bin\Debug
Primetiete fajl ConsoleApplication1.vshost.exe, koji nije nita drugo do sklop (eng. assembly).
Sa druge strane, ukoliko dodamo novi projekat tako to desnim dugmetom mia kliknemo na Solution i odaberemo opciju
Add -> New Project, kao na slici 8.

slika 8. dodavanje novog projekta u Solution


9

I nakon toga odaberemo jezik Visual Basic i tip projekta biblioteka klasa (eng. Class Library) i pritisnemo OK.

slika 9. kreiranje biblioteke klasa Class Library


Na taj nain smo kreirali projekat tipa Class Library u programskom jeziku Visual Basic i dodali smo ga u Solution. Vidimo
da klasa u Visual basicu ima ekstenziju .vb, dok klasa program u C# ima ekstenziju .cs. Ukoliko sada Build-ujemo taj
projekat i kliknemo na opciju Open Folder in FileExplorer i uemo u folder bin, a nakon toga u folder Debug, tako da je
putanja C:\Obuka\ConsoleApplication1\ClassLibrary2\bin\Debug, primetiemo .dll fajl ClassLibrary2.dll ili neki drugi sa
slinim nazivom. Dakle, razliiti tipovi aplikacija imaju razliite ekstenzije fajlova za sklopove (eng. assembly). Tako npr.
konzolne aplikacije imaju ekstenziju .exe, dok biblioteke klasa i Web aplikacije imaju ekstenziju .dll.
Sada emo pokrenuti konzolnu aplikaciju koju smo malopre napravili tako to emo levim dugmetom mia
oznaiti konzolnu aplikaciju ConsoleApplication1 i iz menija odabrati opciju Debug i stavku menija Start Without
Debugging, ili samo jednostavno na tastatuti pritisnuti CTRL + F5, kao na slici 10.

slika 10. pokretanje konzolne aplikacije


10

Prikazae nam se konzolna aplikacija, sa ispisom. Dakle, sproveli smo JIT kompajliranje iz IL u assembly-u u native
code upotrebom CLR-a.

1.2.2. CTS Common Type System


CTS - Common Type System definie kako se deklariu i koriste tipovi podatka i kako se upravlja njima u CLR-u i
takoe su vana podrka u izvravanju za integraciju izmeu vie razliitih jezika. CTS je pravljen da omogui
programima u razliitim programskim jezicima da jednostavno dele informacija. Tip podatka je opisan skupom vrednosti
tog tipa i dozvoljenim operacijama nad tim tipom. Npr. za tip podatka integer vrednosti mogu biti od 0 do 10 i td., a
operacije koje su dozvoljene su sabiranje, oduzimanje i td. Osnove funkcionalnosti CTS-a su:
utvrivanje okvira koji omoguava integraciju meu jezicima, type safety i visoke performanse u izvravanju
koda
da obezbedi objektno-orjentisani model koji podrava implementaciju mnogih programskih jezika
da definie pravila jezika koja moraju da se potuju, da bi objekti napisani u razliitim jezicima moglu da
interaguju jedan sa drugim
CTS takoe definie tipove podatka za objekte napisane u razliitim jezicima koji mogu da imaju meusobnu
interakciju
CTS takoe specificira pravila za vidjivost tipova i pristup lanovima tipa, npr. CTS otvruje pravila putem kojih
sklopovi formiraju oblast vidljivostu (eng. scope) za tip i CLR forsira pravila vidljivosti
CTS definie pravila za ureivanje nasleivanja (eng. inheritance) meu tipovima, virtuelne metode i ivotni vek
objekta
jezici koji su podrani u .NET-u mogu da implementiraju sve ili samo neke zajednike tipove podatka

1.2.3. CLS - Common Language Specification


Interakcija izmeu jezika se ostvaruje tako to objekti moraju da izloe svojim pozivaocima samo one karakteristike koje
su zajednike svim jezicima. Iz ovog razloga zajednika specifikacija jezika, CLS Common Language Specification,
koja je skup osnovnih karakteristika jezika je definisana. CLS pravila definiu podskup CTS-a, koji ima znatno striktnija
pravila. CLS omoguava i osigurava da interoperabilnost izmeu jezika je definisana skupom karakteristika na koju
programeri mogu da se oslone i koja je dostupna u razliitim jezicima.

1.2.4 CLI Common Language Infrastructure


CLI Common Language Infrastructure je open-source specifikacija razvijena od strane Microsoft-a i standardizovana
od strane ISO-a i ECMA-e koja opisuje izvravanje koda i izvrno okruenje koje omoguava jezicima visokog nivoa da
se koriste na razliitim raunarskim platformama bez potrebe da se ponovo piu za specifine arhitekture. .NET
Framework, open source Mono projekat i Portable .NET su implementacija CLI-a.

11

You might also like