Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2
Први колоквијум
3. 5. 2007.

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

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

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

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

а) Који механизам у језику Java омогућава стварање динамичких копија објеката без позивања конструктора? Које услове треба да испуни класа која то омогућава?

б) Како све може изгледати декларација метода m() класе која имплементира два интерфејса у којима су декларисане методе void m() throws E1,E2 и void m() throws E2,E3?

в) На који начин се из метода унутрашње класе (inner class) може приступати члановима спољашње класе и зашто?

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

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

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


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


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

// Energent.java

package ishrana;

public interface Energent {
  double energVr ();
}

// Namirnica.java

package ishrana;

public abstract class Namirnica implements Energent {
  private String ime;
  private static int ukId;
  private int id = ++ukId;

  protected Namirnica (String iime) { ime = iime; }

  public String ime () { return ime; }

  public int id () { return id; }

  public String toString () { return ime + "[" + id + "]"; }
}

// GPodaci.java

package ishrana;

public class GPodaci extends Exception {
  public String toString () { return "*** Neispravani podaci!"; }
}

// Hrana.java

package ishrana;

public class Hrana extends Namirnica {
  private double tez, belanc, masti, ugHidr;

  public Hrana (String ime, double t, double b, double m, double u) throws GPodaci {
    super (ime);
    if (b+m+u > 100) throw new GPodaci ();
    tez = t; belanc = b; masti = m; ugHidr = u;
  }

  public double belanc () { return tez * belanc / 100; }

  public double masti  () { return tez * masti  / 100; }

  public double ugHidr () { return tez * ugHidr / 100; }

  public double tezina () { return tez; }

  public double energVr () { return 16.7*belanc() + 37.6*masti() + 17.2*ugHidr(); }

  public String toString ()
    { return super.toString() + "(" + tez + "," + energVr() + ")"; }
}

// Pice.java

package ishrana;

public class Pice extends Namirnica {
  private double kol, enVr;

  public Pice (String ime, double k, double e) { super (ime); kol = k; enVr = e; }

  public double kolicina () { return kol; }

  public double energVr () { return kol * enVr; }

  public String toString ()
    { return super.toString() + "(" + kol + "," + enергVr)= + ")"; }
}

// GPun.java

package ishrana;

public class GPun extends Exception {
  public String toString () { return "*** Meni je pun!"; }
}

// Meni.java

package ishrana;

public class Meni {
  private Namirnica[] niz;
  private int brNam;

  public Meni (int kap) { niz = new Namirnica [kap]; }

  public Meni dodaj (Namirnica nam) throws GPun {
    if (brNam == niz.length) throw new GPun ();
    niz[brNam++] = nam;
    return this;
  }

  public double energVr () {
    double ev = 0;
    for (int i=0; i<brNam; ev+=niz[i++].energVr());
    return ev;
  }

  public String toString () {
    String s = "{";
    for (int i=0; i<brNam; i++) {
      if (i > 0) s += ",";
      s += niz[i];
    }
    return s + "}[" + energVr() + "]";
  }
}

// Test.java

import ishrana.*;

public class Test {
  public static void main (String[] varg) {
    try {
      Meni meni = new Meni (10);
      meni.dodaj (new Hrana("Hleb",600,7.5,0.4,49))
          .dodaj (new Pice ("Sok", 0.2,18540))
          .dodaj (new Hrana("Sir", 200,17,1.2,4));
      System.out.println (meni);
    } catch (GPodaci g) { System.out.println (g);
    } catch (GPun    g) { System.out.println (g);
    }
  }
}

{Hleb[1](600.0,5898.54),Sok[2](0.2,3078.0),Sir[3](200.0,795.64)}[10402.18]
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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