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