Vezbe 02 - Konstruktori, Set i Get, ToString

28
VEŽBE 02 – OSNOVNI KONCEPTI OOP // klasa kao struktura class Auto { // polja public int godiste; public String boja; public String ostecenje; }; //kompletna klasa class Auto { // polja private int godiste; private string boja; protected String ostecenje; // konstruktori public Auto(){…} public Auto(int g, int b, int o){…} // metode public void start(){…} public int ubrzanje(){…} public void stop(){…} }; Osnovni koncepti OOP Apstrakcija Enkapsulacija Nasleđivanje Polimorfizam Apstrakcija Postupak kojim se unutrašnja složenost objekta skriva od spoljnjeg sveta. Postupak kreiranja jednostavne reprezentacije nečeg komplikovanog. Postoje dve strane svakog objekta: o ono što radi: što je obično poznato o način na koji radi: koji je obično nepoznat Zavisi od perspektive korisnika Iterativni proces: da bi se pronašao najbolji i najtačniji opis objekta, kao rešenje za dati problem, obično je potrebno proći nekoliko koraka. Na primer: napraviti aplikaciju koja će se koristiti u bibliotekama - Šta su elementi knjige? - Iz perspektive bibliotekarke: 1

description

Programski jezici

Transcript of Vezbe 02 - Konstruktori, Set i Get, ToString

Page 1: Vezbe 02 - Konstruktori, Set i Get, ToString

VEŽBE 02 – OSNOVNI KONCEPTI OOP

// klasa kao struktura

class Auto {// polja public int godiste; public String boja; public String ostecenje;};

//kompletna klasa

class Auto {// polja private int godiste; private string boja; protected String ostecenje;// konstruktori public Auto(){…} public Auto(int g, int b, int o){…}// metode public void start(){…} public int ubrzanje(){…} public void stop(){…}};

Osnovni koncepti OOP Apstrakcija Enkapsulacija Nasleđivanje Polimorfizam

Apstrakcija

Postupak kojim se unutrašnja složenost objekta skriva od spoljnjeg sveta. Postupak kreiranja jednostavne reprezentacije nečeg komplikovanog. Postoje dve strane svakog objekta:

o ono što radi: što je obično poznato o način na koji radi: koji je obično nepoznat

Zavisi od perspektive korisnika Iterativni proces: da bi se pronašao najbolji i najtačniji opis objekta, kao rešenje za dati

problem, obično je potrebno proći nekoliko koraka.

Na primer: napraviti aplikaciju koja će se koristiti u bibliotekama

- Šta su elementi knjige?- Iz perspektive bibliotekarke:

naslov, autor, isbn broj, kategorija kojoj knjiga pripada. Njena perspektiva je određena njenim poslom.

- Iz perspektive grafičkog urednika: vrsta koričenja, tematika knjige (zbog dizajna omota)

1

Page 2: Vezbe 02 - Konstruktori, Set i Get, ToString

Klasifikacija

• Koren reči klasifikacija je klasa.• Obrazovanje klase = sistematsko uređivanje informacije u smislenu celinu.

Npr. Svi automobili imaju slična ponašanja (njima se može upravljati, mogu se zaustaviti, ubrzati..) i zajedničke atribute (imaju volan, motor...). Reč Automobil se koristi za sve objekte koji dele ta zajednička ponašanja i atribute. Konkretan objekat bi bio npr:

Opel Astra, registarskih tablica: BG 123, bele boje.

• Pisanje progama u OOP: klasifikovanje različitih koncepata svojstvenih nekom problemu i njegovom rešenju, a zatim modeliranje tih klasa u programskom jeziku.

Enkapsulacija (učaurenje)

• Osnovni koncept na kome počiva objektna orijentisanost. • Softverska tehnika kojom se povezuju podaci i metode (radnje) koje se odnose na te

podatke u jednu celinu. • Podrazumeva da korisnici nekog objekta ne mogu menjati unutrašnja stanja i metode

objekata. Samo internim metodama objekata je omogućeno da pristupe tim stanjima, dok svaki objekat omogućava spoljnim korisnicima da pristupe i koriste njegove javne metode.

• Skrivanje informacija• Smanjuje složenost sistema• Dva bitna aspekta učaurenja:

objedinjavanje podataka i funkcija u jedinstven entitet (klasa) kontrola mogućnosti pristupa članovima entiteta (modifikatori pristupa)

2

Page 3: Vezbe 02 - Konstruktori, Set i Get, ToString

Klasa 

Tip podataka koji sadrži podatke i funkcije (metode). Apstrakcija (uopštavanje) konkretnih objekata. Definisanje klase:

[modifikator] class naziv_klase [extends osnovna_klasa] {telo_klase}

Modifikator Primenljivo na OpisPublic Tipove, članove tipova Vidljivo svuda, čak i izvan sklopaPrivate Tipove, članove tipova Vidljivo samo u kodu koji pripada istom tipuProtected Članove tipova Vidljivo samo u kodu koji pripada istom ili izvedenom tipu

Sve Vidljivo svima u istom paketu

Modifikatori mogu biti: new, abstract

Telo klase mogu činiti: metode, polja, konstruktori.

class Krug { //polja private double poluprecnik; //metode public double povrsina() { return 3.14 * poluprecnik * poluprecnik; } }

3

Page 4: Vezbe 02 - Konstruktori, Set i Get, ToString

Polja i Set i Get metode

Privatnim poljima je potrebno omogućiti pristup van klase pomoću Set i Get metoda Te medote treba da imaju određeni modyfikator pristupa i obično je public za kreirane atribute u Eclipse razvojnom okruzenju dobijaju se automatski opicjom

Source->Generate getters and setters

public class Koordinata {

private double x;private double y;private double z;

public double getX() {return x;

}public void setX(double x) {

this.x = x;}public double getY() {

return y;}public void setY(double y) {

this.y = y;}public double getZ() {

return z;}public void setZ(double z) {

this.z = z;}

}

ToString metoda Opisuje predstavljanje objekta prilikom ispisa na standardnom izlazu Define še se unutar klase kao javna metoda članica

@Override public String toString() {

// OPIS ATRIBUTA KLASEreturn ("X= "+x+", Y= "+y+", Z= "+z);

}public class Glavna {

public static void main(String[] args) {// kreira se objekat pozivom podrazumevanog konstruktoraKoordinata k = new Koordinata();

//kada se redefinise toString()//moguce je na ispis poslati celu koordinatuSystem.out.println(k);

//BEZ toString(): Koordinata@a90653//SA toString(): X= 0, Y=0, Z=0}

}

4

Page 5: Vezbe 02 - Konstruktori, Set i Get, ToString

ZADATAK 1: Napraviti klasu Televizor da ima:

Atribute • jacinaTona. Početna vrednost za jačinu tona je 0 (smatra se da je ton isključen tj. 0) • ukljucen. Početna vrednost za atribut ukljucen je false (televizor ugašen).

Metode • pojacajTon, pojacava ton televizora za jedan. • smanjiTon, smanjuje ton televizora za jedan.• ukljuci, postavlja vrednost atributa ukljucen na true (tj. ukljucuje televizor)• iskljuci, koja postavlja vrednost atributa ukljucen na false (tj. iskljucuje televizor)• daLiJeUkljucen, vraca vrednost atributa ukljucen • vratiJacinuTona, koja vraca trenutnu vrednost jacine tona • toString, ispisuje na ekranu trenutne vrednosti oba atributa uz odgovarajucu poruku

Napraviti klasu Glavna koja u main metodi kreira jedan objekat klase Televizor i poziva njegove metode: pojacajTon, toString, iskljuci.

Dodeliti atributu jacinaTona vrednost. Diskutovati o pravima pristupa.public class Televizor{

private int jacinaTona;private boolean ukljucen;

public void pojacajTon() {++jacinaTona;

}public void smanjiTon() {

--jacinaTona;}public void iskljuci() {

ukljucen = false;}public void ukljuci() {

ukljucen = true;}public Boolean daLiJeUkljucen(){

return ukljucen;}public int getJacinaTona() {

return jacinaTona;}public void setJacinaTona(int jt) {

this.jacinaTona = jt;}

@Overridepublic String toString() {return ("\nTV je ukljucen: " + ukljucen+"\nJacina tona je: "+ jacinaTona);

}}

public class Glavna {

static void main(String[] args) {Televizor t = new Televizor();

System.out.println(t);//TV je ukljucen: False//Jacina tona je: 0

t.ukljuci();

System.out.println(t);//TV je ukljucen: True//Jacina tona je: 0

t.setJacinaTona(12); t.pojacajTon();

System.out.println(t);//TV je ukljucen: True//Jacina tona je: 13}

}

VEZBA: korigovati klasu Televizor da ne može da se radi sa isključenim televizorom, i da nikada jačina tona ne sme biti van opsega [0-50]

5

Page 6: Vezbe 02 - Konstruktori, Set i Get, ToString

package rs;

public class Televizor {private int jacinaTona;private boolean ukljucen;

public void pojacajTon(){if(jacinaTona<50 && ukljucen)

jacinaTona++;}

public void smanjiTon(){if(jacinaTona>0 && ukljucen)

jacinaTona--;}

public void ukjuci(){if (!ukljucen){

ukljucen = true;jacinaTona = 5;

}}

public void iskljuci(){if(ukljucen){

ukljucen = false;jacinaTona = 0;

}}

public boolean daLiJeUkljucen(){return ukljucen;

}

public int getJacinaTona(){return jacinaTona;

}

@Overridepublic String toString() {

// TODO Auto-generated method stubreturn "TON : "+jacinaTona+" : "+ukljucen;

}}

package rs;

public class Glavna {

public static void main(String[] args) {Televizor t = new Televizor();

System.out.println(t);

t.ukjuci();System.out.println(t);

t.smanjiTon();System.out.println(t);t.smanjiTon();System.out.println(t);t.smanjiTon();

6

Page 7: Vezbe 02 - Konstruktori, Set i Get, ToString

System.out.println(t);t.smanjiTon();System.out.println(t);t.smanjiTon();System.out.println(t);t.smanjiTon();System.out.println(t);t.smanjiTon();System.out.println(t);t.smanjiTon();System.out.println(t);t.pojacajTon();System.out.println(t);

t.smanjiTon();System.out.println(t);

t.iskljuci();System.out.println(t);

System.out.println(t.daLiJeUkljucen());

t.smanjiTon();System.out.println(t);

}

}

TON : 0 : falseTON : 5 : trueTON : 4 : trueTON : 3 : trueTON : 2 : trueTON : 1 : trueTON : 0 : trueTON : 0 : trueTON : 0 : trueTON : 0 : trueTON : 1 : trueTON : 0 : trueTON : 0 : falsefalseTON : 0 : false

7

Page 8: Vezbe 02 - Konstruktori, Set i Get, ToString

KONSTRUKTOR

Metoda klase koja se izvršava kada se kreira objekat određene klase. Ima isto ime kao i klasa, nema povratnu vrednost (ni void) i obično inicijalizuje

elemente novog objekta. Može biti : podrazumevani ili parametarizovani Poziva se od strane new operatora, odmah nakon alokacije memorije za novi objekat. U konstruktoru bi trebalo da se rade samo jednostavne inicijalizacije Konstruktor može primiti jedan ili više parametara koji se koriste za inicijalizaciju

polja. Ako se u klasi deklariše bar jedan konstruktor, kompajler neće generisati podrazumevani

konstruktor. Sva polja koja nisu inicijalizovana u korisnički definisanom konstruktoru zadržavaju

svoju podrazumevanu inicijalizaciju. Za jednu klasu može se definisati više konstruktora ( lista parametara svakog od

njih mora biti jedinstvena, ili po broju ili po tipu parametara - različiti potpis)

PRIMER: Podrazumevani (default) konstruktor

public class Student {private String ime;private String brojIndeksa;

//public Student(){} /* default konstruktor; podrazumeva se da postoji

(automatski se generise) ukoliko nije eksplicitno naveden konstruktor*/

// redefinisanje toString() metode komandom @Override@Override public String toString() {

// TODO Auto-generated method stubreturn ("Ime: "+ime+", Broj indeksa: "+brojIndeksa);

}}public class Glavna {

public static void main(String[] args) {// kreira se objekat pozivom podrazumevanog konstruktoraStudent student = new Student();

//kada se redefinise toString()//moguce je na ispis poslati celog studentaSystem.out.println(student);

//BEZ toString(): Student@a90653//SA toString(): Ime: null, Broj indeksa: null

}}

8

Page 9: Vezbe 02 - Konstruktori, Set i Get, ToString

PRIMER: Reimplementacija podrazumevanog konstruktora kao i primer za parametarizovani

//podrazumevani konstruktorclass Student{

private String ime;private String brojIndeksa;

public Student(){brojIndeksa = "0000/2012";}

}

//parametarizovani konstruktorclass Student{

private String ime;private String brojIndeksa;

public Student(String i,String bi){

ime = i;brojIndeksa = bi;

} }

class Program{static void Main(String[] args){

Student s = new Student();}}

class Program{public static void Main(String[] args)

{Student s = new Student();

/* greska; ispravno je pozvati ukoliko u klasi postoji eksplicitno naveden podrazumevajuci konstruktor ili ne postoji ni jedan*/

Student s1 = new Student("Pera","2/2000");}

}

PRIMER: promena vrednosti atributa kreirane instance klase class Program{public static void Main(string[] args){

// deklaracija objektaStudent student1 = new Student("Pera","123/2000");student1.ime = "Mika"; // greška: nije moguće prisupiti

// privatnom polju ime klase Student

// prethodnom primeru dodati set I get metode kojima ce se omoguciti // promena polja ime}}

VEŽBA: ZA ZADATAK 1 URADITI SLEDEĆE AKO JE MOGUĆE dodati podrazumevani konstruktor koji kreira isključen televizor sa jačinom tona 0 parametarizovani konstruktor za sve parameter parametarizovani konstruktor za parameter jacinaTona parametarizovani konstruktor za parameter ukljucen

9

Page 10: Vezbe 02 - Konstruktori, Set i Get, ToString

ZADATAK 2. Napravi klasu Osoba sa atributima ime,prezime i godina rodjenja. Kreirati Instancu klase Osoba i iskoristiti ugrađenu metodu toString().

public class Osoba {private String ime;private String prezime;private int gr;

public String getIme() {return ime;

}public void setIme(String ime) {

this.ime = ime;}public String getPrezime() {

return prezime;}public void setPrezime(String prezime) {

this.prezime = prezime;}public int getGodinaRodjenja() {

return gr;}public void setGodinaRodjenja(int gr) {

this.gr = gr;}

//toString METODA @Override public String toString() {return("Pozdrav svima!!!\n

Ja sam "+ime+" "+prezime+" i "+gr+". sam godiste");}

}

public class Glavna {

public static void main(String[] args) { // KREIRANJE INSTANCE KLASE OSOBA PODRAZUMEVANIM KONSTRUKTOROMOsoba o = new Osoba();

o.setIme("Milan");o.setPrezime("Milanovic");o.setGodinaRodjenja(1990);

System.out.println(o);}

}

10

Page 11: Vezbe 02 - Konstruktori, Set i Get, ToString

ZADATAK 3. Napisati program za izračunavanje površine i obima pravougaonika korišćenjem klase pravougaonik.public class Pravougaonik {

private float sirina;private float visina;

// PARAMETARIZOVANI KONSTRUKTORpublic Pravougaonik(float sirina, float visina) {

// UVEK PRVA KOMANDA U KONSTRUKTORU// DETAJNIJE U NASLEDJIVANJIMAsuper();this.sirina = sirina;this.visina = visina;

}public float obim(){

return 2*(sirina+visina);}public float povrsina(){

return sirina*visina;}

}public class Glavna {

public static void main(String[] args) { // PARAMETARIZOVANI KONSTRUKTOR - POZIVPravougaonik p1 = new Pravougaonik(10, 4);Pravougaonik p2 = new Pravougaonik(15, 3);

Pravougaonik p3 = new Pravougaonik(); // GRESKA ???

if(p1.obim()>p2.obim())System.out.println("Veci je o1: "+p1.obim());

elseSystem.out.println("Veci je o2: "+p2.obim());

if(p1.povrsina()>p2.povrsina())System.out.println("Veca je p1: "+p1.povrsina());

elseSystem.out.println("Veca je p2: "+p2.povrsina());

}}NAPOMENA:

Ugrađeni pokazivač this olakšava rad unutar klase, pogotovu u konstruktorima, ukazujući na atribut ili metodu ove (this) klase. Nema zabune koje je koja sirina !!!

this.sirina = sirina; //sirina ove klase jednaka je prosledjenoj sirini

VEŽBA: Napraviti klasu Auto sa :

atributima: marka, godište, cena. Metodama: bool proveriVozaca: proverava da li prosleđeni vozač ima više od 10 godina

vozačkog iskustva da bi mogao da ga voziNapraviti klasu Vozac sa :

atributima: Ime, godište, vozackoIskustvo. Metodama: bool proveriVozilo: proverava da li prosleđeni auto ima 1000 puta veću cenu od

vozačkog iskustva i ako ima nema pravo da ga vozi, u suprotnom ima pravo

U glavnom delu programa demonstrirati kreiranje instanci obe klase i testirati pozive kreiranih metoda.

11

Page 12: Vezbe 02 - Konstruktori, Set i Get, ToString

ZADATAK 4:Definisati klasu Tacka da ima:

Private Polja: x, y (koordinate centra kruga) : double Public podrazemevani konstruktor Public parametarizovani konstruktor (double, double) sa ispisom u konzoli

(PARAMETARIZOVANI TACKA) Public parametarizovani konstruktor (Tacka) sa ispisom u konzoli (KOPIJA TACKA) Public void metodu pomeraj(double, double): pomera tačku za prosleđene vrednosti Public double metodu rastojanje(Tacka): računa rastojanje do prosleđene Tačke Public String toString(): ispisuje tačku u sledećem formatu (x, y)

Definisati klasu Duz da ima: Private polja: poc, kraj :Tacka Public parametarizovani konstruktor (Tacka, Tacka) sa ispisom u konzoli

(PARAMETARIZOVANI DUZ) Public parametarizovani konstruktor (Duz) sa ispisom u konzoli (KOPIJA DUZ) Public double metodu duzina(): računa dužinu duži kao rastojanje između početne i krajnje

tačke Public String toString (): ispisuje duž u sledećem formatu (x1, y1) -- (x2, y2)

U glavnom delu programa (main) : Kreirati dve Tacke p(1,1), q(10,10) preko parametarizovanih konstruktora Ispisati ih preko toString metode Kreirati d1 instancu klase Duz preko dve kreirane tačke p,q Ispisati pomoću toString kreiranu instancu klase Duz Pomeriti tačku p Ispisati pomoću toString tacku p Ispisati pomoću toString d1 instancu klase Duz, da li se pomerila i Duž ? Kreirati d2 instancu klase duž preko dve kreirane tačke p, q Ispisati pomoću toString d2 instancu klase Duz Kreirati d3 instancu klase duž preko duži d2 Ispisati pomoću toString d3 instancu klase Duz KAKO CE IZGLEDATI ISPIS U KONZOLI PO POKRETANJU PROGRAMA

12

Page 13: Vezbe 02 - Konstruktori, Set i Get, ToString

REŠENJE:

public class Tacka{

private double x;private double y;

public Tacka(double x, double y){

this.x=x;this.y=y;System.out.println("PARAMETARIZOVANI TACKA");

}

// final, da se ne bi mogla menjati prosledjena Tackapublic Tacka(final Tacka s) {

this(s.x,s.y); // poziv konstruktora klase TackaSystem.out.println("KOPIJA TACKA");

}

public void pomeraj(double x_pom, double y_pom){

x+=x_pom;y+=y_pom;

}

// final, da se ne bi mogla menjati prosledjena Tackapublic double rastojanje(final Tacka t){

return Math.sqrt(Math.pow(t.x-x,2)+Math.pow(t.y-y,2));}

public String toString(){

return "("+x+", "+y+")";}

}

public class Duz {

private Tacka poc;private Tacka kraj;

public Duz(Tacka p, Tacka k) {poc=new Tacka(p); // poc = p; pomeranje tacke pomera i duzkraj=new Tacka(k); // ovako je duz nezavisna od tacke

}

// final, da se ne bi mogla menjati prosledjena Duzpublic Duz(final Duz d) {

this(d.poc, d.kraj); // poziv konstruktora klase DuzSystem.out.println("KOPIJA DUZ");

}

public double duzina() {return poc.rastojanje(kraj);

}

public String toString() { return poc +"--"+kraj; }}

13

Page 14: Vezbe 02 - Konstruktori, Set i Get, ToString

public class Glavna {

public static void main(String[] args) {Tacka p = new Tacka(1,1);System.out.println("P "+ p);

Tacka q = new Tacka(10,10);System.out.println("Q "+ q);

Duz d1 = new Duz(p,q);System.out.println("D "+ d1);

p.pomeraj(2, 2);

System.out.println("P nakon pomeraja "+ p);System.out.println("D1 nakon pomeraja P "+ d1);

Duz d2 = new Duz(p,q);System.out.println("D2 "+ d2);

Duz d3 = new Duz(d2);System.out.println("D3 "+ d3);

}}

14

Page 15: Vezbe 02 - Konstruktori, Set i Get, ToString

/** REZULTAT ISPISA U KONZOLI// Tacka p=new Tacka(1,1);PARAMETARIZOVANI TACKAP (1.0, 1.0)

//Tacka q=new Tacka(10,10);PARAMETARIZOVANI TACKAQ (10.0, 10.0)

// Duz d1= new Duz(p,q);PARAMETARIZOVANI TACKAKOPIJA TACKAPARAMETARIZOVANI TACKAKOPIJA TACKAPARAMETARIZOVANI DUZ

D (1.0, 1.0)--(10.0, 10.0)

P nakon pomeraja (3.0, 3.0)D nakon pomeraja P (1.0, 1.0)--(10.0, 10.0)

// Duz d2= new Duz(p,q);PARAMETARIZOVANI TACKAKOPIJA TACKAPARAMETARIZOVANI TACKAKOPIJA TACKAPARAMETARIZOVANI DUZ

D2 (3.0, 3.0)--(10.0, 10.0)

// Duz d3= new Duz(d2);PARAMETARIZOVANI TACKAKOPIJA TACKAPARAMETARIZOVANI TACKAKOPIJA TACKAPARAMETARIZOVANI DUZKOPIJA DUZ

D3 (3.0, 3.0)--(10.0, 10.0) */

ZAKLJUČAK: Kada klasa ima neko polje koje je instanca druge klase prilikom pozivanja konstruktora se pozivaju odgovarajući konstruktori polja klasa. Zato pri kreiranju duži d1 preko dve tacke (p,q) imamo ovakav redosled:

1. PARAMETARIZOVANI TACKA : kreira tacku q2. KOPIJA TACKA : kopira tacku q3. PARAMETARIZOVANI TACKA : kreira tacku p4. KOPIJA TACKA : kopira tacku p5. PARAMETARIZOVANI DUZ : kreira duz d1

Redosled: 5 poziva 4 koji poziva 3: kreira se tacka p u duži d15 poziva 2 koji poziva 1: kreira se tacka q u duži d1

15

Page 16: Vezbe 02 - Konstruktori, Set i Get, ToString

ZADATAK 5: Koristeći klasu Tacka iz prethodnog zadatka uraditi sledeće:

Definisati klasu Linija da ima: Private polje: niz: Tacka[] Private polje br: int, broj tacaka u liniji Public parametarizovani konstruktor (int n) : kreira liniju od n tacaka Public metodu dodajTacku(Tacka t): dodaje tacku u liniju ako ima mesta Public metodu duzina(): vraća dužinu linije na osnovu rastojanja među tačkama Public String toString (): ispisuje liniju u sledećem formatu [(x1, y1) (x2, y2)] = duzina

U glavnom delu programa:

Kreirati 3 tacke Kreirati jednu liniju od 2 tacke Dodavati jednu po jednu tacku u liniju i ispisivati podatke o liniji

RE ŠENJE: public class Linija {

private Tacka niz[];private int br;

public Linija(int n){niz = new Tacka[n];br = 0;

}

public void dodajTacku(Tacka t){if (niz.length > br){

niz[br++] = new Tacka(t);}else{

System.out.println("Niz je pun !!!");}

}

public double duzinaLinije(){double duzina = 0;if (br > 1){

for (int i=0; i<br-1; i++)duzina += niz[i].rastojanje(niz[i+1]);

}return duzina;

}@Overridepublic String toString() {

String ispis="[ ";for (int i=0; i<br; i++)

ispis += niz[i]+" ";return ispis+"] = "+duzinaLinije();

}}

public static void main(String[] args) {Tacka t = new Tacka(0, 0);Tacka a = new Tacka(1, 2);Tacka c = new Tacka(2, 6);

Linija l = new Linija(2);

l.dodajTacku(t);

16

Page 17: Vezbe 02 - Konstruktori, Set i Get, ToString

System.out.println(l);

l.dodajTacku(a);System.out.println(l);

l.dodajTacku(c);}

// ISPIS U KONZOLI[ (0.0, 0.0) ] = 0.0[ (0.0, 0.0) (1.0, 2.0) ] = 2.23606797749979Niz je pun !!!

17