20
VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJA BEOGRAD SEMINARSKI RAD IZ PREDMETA OBJEKTNO ORIJENTISANO PROGRAMIRANJE 1

Seminarski Rad Objektno Orijentisano Programiranje

Embed Size (px)

DESCRIPTION

Seminarski rad iz predmeta objektno orijentisano programiranje

Citation preview

Page 1: Seminarski Rad Objektno Orijentisano Programiranje

VISOKA TEHNIČKA ŠKOLA STRUKOVNIH STUDIJABEOGRAD

SEMINARSKI RAD

IZ PREDMETAOBJEKTNO ORIJENTISANO PROGRAMIRANJE

Profesor: Djordje Dihovični Student: Nikola Nedeljklović 69/13

1

Page 2: Seminarski Rad Objektno Orijentisano Programiranje

VI. OBJEKTNO ORIJENTISANO PROGRAMIRANJE

Polimorfizam

Polimorfizam predstavlja sposobnost različitih klasa da obezbede različitu primenu istih javnih interfejsa, odnosno omogućeno je pozivanje metoda i osobina objekta bez potreba za posebnom implementacijom ovih članova. Objekt Monitor je u međusobnom vezi sa Computer objektom preko Computer javnog interfejsa. U slučaju da drugi objekt, kao što je miš, Mouse ima isti javni interfejs, tada Computer objekt može da bude međusobno povezan sa Mouse objektom. Postoji dva osnovna načina na koja polimorfizam može biti obezbeđen: polimorfizam nasleđivanja i polimorfizam interfejsa.

Zahvaljujući osobini nasleđivanja moguće je iskoristiti funkcionalnost prethodno definisanih klasa i umetnuti klasu u novu klasu i pri tome po potrebi primenjivati različite članove. Postoji osnovna klasa i nju nasleđuje nova klasa. Nova klasa ima isti broj članova kao i osnovna klasa, a dodatni članovi mogu da se dodaju po potrebi. Nasleđena klasa zadržava sve karakteristike osnovne klase i međusobno deluje sa drugim objektima ako su oni instance osnovne klase.

Polimorfizam interfejsa definiše koji se članovi klase primenjuju, ali ne definiše način njihove primene. Objekat Computer može da primeni interfejs Icomputers koji određuje metode kao što su GoStart, GoShutDown.

Interfejsi se definišu korišćenjem ključne reči interface, kao što je dato sa:

Public interface IComputers

{

}

Dodavanje metoda je demonstrirano na sledeći način:

public interface IComputers

{

void GoStart();

void GoShutDown();

}

Svojstva se takođe mogu dodati definiciji interfejsa kao što je dato sa:

Public interface IComputers{//Dodatni clanoviFloat RamMemory{get;//Za definisanje read-write svojstva dodati kod na ovom mestu}}

Jedna od važnih karakteristika polimorfizma je i mogućnost kreiranja metoda sa istim imenom ali sa različitim tipom i brojem parametara, koja se zove prepterećenje metoda. Programer je u mogućnosti da

2

Page 3: Seminarski Rad Objektno Orijentisano Programiranje

kreira metode sa istim imenom ali čiji su parametri različiti i drugog tipa. Kada se pozove neki od ovih metoda sa istim imenom tada prevodilac automatski odlučuje koji će od metoda da se koristi u zavisnosti od parametara.

Konstruktori

Konstruktor predstavlja poseban metod koji se koristi za pravljenje novog primerka klase. Za deklarisanje i inicijalizovanje promenljive, koristi se ime klase a sintaksa je ista kao kod deklarisanja promenljive primitivnog tipa.

Korišćenjem ključne reči new, kreira se i pokreće konstruktor, kao što je dato sa:

Class1 MojaKlasa = new Class1();

Inicijalizacija koristi sledeću sintaksu:

Int myInt = new int();

Prilikom definisanja konstruktora deklariše se metod istog imena kao klasa u kojoj se ona deklariše, pri čemu treba voditi računa o tome da konstruktor predstavlja metod koji se može preopteretiti. Konstruktori nemaju tip rezultata i oni se najčešće deklarišu sa nivoom dostupnosti public.

3

Page 4: Seminarski Rad Objektno Orijentisano Programiranje

Konstruktor koji nema parametara zove se tekući ili default-ni konstruktor. Ovaj konstruktor se inicijalizuje uvek kada se objekat inicijalizuje korišćenjem ključne reči new.

Prevencija klase od inicijalizovanja se može osigurati tako što konstrukor ima modifikator pristupa private, kao što je dato sa:

class PrevInic

{

//Privatni konstruktor:

Private PrevInic() {}

Public static double e = Math.E; //2.71828…

}

4

Page 5: Seminarski Rad Objektno Orijentisano Programiranje

Destruktori

Destruktor predstavlja specijalnu funkciju članova klase koja se izvršava svaki put kada objekat date klase izađe izvan opsega, pri čemu ima isto ime kao klasa ali poseduje dodat i specijalni znak tilda (~).

Destruktori nikada ne daju vrednost niti mogu sadržati parametre, ne mogu biti nasleđeni niti preopterećeni. Oni su veoma korisni prilikom izlaska iz programa, jer se tada oslobađaju zauzeti resursi iz memorije, zatvaraju otvorene datoteke i tako dalje.

5

Page 6: Seminarski Rad Objektno Orijentisano Programiranje

VIII. METODI

Delegati

Delegati su tipovi koji umesto promenljivih zadržavaju reference prema metodama, i mogu da kopiraju ponašanje bilo kog metoda. Za deklarisanje metoda koristi se ključna reč delegate. Deklarisanje delegata je slično deklarisanju metoda samo što u ovom slučaju oni ne sadrže telo. Delegati sadrže povratni tip (return type) i skup parametara kao i metodi. Deklarisanje delegata je prikazano sledećom sintaksom:

Delegate returnType DelegateName (dt param1, dt param2, ...dt paramN)

Delegat koji je na početku deklarisan prihvata reference za metode koji imaju void povratni tip i ima dva int parametra.

Prvo se definiše metod koji ne vraća podatke, ali prihvata dva int argumenta. Unutar Main metode, deklariše se tip delegata koji definišemo. Program pita za dve vrednosti koje treba da unese korisnik. Za dodeljivanje metoda delegatu potrebno je koristiti sledeću sintaksu:

Variable = new DelegateName(MethodName);

Sledeći program prikazuje korišćenje delegata:

Kada se dodeljuje delegat sa referencom za metod, koristi se ključna reč new na koju se nastavlja ime delegata. Unutar zagrada se označava ime metoda na koji se delegat referiše. Jednostavniji način je dodeljivanje imena metoda delegatu.

Operation = Add;Operation = Subtract;

Kada je if tvrđenje tačno tada se dodeljuje delegatu metod, Add() a kada je tvrđenje netačno tada se dodeljuje Subtract() metod. Izvršavanje delegata izvršava takođe i metod na koji se metod odnosi.

6

Page 7: Seminarski Rad Objektno Orijentisano Programiranje

Rad sa parametrima

Metodi mogu imati proizvoljan broj parametara i oni su neophodni da bi metod mogao da procesira informacije i predstavi rezultat. Svaki metod može imati različite tipove podataka. Sintaksa za metod sa N parametara.

returnType MethodName (datatype param1, datatype param2, ...datatype paramN)

{

kod za izvrsavanje;

}

Parametri se smeštaju između zagrada posle imena metoda. Kada se pozove metod moraju se obezbediti argumenti. Oni predstavljaju vrednosti koje se dodeljuju svakom parametru. Prilikom prosleđivanja argumenata veoma je bitan redosled. Sledeći primer prezentuje korišćenje parametara i argumenata.

U sledećem primeru su data tri parametra sa različitim tipom podataka

static void PorukaCeobrojDecimalnibroj(string poruka, int broj, double decbroj({Console.Write Line(poruka);Console.Write LineConsole.Write Line}static void Main(){PorukaCeobrojDecimalnibroj("Poruka! ", 20, 20.36);}

Prilikom prosleđivanja parametara istog tipa treba voditi računa o logičkom redosledu, a isto tako je moguće vraćenu vrednost argumenta jednog metoda, proslediti kao argument drugog metoda.

IX. LINQ

Language Integrated Query (LINQ) je počeo da se koristi od .NET verzije 3.5 omogućujući programerima da vrše upite nad podacima iz raznovrsnih izvora podataka, bez poznavanja bilo kog eksternog jezika. Proces upita podrazumeva dobijanje podataka iz izvora podataka, a LINQ je integrisan u jezike C# i VB, tako da su dodate višestruke specijalne ključne reči i sintakse.

Izrazi za upite se koriste za pretragu izvora podataka korišćenjem LINQ-a. LINQ predstavlja proširene metode koji se mogu pozvati i dati željene podatke. Ovi metodi se nalaze u imenskom prostoru System.Linq koji se mora uključiti u projekat. Izrazi za upite se prevode u ekvivalentnu metodsku sintaksu koja razume CLR.

Primer:

Static void Main(string[] args){Int[] brojevi = {2,4,6,7,8,9};Var rezultat = from n in brojeviSelect n;

7

Page 8: Seminarski Rad Objektno Orijentisano Programiranje

Foreach (var n in rezultat){Console.Write(n + "");}}

Da bi koristili LINQ u programu potrebno je uključiti u projekat imenski prostor System.Linq. Zatim se deklariše niz od 6 celobrojnih elemenata koji sadrže neke vrednosti. Koristi se izraz za upit na osnovu koga se dobija svaki broj iz niza kome se može pristupiti korišćenjem rezultujuće promenljive. Struktura za osnovni izraz za upite je data sa:

var query = from range Var in dataSource

<other operations>

Selectg <projection>;

SVOJSTVA I PRISTUPNI METODI GET I SET

Svojstva su opisi objekata u objektno orjentisanom programiranju. svojstva pripadaju nekoj klasi i definišu se za klasu. Na primer klasa textBox ima svojstvo Text. To svojstvo pozivamo sa textBox1.Text. svojstvu se mogu dodeliti neke vrednosti,a korisnik može pristupiti tim vrednostima preko klase. Princip enkapsulacije u objektnom programiranju ne dozvoljava da tom svojstvu pristupimo direktno nego navođenjem naziva klase. Kada mu pristupimo preko klase, tada možemo manipulisati vrednostima tog svojstva. Svojstva kombinuju aspekte i polja i metoda. Korisniku objekta svojstvo izgleda isto kao polje. Sintaksa im je identična. Pristupni metod get se izvršava kada se svojstvo čita, a set pristupni metod kad se svojstvu pridružuje nova vrednost. Svojstvo bez set pristupnog metoda se smatra kao read-only, a svojstvo bez get pristupnog metoda kao write-only. Ako ima oba pristupna metoda onda se zove read-write svojstvo. Svojstva nam pružaju mnoge pogodnosti: mogu potvrditi podatke pre nego što dopuste promenu vrednosti, mogu transparentno prikazati podatke u klasi iako se možda podaci dobavljaju iz nekog drugog izvora, poput

8

Page 9: Seminarski Rad Objektno Orijentisano Programiranje

baze podataka, mogu obaviti neku akciju kad se podaci promene, poput dizanja događaja ili promijene vrednosti nekog dodatnog polja.

Izvođenje get pristupnog metoda je ekvivalentno čitanju vrednosti polja. Na primer, kad vraćamo privatnu promenljivu iz get pristupnog metoda i optimizacije su uključene, poziv get pristupniku je inlined od strane kompajlera tako su performnse bolje nego da se poziva metoda. Ako je pristupnik virtualan, kompajler to ne može napraviti jer ne zna pri kompilaciji koja će se metoda zapravo zvati. Kad referenciramo svojstvo, osim u slučaju da mu se nešto pridružuje, get pristupnik se poziva da se pročita vrednost svojstva. Get pristupni metod mora završiti sa return naredbom. Set pristupni metod je sličan metodi koja ima void povratni tip. On koristi implicitni parametar zvan value (vrednost). Kada pridružujemo vrednost svojstvu, set pristupni metod se poziva sa argumentom koji predstavlja novu vrednost.

9

Page 10: Seminarski Rad Objektno Orijentisano Programiranje

STRUKTURE

Strukture su skupovi heterogenih elemenata (jedan elemenat je char, drugi je int itd.). U C# jeziku postoji mogućnost grupisanja logički povezanih promenljivih različitog tipa u jednu celinu, strukturu. Koristeći ključnu reč struct možemo definisati strukturu datum sa tri celobrojne komponente, koje predstavljaju dan, mesec i godinu. Ovo se deklariše:struct datum {int dan;int mesec;int godina;};Struktura datum sadrži tri elementa tipa int: dan, mesec i godina, koji se nazivajučlanovima strukture. Ključna reč struct definiše strukturu tako da promenljive mogu biti deklarisane kao tip struct datum. Za selekciju članova strukture koristi se operator .(tačka), tako što se specificira ime promenljive, operator tačka i ime člana. Operator . ima najviši prioritet među operatorima C jezika i istog je prioriteta sa operatorom selekcije elementa vektora (uglaste zagrade).Selekcija člana strukture ima opštu formuime_promenljive.ime_clanaInicijalizacija strukture je slična inicijalizaciji vektora. Inicijalizacione vrednosti se navodeizmeđu vitičasti zagrada razdvojene zarezom.Struktura je slična klasi, uz sledeće ključne razlike:

Struktura je vrednosni tip, dok je klasa referentni. Struktura ne podržava nasleđivanje (osim implicitnog izvođenja iz tipa object, tj., preciznije, iz tipa

System.Value). Struktura može da ima sve članove kao i klasa, osim besparametarskog konstruktora, finalizatora i

virtuelnih članova. Struktura se koristi umesto klase kada je poželjna semantika vrednosnog tipa. Dobri primeri su numerički tipovi, gde je prirodnije da operacija dodeljivanja kopira vrednost nego referencu. Pošto je struktura vrednosni tip, nije potrebno instanciranje objekta na hipu za svaku instancu; to može da bude korisna ušteda pri izradi velikog broja instance tipa. Recimo, za izradu niza vrednosnog tipa potrebna je samo jedna operacija dodele na hipu.

Semantika konstruisanja strukture

Evo semantike konstruisanja strukture: Postoji besparametarski konstruktor koji ne možete redefinisati implicitno. Zbog toga se svi bitovi

svih polja strukture postavljaju na nulu. Kada definišete parametarski kontruktor strukture, morate eksplicitno dodeliti vrednosti svakom

polju. U strukturi ne možete imati inicijalizatore polja.

10

Page 11: Seminarski Rad Objektno Orijentisano Programiranje

11

Page 12: Seminarski Rad Objektno Orijentisano Programiranje

DELEGATI

Delegati su klase koje nam služe za prenošenje metode kao parametra. Delegat se definiše isto kao i bilo

koja druga klasa, dakle ili u okviru neke klase ili u okviru namespace-a. Kada se definiše delegat koristi se:

ključna reč delegate

povratni tip (return type)

i parametri

... a sve to definiše potpis metode na koju delegat može pokazivati.

Delegat se poziva po imenu sa parametrima kao da je metod koji odgovara deklaraciji.

poziv izaziva izvršavanje svih metoda sa liste poziva redom, proslešujući im parametre

ako je parametar objekat ili ref parametar, promene iz jednog metoda vidi naredni metod

povratna vrednost je ona koju vrati poslednji metod sa liste

Delegati se koriste za:

kreiranje događaja

pokretanje novih programskih niti

kreiranje opštih klasa gde se metode menjaju dinamički

12

Page 13: Seminarski Rad Objektno Orijentisano Programiranje

13

Page 14: Seminarski Rad Objektno Orijentisano Programiranje

PREOPTEREĆENJE METODA

Rekurzija (lat. recursio, recursion od recurrere: vraćanje) označava postupak ili funkciju koji u svojoj definiciji koriste sami sebe. Drugim rečima, ukoliko neki postupak zahteva da delovi problema koje je razdvojio od drugih bivaju nezavisno podvrgnuti istom tom postupku, taj postupak je rekurzivan. Rekurzija određuje (gradi) klasu objekata ili metoda (ili objekat iz određene klase) definisanjem nekoliko jednostavnih baznih slučajeva ili metoda (često samo jedan), i definisanjem pravila kako se složeniji slučajevi svode na jednostavnije. Ovo je proces gde metod neprekidno poziva sebe sve dok postigne željenu vrednost. Proces mora prestati u jednom trenutku ili će se pozivanje nastaviti beskonačan broj puta. Jedan od najjednostavnijih primera rekurzivnih definicija je faktorijel funkcija. Prirodan nacin za racunanje faktorijela je pisanje rekurzivne funkcije koja odgovara ovoj definiciji:

int fact( int n ){if ( n == 0 ) return 1;else return n*fact(n-1);}

Ova funkcija poziva samu sebe da izracuna sledeci clan. Na kraju ce doci do uslova prekida i izaci. Medjutim, pre nego sto dodje do uslova prekida, ona ce staviti n poziva na stek poziva. Svako rekurzivno rešenje nekog problema ima i svoj iterativni ekvivalent, tj. algoritam koji isti problem rešava bez rekurzije. U praktičnom programiranju uglavnom treba izbegavati rekurziju jer takva rešenja u opštem slučaju troše više vremena od iterativnih.

14

Page 15: Seminarski Rad Objektno Orijentisano Programiranje

PRIKAZIVANJE VREDNOSTI IZ METODA

Metodi mogu da prikažu vrednost izbilo kog tipa podatka, i te vrednosti se mogu iskoristiti za

izračunavanje ili dobijanje podatka koji je dati metod izračunao. Tip podatka vrednosti koju metod prikazuje

predstavljena je sa povratnim tipom (returnType).

15

Page 16: Seminarski Rad Objektno Orijentisano Programiranje

LINQ (Language Integrated Query)

Language Integrated Query (LINQ), koji unificira način pristupa i pretrage podataka iz objekta koji implementira IEnumerable<T> interface. Upotrebom LINQ, nizovi, kolekcije, relacioni podaci, i XML su svi potencijalni izvori podataka. LINQ poseduje bogatu kolekciju naredbi za implementaciju kompleksnih upita koje sadrže agregantne funkcije, združivanje, sortiranje i još puno toga.

16