Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2
Kолоквијум
25. 4. 2009.

Аутори: Игор Тартаља, Ђорђе Ђурђевић и Ласло Краус

Задаци: 1 2 | Напоменe | Решења: 2

Поставка задатка 1 (30 поена) ( | почетак)

Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:

а) Шта означава: (1) this.a, (2) this(a), (3) super.a и (4) super(a)?

б) Које су разлике између интерфејса и апстрактне класе?

в) Шта је локална класа и да ли анонимна класа мора да буде локална класа?

Поставка задатка 2 (ukupno 70 поена) ( решење | почетак)

Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

(5 поена) Написати на језику Java програм (класу с главном функцијом) који направи један општински суд, две особе, власнички лист за прву особу, купопродајни уговор где је прва особа продавац а друга купац, поништи власнички лист прве особе, направи власнички лист за другу особу и испише на главном излазу дупликате уговора и власничких листова обе особе. Користити константне параметре (не треба ништа учитавати).


Напоменe ( почетак)


Решење задатка 2 ( поставка | почетак)

// 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
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.