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

Аутори: Игор Тартаља и Ласло Краус

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

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

Остварити на језику Java следећи систем типова:

(10 поена) Написати на језику Java класу са главним програмом који прочита неколико мерљивих објеката различитих врста правећи од њих одговарајуће уређене листе (од сваке врсте листе по једну). На располагању стоји класа Citaj у безименом пакету која садржи заједничке методе за читање свих стандардних типова података.

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

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

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

б) Да ли и зашто језик Java подржава вишеструко наслеђивање и то: (а) имплементацију више интерфејса у једној класи; (б) извођење једне класе из више других класа; (в) извођење интерфејса из више других интерфејса?

в) Којe су разлике између статичке угнеждене класе и унутрашње (inner) класе?


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


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

// Objekat.java
public abstract class Objekat {
  private static int ukId = 0;
  private int id = ++ukId;
  public String toString () { return Integer.toString (id); }
}

// Merljiv.java
public interface Merljiv { double vel (); }

// MerljivObj.java
public abstract class MerljivObj extends Objekat implements Merljiv {}

// Kompl.java
public class Kompl extends MerljivObj {
  private double re, im;
  public Kompl (double r, double i) { re = r; im = i; }
  public double vel () { return Math.sqrt (re*re + im*im); }
  public String toString ()
    { return "K" + super.toString() + "(" + re + "," + im + ")"; }
}

// Pravoug.java
public class Pravoug extends MerljivObj {
  private double a, b;
  public Pravoug (double aa, double bb) { a = aa; b = bb; }
  public double vel () { return a * b; }
  public String toString ()
    { return "P" + super.toString() + "(" + a + "," + b + ")"; }
}

// UredjenaLista.java
public abstract class UredjenaLista implements Merljiv {
  private class Elem {
    MerljivObj obj; Elem sled;
    Elem (MerljivObj o, Elem p, Elem s) {
      obj = o; sled = s;
      if (p == null) prvi = this; else p.sled = this;
    }
  }
  private Elem prvi;
  public boolean dodaj (MerljivObj obj) {
    Elem pret = null, tek = prvi;
    while (tek!=null && tek.obj.vel()<=obj.vel())
      { pret = tek; tek = tek.sled; }
    new Elem (obj, pret, tek);
    return true;
  }
  public double vel () {
    double v = 0;
    for (Elem tek=prvi; tek!=null; tek=tek.sled) v += tek.obj.vel ();
    return v;
  }
  public String toString () {
    StringBuffer s = new StringBuffer ("[");
    for (Elem tek=prvi; tek!=null; tek=tek.sled) {
      s.append (tek.obj);
      if (tek.sled != null) s.append (',');
    }
    return s.append (']').toString ();
  }
}

// ListaKompl.java
public class ListaKompl extends UredjenaLista {
  public boolean dodaj (MerljivObj obj) {
    if (!(obj instanceof Kompl)) return false;
    super.dodaj (obj);
    return true;
  }
}

// ListaPravoug.java
public class ListaPravoug extends UredjenaLista {
  public boolean dodaj (MerljivObj obj) {
    if (!(obj instanceof Pravoug))
      return false;
    super.dodaj (obj);
    return true;
  }
}

// Test.java
public class Test {
  public static void main (String[] varg) {
    ListaKompl lKompl = new ListaKompl ();
    ListaPravoug lPravoug=new ListaPravoug();
    radi: while (true) {
      System.out.print ("Vrsta (K,P,*) i parametri? ");
      MerljivObj obj = null;
      switch (Citaj.Char()) {
        case 'K': case 'k':
          obj = new Kompl(Citaj.Double(), Citaj.Double());
          break;
        case 'P': case 'p':
          obj = new Pravoug(Citaj.Double(), Citaj.Double());
          break;
        case '*': break radi;
        default: System.out.println ("*** Nepoznata vrsta!");
      }
      if (obj != null) { lKompl.dodaj (obj); lPravoug.dodaj (obj); }
    }
    System.out.println("Lista kompleksnih: "  + lKompl);
    System.out.println("Lista pravougaonika: " + lPravoug);
  }
}


Vrsta (K,P,*) i parametri? k 3 4
Vrsta (K,P,*) i parametri? p 2 1
Vrsta (K,P,*) i parametri? p 4 2
Vrsta (K,P,*) i parametri? k -1 2
Vrsta (K,P,*) i parametri? k 2 -2
Vrsta (K,P,*) i parametri? d
*** Nepoznata vrsta!
Vrsta (K,P,*) i parametri? *
Lista kompleksnih: [K4(-1.0,2.0),K5(2.0,-2.0),K1(3.0,4.0)]
Lista pravougaonika: [P2(2.0,1.0),P3(4.0,2.0)]
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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