algoritmi strukture podataka uvod u oop · kreirati grafičku aplikaciju za određivanje: zapremine...

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

Upload: others

Post on 16-Sep-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

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

Uvod u OOP

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

Page 2: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

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 · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

Sadržaj 5. BLOKA: METODE

• Š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

Deklarisanje i kreiranje METODA

• Metoda je imenovani niz iskaza. Naziv metode bi trebalo da bude smisleni identifikator, koji ukazuje na sveukupnu svrhu metode. Metode je jedan od osnovnih pojmova, odnosno fundamentalni i moćni mehanizam OOP.

• Slična je funkcijama i subroutinama kod proceduralnog programiranja, pri čemu bi metode koje vraćaju vrednost odgovarale funkcijama a metode koje ne vraćaju vrednost sabrutinama (subroutines).

• Metoda ima svoj naziv i telo. Pozivanjem metode realizuju se iskazi unutar tela metode.

• Metodama se mogu dati podaci za obradu a metode mogu da vrate neku vrednost.

Sintaksa za definisanje C# metode je:

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

• 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)

Page 4: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

• 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.

Primer:

Metoda zbir, ima dva celobrojna parametra: broj1 i broj 2, a kao rezultat vraća celobrojnu vrednost, samom imenu metode (zbir):

int zbir(int broj1, int broj2) { iskaz; ...

return broj1+broj2; }

Page 5: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

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.

Pozivanje metode: SINTAKSA

rezultat= nazivMetode(listaArgumenata);

• Naziv metode u pozivajućem iskazu mora biti isti kao naziv koji je dodeljen metodi tokom deklarisanja i kreiranja metode.

• Klauzula rezultat je opciona.

• Ako je metoda tipa void, klauzulu rezultat treba izostaviti.

• Ako se klauzula rezultat izostavi a metod vraća rezultat, metod će se izvršiti, rezultat će biti vraćen ali odbačen.

• listaArgumenata obezbeđuje opcione informacije koje metoda prihvata. Mora se (u osovnoj formi korišćenja!!!) obezbediti po jedan argument za svaki parametar i vrednost svakog argumenta mora, po tipu, biti kompatibilna sa odgovarajućim parametrom.

• Argumenti u listi argumenata se odvajaju zapetom (ako ih ima više).

• Zagrade se koriste, čak iako metoda nema argumente.

Napomena:

U domenu proceduralnog programiranja (funkcije i subroutine), pojmovima parametri i argumenti, odgovarali su pojmovi: fiktivni argumenti i stvarni argumenti, respektivno.

Primeri pozivanja metoda:

int rezultat=ucitavanje(234,45); // metoda pozvana u naredbi dodele

prikaziRezultat(ucitavanje(234,45)); // metoda pozvana kao argument druge metode

Page 6: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

Primer 1:

Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine: poluprečnik donje osnove, visina (visina zarubljene kupe) i poluprečnik gornje osnove u slučaju zarubljene kupe.

Valjak Zarubljena kupa Kupa

Izgled forme u režimu Design i pregled naziva ugrađenih kontrolnih obejkata dat je na slici 5.1.

Podešavanja svojstava kontrolnih objekata, su realizovana po metodologiji opisanoj u BLOK-u 4., primer 6 (Primer koda fajla AISP_B4primer6P.cs)

U nastavku je dat kod, sa primenom metoda.

Napomena: kod u komentarima

/*lblSelTelo.Text = nazivTela; string zapis = String.Format("V={0:F3} ; P={1:F3}", zapremina, povrsina); lblRezultat.Text = zapis;*/

je ponovljen više puta u cilju očiglednosti i zbog pojašnjenja uloge i značaja metoda.

Page 7: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

(a) (b)

Slika 5.1. Izgled Forme u Desgin mod-u (a), sa prikazom naziva kontrolnih objekata (b)

● Primer: AISP_B5primer1P ●

Primer koda fajla AISP_B5primer1P.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace AISP_B5primer1P { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

Page 8: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

private void btnRezultat_Click(object sender, EventArgs e) { string nazivTela; /*Utvrdjivanje opcije (greom. tela) koje je odabrao korisnik*/ if (rbValjak.Checked == true) { nazivTela = "Valjak"; } else if (rbKupa.Checked == true) { nazivTela = "Kupa"; } else { nazivTela = "Zar. kupa"; } //ucitavanje vrednosti r1-radijus donje baze i h-visina double r1 = double.Parse(txtR1.Text); double h = double.Parse(txtH.Text); switch (nazivTela) { case ("Valjak"): { txtR2.Text = " "; //povrsina baze se izracunava pomocu metode double zapremina = povrsinaBaze(r1) * h;//V=B*h //P=2*B+M=2*B+2*r*Pi*h double povrsina = 2 * povrsinaBaze(r1) + (2 * r1 * Math.PI) * h; /*lblSelTelo.Text = nazivTela; string zapis = String.Format("V={0:F3} ; P={1:F3}", zapremina, povrsina); lblRezultat.Text = zapis;*/ stampaRezultata(nazivTela, zapremina, povrsina); //metoda break; } case ("Kupa"): { txtR2.Text = " "; double zapremina = (1.00 / 3.00) * povrsinaBaze(r1) * h;//V=(1/3)*B*h double s = Math.Sqrt(r1 * r1 + h * h); //P=B+M=2*B+2*r*Pi //M=s*r1*Pi double povrsina = povrsinaBaze(r1) + s * r1 * Math.PI; /*lblSelTelo.Text = nazivTela; string zapis = String.Format("V={0:F3} ; P={1:F3}", zapremina, povrsina); lblRezultat.Text = zapis;*/ stampaRezultata(nazivTela, zapremina, povrsina); //metoda break; } default:;

Page 9: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

{ double r2 = double.Parse(txtR2.Text); //s^2=h^2+(r1-r2)^2 double s = Math.Sqrt(h * h + Math.Pow((r1 - r2), 2)); //V=(h/3)*(B1+B2+sqrt(B1*B2)) double pB1 = povrsinaBaze(r1);//metoda racuna pov. za B1 double pB2 = povrsinaBaze(r2);//metoda racuna pov. za B2 double zapremina = (h / 3.00) * (pB1 + pB2 + Math.Sqrt(pB1 * pB2)); //P=B1+B2+M //M=s*(r1+r2)*Pi double povrsina = pB1 + pB2 + s * (r1 + r2) * Math.PI; /*lblSelTelo.Text = nazivTela; string zapis = String.Format("V={0:F3} ; P={1:F3}", zapremina, povrsina); lblRezultat.Text = zapis;*/ stampaRezultata(nazivTela, zapremina, povrsina);//metoda prikaz rez. break; } } potpis(); } /*KREIRANE METODE ---- METODE pozicionirati VAN btnRezultat_Click !!! Redosled metoda nije bitan */ private double povrsinaBaze(double r)//metoda za racunanje povrsine baze //metoda kao funkcija { return Math.Pow(r, 2) * Math.PI; } // metoda koja stampa rezultat void stampaRezultata(string nazivTela, double v,double p) // metoda kao subroutine { lblSelTelo.Text = nazivTela; string zapis = String.Format("V={0:F3} ; P={1:F3}", v, p); lblRezultat.Text = zapis; } //primer metode bez argumenata void potpis() { MessageBox.Show("Akademija Zapadna Srbija"); } } }

Page 10: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

Kao što se može videti u prethodnom kod-u, u realizaciji zadataka kreirane su tri metode:

• povrsinaBaze za izračunavanje površine kruga zadatog poluprečika • stampaRezultata za prikaz rezultata (naziv odabranog tela, zapremine i površine) • potpis za prikaz poruke u MessageBox-u.

Metoda povrsinaBaze ima jedan paramater dvostruke tačnosti koji predstavlja poluprečnik kruga (r) za koji se određuje površina. Ovom parametru odgovara argument, takođe dvostruke tačnosti, koji će biti prosleđen iz pozivajuće metode (u razvijenom primeru: r1). Površina se izračunava primenom statičke klase Math, koja sadrži raznovrsne matematičke funkcije, pa i funkciju: Mat.Pow(r,2)=r2. Ova klasa sadrži i konstantu PI. Izračunata vrednost se vraća (return) imenu metode: povrsinaBaza, koja takođe, mora biti dvostruke tačnosti, jer deficija metode ukazuje da je rezultat dvostuke tačnosti. Metoda je više puta pozivana iz pozivajuće procedure, vezane za događaj btnRezultat_Click, koji se odigrava kada korisik klikne da komandno dugme Rezultat. Ovom primeru metode odgovara pojam funkcije u proceduralnom programiranju. private double povrsinaBaze(double r)//metoda za racunanje povrsine baze //metoda kao funkcija { return Math.Pow(r, 2) * Math.PI; }

Metoda stampaRezultata ima tri paramatra: jedan parametar tipa string: nazivTela, što odgovara argumentu nazivTela, koji se prosleđuje iz pozivajuće procedure a odgovara geometrijskom telu koga je korisnik odabrao, kao i dva parametra dvostruke tačnosti, koji predstavljaju zapreminu (v) i površinu odabranog tela (p). Parametru v odgovara argument dvostruke tačnosti, koji će biti prosleđen iz pozivajuće procedure (u razvijenom primeru: zapremina). Parametru p odgovara argument, takođe dvostruke tačnosti, koji će, takođe, biti prosleđen iz pozivajuće procedure (u razvijenom primeru: povrsina). Parametar nazivTela se prosleđuje svojstvu Text, kontrolnog objekta lblSelTelo (labela koji prikazuje koje geometrijsko telo je selektovano). Metoda Format klase String, formatira string varijablu zapis, koja će se prikazati u labeli za rezultat (lblRezultat), odnosno koja će biti pridružena svojstvu Text, ove labele. Metoda prikazuje rezultate, pa zbog toga nema povratnu vrednost (tipa je void). Ova metoda odgovara pojmu subroutine u proceduralnom programiranju. void stampaRezultata(string nazivTela, double v,double p) // metoda kao subroutine { lblSelTelo.Text = nazivTela; string zapis = String.Format("V={0:F3} ; P={1:F3}", v, p); lblRezultat.Text = zapis; }

Metoda potpis() nema paramatara: ona samo prikazuje poruku u MessageBox-u, i ne vraća nikakav rezultata u pozivajuću proceduru.

Page 11: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

Izgled Forme za primer AISP_B5primer1P je data na slici 5.2.

Slika 5.2. Izgled Forme pri izvršavaju programa ● Primer: AISP_B5primer1P ●

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.

• Moguće je definisati područje važenja.

Page 12: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

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 13: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

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.

Page 14: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

• 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.

Primer 2:

Kreirati grafičku aplikaciju za određivanje: zapremine (V) valjka i sfere ako su zadate sledeće veličine: visina valjka (h) i poluprečnik osnove valjka(poluprečnik sfere) (r). Koristiti preopterećene metode.

Valjak Sfera

, ,

Izgled forme u režimu Design i pregled naziva ugrađenih kontrolnih objekata dat je na slici 5.3.

Podešavanja svojstava kontrolnih objekata, su realizovana po metodologiji opisanoj u BLOK-u 4., primer 6 (Primer koda fajla AISP_B4primer6P.cs)

U nastavku je dat kod, sa primenom preopterećenih metoda.

Napomena: Primeri preopterećenih metoda

double povrsina(double r, double h)//2*B+M

{

return 2 * povrsinaBaze(r) + (2 * r * Math.PI) * h;

}

double povrsina(double r)//4*r^2*PI { return 4 * povrsinaBaze(r); } // povrsinaBaze(r) je metoda za izracunavanje površine kruga poluprečnika r

Page 15: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

(a) (b)

Slika 5.3. Izgled Forme u Desgin mod-u (a), sa prikazom naziva kontrolnih objekata (b)

● Primer: AISP_B5primer2P ●

Primer koda fajla AISP_B5primer2P.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;

namespace AISP_B5primer2P { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

Page 16: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

private void btnRezultat_Click(object sender, EventArgs e) { string nazivTela; /*Utvrdjivanje opcije (greom. tela) koje je odabrao korisnik*/ potpis(); if (rbValjak.Checked == true) { nazivTela = "Valjak"; } else { nazivTela = "Sfera"; } //ucitavanje vrednosti: r-radijus i h-visina double r = double.Parse(txtR.Text); double h = double.Parse(txtH.Text); switch (nazivTela) { case ("Valjak"): { double v = zapremina(r,h);//preoterecena m. double p = povrsina(r,h);//preoterecena m. stampaRezultata(nazivTela, v, p); //metoda break; } case ("Sfera"): { double v = zapremina(r);//preoterecena m. double p = povrsina(r);//preoterecena m. stampaRezultata(nazivTela, v, p); //metoda break; } default:; { break; } } } //*KREIRANE METODE---- private double povrsinaBaze(double r) { return Math.Pow(r, 2) * Math.PI; } //metode za valjak double zapremina(double r, double h) { return h * povrsinaBaze(r); }

Preopterećene metode:

double zapremina(double r, double h) //valjak

double zapremina(double r) //sfera

Page 17: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

double povrsina(double r, double h) { return 2 * povrsinaBaze(r) + (2 * r * Math.PI) * h; } //metode za sferu double zapremina(double r)//(4/3)*r^3*PI { return (4.0/3.0)*Math.Pow(r,3)*Math.PI; } double povrsina(double r)//4*r^2*PI { return 4 * povrsinaBaze(r); } // metoda koja stampa rezultat void stampaRezultata(string nazivTela, double v,double p) { lblSelTelo.Text = nazivTela; string zapis = String.Format("V={0:F3} ; P={1:F3}", v, p); lblRezultat.Text = zapis; } //primer metode bez argumenata void potpis() { MessageBox.Show("Akademija Zapadna Srbija"); } } }

U prethodnom primeru, pored ostalih (metoda stampaRezultata i metoda potpis, koje su opisane u primeru AISP_B5primer2P.cs), kreirana su i dva para preopterećenih metoda::

• double povrsina(double r, double h) //valjak

• double povrsina(double r) //sfera

kao i

• double zapremina(double r, double h) //valjak

• double zapremina(double r) //sfera

Može se uočiti, da preopterećene metode imaju isto ime i povratni tip podataka (podatak koji metode vraćaju kao rezultat), ali da se broj argumenata razlikuje.

Preopterećene metode:

double povrsina(double r, double h) //valjak

double povrsina(double r) //sfera

Page 18: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

Na primer, ako se iz pozivajuće procedure (događaj: btnRezultat_Click) pozove metoda za površinu sa double p=povrsina(5,7.3), kompajler će prepoznati da metoda ima DVA argumenta dvostuke tačnosti i pozvaće odgovarajuću metodu: double povrsina(double r, double h) sa dva parametra dvostruke tačnosti, i pomoću nje izračunati površinu valjka.

Sa druge strane ako korisik odabere sferu, iz pozivajuće procedure (događaj: btnRezultat_Click), biće pozvana metoda za površinu sa double p=povrsina(5), kompajler će prepoznati da metoda ima JEDAN argument dvostuke tačnosti i pozvaće odgovarajuću metodu: double povrsina(double r) sa jednim parametrom dvostruke tačnosti, i pomoću nje izračunati površinu sfere.

Izgled Forme aplikacije za primer AISP_B5primer2P je dat na slici 5.4.

Slika 5.4. Izgled Forme pri izvršavaju programa ● Primer: AISP_B5primer2P ●

Page 19: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

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

Kreiranje metoda je uobičajena aktivnost pri kreiranju aplikacija. U prethodnim odeljicima, je prikazano kako se metode deklarišu, definišu, struktuiraju i pozivaju iz roditeljske procedure.

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

Primer 3:

Kreirati konzolnu aplikaciju za određivanje prihoda od održanih časova nastave iz oblasti Algoritama i OOP: unosi se cena po času, broj održanih časova a daje prikaz prihoda bez PDV-a.

Sledi kod konzolnog programa a potom opis postupa primene Wizard-a>>>

Primer koda fajla AISP_B5primer3P.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AISP_B5primer3P { class Program { const double pdv=0.2;//pdv-porez na dodatu vrednost …. KORAK 1 static void Main(string[] args)// KORAK 2 {

Console.WriteLine("-Akademija ZS - Odsek UZICE-"); Console.WriteLine("-***************************-"); double cenaPoCasu = ucitavanjeDouble("Unesite cenu casa: "); int brojCasova = ucitavanjeInt("Unesite broj casova: "); zapisPrihoda(obracunPrihoda(cenaPoCasu, brojCasova));

} private static double ucitavanjeDouble(string v) // KORAK5 {

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

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

Page 20: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

private static double obracunPrihoda(double cenaPoCasu, int brojCasova) //KORAK7 { return cenaPoCasu * brojCasova; }

private static void zapisPrihoda(double v) //KORAK8 { double prihod = v / (1.00+pdv); Console.WriteLine("Prihod profesora je {0:F2}", prihod); } } }

Postupak:

• KORAK1 - deklarisati const pdv=0.2;

• KORAK2 – uneti iskaze u metodu main; Nakon unošenja iskaza, sve metode u ovim komandama biće podvučeni talasavom crvenom linijom jer još uvek ne postoje

• KORAK3 -DTM (desni klik mišem na metodu: ucitavanjeDouble("Unesite cenu casa: "). Pojavljuje se kontekstni meni sa Quick Actions and Refactoring Wizard-om (slika 5.5)

Slika 5.5. Pokretanje Quick Actions and Refactoring Wizard-a ● Primer: AISP_B5primer31P ●

Page 21: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

• KORAK4: LTM (levi taster mišem na čarobnjak Quick Actions and Refactoring (slika 5.5), nakon čega čarobnak ispituje poziv metode ucitavanjeDouble, konstatuje tip njenih parametara i vrednosti rezultata i generiše metodu sa podrzumevanom (default) implementacijom (slika 5.6):

Slika 5.6. Metoda ucitavanjeDouble sa default imlementacijom ● Primer: AISP_B5primer31P ●

• KORAK5: LTM (levi taster mišem na Generate method ’Program.ucitavanjeDouble’ i u novodobijenoj metodi umesto:

throw new NotImplementedException(); uneti iskaze kao u sledećem kod-u: uneti

static void Main(string[] args) { Console.WriteLine("-Akademija ZS - Odsek UZICE-"); Console.WriteLine("-***************************-"); double cenaPoCasu = ucitavanjeDouble("Unesite cenu casa: "); int brojCasova = ucitavanjeInt("Unesite broj casova: "); zapisPrihoda(obracunPrihoda(cenaPoCasu, brojCasova)); } private static double ucitavanjeDouble(string v) { Console.Write(v);//kurzor se zadrzava u istom redu string linija = Console.ReadLine(); return double.Parse(linija);

}

• KORAK6: Wizard postupak kreiranja metoda, po sličnoj metodologiji, realizovati i za metodu ucitavanjeInt("Unesite broj casova: ")

Page 22: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

• KORAK7: Wizard postupak kreiranja metoda, po sličnoj metodologiji, realizovati i za metodu obracunPrihoda(cenaPoCasu, brojCasova) u okviru main metode. Dobiće se: private static object obracunPrihoda(double cenaPoCasu, int brojCasova) { throw new NotImplementedException(); }

Može se zapaziti da čarobnjak, koristi nazive prosleđenih argumenata kako bi generisao nazive parametara i odgovarajuće tipove(ako je potrebno ovo se može izmeniti). Ali čarobnjak je definisao i povratni tip kao object, odnosno nije uspeo da deklariše tip podatka koji se vraća kao rezultat (i dodeljuje nazivu metode). Stoga je potrebno tip object, prilagoditi u odgovarajući tip (double) a akon toga dodati i iskaz između vitičastih zagrada:

private static double obracunPrihoda(double cenaPoCasu, int brojCasova) { return cenaPoCasu * brojCasova; }

KORAK8: Nako obračuna prihoda pomoću čarobnjaka se generiše i metoda zapisPrihoda(double v) i unose iskazi kojima se podešava prikaz za štampu rezultata.

Dakle, čarobnjak Quick Actions and Refactoring, omogućava brže generisanje kod-a, ali zahteva i sticanje veštine i rutine. Svakako, u smislu produktivnosti, taj trud se isplati.

Refaktorisaje koda (refabrikovanje kod-a).

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

Za deo koda koji se ponavlja potrebno je:

• Selektovati blok iskaza koji se ponavljaju i koji bi potencijalno mogli biti prepakovani u metod

• DTM → Quick Action an Refactoring → Extract Method

• Dobija se Preview prikaz koji ukazuje na novu metodu koja će biti kreirana (NeMethod), kao i na pozivajući iskaz u roditeljskoj proceduri, koji sadrži naziv ovog novog metoda: newMethod (slika 5.7):

Page 23: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

Slika 5.7. Refaktorisanje kod-a - Extract Method ● Primer: AISP_B5primer31P ●

• Dijaloški prozor se otvara sa predlogom da se promeni generičko ime nove metode (slika 5.8):

Slika 5.8. Refaktorisanje - Dijalog za promenu generičkog imena nove metode ● Primer:

AISP_B5primer31P ●

Page 24: Algoritmi Strukture podataka Uvod u OOP · Kreirati grafičku aplikaciju za određivanje: zapremine (V) i površine (P) valjka, kupe i zarubljene kupe, ako su zadate sledeće veličine:

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

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

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

I ovaj čarobnjak poseduje snažne mehanizme za prepoznavanje parametara i njihovih tipova, tako da se brzina produkcije kod-a može značajno unaprediti.

U cilju preglednosti pojedini segmenti kod-a mogu se sažeti pomoću znaka minus, ( - ), u kvadratićima na levoj strani kod-a. Na slici 5.9, kao primer, sažet je prikaz svih metoda, osim glavne metode main:

Slika 5.9. Sažimanje prikaza metoda u Visual Designer-u ● Primer: AISP_B5primer31P ●

Ako se poenter miša, zadrži iznad oznake tri tačkice (...) neke metode, prikazaće se privremeni prozor sa sadržajem te metode (primer: dole desno, slika 5.9).

●●● ●●●