Elektrotehnicki fakultet, Beograd  Ласло Краус ИР2ОО2/СИ2ОО2
Испит
13. 6. 2011.

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

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

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

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

а) (Java) Шта се догађа са нити и активним објектом када се метод run()заврши?

б) (C#) Које особине има .NET платформа: (1) лаку преносивост на произвољан оперативни систем; (2) језичку неутралност; (3) интерпретацију међукода; (4) превођење у време извршења (JIT compilation)?

в) (C#) Поставити модификаторе методама које: (1) представљају основу за полиморфно редефинисање; (2) представљају полиморфну редефиницију методе основне класе; (3) сакривају методу основне класе која се не може даље редефинисати; (4) сакривају методу основне класе уз даљу могућу редефиницију.

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

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


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


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

// Automobil.java

package parking;

public class Automobil extends Thread {
  private static int posId = 0;
  private int id = ++posId;
  private String marka;
  private Parking park;
  private int t;

  public Automobil(String m, Parking p, int tmin, int tmax) {
    marka = m; park = p;
    t = (int)(tmin + Math.random()*(tmax+tmin));
    start();
  }

  public void run() {
    try {
      park.ulazi(this);
      sleep(t);
      park.izlazi(this);
    } catch (InterruptedException g) {}
  }

  public void unisti() { interrupt(); }

  public String toString() { return id + "/" + marka; }
}

// Ulaz.java package parking; public class Ulaz extends Thread { private Parking park; private int minUl, maxUl, minPark, maxPark; private boolean otvoren = false; private String[] marke = {"BMW"}; public Ulaz (Parking p, int minU, int maxU, int minP, int maxP) { park = p; minUl = minU; maxUl = maxU; minPark = minP; maxPark = maxP; start(); } public void postavi(String[] marke) { this.marke = marke; } public void run() { try { while (!interrupted()) { while (!otvoren) synchronized(this) { wait(); } sleep((long)(minUl + Math.random()*(maxUl-minUl))); int k = (int)(Math.random() * marke.length); new Automobil(marke[k], park, minPark, maxPark); } } catch (InterruptedException g) {} } public synchronized void otvori() { otvoren = true; notify(); } public synchronized void zatvori() { otvoren = false; } public void unisti() { interrupt(); } }
// GIndeks.java package parking; public class GIndeks extends Exception { public String toString() { return "*** Nedozvoljen indeks!"; } }
// Parking.java package parking; public class Parking { private Automobil[] mesta; private int kap, broj = 0; private Ulaz ulaz; public Parking(int k, int minU, int maxU, int minP, int maxP) { mesta = new Automobil [kap = k]; ulaz = new Ulaz(this, minU, maxU, minP, maxP); } Ulaz ulaz() { return ulaz; } public synchronized void ulazi(Automobil a) throws InterruptedException { while (broj == kap) wait(); int i = 0; while (mesta[i] != null) i++; mesta[i] = a; broj++; } public synchronized void izlazi(Automobil a) { int i = 0; while (i<kap && mesta[i]!=a) i++; if (i != kap) mesta[i] = null; broj--; notifyAll(); } public synchronized Automobil automobil(int i) throws GIndeks { if (i<0 || i>=mesta.length) throw new GIndeks(); return mesta[i]; } public synchronized void otvori() { ulaz.otvori(); } public synchronized void zatvori() { ulaz.zatvori(); } public synchronized void unisti() { ulaz.unisti(); while (broj > 0) try { wait(); } catch (InterruptedException g) {} } }
// GraPark.java package parking; import java.awt.*; public class GraPark extends Parking { private Panel ploca; private Button[] dugmad; public GraPark(int kap, int minU, int maxU, int minP, int maxP, int kol) { super(kap, minU, maxU, minP, maxP); ploca = new Panel(new GridLayout(0,kol)); ploca.setEnabled(false); dugmad = new Button [kap]; for (int i=0; i<kap; ploca.add(dugmad[i++] = new Button())); } public Panel ploca() { return ploca; } public synchronized void ulazi(Automobil a) throws InterruptedException { super.ulazi(a); prikazi(); } public synchronized void izlazi(Automobil a) { super.izlazi(a); prikazi(); } private void prikazi() { try { for (int i=0; i<dugmad.length; i++) { Automobil a = automobil(i); dugmad[i].setLabel(a==null ? "" : a.toString()); } } catch (GIndeks g) {}; } }
// Program.java package parking; import java.awt.*; import java.awt.event.*; public class Program extends Frame { private GraPark park = new GraPark(10, 200, 500, 1000, 5000, 3); Button dgmOtvori = new Button("Otvori"), dgmZatvori = new Button("Zatvori"), dgmUnisti = new Button("Unisti"); TextArea tksMarke = new TextArea("BMW\nVW\nOPEL", 1, 6); private void popuniProzor() { add(park.ploca(), "Center"); add(tksMarke, "West"); Panel plo = new Panel(); add(plo, "South"); plo.add(dgmOtvori); dgmOtvori.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d) { dgmOtvori.setEnabled(false); dgmZatvori.setEnabled(true); park.ulaz().postavi(tksMarke.getText().split("\n")); park.otvori(); } }); plo.add(dgmZatvori).setEnabled(false); dgmZatvori.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d) { dgmOtvori.setEnabled(true); dgmZatvori.setEnabled(false); park.zatvori(); } }); plo.add(dgmUnisti); dgmUnisti.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d) { new Unisti().start(); } }); } private Program() { super("Parking"); setSize(270, 150); popuniProzor(); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent d) { new Unisti().start(); } }); } private class Unisti extends Thread { public void run() { dgmOtvori.setEnabled(false); dgmZatvori.setEnabled(false); dgmUnisti.setEnabled(false); park.unisti(); dispose(); } } public static void main(String[] varg) { new Program(); } }
( почетак)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

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