Ласло Краус |
ИР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.