Ласло Краус |
ИР2ОО2 Kолоквијум 10. 4. 2011. |
|---|
Одговорити концизно (по једна или две реченице, или "да"/"не" где се не тражи образложење) и прецизно на следећа питaња:
а) Ако је I интерфејс, да ли је дозвољено
I i;,
I као параметар некој методи,
new I()?
б) Да ли се грана finally извршава у случајевима:
try блоку,
catch која завршава наредбом return,
catch која завршава наредбом throw,
catch?
в) Навести начине стварања нити у језику Java.
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
(година).
st., а наставник особа чијем текстуалном опису претходи ознака na..
(5 поена) Написати на језику Java програм (класу с главном функцијом) који направи један факултет са неколико студената и наставника, направи један неуређен обилазак тог факултета током којег на главном излазу испише текстуалне описе свих чланова факултета. Користити константне параметре (не треба ништа учитавати).
// Osoba.java
package osobe;
public class Osoba {
private String ime;
private int god;
public Osoba(String i, int g) { ime=i; god=g; }
public String toString() { return ime+"("+god+")"; }
}
// Student.java
package osobe;
public class Student extends Osoba {
public Student(String ime, int god) { super(ime, god); }
public String toString() { return "st." + super.toString(); }
}
// Nastavnik.java
package osobe;
public class Nastavnik extends Osoba {
public Nastavnik(String ime, int god) { super(ime, god); }
public String toString() { return "na." + super.toString(); }
}
// GNemoze.java
package osobe;
public class GNeMoze extends Exception {
public String toString() { return "*** Ne moze da se doda"; }
}
// GIndeks.java
package osobe;
public class GIndeks extends Exception {
private int ind;
public GIndeks(int i) { ind = i; }
public String toString() {return "*** Greska u indeksu" + ind; }
}
// Grupa.java
package osobe;
public abstract class Grupa {
private static int ukID;
private int id = ++ukID;
public int id() { return id; }
public abstract Grupa dodaj(Object o) throws GNeMoze;
public abstract Grupa isprazni();
public abstract int brojObjekata();
public abstract Object dohvati(int i) throws GIndeks;
public Grupa clone() throws CloneNotSupportedException {
Grupa k = (Grupa)super.clone();
k.id = ++ukID;
return k;
}
}
// Fakultet.java
package osobe;
public class Fakultet extends Grupa {
private static final int inicKap=10;
private static final int povecanje=10;
private Osoba []niz = new Osoba[inicKap];
private int brOso;
public int brojObjekata() { return brOso; }
public Fakultet dodaj(Object oso) throws GNeMoze {
if (!(oso instanceof Osoba)) throw new GNeMoze();
if (brOso == niz.length) {
Osoba []t = new Osoba [brOso+povecanje];
for(int i = 0; i < brOso; i++) t[i] = niz[i];
niz = t;
}
niz[brOso++] = (Osoba)oso;
return this;
}
public Osoba dohvati(int i) throws GIndeks {
if (i<0 || i>=brOso) throw new GIndeks(i);
return niz[i];
}
public Fakultet isprazni() {
niz = new Osoba [inicKap];
brOso = 0;
return this;
}
public final Fakultet clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
}
// GTekElem.java
package osobe;
public class GTekElem extends Exception {
public String toString() { return "*** Nema tekuci element!"; }
}
// Obilazak.java
package osobe;
public interface Obilazak {
void naPrvi();
Object tekuci() throws GTekElem;
void sledeci() throws GTekElem;
boolean imaTekuci();
}
// Neuredjen.java
package osobe;
public class Neuredjen implements Obilazak {
private Grupa k;
private int tek = -1;
public Neuredjen(Grupa _k) { k = _k; }
public boolean imaTekuci() { return tek>=0 && tek<k.brojObjekata(); }
public void naPrvi() { tek = 0; }
public void sledeci() throws GTekElem {
if (!imaTekuci()) throw new GTekElem();
tek++;
}
public Object tekuci() throws GTekElem {
if (!imaTekuci()) throw new GTekElem();
try { return k.dohvati(tek); } catch (GIndeks g) { return null; }
}
}
// Program.java
import osobe.*;
public class Program {
public static void main(String[] args) {
Fakultet n = new Fakultet();
try {
n.dodaj(new Osoba("Petar", 30)).
dodaj(new Student("Aleksa", 22)).
dodaj(new Nastavnik("Marko", 45));
Neuredjen ne = new Neuredjen(n);
for(ne.naPrvi(); ne.imaTekuci(); ne.sledeci())
System.out.println(ne.tekuci());
} catch (Exception g) { System.out.println(g); }
}
}
Petar(30)
st.Aleksa(22)
na.Marko(45)
(⇒ почетак)
Copyright © 2012, Laslo Kraus
Последња ревизија: 21.4.2012.