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

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

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

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

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

а) Ако је I интерфејс, да ли је дозвољено

  1. дефинисати референцу типа интерфејса I i;,
  2. проследити референцу на интерфејс I као параметар некој методи,
  3. створити објекат типа интерфејса помоћу new I()?

б) Да ли се грана finally извршава у случајевима:

  1. није се десио изузетак у try блоку,
  2. десио се изузетак и обрада је настављена у грани catch која завршава наредбом return,
  3. десио се изузетак и обрада је настављена у грани catch која завршава наредбом throw,
  4. десио се изузетак, али не постоји одговарајућа грана catch?

в) Навести начине стварања нити у језику Java.

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

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

(5 поена) Написати на језику Java програм (класу с главном функцијом) који направи један факултет са неколико студената и наставника, направи један неуређен обилазак тог факултета током којег на главном излазу испише текстуалне описе свих чланова факултета. Користити константне параметре (не треба ништа учитавати).


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


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

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

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