You are on page 1of 26

Objektno orijentisano

programiranje 2

Platforma . NET

Literatura

Watkins, D., Hammond, M., Abrams, B.,


Programming in the .NET Environment,
Addison Wesley, 2002.
Jones, A., Freeman, A., C# for Java
Developers, Microsoft Press, 2002.
Stutz, D., Neward, T., Shilling, G., Shared
Source CLI Essentials, OReilly, 2003.
Microsoft C# Language Specification, Microsoft
Press, 2001.
Platforma .NET

17.04.2012.

Uvod
Jezik C# je definisan u Microsoftu, ali je standardizovan (ECMA-334)
Internacionalni standard: ISO/IEC 23270:2006
Multijezika .NET platforma

osnovica za razvoj i izvrenje programa na C#


C# nije jedini jezik za razvoj aplikacija za .NET platformu

U osnovi slina ideja kao kod Jave:

C# se prevodi u meukod
meukod se ne interpretira,
ve se JIT prevodiocem prevodi u toku izvrenja

Platforma .NET

17.04.2012.

Motivacija
Od pojave Jave (1996),
znaajne promene na polju mogunosti i korienja IT:

eksplozija Interneta
raspoloivost visoko-propusnih veza za firme i individualne korisnike

velike promene u projektovanju softverskih sistema preduzea


tanki klijenti, vieslojni serveri

razvoj i usvajanje otvorenih standarda za podrku integracije sistema


XML iroko prihvaeni standard za reprezentaciju i razmenu podataka

ekspanzija inteligentnih ureaja


mobilni telefoni, PDA, konzole za igre

porast raspoloivih besplatnih softverskih alternativa


open source inicijativa

kompanije su pojaale naglasak na usvajanju tehnologija u interakciji B2C i B2B


eksplozija interesovanja za Veb servise u komunikaciji izmeu preduzea i potroaa

Platforma .NET

17.04.2012.

Istorijat
Anders Hejlsberg, glavni arhitekta za C#

1996. preao iz Borlanda u Microsoft


tvorac Turbo Pascal-a, glavni arhitekta za Borland Delphi

Januar 1999. zapoet razvoj, pod imenom jezika "Cool"


11.07.2000. Microsoft najavljuje .NET radni okvir

za objedinjenje jezika za Web namene

Sredinom 2000. Microsoft podnosi predlog standarda C#

organizacija ECMA (European Computer Manufacturers Association)

13.12.2001. ECMA standardizuje C# (334) i CLI (335)


Trenutno aktuelne ECMA specifikacije:

4. izdanje C# (Jun 2006., C# v2.0) i 5. izdanje CLI (Decembar 2010.)

Standardi meunarodne organizacije za standarde:

ISO/IEC 23270:2006 (C#) i 23271:2012 (CLI)

Aktuelne verzije .NET (Microsoft): C# v4.0 (2010.), CLR v4 (2010.)

CLR v4.5 Beta (Windows 8, VS 2011 beta)


Platforma .NET

17.04.2012.

Ciljevi
Microsoftova elja da izae na trite:

softverskih sistema za preduzea iroke skale (large-scale enterprise systems)


Internet i distribuiranih sistema
mobilnih ureaja

Potreba za integrisanom platformom za

kreiranje
distribuciju i
izvrenje aplikacija

Radni okvir (platforma) .NET

platformska nezavisnost (naelno)


jezika neutralnost
racionalizacija i konsolidacija tehnologija
integracija sistema korienjem XML-a
ekvivalent Java platformi koji se sastoji od
skupa klasnih biblioteka
izvrnog okruenja (odgovara JVM)

Platforma .NET

17.04.2012.

Platformska nezavisnost
Java slogan "pii jednom, izvravaj svuda

JVM, J2SDK za veinu platformi

Nedostatak

nemogunost korienja specijalizovanog hardvera i mogunosti OS

.NET drugaiji pristup:

izgraen na Windows platformi i podrava osobine Win32 API


definisan PAL (Platform Adaptation Layer)
definie koriene Win32 API pozive

CLI (Common Language Infrastructure)


zajednika infrastruktura za razne jezike

ECMA standardizuje CLI (osnova PAL)

implementacija PAL je mogua za bilo koju platformu,


preslikavanjem Win32 API poziva

JVM iroko raspoloiva, de facto standard


CLI standard

Platforma .NET

17.04.2012.

Rotor i Mono
Rotor

realizacija ECMA CLI u vidu deljenog izvornog koda (shared source) - SSCLI
nije zasnovan na izvornom kodu komercijalnog .NET okruenja
sponzor projekta Microsoft
sadri podskup mogunosti radnog okruenja .NET
Iskljueni vani elementi za profesionalnu upotrebu:
pristup bazama podataka (ADO.NET)
alati za kreiranje grafikih korisnikih interfejsa (Windows Forms)
mehanizmi za pisanje serverskih aplikacija (ASP.NET)

iskljuivo je namenjen nekomercijalnim aplikacijama


ne moe se koristiti za razvoj proizvoda koji su konkurencija

raspoloiv za Windows i FreeBSD

Mono

sponzor: Novell (inicijalno), Xamarin


otvoreni kod, nema ogranienja za primenu
raspoloiv za Linux, Windows, Mac OS, Solaris, iOS, Android i druge OS
Platforma .NET

17.04.2012.

Jezika neutralnost
Java je u poetku bio jedini jezik Java platforme (JVM)

kasnije i drugi jezici koji se prevode u bytecode, npr. Jython (Python), Scala,

.NET platforma je osmiljena kao jeziki neutralna

aplikacije i komponente se piu na raznim jezicima

Opti sistem tipova CTS (Common Type System)


Opta specifikacija jezika CLS (Common Language Specification)
Programi pisani na svakom jeziku koji potuje CLS,
a kreira i koristi CTS tipove se mogu izvravati na .NET platformi

C#, VB, C++, J# (Java), A# (Ada), L# (Lisp), P# (Prolog), ...

Postojei jezici koji se prilagoavaju .NET platformi malo menjaju sintaksu

Visual Basic i Visual Basic.NET nisu identini jezici


C++ za .NET (upravljani C++) razlikuje se od std. C++ (Managed Extensions)

.NET je prilagoen OO jezicima, proceduralni jezici se teko adaptiraju

ipak, postoji ak i COBOL.NET, kao i funkcionalni jezici kakav je SML

Platforma .NET

17.04.2012.

MSIL i JIT prevoenje


Izvorni program na nekom viem jeziku se prevodi u MSIL
MSIL (Microsoft Intermediate Language)

meukod (odgovara bajtkodu)

MSIL instrukcije se prevode u toku izvrenja programa

u instrukcije mainskog jezika domaina u toku izvrenja


JIT prevoenje (Just-In-Time Compilation)

Nije mogua interpretacija MSIL

JIT prevoenje se ne moe iskljuiti


razlika u odnosu na Java platformu,
gde je prvobitno zamiljeno da se bajtkod interpretira

Standard CLI definie CIL (Common Intermediate Language)

10

Platforma .NET

17.04.2012.

Izvrno okruenje (CLR)


Izvrno okruenje CLR (Common Language Runtime)
je odgovorno za:

upravljanje izvrenjem koda


JIT prevoenje
obezbeivanje kljunih usluga
automatsko upravljanje memorijom
izvravanje vie konkurentnih niti
bezbednost i sigurnost
integraciju sa operativnim sistemom raunara-domaina

CLR se startuje automatski kada se neka .NET aplikacija pokrene


Standard CLI definie VES (Virtual Execution System)

11

Platforma .NET

17.04.2012.

CTS i CLS
Zajedniki sistem tipova

CTS (Common Type System)


definie kako se tipovi deklariu, koriste i upravljaju u vreme izvrenja
osnova za pisanje tipova u jednom jeziku koji e se koristiti u drugom

Zajednika specifikacija jezika

CLS (Common Language Specification)


objekti kreirani u razliitim jezicima moraju ispoljavati prema klijentima
samo one karakteristike koje su zajednike za sve jezike
Primeri:
globalna statika polja i metodi nisu CLS-prilagoeni
pre pristupa nasleenim podacima,
konstruktor mora da pozove konstruktor bazne klase

12

komponentama koje potuju CLS se garantuje


da e biti upotrebljive od drugih komponenata
Platforma .NET

17.04.2012.

Biblioteka klasa
Tipovi u biblioteci podravaju CTS
i mogu se koristiti iz jezika iji prevodilac potuje CLS
Raspon .NET biblioteka klasa je slian rasponu biblioteke klasa za Javu
Oblasti koje pokrivaju tipovi biblioteke klasa:

13

osnovni tipovi podataka i izuzetaka


ulaz/izlaz
rad sa nitima i konkurentno programiranje
rad preko mree i distribuirano programiranje
refleksija (introspekcija) tipova
sigurnost platforme i aplikacije
integracija sa operativnim sistemom domaina
servisi za konstruisanje korisnikog interfejsa
pristup bazama podataka
XML Web servisi

Platforma .NET

17.04.2012.

Alati za razvoj i jezici


Alati za rad iz komandne linije:

.NET SDK (odgovara J2SDK)


besplatni, mogu se koristiti i za razvoj komercijalnih aplikacija

Alat sa integrisanim okruenjem (IDE Integrated Development Environment):

Visual Studio.NET (Microsoft)


komercijalno raspoloiv uz besplatnu Express varijantu
izuzetno doprinosi produktivnosti u odnosu na alate iz komandne linije
integrisanost sa .NET platformom i .NET serverima (MS SQL Server, MS IIS)

Viejezina podrka fundamentalni cilj CLR


Jezici koje podrava Visual Studio .NET:

C#.NET, Visual Basic.NET, Visual C++.NET, Visual J#.NET, F#.NET, JScript .NET

Drugi jezici za .NET:

14

dugaka lista (http://en.wikipedia.org/wiki/List_of_CLI_languages)

Platforma .NET

17.04.2012.

Integracija platformi
Preduzea se esto opredeljuju izmeu dve platforme: Java i .NET
Ponekad obe platforme figuriu u istom preduzeu

delovi sistema rade na razliitim platformama


neophodna je integracija platformi

Reenje za integraciju platformi otvoreni standardi:

XML za reprezentaciju podataka


XML Web servisi za integraciju sistema
omoguavaju komunikaciju izmeu slabo spregnutih delova sistema
delovi sistema mogu raditi na razliitim platformama (Java, .NET, ...)

15

Platforma .NET

17.04.2012.

Migracija meu platformama


Predviena dva alata za migraciju softvera sa Java na .NET platformu
Visual J# .NET

sintaksa odgovara sintaksi jezika Java,


kod se prevodi na MSIL, ne na bajtkod
J# ne koristi Java biblioteku klasa, ve .NET bibiloteku klasa
J# nije kompatibilan sa J2SE, nedostaju neke funkcionalnosti iz J2SE
omoguava relativno laku migraciju koda pisanog na J++ u J# za .NET

JLCA (Java Language Conversion Assistant)

konvertuje J++ u C# aplikacije


uspeno se konvertuju sve jezike konstrukcije
samo deo biblioteke klasa se konvertuje

Oba alata Microsoft je povukao iz Visual Studio paketa

16

Platforma .NET

17.04.2012.

Izvrni sklopovi
Izvrni sklopovi (Assemblies) su jedinice za:

isporuku,
reupotrebu,
verzionisanje i
sigurnost

Sklopovi su vie logike nego fizike strukture (mogu biti u vie fajlova)
Sklopovi sadre:

module,
resurse (kao to su, na primer, ikone, podaci) i
metapodatke (u manifestu) koji ih opisuju

Manifest predstavlja vezu izmeu tipova podataka u sklopu i CLR


Na osnovu metapodataka sklopa, CLR:

17

puni sklop i potrebne biblioteke,


forsira bezbednosne politike,
daje podrku verzionisanju,
obavlja proveru valjanosti tipova

Platforma .NET

17.04.2012.

Primer "Zdravo"
Trivijalna klasa sa glavnim programom koji ispisuje Zdravo!
Klasa je napisana u fajlu MojaAplikacija.cs:
class Pozdrav {
static void Main(string[] args){
System.Console.WriteLine("Zdravo!");
}
}
Koristi se ASCII ili UTF-8 editor
Prevoenje:
csc MojaAplikacija.cs
Kreira se MojaAplikacija.exe (sklop) (a ne Pozdrav.exe)
Opta sintaksa:
csc [<opcije>] <lista fajlova>
Prilikom izvrenja aplikacije ne poziva se eksplicitno CLR

18

CLR se poziva implicitno, CLR poziva Main metod

Platforma .NET

17.04.2012.

Vrste sklopova
Mogu se napraviti sledee vrste sklopova:

konzolni izvrni (opcija: /target:exe, datoteka: *.exe)


moe se izvravati kao samostalna konzolna aplikacija
sklop mora imati jednu ulaznu taku definisanu kao Main metod

grafiki izvrni (opcija: /target:winexe, datoteka: *.exe)


moe se izvravati kao Windows aplikacija
(GUI: Win32 API ili .NET Framework Library)
sklop mora imati jednu ulaznu taku definisanu kao Main metod

modul (opcija: /target:module, datoteka: *.netmodule)


kolekcija prevedenog koda koja se koristi samo u drugim sklopovima
ne moe se izvravati samostalno

biblioteka (opcija: /target:library, datoteka: *.dll)


sklop je biblioteka tipova koju dinamiki koriste drugi sklopovi

19

Platforma .NET

17.04.2012.

Manifest
Manifest sadri metapodatke koji opisuju sklop i tipove koje sklop sadri
Sklop identifikuju sledei podaci:

ime (name) ime sklopa


verzija (version) etiri brojaa: glavni, sporedni, revizija i gradnja (build)
kultura (culture) informacije o kulturi i jeziku koji podrava sklop
zahteva se za sklopove koji sadre lokalizovane resurse

jedinstveno ime (strong name) jedinstveno ime sklopa


obuhvata ime, verziju, kulturu i koristi kripto-mehanizam zasnovan na javnom kljuu
koristi se za deljene sklopove izmeu aplikacija
ukljuuje digitalni potpis koji onemoguava promenu nakon kreiranja

Ostali podaci manifesta:

sadraj (assembly contents) lista fajlova koji ine sklop


tipovi (type information) detalji o tipovima koje izvozi sklop
reference (references) detalji o drugim sklopovima koji se statiki koriste iz tipova u sklopu
opte informacije (general information) opti detalji (proizvoa, opis, pravo kopiranja)

Veina podataka manifesta se automatski generie

20

opte informacije specificira programer

Platforma .NET

17.04.2012.

Moduli
Moduli su predvieni kao podrka za razvojni proces

moduli se mogu razvijati nezavisno


moduli mogu biti pisani u razliitim jezicima koji potuju CLS
takvi moduli se integriu u jednom izvrnom sklopu

Karakteristike:

21

moduli sadre jedan ili vie tipova opisanih na MSIL jeziku


moduli mogu sadrati tipove iz vie prostora imena
jedan prostor imena se moe protezati na vie modula
moduli se prevode iz jednog ili vie fajlova sa izvornim kodom
moduli se ne mogu nezavisno (direktno) koristiti od strane CLR,
oni se kombinuju u sklopovima

Platforma .NET

17.04.2012.

Prevoenje i sadraj modula


Modul se prevodi na sledei nain:
csc /target:module /out:MojModul Fajl1.cs Fajl2.cs
Podrazumevana ekstenzija imena modula je .netmodule
Rezultat prevoenja je sklop-modul: MojModul.netmodule
Moduli sadre sledee informacije:

manifest koji navodi sklopove od kojih zavise tipovi u modulu i drugo


tipove prevedene iz izvornih fajlova, grupisane prostorima imena
(tipovi su prevedeni na MSIL)

Modul koji zavisi od tipova u drugom modulu (MojModul.netmodule) se prevodi:


csc /addmodule:MojModul.netmodule /target:module Fajl.cs

22

Platforma .NET

17.04.2012.

Sklopovi od jednog ili vie fajlova


Sklop moe biti u jednom fajlu ili u vie fajlova
Sklop od jednog fajla

kombinuje jedan modul sa metapodacima u istom fajlu

C# prevodilac podrazumevano pravi sklopove u jednom fajlu


Sklop od vie fajlova

sastoji se od jednog ili vie modula i posebnog fajla sa manifestom

Sklopovi od vie fajlova se koriste u sledeim situacijama:

23

za kombinovanje modula pisanih u razliitim jezicima


da se retko korieni tipovi smeste u poseban modul,
jer se modul puni samo po potrebi
za podrku nezavisnom razvoju komponenata sistema

Platforma .NET

17.04.2012.

Kreiranje sklopa od jednog fajla


Za razliku od Jave, .NET sklop se ne pokree specificiranjem klase
Ako vie od jedne klase definie Main metod

potrebna je csc opcija /main:<klasa>.Main


u sklopu se uva identitet ulazne take aplikacije

Metapodaci sklopa mogu biti definisani u posebnom C# izvornom fajlu


MS VS .NET automatski kreira AssemblyInfo.cs
koji se koristi za formiranje manifesta
U ovom fajlu se definiu metapodaci aplikacije
Primer:
using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: AssemblyTitle("MojSklop")]
[assembly: AssemblyDescription("Primer sklopa u jednom fajlu")]

Kreiranje sklopa izvrne aplikacije:


csc /target:exe /out:Aplikacija.exe
MojaAplikacija.cs AssemblyInfo.cs

24

Platforma .NET

17.04.2012.

Kreiranje sklopa od vie fajlova


Sklopovi sastavljeni od vie fajlova se kreiraju pomou linkera al.exe
Linker generie fajl koji sadri manifest podatke sklopa (u donjem primeru: aplikacija.exe)
Primer (prva klasa u fajlu StampacStringova.cs, a druga u fajlu Pozdrav.cs):
public class StampacStringova{
public void stampajString(string stringPoruke){
System.Console.WriteLine("Poruka: " + stringPoruke);
}
}
class Pozdrav{
public static void Main(string[] argumenti){
StampacStringova mojStampac=new StampacStringova();
mojStampac.stampajString("Zdravo!");
}
}

csc /target:module StampacStringova.cs


csc /addmodule:StampacStringova.netmodule /target:module Pozdrav.cs
al /out:aplikacija.exe /target:exe /main:Pozdrav.Main
Pozdrav.netmodule StampacStringova.netmodule
Ako neki od fajlova sklopa nedostaje u vreme izvrenja, CLR prijavljuje greku

25

Platforma .NET

17.04.2012.

Postavljanje metapodataka sklopa


Ako sklop ima vie fajlova, metapodaci sklopa se ne mogu
dati u fazi prevoenja, ve tek u fazi povezivanja
Primer:
al

26

/out:aplikacija.exe
/target:exe
/main:Pozdrav.Main
/title:MojSklop
/description:Primer sklopa u vie fajlova
Pozdrav.netmodule StampacStringova.netmodule

Platforma .NET

17.04.2012.

You might also like