Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2
Први колоквијум
13. 5. 2006.

Аутори: Игор Тартаља и Ласло Краус

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

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

Написати на језику Java следећи пакет типова:

(10 поена) Написати на језику Java класу с главним програмом који помоћу два радника и једног купца изврши неколико радњи над једним складиштем и исписује на главном излазу резултате рада. Сви параметри треба да буду константе (не треба ништа учитавати).

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

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

а) Да ли имена променљивих у језику Java могу да буду писана на ћирилици и зашто?

б) Како треба написати класу која не омогућава клонирање својих објеката, али подржава клонирање објеката класа изведених из ње?

в) Да ли интерфејс може да садржи атрибут и зашто?


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


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

// Uporediv.java

package skladiste;

public interface Uporediv {
  boolean istovetan (Uporediv u);
}

// Proizvod.java

package skladiste;

public abstract class Proizvod implements Uporediv, Cloneable {
  public abstract char oznaka ();

  public abstract double zapremina ();

  public boolean istovetan (Uporediv u) { return oznaka () == ((Proizvod)u).oznaka (); }

  public Object clone () {
    try { return super.clone (); }
      catch (CloneNotSupportedException g) { return null; }
  }

  public String toString () { return Character.toString (oznaka ()); }
}

// Kvadar.java

package skladiste;

public class Kvadar extends Proizvod {
  private double a, b, c;

  public Kvadar (double aa, double bb, double cc) { a = aa; b = bb; c = cc; }

  public char oznaka () { return 'K'; }

  public boolean istovetan (Uporediv u) {
    if (! super.istovetan (u)) return false;
    Kvadar k = (Kvadar)u;
    return a==k.a && b==k.b && c==k.c;
  }

  public double zapremina () { return a * b * c; }

  public String toString ()
    { return super.toString() + "(" + a + "," + b + "," + c + ")"; }
}

// Sfera.java

package skladiste;

public class Sfera extends Proizvod {
  private double r;

  public Sfera (double rr) { r = rr; }

  public char oznaka () { return 'S'; }

  public boolean istovetan (Uporediv u) {
    if (! super.istovetan (u)) return false;
    Sfera s = (Sfera)u; return r==s.r;
  }

  public double zapremina () { return 4/3. * r*r*r * Math.PI; }

  public String toString () { return super.toString() + "(" + r + ")"; }
}

// Greska.java

package skladiste;

public class Greska extends Exception {}

// GNemaMesta.java

package skladiste;

public class GNemaMesta extends Greska {
  public String toString () {return "*** Nema slobodnog mesta u skladistu!";}
}

// GZapremina.java

package skladiste;

public class GZapremina extends Greska {
  public String toString () { return "*** Prekoracena je zapremina skladista!"; }
}

// GNemaProizvoda.java

package skladiste;

public class GNemaProizvoda extends Greska {
  public String toString () { return "*** Nema trazenog proizvoda u skladistu!"; }
}

// Skladiste.java

package skladiste;

public class Skladiste {
  private Proizvod[] niz;
  private double maxZapr, trenZapr=0;

  public Skladiste (int kap, double maxV){ niz = new Proizvod [kap]; maxZapr = maxV; }

  public Skladiste (double maxV){ this (10, maxV); maxZapr = maxV; }

  public Skladiste stavi (Proizvod p) throws GZapremina, GNemaMesta {
    if (trenZapr + p.zapremina() > maxZapr) throw new GZapremina ();
    int i=0; while (i<niz.length&&niz[i]!=null) i++;
    if (i == niz.length) throw new GNemaMesta ();
    niz[i] = p; trenZapr += p.zapremina ();
    return this;
  }

  public Proizvod uzmi (Proizvod p) throws GNemaProizvoda {
    int i = 0; while (i<niz.length && (niz[i]==null || !niz[i].istovetan(p))) i++;
    if (i == niz.length) throw new GNemaProizvoda ();
    p = niz[i]; niz[i] = null; trenZapr -= p.zapremina ();
    return p;
  }

  public int imaMesta () {
    int k = 0;
    for (int i=0; i<niz.length; i++) if (niz[i] == null) k++;
    return k;
  }

  public double imaZapr () { return maxZapr - trenZapr; }
}

// Osoba.java

package skladiste;

public abstract class Osoba {
  private String ime;

  public Osoba (String i) { ime = i; }

  public String ime () { return ime; }

  public String toString () { return ime; }
}

// Radnik.java

package skladiste;

public class Radnik extends Osoba {
  private Skladiste sklad;
  private Proizvod kalup;

  public Radnik (String ime, Skladiste s, Proizvod p)
    { super (ime); sklad = s; kalup = p; }

  public Radnik proizvedi () throws GNemaMesta, GZapremina {
    sklad.stavi ((Proizvod)kalup.clone ());
    return this;
  }

  public String toString () { return super.toString() + ": " + kalup; }
}

// Kupac.java

package skladiste;

public class Kupac extends Osoba {
  public Kupac (String ime) { super (ime); }

  public Proizvod kupi (Skladiste s, Proizvod p) throws GNemaProizvoda
    { return s.uzmi (p); }
}

// Test.java

import skladiste.*;

public class Test {
  public static void main (String[] varg) {
    Skladiste sklad = new Skladiste (10, 200);
    Kvadar k = new Kvadar (1, 2, 3);
    Sfera  s = new Sfera (2);
    Radnik marko = new Radnik ("Marko", sklad, s);
    Radnik zoran = new Radnik ("Zoran", sklad, k);
    Kupac  mira  = new Kupac  ("Mira");
    System.out.println (marko + "\n" + zoran + "\n");
    try {
      marko.proizvedi (); zoran.proizvedi ();
      System.out.println (mira + " kupuje: " + mira.kupi(sklad,k));
      marko.proizvedi (); zoran.proizvedi ();
      System.out.println (mira + " kupuje: " + mira.kupi(sklad,k));
      zoran.proizvedi (); marko.proizvedi ();
      System.out.println (mira + " kupuje: " + mira.kupi(sklad,s));
      System.out.println (mira + " kupuje: " + mira.kupi(sklad,k));
      System.out.println (mira + " kupuje: " + mira.kupi(sklad,k));
    } catch (Greska g) { System.out.println (g); }
  }
}

Marko: S(2.0) Zoran: K(1.0,2.0,3.0) Mira kupuje: K(1.0,2.0,3.0) Mira kupuje: K(1.0,2.0,3.0) Mira kupuje: S(2.0) Mira kupuje: K(1.0,2.0,3.0) *** Nema trazenog proizvoda u skladistu!
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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