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