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