Ласло Краус |
ИР2ОО2 Kолоквијум 24. 4. 2010. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) Шта је бајткод (bytecode) и на који начин се убрзава његова интерпретација?
б) Шта је неопходно урадити у некој класи да би биле омогућене дубоке копије њених објеката?
в) Да ли интерфејс може имати конструктор и зашто?
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
String
), вредност и тежину. Може да се састави текстуални опис у облику (
назив,
вредност,
тежина)
.
[
роба,…,
роба]
.
Kamion(
носивост,
сопственаТежина,
укупнаТежина,
вредностТовара)
, а у преосталим редовима се налазе текстуални описи садржаних пакета.
(5 поена) Написати на језику Java програм (класу с главном функцијом) који направи један пакет састављен од два артикла и једног пакета са два артикла, направи камион, натовари га са неколико истоветних примерака направљеног пакета и испише камион на главном излазу рачунара. Користити константне параметре (не треба ништа учитавати).
// Vrednostan.java package prevoz; public interface Vrednostan { double vrednost(); }(⇒ почетак)
// Merljiv.java package prevoz; public interface Merljiv { double tezina(); }
// Roba.java package prevoz; public abstract class Roba implements Vrednostan, Merljiv, Cloneable { public Roba clone () { try { return (Roba)super.clone(); } catch (CloneNotSupportedException g) { return null; } } }
// Artikal.java package prevoz; public class Artikal extends Roba { private String naziv; private double vrednost, tezina; public Artikal( String n, double v, double t) { naziv = n; vrednost = v; tezina = t; } public double vrednost() { return vrednost; } public double tezina() { return tezina; } public String toString () { return naziv + "(" + vrednost + "," + tezina + ")"; } }
// GPun.java package prevoz; public class GPun extends Exception { public String toString () { return "*** Paket je pun!"; } }
// Paket.java package prevoz; public class Paket extends Roba { private Roba[] robe; private int n; public Paket( int kap) { robe = new Roba [kap]; } public Paket dodaj (Roba r) throws GPun { if (n == robe.length) throw new GPun(); robe[n++] = r; return this; } public double vrednost() { double v = 0; for (int i=0; i<n; v+=robe[i++].vrednost()); return v; } public double tezina() { double t = 0; for (int i=0; i<n; t+=robe[i++].tezina()); return t; } public Paket clone() { Paket p = (Paket)super.clone(); p.robe = robe.clone(); for (int i=0; i<n; i++) robe[i] = p.robe[i].clone(); return p; } public String toString () { String s = "["; for (int i=0; i<n; i++) { if (i > 0) s += ","; s += robe[i]; } return s + "]"; } }
// GTeret.java package prevoz; public class GTeret extends Exception { public String toString() { return "*** Previse tereta!"; } }
// Kamion.java package prevoz; public class Kamion implements Merljiv { private double sopTezina, nosivost, teret; Elem prvi, posl; private class Elem { Paket pak; Elem sled; Elem( Paket p) { pak = p; sled = null; if (prvi==null) prvi=this; else posl.sled=this; posl = this; } } public Kamion( double sT, double n) { sopTezina = sT; nosivost = n; } public Kamion dodaj( Paket p) throws GTeret { if (teret+p.tezina() > nosivost) throw new GTeret(); new Elem( p); teret += p.tezina(); return this; } public double tezina() { return sopTezina + teret; } public double vrednost() { double v = 0; for (Elem tek=prvi; tek!=null; tek=tek.sled) v += tek.pak.vrednost(); return v; } public String toString() { String s = "Kamion(" + nosivost + "," + sopTezina + "," + tezina() + "," + vrednost() + )"; for (Elem tek=prvi; tek!=null; tek=tek.sled) s += "\n" + tek.pak; return s; } }
// Program.java import prevoz.*; public class Program { public static void main(String[] vpar) { try { Paket p = new Paket( 5); p.dodaj( new Artikal( "cigla", 100, 2)) .dodaj( new Paket(2) .dodaj(new Artikal("solja",200, 0.2)) .dodaj(new Artikal("tanjir",500, 0.4))) .dodaj( new Artikal( "cekic", 350, 0.6)); Kamion k = new Kamion( 800, 2500); k.dodaj( p) .dodaj( p.clone()) .dodaj( p.clone()) .dodaj( p.clone()); System.out.println(k); } catch (Exception g) { System.out.println( g); } } }
Kamion(2500.0,800.0,812.8,4600.0) [cigla(100.0,2.0),[solja(200.0,0.2),tanjir(500.0,0.4)],cekic(350.0,0.6)] [cigla(100.0,2.0),[solja(200.0,0.2),tanjir(500.0,0.4)],cekic(350.0,0.6)] [cigla(100.0,2.0),[solja(200.0,0.2),tanjir(500.0,0.4)],cekic(350.0,0.6)] [cigla(100.0,2.0),[solja(200.0,0.2),tanjir(500.0,0.4)],cekic(350.0,0.6)]
Copyright © 2011, Laslo Kraus
Последња ревизија: 9.4.2011.