Ласло Краус |
ИР2ОО2/СИ2ОО2 Испит 26. 6. 2010. |
|---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња:
а) (Java) Да ли методе wait(), notify() и notifyAll() класе Object могу да се редефинишу у поткласама и зашто?
б) (C#) Навести врсте чланова класа по категоријама: (1) функционални чланови (2) чланови подаци (3) типови (угнежђени).
в) (C#) Шта исписује следећи програм?
class X{ delegate void D(); int i;
void m1() { i++; } void m2() { i--; } void m3() { i *= 2; }
static void Main(string[] args){ X x = new X();
D d1 = new D(x.m1), d2 = new D(x.m2), d3 = new D(x.m3);
D d = d1 + d2; d += d1; d += d3 - d2; d();
System.Console.WriteLine(x.i);
}
}
Написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
[назив_извора].
- " између њих.
+", а најстарија вест се уклања помоћу дугмета "-". Садржаном ротору, чија се периода такта T поставља приликом покретања, придружен је графички приказивач. При свакој промени новости, ротору се промени текст, тако да увек садржи актуелне вести. Одговарајућим дугмадима се ротор може покренути и зауставити. Графичка корисничка површ спречава промену података у току ротирања вести.

За дохватање знака из ниске знакова на располагању је метода niska.charAt(indeks), а за дохватање подниске од задате позиције метода niska.substring(index).
// Izvor.java
package rotoNovosti;
public class Izvor {
static private long brojIzvora=0;
private long id=brojIzvora++;
private String naziv;
public Izvor( String n) { naziv = n; }
public long id() { return id; }
public String naziv() { return naziv; }
}
// Vest.java
package rotoNovosti;
public class Vest {
private Izvor izvor;
private String sadrzaj;
public Vest( Izvor i, String s) { izvor = i; sadrzaj = s; }
public String toString() { return sadrzaj +"[" +izvor.naziv() +"]"; }
public Izvor izvor() { return izvor; }
public String sadrzaj() { return sadrzaj; }
}
// Novosti.java
package rotoNovosti;
public class Novosti {
public class PrazneNovosti extends Exception{}
private static class Elem{
Vest vest; Elem sled;
Elem( Vest v) { vest = v; }
}
private Elem prvi,posl;
public void dodaj( Vest v) {
Elem novi = new Elem( v);
if (posl == null) prvi = novi; else posl.sled = novi;
posl = novi;
}
public void izbaci() throws PrazneNovosti {
if (prvi == null) throw new PrazneNovosti();
prvi = prvi.sled;
if (prvi == null) posl = null;
}
public String toString() {
String s="";
for (Elem tek=prvi; tek!=null; tek=tek.sled)
s += tek.vest+ " - ";
return s;
}
}
// Prikazivac.java
package rotoNovosti;
public interface Prikazivac {
void prikazi( String s);
}
// Rotor.java
package rotoNovosti;
public class Rotor extends Thread {
public static final int T = 500; //ms
private int perioda = T;
private boolean radi = false;
private Prikazivac prikazivac;
private String tekst = "";
public Rotor(Prikazivac p) { prikazivac = p; }
public void tekst( String t) { if (! radi) tekst = t; }
public void perioda( int p) { perioda = p; }
public void run () {
prikazivac.prikazi( tekst);
try {
while (! interrupted()) {
if (! radi) synchronized (this) { wait(); }
sleep( perioda);
if (tekst.length() > 0)
tekst = tekst.substring(1) + tekst.charAt(0);
prikazivac.prikazi(tekst);
}
} catch (InterruptedException g) {}
}
public void pocni() { start(); }
public synchronized void kreni() { radi = true; notify(); }
public void stani() { radi = false; }
public void zavrsi() { interrupt (); }
}
// GraPrikazivac.java
package rotoNovosti;
import java.awt.*;
public class GraPrikazivac implements Prikazivac{
TextField prikaz;
public GraPrikazivac( TextField p){
prikaz=p;
prikaz.setEditable( false);
prikaz.setBackground( Color.black);
prikaz.setForeground( Color.white);
}
public void prikazi( String s) { prikaz.setText( s); }
}
// Program.java
package rotoNovosti;
import java.awt.*;
import java.awt.event.*;
public class Program extends Frame {
private Choice izbIzvor = new Choice();
private TextField tksVest = new TextField();
private Button dgmDodaj = new Button( "+");
private Button dgmUkloni = new Button( "-");
private TextField tksTiker = new TextField();
private TextField tksPerioda = new TextField( Integer.toString( Rotor.T));
private Button dgmKreni = new Button( "Kreni");
private Button dgmStani = new Button( "Stani");
private Izvor[] izvori = { new Izvor( "Tanjug"), new Izvor( "Beta"),
new Izvor( "Fonet")};
private int izvorId;
private Novosti novosti = new Novosti();
private GraPrikazivac gp = new GraPrikazivac( tksTiker);
private Rotor rotor = new Rotor(gp);
private void omoguci( boolean da) {
izbIzvor.setEnabled( da);
dgmDodaj.setEnabled( da);
dgmUkloni.setEnabled( da);
tksPerioda.setEnabled( da);
dgmKreni.setEnabled( da);
dgmStani.setEnabled( !da);
}
private void popuniProzor() {
setLayout(new GridLayout( 5, 1));
for (int i=0; i<izvori.length; i++) izbIzvor.add( izvori[i].naziv());
add(izbIzvor);
izbIzvor.addItemListener( new ItemListener() {
public void itemStateChanged( ItemEvent e) {
izvorId=izbIzvor.getSelectedIndex();
}
});
add(tksVest);
Panel plo = new Panel();
dgmDodaj.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent d) {
String s = tksVest.getText();
if (s.length() > 0) {
novosti.dodaj( new Vest( izvori[izvorId], s));
tksVest.setText( "");
tksTiker.setText( novosti.toString());
rotor.tekst( novosti.toString());
}
}
});
plo.add( dgmDodaj);
add( plo);
dgmUkloni.addActionListener( new ActionListener() {
public void actionPerformed ( ActionEvent d) {
try {novosti.izbaci(); } catch (Novosti.PrazneNovosti i){}
tksTiker.setText( novosti.toString());
rotor.tekst( novosti.toString());
}
});
plo.add( dgmUkloni);
add( tksTiker);
add( plo = new Panel());
plo.add( new Label( "T", Label.RIGHT));
plo.add(tksPerioda);
dgmKreni.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent d) {
try {
rotor.perioda( Integer.parseInt( tksPerioda.getText()));
omoguci( false);
rotor.kreni();
} catch (NuberFormatException g) {}
}
});
plo.add(dgmKreni);
dgmStani.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent d) {
rotor.stani();
omoguci( true);
}
});
plo.add(dgmStani);
}
public Program () {
super( "RotoNovosti");
setSize( 220, 180); setResizable( false);
popuniProzor(); setVisible( true);
omoguci( true);
rotor.pocni();
addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent d) {
rotor.zavrsi (); dispose ();
}
});
}
public static void main( String[] varg) { new Program(); }
}
(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 1.9.2010.