Ласло Краус |
ИР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.