Ласло Краус |
ИР2ОО2 Kолоквијум 13. 4. 2013. |
|---|
Одговорити концизно (по једна или две реченице, или "да"/"не" где се не тражи образложење) и прецизно на следећа питaња:
а) Која је практична препорука за именовање пакета? Зашто?
б) Да ли дозвољeне следеће конструкције и ако јесу, шта оне означавају:
(1) super.super.m() (2) BaznaKlasa b=super; (3) super(super.m());
в) Шта су добре, а шта лоше стране проверених изузетака?
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
(величина).
String[]). Може да се састави текстуални опис у облику произвођач(идБрој/капацитет/заузето).
/[имеДат,…,име_дат], где имеДат означава назив неуспешно копиране датотеке.
// GUredj.java
package uredjaji;
public abstract class GUredj extends Exception { }
// GKap.java
package uredjaji;
public class GKap extends GUredj {
public String toString() { return "*** Prekoracen kapacitet uredjaja"; }
}
// Datoteka.java
package uredjaji;
public class Datoteka implements Cloneable {
private String ime;
private byte[] sadrzaj;
public Datoteka(String i, byte[] s) { ime = i; sadrzaj = s; }
public int kapacitet() { return sadrzaj.length; }
public int velicina() { return sadrzaj.length + ime.length(); }
public String ime() { return ime; }
public byte dohvati(int lok) throws GOpseg {
if( lok < 0 || lok >= sadrzaj.length ) throw new GOpseg();
return sadrzaj[lok];
}
public Datoteka upisi(int lok, byte b) GOpseg {
if( lok < 0 || lok >= sadrzaj.length ) throw new GOpseg();
sadrzaj[lok] = b; return this;
}
public Datoteka clone() {
try {
Datoteka d = (Datoteka)super.clone();
d.sadrzaj = sadrzaj.clone();
return d;
} catch(CloneNotSupportedException e) { return null; }
}
public String toString()
{ return ime + "(" + sadrzaj.length + ")"; }
}
// Upisiv.java
package uredjaji;
public interface Upisiv {}
// GOpseg.java
package uredjaji;
public class GOpseg extends GUredj {
public String toString() { return "*** Nedozvoljen pristup uredjaju"; }
}
// GNijeUpisiv
package uredjaji;
public class GNijeUpisiv extends GUredj {
public String toString() { return "*** Nedozvoljen upis u uredjaj"; }
}
// GNemaDat.java
package uredjaji;
public class GNemaDat extends GUredj {
public String toString() { return "*** Datoteka ne postoji"; }
}
// Uredjaj.java
package uredjaji;
public abstract class Uredjaj {
private static int ukID;
private int id = ++ukID;
private String proizvodjac;
private int kap, pop, brDat;
private Datoteka[] datot = new Datoteka [10];
private void dod(Datoteka d) throws GKap {
if (pop+d.velicina()>kap) throw new GKap();
if (brDat == datot.length) {
Datoteka[] tmp = new Datoteka[brDat*2];
for (int i = 0; i < datot.length; i++) tmp[i] = datot[i];
datot = tmp;
}
datot[brDat++] = d; pop += d.velicina();
}
public Uredjaj(String pro, int k) { proizvodjac = pro; kap = k; }
public Uredjaj(String pro, int k, Datoteka[] d) throws GKap {
proizvodjac = pro; kap = k;
for(Datoteka dd: d) { dod(dd); }
}
public int kapacitet() { return kap; }
public int id() { return id; }
public boolean mozeDodavanje()
{ return this instanceof Upisiv; }
public void dodaj(Datoteka d) throws GNijeUpisiv, GKap{
if (!mozeDodavanje()) throw new GNijeUpisiv();
dod(d);
}
public Datoteka dohvati(String ime) throws GNemaDat {
for (Datoteka d: datot)
if (d!=null && d.ime().equals(ime)) return d;
throw new GNemaDat();
}
public String[] spisak() {
String[] spisak = new String [brDat];
for (int i = 0; i < brDat; i++) spisak[i] = datot[i].ime();
return spisak;
}
public String toString()
{ return proizvodjac + "(" + id + "/" + kap + "/" + pop + ")"; }
}
// Disk.java
package uredjaji;
public class Disk extends Uredjaj implements Upisiv{
public Disk(String pro, int kap) { super(pro,kap); }
public Disk(String pro, int kap, Datoteka[] dat) throws GKap
{ super(pro, kap, dat); }
}
// CD.java
package uredjaji;
public class CD extends Uredjaj {
public CD(String pro, Datoteka[] dat) throws GKap
{ super(pro, 700000000, dat); }
}
// Racunar.java
package uredjaji;
public class Racunar {
private int usp;
private StringBuilder neusp;
public void kopiraj(Uredjaj sa, Uredjaj na) {
String[] datoteke = sa.spisak();
neusp = new StringBuilder(); usp = 0;
for (String dat: datoteke) {
try {
na.dodaj(sa.dohvati(dat).clone());
usp++;
} catch(GUredj e) {
if (neusp.length() > 0) neusp.append(",");
neusp.append(dat);
}
}
}
public String toString() { return usp + "/[" + neusp + "]"; }
}
// Program.java
import uredjaji.*;
public class Program {
public static void main(String[] args) {
try {
Datoteka[] dat = new Datoteka [5];
for (int i = 0; i<5; i++) {
byte[] sadrzaj = new byte [100];
dat[i] = new Datoteka("dat"+(i+1), sadrzaj);
}
CD cd = new CD("BASF", dat );
Disk hdd = new Disk("Seagate", 1000 );
Racunar r = new Racunar();
r.kopiraj(cd, hdd); System.out.println(r);
r.kopiraj(hdd, cd); System.out.println(r);
} catch(GKap g) { System.out.println(g); }
}
}
5/[]
0/[dat1,dat2,dat3,dat4,dat5]
(⇒ почетак)
Copyright © 2014, Laslo Kraus
Последња ревизија: 12.4.2014.