Ласло Краус |
ИР2ОО2 Kолоквијум 25. 4. 2009. |
|---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Шта означава: (1) this.a, (2) this(a), (3) super.a и (4) super(a)?
б) Које су разлике између интерфејса и апстрактне класе?
в) Шта је локална класа и да ли анонимна класа мора да буде локална класа?
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
(5 поена) Написати на језику Java програм (класу с главном функцијом) који направи један општински суд, две особе, власнички лист за прву особу, купопродајни уговор где је прва особа продавац а друга купац, поништи власнички лист прве особе, направи власнички лист за другу особу и испише на главном излазу дупликате уговора и власничких листова обе особе. Користити константне параметре (не треба ништа учитавати).
// Osoba.java
package potvrde;
public class Osoba {
private String ime;
private long jmbg;
public Osoba( String im, long mb) {ime=im; jmbg=mb;}
public String ime() { return ime; }
public long jmbg() { return jmbg; }
}
// Potvrda.java
package potvrde;
public interface Potvrda {
String naziv();
int idBroj();
}
// Akt.java
package potvrde;
public abstract class Akt implements Potvrda, Cloneable {
private String naziv;
private static int ukId = 0;
final private int idBroj = ++ukId;
private boolean original = true;
protected Akt( String naz) { naziv = naz; }
public String naziv() { return naziv; }
public int idBroj() { return idBroj; }
public Akt clone() throws CloneNotSupportedException{
if (!original) throw new CloneNotSupportedException();
Akt akt = (Akt)super.clone();
akt.original = false; return akt;
}
public String toString() {
return naziv + "(" + idBroj + ")" +
(original ? "" : " - duplikat");
}
}
// GIsteOsobe.java
package potvrde;
public class GIsteOsobe extends Exception {
public String toString() { return "*** Iste osobe!"; }
}
// KupoProdUgovor.java
package potvrde;
public class KupoProdUgovor extends Akt {
private Osoba prodavac, kupac;
public KupoProdUgovor( Osoba prod, Osoba kup)
throws GIsteOsobe {
super( "Kupoprodajni ugovor");
if ((prodavac=prod) == (kupac=kup))
throw new GIsteOsobe();
}
public Osoba prodavac() { return prodavac; }
public Osoba kupac() { return kupac; }
}
// VlasList.java
package potvrde;
public class VlasList extends Akt {
private Osoba vlasnik;
private boolean vazeci = true;
public VlasList( Osoba vlas)
{ super( "Vlasnicki list"); vlasnik = vlas; }
public Osoba vlasnik() { return vlasnik; }
public boolean vazeci() { return vazeci; }
public VlasList ponisti() { vazeci = false; return this; }
public VlasList clone() throws CloneNotSupportedException {
if (! vazeci) throw new CloneNotSupportedException();
return (VlasList)super.clone();
}
}
// GNemaPotv.java
package potvrde;
public class GNemaPotv extends Exception {
public String toString() { return "*** Nema potvrde!"; }
}
// GNemaPravo.java
package potvrde;
public class GNemaPravo extends Exception {
public String toString () { return "*** Nema Pravo!"; }
}
// OpstinskiSud.java
package potvrde;
public class OpstinskiSud {
private String naziv;
private int brPotv = 0;
private Elem arhiva, posl;
private class Elem {
Potvrda potv; Elem sled;
Elem (Potvrda p) {
potv = p;
if (arhiva==null) arhiva = this; else posl.sled = this;
posl = this;
}
}
public OpstinskiSud( String naz) { naziv = naz; }
public int brPotv() { return brPotv; }
public int kupoProdUgovor( Osoba prodavac, Osoba kupac)
throws GNemaPotv, GIsteOsobe {
KupoProdUgovor ugovor = new KupoProdUgovor( prodavac, kupac);
new Elem( ugovor); brPotv++;
return ugovor.idBroj();
}
public KupoProdUgovor kupoProdUgovor( Osoba osoba, int broj)
throws GNemaPotv, GNemaPravo {
Elem tek=arhiva;
while (tek!=null && tek.potv.idBroj()!=broj)
tek = tek.sled;
if (tek==null || !(tek.potv instanceof KupoProdUgovor))
throw new GNemaPotv();
KupoProdUgovor ugovor = (KupoProdUgovor)tek.potv;
if (osoba!=ugovor.prodavac() && osoba!=ugovor.kupac())
throw new GNemaPravo();
try { return (KupoProdUgovor)ugovor.clone(); }
catch (CloneNotSupportedException g) { return null; }
}
public int vlasList( Osoba osoba) {
VlasList list = new VlasList( osoba);
new Elem( list); brPotv++;
return list.idBroj();
}
public VlasList vlasList( Osoba osoba, int broj)
throws GNemaPotv, GNemaPravo {
Elem tek=arhiva;
while (tek!=null && tek.potv.idBroj()!=broj)
tek = tek.sled;
if (tek==null || !(tek.potv instanceof VlasList))
throw new GNemaPotv();
VlasList list = (VlasList)tek.potv;
if (osoba!=list.vlasnik()) throw new GNemaPravo();
try {
return list.clone();
} catch (CloneNotSupportedException g) { return null; }
}
}
// Test.java
import potvrde.*;
public class Test {
public static void main(String[] vpar) {
try {
OpstinskiSud sud = new OpstinskiSud( "Prvi beogradski");
Osoba marko = new Osoba( "Marko", 2902976780012L);
Osoba zoran = new Osoba( "Zoran", 1312955525013L);
int idList1 = sud.vlasList(marko);
int idUgovor = sud.kupoProdUgovor(marko, zoran);
sud.vlasList( idList1).ponisti();
int idList2 = sud.vlasList(zoran);
System.out.println( sud.kupoProdUgovor(marko,idUgovor));
System.out.println( sud.vlasList( marko, idList1));
System.out.println( sud.vlasList( zoran, idList2));
} catch (Exception g) { System.out.println( g); }
}
}
Kupoprodajni ugovor(2) - duplikat
Vlasnicki list(1) - duplikat
Vlasnicki list(3) - duplikat
(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.