Ласло Краус |
ИР2ОО2/СИ2ОО2 Испит 13. 6. 2011. |
|---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) (Java) Шта се догађа са нити и активним објектом када се метод run()заврши?
б) (C#) Које особине има .NET платформа: (1) лаку преносивост на произвољан оперативни систем; (2) језичку неутралност; (3) интерпретацију међукода; (4) превођење у време извршења (JIT compilation)?
в) (C#) Поставити модификаторе методама које: (1) представљају основу за полиморфно редефинисање; (2) представљају полиморфну редефиницију методе основне класе; (3) сакривају методу основне класе која се не може даље редефинисати; (4) сакривају методу основне класе уз даљу могућу редефиницију.
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
/марка.
Panel) која може да се дохвати. На плочи се налази дугмад (Button) по матричном распореду у задатом броју колона. При сваком уласку и изласку аутомобила на натписима те дугмади се приказују текстуални описи аутомобила на појединим паркинг местима.
TextArea) при сваком отварању паркинга (садржај податка s типа String може да се разложи на редове изразом s.split("\n") чији је резултат типа String[]). Не сме да се отвори отворен, односно затвори затворен паркинг. По започињању уништавања, ниједно командно дугме не сме бити омогућено.

// 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(); }
}
(⇒ почетак)
Copyright © 2011, Laslo Kraus
Последња ревизија: 4.7.2011.