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