Ласло Краус |
СИ2ОО2 Испит 7. 7. 2006. |
|---|
Написати на језику Java следећи пакет типова:
а) Које је подразумевано право приступа за чланове класа и шта оно подразумева?
б) Која је улога статичких иницијализационих блокова и када се они извршавају?
Коришћењем типова из првог дела, написати на језику Java следећи пакет типова:
а) У којим контекстима се користи кључна реч super и шта означава у сваком од случајева?
б) Шта се догађа ако два имплементирана интерфејса садрже методе који се разликују само по типу резултата?
Коришћењем класа из првог и другог дела, написати на језику Java следећи пакет типова:
TextField) на коме приказује сваку промену стања придруженог посматрача.

а) Како се на језику Java може синхронизовати нит А са N других нити тако да нит А чека да те друге нити заврше метод run()?
б) У чему су разлике између вредносних и указаних типова у језику C#?
// Generator.java
package statistika;
public class Generator {
int klica; double min, max;
public Generator (int kl, double mi, double ma)
{ klica = kl; min = mi; max = ma; }
public int slBrojCeo ()
{ return klica = 314159621 * klica + 907633385; }
public double slBroj () {
return min +
(max - min) * (slBrojCeo() + 2147483648.) / 4294967296.;
}
}
// Posmatrac.java
package statistika;
public interface Posmatrac {
void ispocetka ();
void azuriraj (double b);
double rezultat ();
String toString ();
}
// Srednja.java
package statistika;
public class Srednja implements Posmatrac {
private double s = 0;
private int n = 0;
public void ispocetka () { s = n = 0; }
public void azuriraj (double b) { s += b; n++; }
public double rezultat () { return s / n; }
public String toString () { return "srednja"; }
}
///////////////// Не припада решењу ///////////////////////////////////
///
// Minimum.java ///
package statistika; ///
public class Minimum implements Posmatrac { ///
private double min = Double.MAX_VALUE; ///
public void ispocetka () { min = Double.MAX_VALUE; } ///
public void azuriraj (double b) { if (b < min) min = b; } ///
public double rezultat () { return min; } ///
public String toString () { return "minimum"; } ///
} ///
///
// Maximum.java ///
package statistika; ///
public class Maximum implements Posmatrac { ///
private double max = Double.MIN_VALUE; ///
public void ispocetka () { max = Double.MIN_VALUE; } ///
public void azuriraj (double b) { if (b > max) max = b; } ///
public double rezultat () { return max; } ///
public String toString () { return "maximum"; } ///
} ///
///
///////////////// Не припада решењу ///////////////////////////////////
// Subjekat.java
package statistika;
public abstract class Subjekat {
private Elem prvi, posl;
private class Elem {
Posmatrac posm; Elem sled;
Elem (Posmatrac p) {
posm = p;
if (prvi == null) prvi = this;
else posl.sled = this;
posl = this;
}
}
public Subjekat prijavi (Posmatrac p)
{ new Elem (p); return this; }
public Subjekat odjavi (Posmatrac p) {
Elem tek = prvi, pret = null;
while (tek!=null && tek.posm!=p)
{ pret = tek; tek = tek.sled; }
if (tek != null) {
if (pret == null) prvi = tek.sled;
else pret.sled = tek.sled;
if (tek == posl) posl = pret;
}
return this;
}
public void dostavi (double b) {
for (Elem tek=prvi; tek!=null; tek=tek.sled)
tek.posm.azuriraj (b);
}
}
// Analizator.java
package statistika;
public class Analizator extends Subjekat implements Runnable {
private Thread nit;
private Generator gen;
private int n;
public void radi (Generator gen, int n) {
this.gen = gen; this.n = n;
(nit = new Thread (this)).start ();
}
public void run () {
for (int i=0; i<n; i++) dostavi (gen.slBroj());
}
}
// GrafPosmtrac.java
package statistika;
import java.awt.TextField;
public class GrafPosmatrac implements Posmatrac {
private Posmatrac posm;
private TextField tks;
public GrafPosmatrac (Posmatrac p, TextField t)
{ posm = p; tks = t; }
public void ispocetka ()
{ posm.ispocetka (); tks.setText (""); }
public void azuriraj (double b) {
posm.azuriraj (b);
tks.setText(Double.toString (rezultat()));
}
public double rezultat () { return posm.rezultat (); }
public String toString () { return posm.toString (); }
}
// Statistika.java
package statistika;
import java.awt.*;
import java.awt.event.*;
public class Statistika extends Frame implements ActionListener {
private TextField
tksKli = new TextField ("152763"),
tksMin = new TextField ("0"),
tksMax = new TextField ("1"),
tksN = new TextField ("1000");
private TextField[] prikazi = {
new TextField (10),
new TextField (10),
new TextField (10)
};
private Posmatrac[] posmatraci = {
new GrafPosmatrac (new Minimum(), prikazi[0]),
new GrafPosmatrac (new Maximum(), prikazi[1]),
new GrafPosmatrac (new Srednja(), prikazi[2])
};
private Analizator analizator = new Analizator();
public Statistika () {
super ("Statistika");
setBounds (100, 100, 380, 200);
setResizable (false);
addWindowListener (new WindowAdapter () {
public void windowClosing (WindowEvent d) { dispose (); }
});
Button dgm = new Button ("Radi");
dgm.addActionListener (this);
add (ploUnosParametara (), "North");
add (ploPrikazStatistike (), "Center");
add (dgm, "South");
}
private Panel ploUnosParametara () {
Panel plo = new Panel ();
plo.add(new Label ("klica:", Label.RIGHT)); plo.add (tksKli);
plo.add (new Label ("min:", Label.RIGHT)); plo.add (tksMin);
plo.add (new Label ("max:", Label.RIGHT)); plo.add (tksMax);
plo.add (new Label ("n:", Label.RIGHT)); plo.add (tksN);
return plo;
}
private Panel ploPrikazStatistike () {
Panel plo = new Panel (new GridLayout (0,1));
for (int i=0; i<posmatraci.length; i++) {
Panel pl = new Panel (); plo.add (pl);
pl.add (new Label (posmatraci[i] + ":"));
pl.add (prikazi[i]);
analizator.prijavi (posmatraci[i]);
}
return plo;
}
public void actionPerformed (ActionEvent d){
for (int i=0; i<posmatraci.length; i++)
posmatraci[i].ispocetka ();
analizator.radi (
new Generator (
Integer.parseInt (tksKli.getText()),
Double.parseDouble (tksMin.getText()),
Double.parseDouble (tksMax.getText())
),
Integer.parseInt (tksN.getText ())
);
}
public static void main (String[] varg) {
new Statistika ().setVisible (true);
}
}
(⇒ почетак)
Copyright © 2010, Laslo Kraus
Последња ревизија: 1.9.2010.