Ласло Краус |
ИР2ОО2 Први колоквијум 13. 5. 2006. |
|---|
Написати на језику Java следећи пакет типова:
K, односно S. Два производа су истоветна ако су исте врсте и ако имају исте димензије. Текстуални облик је vr(d,d,…,d), где su: vr – ознака врсте производа и d – једна димензија производа.
(10 поена) Написати на језику Java класу с главним програмом који помоћу два радника и једног купца изврши неколико радњи над једним складиштем и исписује на главном излазу резултате рада. Сви параметри треба да буду константе (не треба ништа учитавати).
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Да ли имена променљивих у језику Java могу да буду писана на ћирилици и зашто?
б) Како треба написати класу која не омогућава клонирање својих објеката, али подржава клонирање објеката класа изведених из ње?
в) Да ли интерфејс може да садржи атрибут и зашто?
// 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!
(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 30.8.2010.