31
АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected] Предмети: Увод у објектно програмирање Алгоритми и структуре података др Милован Миливојевић страна 1 31 Блок 6-P Algoritmi Strukture podataka Uvod u OOP др Милован Миливојевић

Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

  • Upload
    others

  • View
    60

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 1 oд 31

Блок 6-P Algoritmi ● Strukture podataka ●

Uvod u OOP

др Милован Миливојевић

Page 2: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 2 oд 31

VAŽNO

• Materijal u ovom Bloku predstavlja kompilaciju materije iz referenci [1] i [2];

• Materija je namenjena samo za internu upotrebu za studente I i II godine - studijskog programa Informacione tehnologije, Akademije zapadna Srbija ● odsek Užice, kao pomoć u pripremi i savladavanju materije vezane za: Algoritme, Strukture podataka i Uvod u objektno programiranje;

• Pri korišćenju ovog teksta za druge namene OBAVEZNO je referenciranje na originalnu literaturu.

Preporučena literatura:

1.

Microsoft Visual C# 2012 korak po korak

Autor: John Sharp

Izdavač: CET Beograd, Srbija Godina izdavanja: 2013.

2.

Microsoft Visual C# Step by Step, Ninth Edition

John Sharp

Izdavač: Published with the authorization of Microsoft Corporation by: Pearson Education, Inc. Copyright © 2018 by Pearson Education, Inc.

3.

Exam Ref 70-483: Programming in C#

Wouter de Kort

Published with the authorization of Microsoft Corporation by: O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, California 95472 /// Copyright © 2013 by O'Reilly Media, Inc.

4.

Osnove dizajna i analize algoritama

Autor(i): Dejan Živković

Godina izdavanja: 2007.

5.

Algoritmi i strukture podataka

Autor: Milo Tomašević

Izdavač: Mikroknjiga Beograd, Srbija Godina izdavanja: 2008.

6.

Algoritmi i strukture podataka

Autor: Dragan Urošević

Izdavač: Računarski fakultet Beograd (RAF) / CET Beograd, Srbija Godina izdavanja: 2018.

7.

Rešeni zadaci iz programskog jezika C# (drugo izdanje)

Autor: Laslo Klaus

Izdavač: Akademska Misao Beograd, Srbija Godina izdanja: 2018.

Page 3: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 3 oд 31

Sadržaj 6. BLOKA: METODE. IZUZECI. REPETITORIJUM

• Korišćenje Expression-bodied Methods za zapisivanje metode

• Vraćanje višestrukih vrednosti iz metode. Tuples

• Korišćenje opcionih parametara u metodama i korišćenje imenovanih argumenata.

• Greške i izuzeci.

• Repetitorijum.

Zapisivanje metode u notaciji: Expression-bodied method

• Pojedine metode mogu biti veoma jedostavne, odnosno mogu imati samo po jednu liniju koda (iskaz) u svom telu. Na primer, one mogu, putem parametara, preuzeti vrednosti argumenata iz pozivajuće procedure a potom realizovati nekakav proračun, bez neke dodatne komplikovanije logike i vratititi rezultat imenu metode. U takvim slučajevima može se koristiti i jednostavija (kompaktnija) notacija za zapisivanje metode (Expression-bodied Methods).

Primeri:

int zbir(int brojA, int brojB)=>brojA+brojB;

void prikazRezultata(string poruka)=>Console.WriteLine(”Rezultat je: ”, poruka);

void showResult(int answer) => result.Text =answer.ToString();

• Operator =>, podseća na pipe operator u nekim jezicima kao što je, na primer, R

• Šta je razlika? U odnosu na klasičan način zapisivanja metode: o operator =>, ukazuje na iskaz koji predstavlja telo metode, umesto da se telo

metode definiše vitičastim zagradama. o u zapisu metode ne postoji iskaz return.

• Metode zapisane na ovaj način funkcionišu potpuno isto kao i metode zapisane na klasiča način. Ipak, ponekad, ovakav način zapisivanja može poboljšatai čitljivost koda, jer se uklanja potreba za velikim brojem vitičastih zagrada ({,}).

Vraćanje višestrukih vrednosti kao rezultat metode. Tuples

• U dosadašnjem radu sa metodama, prikazane su metode koje kao rezultat vraćaju neku izračunatu vrednosti i pridružuju tu vrednost imenu metode. Takođe, ako metoda ne vraća nikakav rezultat u pozivajuću proceduru korišćena je ključna reč void za tip metode.

• Ipak, veoma čest zahtev je da se kao rezultat u pozivajuću proceduru vrati više izračunatih vrednosti.

Page 4: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 4 oд 31

• Ovo se može postići upotrebom n-torki (k-torki, torki, tuples)

• Tuples (n-torke) predstavljaju male konačne skupove vrednosti (za n=2- par; za n=3 -trojka; za n=k - k-torka; ... za n=n ... n-torka)

• U matematici, n-torka (engl. tuple) je konačan niz (također poznat kao "uređena lista") od n objekata, od kojih je svaki specifičnog tipa. Na primer, "četvorka" s komponentama OSOBA, DAN, MESEC i GODINA se može koristiti za memorisanje zapisa da je određena osoba, rođena određenog dana, određenog meseca, određene godine [https://hr.wikipedia.org/wiki/N-torka].

• U računarstvu, n-torka ima različita značenja. Tipično u programskim jezicima, n-torka je podatkovni objekt koji sadrži nekoliko drugih objekata, sličnih matematičkoj n-torci. Takav objekt je također poznat kao zapis [https://hr.wikipedia.org/wiki/N-torka].

• Vrednosti koje se vraćaju pozivajućoj metodi navode se kao elementi liste sa definisanim tipovima, i to za svaku vrednost ponaosob u samoj definiciji metode.

Primer strukture metode koja vraća više vrednosti:

(int, int) nazivMetodeSaViseRezultata(listaParametara) { int podatak1; int podatak2;

...iskazi koji izracunavaju

...vrednosti za podatak1 i podatak2 return (podatak1, podatak2)

}

• Kada se poziva metoda sa višestrukim povratnim vrednostima onda se obezbeđuje isti broj elemenata u listi koji prihvataju vrednosti vraćene iz metode:

int retpodatak1, retpodatak2; (retPodatak1, retPodatak2)=nazivMetodeSaViseRezultata(...);

• Pre upotrebe koncepta n-torki i rada sa višestrukim povratnim vrednostima metoda, potrebno je instalirati u Visual Studio dodatne pakete i biblioteke. Ovo se može realizovati pomoću NuGet Package Manager-a na sledeći način (slika 6.1):

o Tools → NuGet Package Manager o Manage NuGet Packages for Solution → Browse o U Search box uneti: ValueTuple → Enter

Page 5: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 5 oд 31

o U listi paketa odabrati: System.ValueTuple

Slika 6.1. Instalacija paketa System.ValueTuple

o U desnom panou (slika 6.1) potvrditi Project a potom Install i OK.

U daljem tekstu slede primeri sa Expression-bodied method notacijom metoda i primenom višestrukih povratnih vrednosti. Primer 1: Kreirati program koji određuje celobrojni rezultat deljenje i ostatak pri deljenje, pri deljenju dva cela broja, na dva načina: A) primenom metoda zapisanih sa Expression-bodied method stilom kao i B) primenom višestrukih vrednosti vraćenih metodom. Primer koda fajla AISP_B6primer1P.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AISP_B6primer1P { class Program { static void Main(string[] args) { int brojDeljenik, brojDelilac, rezultatCelobrojni, ostatakPoModulu; int brojDelj, brojDel;

Page 6: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 6 oд 31

Console.WriteLine("---AKADEMIJA ZS---"); Console.WriteLine("********************" + "\n"); Console.Write("Uneti DELJENJIK (ceo broj): "); brojDeljenik = int.Parse(Console.ReadLine()); do { Console.Write("Uneti DELILAC (ceo broj): "); brojDelilac = int.Parse(Console.ReadLine()); } while(brojDelilac>brojDeljenik); brojDelj = brojDeljenik; brojDel = brojDelilac; //VARIJANTA A Console.WriteLine("\n"+"varijanta A"); Console.WriteLine("Rezultat CELOBRONI DEO: {0}", rezCel(brojDelj, brojDel)); Console.WriteLine("Rezultat OSTATAK: {0}", ostPoMod(brojDelj, brojDel)); //VARIJANTA B ... vracanje visestrukih vrednosti iz metode Console.WriteLine("\n" + "varijanta B"); (rezultatCelobrojni, ostatakPoModulu) = deljenje(brojDeljenik, brojDelilac); Console.WriteLine("Rezultat CELOBRONI DEO: {0}", rezultatCelobrojni); Console.WriteLine("Rezultat OSTATAK: {0}", ostatakPoModulu); } //VARIJANTA A static int rezCel(int delj, int del) => delj / del;//Expression-bodied method //static int ostPoMod(int delj, int del) => delj % del; static int ostPoMod(int delj, int del)//klasicni zapis metoda { return delj % del; } //VARIJANTA B //vracanje visetrukih vrednosti static (int, int) deljenje(int deljenik, int delilac) { int rezultatCelobrojni = deljenik / delilac; int ostatakPoModulu = deljenik % delilac; return (rezultatCelobrojni, ostatakPoModulu); } } }

Primer 2: Kreirati program koji određuje površinu i obim trougla za zadate stranice. Proveriti uslov egzistencije trougla. U rešenju koristiti metodu za izračunavanje površine i obima:

Page 7: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 7 oд 31

Primer koda fajla AISP_B6primer2P.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AISP_B6primer2P { class Program { static void Main(string[] args) { double a,b,c, obim, povrsina; Console.WriteLine("---AKADEMIJA ZS---"); Console.WriteLine("********************" + "\n"); do { Console.Write("Uneti stranicu a= "); a = double.Parse(Console.ReadLine()); } while (a <= 0); do { Console.Write("Uneti stranicu b= "); b = double.Parse(Console.ReadLine()); } while (b <= 0); do //provera stranice c i uslova egzistencije trougla { Console.Write("Uneti stranicu c= "); c = double.Parse(Console.ReadLine()); } while (c <= 0 || a + b <=c || a + c <=b || b + c <=a); (obim, povrsina) = trougao(a, b, c); Console.WriteLine("\n" + "REZULTAT" ); Console.WriteLine("Obim trougla: {0:F2}", obim); Console.WriteLine("Povrsina trougla: {0:F4}", povrsina); } static (double, double) trougao(double at, double bt, double ct) { double s = (at+bt+ct)/2.00; double ot =at+ bt + ct; double pt = Math.Sqrt (s * (s -at) * (s - bt) * (s -at)); return (ot, pt); } } }

Page 8: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 8 oд 31

Korišćenje opcionih parametara u metodama i imenovanih argumenata.

• Kao što je ranije opisano, software developer može koristiti preopterećene metode. Ove metode mogu koristiti različit broj parametara iako imaju isto ime. Pri pozivu metode u nekoj proceduri, u zavisosti od broja parametara u iskazu kojim se metoda poziva, kompajler opredeljuje koja varijanta metode najbolje odgovara pozivu i ta metoda se izvršava. Ovo je svojstvo i sistem ponašanja mnogih OOP jezika.

• Međutim, razvoj softvera podrazumeva da se ponekad razvijaju i aplikacije u programerskim okruženjima koja ne prate ova pravila. Karakterisično je za C# i za .NET FrameWork da mogu da operišu i sa takvim platformama koje ne podržavaju navedeni stil ponašanja. Jedna od najvažnijih platformi koja ne prati prethodni stil a koji .NET okruženje podržava je Component Object Model (COM). U realnosti Common Laguage Runtime (CLR) koji se koristi od strane .NET framework-a je tesno povezan sa COM-om.

• COM ne podržava preopterećene metode već umesto toga koristi metode sa opcionim parametrima.

• Da bi se inkorporiranje COM biblioteka i komponenti olakšalo i u C# aplikacijama, i solution-ima, obezbeđeno je da C# podržava metode sa opcionim parametrima.

• Opcioni parametri su korisni i u drugim situacijama. Oni obezbeđuju elegantno i jednostavno rešenje u situacijama kada nije pogodno koristiti koncept preopterećivanja jer, na primer, tip i redosled parametara nije dovoljan da kompajler može lako odrediti koji varijantu metode treba koristiti.

• Ovo znači da u određenim situacijama stanje može biti konfuzno, pa je pogodno korisiti ideje opcionih parametara i imenovanih argumenata.

Navode se primeri takvih situacija (četiri preopterećee metode):

public void radSaPodacima(int intPodatak1, float floatPodatak1, int intPodatak2)

{

...

}

public void radSaPodacima(int intPodatak, float floatPodatak)

{

...

}

public void radSaPodacima (int intData)

{

...

}

Page 9: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 9 oд 31

public void radSaPodacima (int dodatniIntData)

{

...

}

Ako se u pozivajućoj proceduri kreiraju iskazi za poziv ovih metoda:

int arg1 = 99;

float arg2 = 100.0F;

int arg3 = 101;

radSaPodacima (arg1, arg2, arg3); // Biće pozvana metoda sa TRI parametra

radSaPodacima (arg1, arg2); // Biće pozvana metoda sa DVA parametra

Kompajler će relativno lako prepoznati koje metoda i kada treba da poziva.

• Ipak za poslednje dve preopterećene metode, javiće se problem jer su te metode, obe sa po jednim celobrojnim parametrom, sa nejasnom distinkcijom (različitošću) za kompajler. U tom smislu javiće se greška pri kompajliranju. Ako bi, na primer, u pozivajućoj (roditeljskoj) proceduri postojale sledeće linije kod-a:.

int arg1 = 39;

int arg3 = 51;

radSaPodacima (arg1);

radSaPodacima (arg3);

kompajleru ne bi bilo jasno koju od dve metode radSaPodacima (treću ili četvrtu) da pozove? Opcioni parametri i imenovani argumenti razrešavaju taj problem.

• Opcioni parametar se definiše kada se kreira metoda, dakle u definiciji metode. Parametar koji se postavlja kao opcioni dobija podrazumevanu (default) vrednost, na primer:

void opcMetoda(int var1, double var2 = 0.0, string var3 = "Pozdrav")

{

...

}

U primeru iznad celobrojna varijabla var1, nije opcioni parametar već obavezni parametar, varijabla dvostruke tačnosti var2 je opcioni parametar sa podrazumevanom vrednošću 0.0, dok je string varijabla var3, takođe opciona, sa podrazumevanom vrednošću „Pozdrav”. Obavezni parametri moraju biti postavljeni pre bilo kog opcionog parametra.

Page 10: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 10 oд 31

Poziv metode sa opcionim parametrima je istovetan pozivu metode sa obavezim parametrima.

Ključna razlika je u tome što, se pri pozivu metode opcioni parametri mogu izostaviti, a program će u tom slučaju uzeti podrazumevanu (default) vrednost parametra.

U primeru ispod prvi poziv metode, obezbeđuje vrednost za sva tri parametra.

opcMetoda(99, 123.45, "Svet"); // Argumenti su obezbeđeni za sva tri parametra

opcMetoda(100, 54.321); // Argumenti su obezbeđeni samo za prva dva parametra

U drugom primeru, vrednosti argumenata (100 i 54.321) se prosleđuju u prva dva paramtera: var1 i var2, respektivno. Treći parametar, var3 dobija default vrednost "Pozdrav".

Prosleđivanje imenovanih argumenata

• Podrazumevano, poziv metode koristi redosled argumenata da bi opredelio kojem parametru dodeljuje koju vrednost. U prethodnom primeru prvi argumet (100) je prosleđen prvom parametru (var1) a drugi (54.321), drugom parametru (var2), jer je tako definisano u deklaraciji metode. Kada se argumenti i parametri slažu po broju i redosledu, onda se ne javlja nikakav problem.

• U C# je moguće, da se parametar kome se prosleđuje vrednost, specifikuje pomoću imena argumenta. U tom slučaju redosled prosleđivanja (passing) argumenata može biti u raznovrsnim oblicima (sekvencama).

• Da bi se prosledio imenovani argument potrebno je da se korisi ime parametra a potom da slede : iza kojih je definisana vrednost, koju argument prosleđuje.

• Slede primeri poziva metoda, koji su istovetni prethodno definisanim pozivima, ali su sada argumenti imenovani parametrima:

opcMetoda(var1 : 99, var2 : 123.45, var3: "Svet");

opcMetoda(var1: 100, var2 : 54.321);

• Imenovani argumenti poseduju osobinu da se vrednosti mogu prosleđivati u različitim redosledima:

opcMetoda(var3 : "Svet", var2 : 123.45, var1 : 99);

opcMetoda(var2 : 54.321, var1 : 100);

opcMetoda(var3 : "Svet", var2 : 123.45, var1 : 99);

opcMetoda(var2 : 54.321, var1 : 100);

Dakle, neki od parametara u pozivu metode može se i izostaviti. Ako je taj izostavljeni parametar opcioni, onda će on poprimiti default vrednost kao u pozivu metode ispod:

opcMetoda(var1 : 99, var3 : "World");

Moše se koristiti i miksovana (mešana) tehnika (prema poziciji i prema imenu):

opcMetoda(99, var3 : "World"); //prvi argument je pozicioni

Page 11: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 11 oд 31

U ovom slučaju svi pozicioni argumenti moraju biti pre imenovanih argumenata.

Rešavanje nejasnoća sa opcionim parametrima i imenovanim argumentima

• Opcioni parametri i imenovani argumenti mogu, u nekim slučajevima, dovoditi do nejasnoća u kod-u.

• Veoma je bitno da programer razume kako će kompaler tumačiti kod i zbog čega program realizuje jedna ili neki drugi deo programskih iskaza.

• Navode se primeri, kao podloga za bolje razmevanje, odnosne materije.

void opcMetod(int var1, double var2 = 0.0, string var3 = "Pozdrav")

{

...

}

void opcMetod(int var1, double var2= 1.0, string var3 = "Dovidjenja", int var4 = 100 )

{

...

}

Sa aspekta deklarisanja metoda, primenjeni kod je sasvim u redu.

Ali šta se dešava ako se kreira ovakva programska rečenica:

opcMetod(1, 2.5, "Svet");

Postavlja se pitanje: Koju verziju metode će kompajler angažovati?

Kompajler će angažovati, prvu metodu, od prethodne dve preklopljene metode, jer se prva metoda bolje slaže po broju parametara.

opcMetod(1, var4 : 101);

U prethodnom primeru biće pozvana druga od dve preklopljene metode, jer ona ima četiri parametra.

Ali šta će kompajler učiniti sa sledećim pozivom?

opcMetod(1, 2.5);

Obe, gore navedene metode zadovoljavaju uslov poziva, ali za pravi metod kompajler neće moći da se odluči. Kao posledica, kod se neće kompajlirati.

Ili, ako se pogledaju sledeći iskazi poziva preklopljinih metoda. Situacija je takođe neodređena:

opcMetod(1, var3 : "Svet");

opcMetod(1);

opcMetod(var2 : 2.5, var1 : 1);

Page 12: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 12 oд 31

U tekstu koji sledi se daje primer primene opcionih parametara i imenovaih argumenata.

Primer koda fajla AISP_B6primer3P.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AISP_B6primer3P { class Program { const double pdv = 0.2;//pdv-porez na dodatu vrednost static void Main(string[] args) { Console.WriteLine("-Akademija ZS - Odsek UZICE-"); Console.WriteLine("-***************************-"); //Testiranje metoda sa opcionim parametrima i imenovanim argumentima /*a. Koriscenje hardcoded vrednosti ... br. casova=1, cena po casu 400.00 Bice pozvana metoda bez parametara jer je ona najbliza pozivu*/ zapisPrihoda(obracunPrihoda()); /*b. Koriscenje metode sa opcionim marametrima... * brCasova=1=default, cenaPoCasu=830.00 Bice pozvana metoda sa jednim parametrom cija default vrednost 500.00 ce biti zamenjena sa 830.00 */ zapisPrihoda(obracunPrihoda(830.00)); /*c. Koriscenje metode sa opcionim marametrima... * br. casova=7, cena po casu 660.00 Bice pozvana metoda sa DVA opciona parametra cije default vrednosti 500.00 i 1 ce biti zamenjene sa cenaPoCasu=660.00 i brojCasova=7*/ zapisPrihoda(obracunPrihoda(660.00,7)); /*d. Koriscenje metode sa imenovanim argumentom... Bice pozvana metoda sa jednim opcionim parametra cije default vrednosti 500.00 ce biti zamenjena sa 590.00 Argument je imenovan i usglasen sa imenom parametra. Sada redosled nije bitan, brojCasova=1=default, */ zapisPrihoda(obracunPrihoda(cenaPoCasu:590.00)); /*e. Koriscenje metode sa imenovanim argumentom... Bice pozvana metoda sa jednim opcionim parametra cije default vrednosti za dnevnicu = 500.00 Imenovani argument se odnosi na brojCasova=5 */

Page 13: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 13 oд 31

zapisPrihoda(obracunPrihoda(brojCasova: 5)); //uobicajeni rad programa double cenaPoCasu = ucitavanjeDouble("Unesite cenu casa: "); int brojCasova = ucitavanjeInt("Unesite broj casova: "); zapisPrihoda(obracunPrihoda(cenaPoCasu, brojCasova)); }//kraj metode main

private static double ucitavanjeDouble(string v) { Console.Write(v);//kurzor se zadrzava u istom redu string linija = Console.ReadLine(); return double.Parse(linija); }

private static int ucitavanjeInt(string v) { Console.Write(v); string linija = Console.ReadLine(); return int.Parse(linija); }

//Metoda za obracunPrihoda ... dva opciona parametra private static double obracunPrihoda(double cenaPoCasu=500.00, int brojCasova=1) { Console.WriteLine("obracunPrihoda koriscenjem dva opciona parametra"); return cenaPoCasu * brojCasova; }

//Metoda za obracunPrihoda ... jedna opcioni parametar private static double obracunPrihoda(double cenaPoCasu = 500.00) //... { Console.WriteLine("obracunPrihoda koriscenjem jednim opcionim parametrom"); int brojCasova = 1; return cenaPoCasu * brojCasova; }

//Metoda za obracunPrihoda ... jedna opcioni parametar private static double obracunPrihoda() //... { Console.WriteLine("obracunPrihoda sa harded coded vredostima parametara"); double cenaPoCasu = 400.00; int brojCasova = 1; return cenaPoCasu * brojCasova; } private static void zapisPrihoda(double v) //KORAK8 { double prihod = v / (1.00 + pdv); Console.WriteLine("Prihod profesora je {0:F2}", prihod); Console.WriteLine(); }

} }// kraj programa

Page 14: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 14 oд 31

Kao što je u prethodim blokovima opisano, analiza i provera ispravnost kod-a i toka programa može se na elegantan način realizovati pomoću Debugger-a.

Pored velikog broja opcija, veoma je korisna i opcija Peek Definition, koja obezbeđuje da se programer lako locira u željenu metodu.

Postupak je sledeći:

o DTM na metodu u kod-u koja se želi detaljnije analizirati o Peek Definition iz kontekstnog menija.

Debugger - vodi sofitver developer-a u željeni metod (slika 6.2):

Slika 6.2. Peek Defiition u Visual Studio Debugger-u.

Upravljanje greškama. Izuzeci.

• Rukovanje izuzecima realizuje se pomoću ključnih reči: try, catch i finally.

• Prekoračenje celih brojeva se može kontrolisati sa checed i uncheced.

• Moguće je ispaljivati izuzetke iz sopstvenih metoda.

• Blok finally omogućava da se kod uvek izvršava, čak iako je došlo do izuzetka.

• Aplikacije koje programer kreira neće uvek biti savršene. One moraju da detektuju neuspehe i da rade sa njima na elegantan način. Kada dođe do greške, program ispaljuje izuzetke, a ti izuzeci (greške) obrađuju se pomoću prehodno navedenih ključnih reči.

Page 15: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 15 oд 31

• Kako se upravljalo greškama u nekim starijim sistemima kao što je UNIX? Postojala je globalna promeljiva, čija vredost je stalno ispitivana, posle svakog poziva neke metode. U mnogim OOP jezicima i dalje je tako. Ipak, C# ima daleko moćniji mehanizam (biblioteke i klase izuzetaka).

• Dakle, kod C# je odvojen kod, koji realizuje glavni tok programa od dela koji rukuje greškama.

• Ceo kod koji programer želi da kontroliše stavlja se u try blok. Iskazi u try bloku se izvršavaju jedan za drugim, i ako nema izuzetaka (grešaka) postupak se realizuje za sve iskaze u try bloku. Međutim ako je došlo do greške ispaljuje se izuzetak i program predaje upravljanje rukovaocu izuzetka (greške): catch.

• Blok catch se piše odmah ispod try bloka. Moguće je napisati više rukovaoca greškama. Izvršni program će na osnovu tipa izuzetka, pokreuti odgovarajući rukovalac (catch blok).

Primer 1:

try

{

intLeviOperand=int.Parse(leviOperandTxtBox.Text);

intDesniOperand=int.Parse(desniOperandTxtBox.Text);

int rezultat=proracun(intLeviOperand, intDesniOperand);

btnRezultat.Text=rezultat.ToString;

}

catch(FormatExceptio fEx)

{

//...

}

catch(FormatExceptio fEx)

{

rezultat.Text=fEx.Message

/*ovaj rukovalac catch hvata izuzetak FormatException

ispaljen od metode int.Parse a zatim ga prikazuje u okviru za tekst

u svojstvu izuzetka Message */

}

Page 16: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 16 oд 31

catch(OverflowException oEx)

{

//...

}

catch(Exception ex)//ovo je uopsteni catch rukovalac

{

//...

}

catch//ovo je uopsteni catch rukovalac .. ime se moze izostaviti

{

//...

}

Mehanizam koji se koristi za pisanje i hvatanje izuzetaka, je u C# veoma moćan. Uglavnom, programeri koriste instance gotovih klasa izuzetaka.

Kako to funkcioniše?

Izuzeci su organizovau u porodice koje prate hijerarhiju nasledjivanja.

Izuzeci FormatExceptio i OverflowException pripadaju porodici nazvanoj SystemException.

Izuzetak SystemException je član porodice (klase) Exception.

Umesto da se izuzeci hvataju pojedinačno moguće je da imate rukovaoca koji hvata bilo koji izuzetak iz hijerarhije nasledjivanja.

Iskazi checked i unchecked, koji su namenjeni za aritmetiku celih brojeva i potencijalna prekoračenja, neće biti razmatrani u ovoj materiji.

Korišćenje finally bloka.

Način da se obezbedi da se iskaz uvek izvrši, bez obzira da li je izuzetak ispaljen ili ne, jeste da se iskaz napiše u okviru finally blok-a. Blok finally se piše odmah ispod try bloka ili odmah nakon poslednjeg rukovaoca (catch blok).

Ovo je veoma pogodno kada, na primer, treba osloboditi memorijske resurse (reader.Close()). Sve ovo je povezano i sa sakupljanjem otpadaka i upravljanjem resursima.

Page 17: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 17 oд 31

Jedan od načina, kojim se može obezbediti da univerzalni rukovalac izuzecima, prijavi probleme u programi je sledeći:

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Akademija { class Program { static void programMM() { // … } static void Main() { try { programMM(); } catch (Exception ex) { Console.WriteLine("Greska: {0}", ex.Message); } } } }

Repetitorijum.

Blok 1.

• Pojam algoritma. Istorija

• Proceduralno i OOP programiranje.

• Svojstva algoritma.

• Dizajn i analiza algoritama

• Načini prikazivanja algoritama.

• Klasifikacija i podela algoritama.

Blok 2.

• Korišćenje Microsoft Visual Studio 2019 programskog okruženja.

• Kreiranje jednostavne C# konzolne aplikacije.

• Objašnjenje i svrha imenovanih prostora (namespaces).

• Kreiranje jednostavne grafičke aplikacije u C#.

Page 18: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 18 oд 31

Blok 3.

• Elementi C# sitakse i semantike.

• Iskazi, ključne reči, identifikatori.

• Primitivni tipovi podataka. Deklaracija promenljivih.

• Rad sa promenljivim, operatorima i izrazima.

• Korišćenje Bulovih operatora

• Naredbe grananja (if ... else ...).

• Naredba višestrukog grananja (switch ... case).

Tabela 3.1. Vrste primitivnih tipova podataka ●

Tip podataka

Opis Veličina (bytes)

Opseg Primeri

int celi brojevi 4 -231 do 231-1 int count

count=42;

long celi brojevi (veći raspon)

8 -263 do 263-1 long mm

mm=43L;

float Realni brojevi sa pokretnim zarezom

4 +-1.5x10-45 do +-3.4x 1038

float mik

mik=0.42F;

Dovoljno da memoriše 6 do 7 decimala

double

Realni brojevi sa pokretnim zarezom dvostruke preciznosti

8 +-5.0 x 10-324 do +-1.7 x 10308

double a34 a34=0.42;

Dovoljno da memoriše 15 decimala

decimal Novčane vrednosti

7 28 značajnih cifara decimal pare pare=0.42M;

string Nizovi karaktera

2 bytes po znaku

Nije primenljivo string vest vest=”baba-roga”;

char Pojedinačni znak

2 0 do 216-1 char grill

grill=’x’

bool Logičke vrednosti

8 True (tačno) ili False (netačno=

bool pravda pravda=false;

Page 19: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 19 oд 31

Tabela 3.2. Operatori ●

Kategorija Operator Značenje Primer Rezultat ako je godine=42

Jednakost == Jednako godine==42 False

!= Nejednako age!= True

Relacioni < Manje od age<21 False

Relacioni <= Manje ili jednako age<=18 False

Relacioni > Veće od age>16 True

Relacioni >= Veće od age>=30 True

Unarni ! Logički NE !(True) False

Logički I && Uslovno AND (age<30)&&True False

Logički ILI || Uslovni OR (age<30)&&True True

= Dodeljivanje

Sintaksa iskaza if:

If(Bulov iskaz)

{

... blok komandi (ili jedna komanda/iskaz)

.... koje se isvršavaju, ako je Bulov iskaz tačan

}

else

{

.. blok komandi (ili jedna komanda/iskaz)

.... koje se isvršavaju, ako Bulov iskaz NIJE tačan

}

Page 20: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 20 oд 31

Kaskadni iskazi if

• Iskaz if se može ugnezditi unutar drugih if iskaza.

• Na ovaj način može se ulančati niz Bulovih iskaza, koji se ispituju jedna za drugim, sve dok jedan od njih ne bude procenjen kao true.

If(Bulov iskaz 1)

{

... blok komandi (ili jedna komanda/iskaz) koje

.... koje se isvršavaju,

ako je Bulov iskaz 1 tačan

}

else if (Bulov iskaz 2)

{

... blok komandi (ili jedna komanda/iskaz) koje

.... koje se isvršavaju

ako je Bulov iskaz 2 tačan

}

...

else

{

.. blok komandi koje (ili jedna komanda/iskaz)

.... koje se isvršavaju

ako je ijedan od Bulov iskaza NIJE tačan

}

If(dan==1)

{

nazivDana=“Ponedeljak“;

}

else if (dan==2)

{

nazivDana=“Utorak“;

}

else if (dan==3)

{

nazivDana=“Sreda“;

}

else if (dan==4)

nazivDana=“Cetvrtak“;

else if (dan==5)

nazivDana=“Petak“;

else if (dan==6)

nazivDana=“Subota“;

else

{

nazivDana=“Nedelja“;

}

Page 21: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 21 oд 31

VIŠESTRUKO GRANANJE - switch

Ponekad, kada se pišu kaskadni if iskazi, svi if podsegmenti izgledjau slično, zato što svi ispituju identični iskaz.

Reč je o višestrukom uslovnom grananju: Ovo se realizuje switch strukturom.

switch(kontrolniIzraz) { case konstantniIzraz1: iskaz; ... break;

case konstantniIzraz2: iskaz; ... break;

case konstantniIzrazX: iskaz; ... break; ... default: iskaz; ... break; }

Kontrolni iskaz mora biti u zagradi. Izračunava se samo jednom. Koristi se onaj case blok čija je vrednost jednaka vrednosti kontrolnog iskaza. U case bloku (case labeli) izvršavaju se komande (iskazi) sve do iskaza break koji obezbeđuje izlazak iz case strukture. Nakon izlazka programsko upravljanje se prenosi na prvu komandu nakon zatvorene vitičaste zagrade switch strukture.

Ukoliko nijedna od vrednosti konstantniIzrazX nije jednaka vrednosti kontrolnogIskaza upravljanje se predaje default bloku.

Svaki konstantniIzrazX mora biti jedinstven.

Ukoliko se vrednost kontrolnogIskaza ne podudari ni sa jednom vrednošću konstantniIzrazX a nema default bloka, upravljanje se predaje prvoj komandi nakon zatvorene vitičaste zagrade switch strukture.

Page 22: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 22 oд 31

Primer: switch struktura

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AISP_B3primer9P { class Program { static void Main(string[] args) { char ch; Console.WriteLine("Uneti slovo alfabeta:"); ch = Convert.ToChar(Console.ReadLine()); switch (Char.ToLower(ch)) { case 'a': case 'e': case 'i': case 'o': case 'u': Console.WriteLine("Samoglasnik"); break; default: Console.WriteLine("Nije samoglasnik"); break; } } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AISP_B3primer8P { class Program { static void Main(string[] args) { int broj; Console.WriteLine("Unesite postanski broj:"); broj = Convert.ToInt32(Console.ReadLine()); switch (broj) { case 34000: Console.WriteLine("Kragujevac"); break; case 31000: Console.WriteLine("Uzice"); break; case 32000: Console.WriteLine("Cacak"); break; default: Console.WriteLine("Nepoznat postanski broj"); break; } } } }

Page 23: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 23 oд 31

Blok 4.

• Upotreba while petlji.

• Upotreba for iskaza (petlji).

• Upotreba do iskaza iteracije.

• Grafiče aplikacije sa upotrebom petlji...

• Debugging - elementi

Kreiranje while iskaza.

Iskaz while se koristi da bi se neki iskaz ili blok komandi ponovio više puta sve dok neki uslov ne bude zadovoljen.

Incijalizacija // inicijalizacija kontrolne promenljive

while (logički iskaz)

{

iskaz;

...

iskaz;

} • Logički iskaz (koji mora biti u zagradama) se izračunava, i ako je tačan, iskazi u bloku,

koji je ograničen vitičastim zagradama, se izvršavaju, a zatim se logički iskaz ponovo proverava. Ako je iskaz i dalje tačan, blok komandi se ponavlja, a zatim se logički iskaz iznova proverava.

• Proces se ponavlja sve dok logički iskaz ne postane netačan, i tada iskaz while prekida rad.

• Program dalje predaje upravljanje prvom iskazu ispod iskaza while.

• Moguće je da se iskazi u telu petlje ne izvrše niti jedan put. Ovo se dešava u slučaju kada je logički iskaz inicijalno netačan (false).

Kreiranje for iskaza.

• Za razliku od while iskaza koji podrazumeva prethodnu inicijalizaciju kontrolne promenljive može se koristiti formalniji pristup gde se u jednoj stukturi vrši inicijalizacija kontrolne promenljive, postavlja logički iskaz i kod koji ažurira kontrolnu promenljivu:

Page 24: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 24 oд 31

NAPOMENA: Lista argumenata for iskaza mora biti odvojena sa znakom ;

for (inic. logičke var.; logički iskaz; ažur. kontrolne var.)

{

iskaz;

...

iskaz;

}

Inicijalizacija se pojavljuje samo jednom, na samom početku petlje. Zatim, ako je logički iskaz vrednuje kao true, blok komandi sa iskazima se izvršava. Vrši se ažuriranje kontrolne promenljive, a logički iskaz se ponovo proverava. Ukoliko je vrednost logičkog iskaza još uvek true, blok komadni u telu for petlje će se ponovo izvršiti. Kontrolna promenljiva ponovo se ažurira, logički izraz se ponovo izračunava, odnosno određuje se njegova istinitosna vrednost itd.

• Iskazi u telu petlje se uvek izvršavaju pre nego što dođe do ažuriranja kontrolne promenljive.

• U okviru for petlje mogu se inicirati vrednosti brojačkih promenljivih.

• Promenljiva ima područje važenja samo u telu for iskaza i nestaje kada se for iskaz završi.

Kreiranje do iskaza.

• Iskazi while i for tretiraju svoje logičke iskaze na početku petlje.

• Ovo znači da ako logički iskaz ima vrednost false na prvom ispitivanju, telo petlje se neće izvršiti nijednom.

• Kod do petlje mora doći do bar jednog izvršavanja tela petlje.

Page 25: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 25 oд 31

inicijalizacija

do

{

iskaz;

iskaz;

} while (logički iskaz)

• Pored toga što se iskaz break može koristiti za izlazak iz switch iskaza, na sličan način se može koristiti za izlazak iz iterativnih ciklusa: while, for i do.

• Kada se sa break izađe iz petlje, petlja prestaje sa radom a upravljanje se predaje prvoj komandi (iskazu) nakon petlje.

Blok 5.

• Šta je metoda?

• Deklarisanje metoda.

• Pozivaje metoda. Korišćenje argumenata i parametara metoda.

• Kako da se prenose informacije metodi?

• Kako da se vraćaju informacije iz metode pomoću iskaza return?

• Područje važenja promenljivih. Scope

• Preopterećivanje metoda.

• Pisanje metoda pomoću čarobnjaka: / Quick Actions and Refactoring Wizard /

• Refaktorisanje koda

Sintaksa za definisanje C# metode je:

tipRezultata nazivMetode(listaParametara) { iskaz; ... iskazi koji čine telo metode... }

Page 26: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 26 oд 31

• Iskazi tela metode su linije koda koje se pokreću kada se metoda pozove. Nalaze se između vitičastih zagrada.

• tipRezultata je tip podatka koji metoda vraća kao rezultat obrade. Ako metoda ne vraća nikakvu vrednost mora se upotrebiti ključna reč void (=prazan)(ovo liči na soubroutune)

• nazivMetode se koristi za pozivanje metode // Koristiti camelSense notaciju

• listaParametara je opciona i ona opisuje tipove i nazive podataka (tipove i nazive varijabli) koje možete preneti metodi radi obrade. Pri navođenju parametara prvo se navodi tipVarijable a potom imeVarijable, potom zapeta itd. (za druge varijable, ako ih ima više...)

• sve metode moraju biti napisane u okviru neke klase

• metode ne mogu, pri definisanju bilo tipa metode, bilo tipa parametara u listi parametara navoditi tip var. Dakle, tipovi moraju biti eksplicitno navedeni.

Metoda koja vraća vrednost: //funkcija

tipRezultata imeMetode(listaParametara) { iskaz; ... iskazi koji čine telo metode...; return izrazKojimSeIzracunavaRezultat; }

Napominje se da izrazKojimSeIzracunavaRezultat mora biti isti po tipu kao tipRezultata koji je dodeljen metodi.

Metoda koja ne vraća vrednost: //subroutine

Ukoliko metoda ništa ne vraća onda struktura metode može biti:

void imeMetode(listaParametara) { iskaz; ... iskazi koji čine telo metode...; return; }

Ukoliko metoda ništa ne vraća, može se izostaviti iskaz return.

Page 27: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 27 oд 31

PODRUČJA VAŽENJA promenjivih / scope - polje delovanja

• Područje važenja odnosi se kako na promenjive tako i na metode.

• Područje važenja je vezano za lokaciju deklaracije koja uvodi identifikator u program (dakle zavisi od mesta na kome je nova promenljiva ili metoda uvedena u program).

• Kada se promenjivoj može pristupitu na određenoj lokaciji u programu, kaže se da je promenjiva u području važenja (scope) te lokacije.

Lokalno područje važenja promenjive (lokalna promenjiva, local variable, ranije proceduralna varijabla):

• Lokalno područje važenja je Scope definisan sa telom metode odnosno otvorenom i zatvorenom vitičastom zagradom.

• Promenjiva nastaje u metodi... može je koristiti kod u toj metodi ... ali kada se metoda završi tada promenjiva nestaje iz memorije (pojam životnog veka varijable: lifetime).

Lokalnim varijablama se, dakle, može pristupiti samo iskazima iz tela metode a ne van nje.

void nazivMetode1(listaParametara) { int i; ... iskazi koji čine telo metode...; return; } void nazivMetode2(listaParametara) { int k; k=i*i // greska …. promenjiva i nije u podrucju vazenja ... iskazi koji čine telo metode...; }

Područje važenja promenjive na nivou KLASE

• Leva i desna vitičasta zagrada u telu klase definišu područje važenja.

• Svaka promenjiva koja se definiše u telu klase ali ne u telu metode ima važenje na nivou čitave klase.

• Takve promenjive, sa područjem važenja na nivou klase, nazivamo POLJIMA (fields).

• Polja se koriste za razmenu informacija između metoda u toj klasi.

Page 28: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 28 oд 31

class Primer { ... int n=0; // polje na nivou klase ...

void nazivMetode1(listaParametara)

{ .. iskazi koji čine telo metode...; n++ // varijabla n je dostupna svim metodama u klasi

return; } void nazivMetode2(listaParametara) { int i=50, k; k=i*n // varijabla n je dostupna svim metodama u klasi ... iskazi koji čine telo metode...; } ...

}

Preopterećivanje METODA

• Ukoliko dva identifikatora imaju isti naziv (a za metode i isti broj, tip i raspored parametara) i definisani su u istom području važenja, za njih se kaže da su preopterećeni ili overloaded (važi kako za varijable tako i za metode).

Primer: Preoptereće metode...

Klasa Metoda

Console. WriteLine()

• Tokom kompajliranja, kompajler analizira tipove i broj i redosled argumenata koje programer prosleđuje metodi, a zatim poziva verziju metode koja odgovara zadatom setu parametara.

• NE MOŽE se preklopiti tip izlaza koji daje metoda. Dakle, ne mogu se napraviti i preklopiti dve metode sa istim imenom i skupom argumenata, koje se razlikuju samo po tipu izlaznog rezultata.

• Preopterećivanje je prvenstveno korisno kada se ista operacija izvodi nad različitim tipovima podataka (primer: Console.WriteLine).

• Kompajler koristi broj i tip parametara, da bi odabrao odgovarajuću metodu u datom kontekstu.

Page 29: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 29 oд 31

Pisanje metoda pomoću čarobnjaka: / Quick Actions and Refactoring Wizard /

• Ponekad je, u cilju unapređenja produktivnosti, pogodno koristi Quick Actions and Refactoring Wizard (čarobnjak) za generisanje metoda.

Refaktorisaje koda (refabrikovanje kod-a).

Ova tehnika je veoma korisna kada se često ponavljaju pojedini delovi koda.

Blok 6.

• Korišćenje Expression-bodied Methods za zapisivanje metode

• Vraćanje višestrukih vrednosti iz metode. Tuples

• Korišćenje opcionih parametara u metodama i korišćenje imenovanih argumenata.

• Greške i izuzeci.

• Repetitorijum.

Zapisivanje metode u notaciji: Expression-bodied method

• Pojedine metode mogu biti veoma jedostavne, odnosno mogu imati samo po jednu liniju koda (iskaz) u svom telu. Na primer, one mogu, putem parametara, preuzeti vrednosti argumenata iz pozivajuće procedure a potom realizovati nekakav proračun, bez neke dodatne komplikovanije logike i vratititi rezultat imenu metode. U takvim slučajevima može se koristiti i jednostavija (kompaktnija) notacija za zapisivanje metode (Expression-bodied Methods).

Primeri:

int zbir(int brojA, int brojB)=>brojA+brojB;

void prikazRezultata(string poruka)=>Console.WriteLine(”Rezultat je: ”, poruka);

void showResult(int answer) => result.Text =answer.ToString();

• Operator =>, podseća na pipe operator u nekim jezicima kao što je, na primer, R

• Šta je razlika? U odnosu na klasičan način zapisivanja metode: o operator =>, ukazuje na iskaz koji predstavlja telo metode, umesto da se telo

metode definiše vištičastih zagradama. o u zapisu metode ne postoji iskaz return.

• Metode zapisane na ovaj način funkcionišu potpuno isto kao i metode zapisane na klasiča način. Ipak, ponekad, ovakav način zapisivanja može poboljšatai čitljivost kod-a, jer se uklanja potreba za velikim brojem vitičastih zagrada ({,}).

Page 30: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 30 oд 31

Vraćanje višestrukih vrednosti kao rezultat metode. Tuples

Primer strukture metode koja vraća više vrednosti:

(int, int) nazivMetodeSaViseRezultata(listaParametara) { int podatak1; int podatak2;

...iskazi koji izracunavaju

...vrednosti za podatak1 i podatak2 return (podatak1, podatak2)

}

Kada se poziva metoda sa višestrukim povratnim vrednostima onda se obezbeđuje isti broj elemenata u listi koji prihvataju vrednosti vraćene iz metode:

int retpodatak1, retpodatak2; (retPodatak1, retPodatak2)=nazivMetodeSaViseRezultata(...);

Korišćenje opcionih parametara u metodama i imenovanih argumenata.

Upravljanje greškama. Izuzeci.

Rukovanje izuzecima realizuje se pomoću ključnih reči: try, catch i finally.

Jedan od načina, kojim se može obezbediti da univerzalni rukovalac izuzecima, prijavi probleme u programi je sledeći:

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Akademija { class Program { static void programMM()

Page 31: Algoritmi Strukture podataka Uvod u OOP · 2020. 4. 24. · Osnove dizajna i analize algoritama Autor(i): Dejan Živković Godina izdavanja: 2007. 5. Algoritmi i strukture podataka

АКАДЕМИЈА СТРУКОВНИХ СТУДИЈА ЗАПАДНА СРБИЈА Одсек Ужице 31000 Ужице • Трг Светог Саве 34 www.vpts.edu.rs [email protected]

Предмети: Увод у објектно програмирање Алгоритми и структуре података

др Милован Миливојевић страна 31 oд 31

{ // … } static void Main() { try { programMM(); } catch (Exception ex) { Console.WriteLine("Greska: {0}", ex.Message); } } } }

●●● ●●●