Ласло Краус |
ИР2ОО2 Kолоквијум 12. 4. 2014. |
|---|
Одговорити концизно (по једна или две реченице, или "да"/"не" где се не тражи образложење) и прецизно на следећа питaња:
а) Да ли (према спецификацији језика) имена променљивих у Јави могу да буду писана на ћирилици и зашто?
б) Како се одређује право приступа генерисаном (уграђеном) подразумеваном конструктору?
в) Да ли се из метода класе I изведене из O може приступити заштићеним нестатичким члановима класе O преко референце типа: (1) класе O, (2) класе I, (3) класе A изведене из класе O, (4) класе II изведене из класе I? Све четири класе су у различитим пакетима.
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
(капацитет|безбедан). Ниједна врста водених токова не сме да се копира.
.
// Tok.java
package hidrografija;
public interface Tok { double kapac(); }
// Vodeni.java
package hidrografija;
public abstract class Vodeni implements Tok {
private String naziv;
public Vodeni(String _n) { naziv = _n; }
public abstract double konc();
public boolean bezbedno() { return konc() < 0.001; }
public String toString()
{ return naziv + "(" + kapac() + "|" + bezbedno() + ")"; }
public Vodeni clone() throws CloneNotSupportedException
{ throw new CloneNotSupportedException(); }
}
// GNegVred.java
package hidrografija;
public class GNegVred extends Exception {
public String toString() { return "*** Negativna vrednost!"; }
}
//Potok.java
package hidrografija;
public class Potok extends Vodeni {
private double kapac;
private double konc;
public Potok(String ime, double kap,double kon) throws GNegVred {
super(ime);
if (kap<0 || kon<0) throw new GNegVred();
kapac = kap;
konc = kon;
}
public double kapac() { return kapac; }
public double konc() { return konc; }
}
// Reka.java
package hidrografija;
public class Reka extends Vodeni {
private static class Elem {
Elem sled;
Vodeni tok;
Elem(Vodeni _t) { tok = _t; }
}
private Elem prvi, posl;
public Reka(String ime) { super(ime); }
public Reka dodaj(Vodeni t) {
Elem novi = new Elem(t);
if (prvi == null) { prvi = novi; } else { posl.sled = novi; }
posl = novi;
return this;
}
public double kapac() {
double kapac = 0;
for (Elem e=prvi; e!=null; e=e.sled) kapac += e.tok.kapac();
return kapac;
}
public double konc() {
double kapac = 0;
double konc = 0;
for (Elem e=prvi; e!=null; e=e.sled){
kapac += e.tok.kapac();
konc += e.tok.kapac()*e.tok.konc();
}
return konc/kapac;
}
}
// GBiltenPun.java
package hidrografija;
public class GBiltenPun extends Exception {
public String toString() { return "*** Bilten je pun!"; }
}
// Bilten.java
package hidrografija;
public class Bilten implements Cloneable{
private String naziv;
private Vodeni[] tokovi;
private int pop;
public Bilten(String naz, int kap)
{ naziv = naz; tokovi = new Vodeni[kap]; }
public Bilten dodaj(Vodeni t) throws GBiltenPun {
if (pop == tokovi.length) throw new GBiltenPun();
tokovi[pop++] = t;
return this;
}
public String toString() {
StringBuffer s = new StringBuffer();
s.append(naziv).append("\n");
for (Vodeni v: tokovi) s.append(v).append("\n");
return s.toString();
}
public Bilten clone() {
try {
Bilten b = (Bilten)super.clone();
b.tokovi = tokovi.clone();
return b;
} catch(CloneNotSupportedException e) { return null; }
}
}
// Glavni.java
import hidrografija.*;
public class Glavni {
public static void main(String[] argv){
try {
Bilten b = new Bilten("Izvestaj", 5);
Potok p1 = new Potok("Gorski", 0.3, 0);
Potok p2 = new Potok("Gradski", 0.4, 0.003);
Reka r1 = new Reka("Topciderska").dodaj(p1).dodaj(p2);
Potok p3 = new Potok("Bistri", 0.7, 0);
Reka r2 = new Reka("Sava").dodaj(r1).dodaj(p3);
b.dodaj(p1).dodaj(p2).dodaj(p3).dodaj(r1).dodaj(r2);
System.out.println(b);
} catch(Exception g) {
System.out.println(g);
}
}
}
Izvestaj
Gorski(0.3|true)
Gradski(0.4|false)
Bistri(0.7|true)
Topciderska(0.7|false)
Sava(1.4|true)
(⇒ почетак)
Copyright © 2014, Laslo Kraus
Последња ревизија: 12.4.2014.