Ласло Краус |
СИ2ОО2 Испит 28. 6. 2008. |
---|
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња везана за језик Java:
а) О чему треба водити рачуна приликом именовања пакета и каква је практична препорука за именовање пакета?
б) Да ли се из једног конструктора класе може позвати и други конструктор те класе this()
и конструктор наткласе super()
и зашто?
Написати на језику Java следећи пакет типова:
(
vx,
vy)
.
/
маса/
положај .
Z
. Звезда се приказује исписвањем текстуалног описа у једном реду на главном излазу. При заустављању се не ради ништа.
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња везана за језик Java:
а) Навести разлоге за дефинисање новог корисничког типа изузетака.
б) Ако постојећа класа дефинише несинхронизоване методе, на које начине се она може безбедно користити у окружењу са више нити и који начин је робуснији?
Коришћењем типова из првог дела, написати на језику Java следећи пакет типова (грешке пријављивати изузецима опремљеним текстовима порука):
S
. Сателит се приказује исписвањем текстуалног описа у једном реду на главном излазу. Приликом заустављања постаје пасиван.
Одговорити концизно (по једна или две реченице) и прецизно на следећа питaња везана за језик C#:
а) Коју операцију обавља оператор as
и шта се догађа ако је операција неуспешна? Навести пример.
б) Шта означава модификатор sealed
примењен на класу? Са којим модификатором заједно се примењује модификатор sealed
на методе и шта означава?
Коришћењем класа из првог и другог дела, написати на језику Java следећи пакет типова:
// Vektor.java package vasiona; public class Vektor { private double x, y; public Vektor ( double a, double b) { x = a; y = b; } public Vektor () {} public double x() { return x; } public double y() { return y; } public static Vektor zbir( Vektor v1, Vektor v2) { return new Vektor( v1.x+v2.x, v1.y+v2.y); } public String toSTring() { return "(" + x + "," + y + ")"; } } // Telo.java package vasiona; public abstract class Telo { private double m; public Telo( double masa) { m = masa; } public double masa() { return m; } public abstract char vrsta(); public abstract Vektor polozaj(); public abstract void prikazi(); public abstract void zaustavi(); public String toString() { return vrsta() + "/" + m + "/" + polozaj(); } } // Zvezda.java package vasiona; public class Zvezda extends Telo { private Vektor polozaj; public Zvezda(double masa) { super( masa); polozaj = new Vektor( 0, 0); } public char vrsta() { return 'Z'; } public Vektor polozaj() { return polozaj; } public void prikazi() { System.out.println( this); } public void zaustavi() {} public Zvezda premesti( Vektor pol) { polozaj = pol; return this; } } // Sistem.java package vasiona; public class Sistem { private class Elem { Telo t; Elem sled; Elem( Telo telo) { t = telo; if (prvi == null) prvi = this; else posl.sled = this; posl = this; } } private Elem prvi, posl; public Sistem dodaj( Telo telo) { new Elem( telo); return this; } public double masa() { double m = 0; for (Elem tek=prvi; tek!=null; tek=tek.sled) m += tek.t.masa(); return m; } public void prikazi() { for (Elem tek=prvi; tek!=null; tek=tek.sled) tek.t.prikazi(); } public void zaustavi() { for (Elem tek=prvi; tek!=null; tek=tek.sled) tek.t.zaustavi(); } }
// Satelit.java package vasiona; public class Satelit extends Telo implements Runnable { protected Telo centar; protected double R, omega; private long t0; private double x, y; private Thread nit; public Satelit( double masa, Telo tt, double rr, double oo) { super( masa); centar = tt; R = rr; omega=oo; (nit = new Thread( this)).start(); } public char vrsta() { return 'S'; } public synchronized Vektor polozaj() { return Vektor.zbir( centar.polozaj(), new Vektor(x,y)); } public void prikazi() { System.out.println( this); } public void zaustavi() { if (nit != null) { nit.interrupt(); nit = null; } } public void run () { try { while (! Thread.interrupted()) { synchronized (this) { double fi = omega * (System.currentTimeMillis() - t0) / 1000.; x = R * Math.cos( fi); y = R * Math.sin( fi); } Thread.sleep( 5); } } catch (InterruptedException g) {} } } // GPuna.java package vasiona; public class GPuna extends Exception { public String toString() { return "*** Vasiona je puna!"; } } // GIndeks.java package vasiona; public class GIndeks extends Exception { public String toString() { return "*** Indeks izvan opsega!"; } } // Vasiona.java package vasiona; public class Vasiona { private Sistem[] niz; private int duz; public Vasiona ( int kap) { niz = new Sistem [kap]; } public Vasiona() { this( 10); } public Vasiona dodaj( Sistem sis) throws GPuna { if (duz == niz.length) throw new GPuna(); niz[duz++] = sis; return this; } public int duz() { return duz; } public Sistem dohvati(int i) throws GIndeks{ if (i<0 || i>=duz) throw new GIndeks(); return niz[i]; } private static class Radi extends Thread { Sistem sis; double masa; Radi( Sistem s) { sis = s; start(); } public void run() { masa = sis.masa(); } double masa() { return masa; } } public double masa() { Radi[] rad = new Radi [duz]; for (int i=0; i<duz; i++) rad[i++] = new Radi( niz[i]); double m = 0; for (Radi r: rad) { try { r.join(); } catch (InterruptedException g) {} m += r.masa(); } return m; } }
// GraZvezda.java package vasiona; import java.awt.*; public class GraZvezda extends Zvezda { private Canvas platno; private Color boja; private int r; public GraZvezda( double masa, Canvas pp, int rr, Color bb) { super( masa); r = rr; boja = bb; platno = pp; } public void prikazi() { Graphics g = platno.getGraphics(); int vis = platno.getHeight(); g.setColor( boja); Vektor v = polozaj(); int x = (int)v.x(); int y = vis - (int)v.y(); g.fillOval( x-r, y-r, 2*r, 2*r); } } // GraSatelit.java package vasiona; import java.awt.*; public class GraSatelit extends Satelit { private Canvas platno; private Color boja1, boja2; private int r; public GraSatelit( double masa, Telo centar, double R, double omega, Canvas pp, int rr, Color bb1, Color bb2) { super( masa, centar, R, omega); platno = pp; r = rr; boja1 = bb1; boja2 = bb2; } public void prikazi() { Graphics g = platno.getGraphics(); int vis = platno.getHeight(); Vektor v = centar.polozaj(); g.setColor( boja2); int x = (int)v.x(); int y = vis - (int)v.y(); int ro = (int)R; g.drawOval( x-ro, y-ro, 2*ro, 2*ro); v = polozaj(); g.setColor( boja1); x = (int)v.x(); y = vis - (int)v.y(); g.fillOval( x-r, y-r, 2*r, 2*r); } } // Program.java package vasiona; import java.awt.*; import java.awt.event.*; public class Program extends Frame implements Runnable { private Sistem sistem = new Sistem(); private Canvas platno; private Zvezda zvezda; private Thread nit; private void sastavi() throws GPuna { zvezda = new GraZvezda( 100, platno, 10, Color.RED); sistem.dodaj ( zvezda); Satelit sat1 = new GraSatelit( 30, zvezda, 90, 1, platno, 6, Color.BLUE, Color.GREEN); sistem.dodaj ( sat1); Satelit sat2 = new GraSatelit( 8, sat1, 20, 5, platno, 4, Color.GRAY, Color.GREEN); sistem.dodaj ( sat2); } private void popuniProzor() { platno = new Canvas() { public void paint( Graphics g) { sistem.prikazi(); } }; add( platno); platno.addComponentListener( new ComponentAdapter () { public void componentResized( ComponentEvent d) { zvezda.premesti( new Vektor (platno.getWidth()/2, platno.getHeight()/2) ); } }); (nit = new Thread( this)).start(); } public void run () { try { while (! Thread.interrupted()) { platno.repaint(); Thread.sleep(20); } } catch (InterruptedException g) {} nit = null; } private Program() { super( "Vasiona"); setSize( 250, 200); popuniProzor(); try { sastavi(); } catch( GPuna g) {} setVisible( true); addWindowListener( new WindowAdapter () { public void windowClosing( WindowEvent d) { nit.interrupt(); sistem.zaustavi(); dispose(); } }); } public static void main( String[] varg) { new Program(); } }(⇒ почетак)
Copyright © 2008, Laslo Kraus
Последња ревизија: 28.6.2008.