Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2
Kолоквијум
12. 4. 2014.

Аутори: Игор Тартаља, Ђорђе Ђурђевић и Ласло Краус

Задаци: 1 2 | Напоменe | Решења: 2

Поставка задатка 1 (30 поена) ( | почетак)

Одговорити концизно (по једна или две реченице, или "да"/"не" где се не тражи образложење) и прецизно на следећа питaња:

а) Да ли (према спецификацији језика) имена променљивих у Јави могу да буду писана на ћирилици и зашто?

б) Како се одређује право приступа генерисаном (уграђеном) подразумеваном конструктору?

в) Да ли се из метода класе I изведене из O може приступити заштићеним нестатичким члановима класе O преко референце типа: (1) класе O, (2) класе I, (3) класе A изведене из класе O, (4) класе II изведене из класе I? Све четири класе су у различитим пакетима.

Поставка задатка 2 (ukupno 70 поена) ( решење | почетак)

Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):

Написати на језику Java програм у којем се ствара неколико водених токова различитог типа и хидрографски билтен у који се направљени водени токови додају, а затим испише билтен.

Напоменe ( почетак)


Решење задатка 2 ( поставка | почетак)

// 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)
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2014, Laslo Kraus
Последња ревизија: 12.4.2014.