/* Objektovo-orientovane programovanie 2006/2007 Valentino Vranić Skúška 23.5.2007 Toto je kód jedného z možných riešení pre otázku 18. Každá trieda by mala byť v samostatnom súbore s názvom v tvare NázovTriedy.java. Pre úplnosť by na začiatku každého takého súboru mal byť uvedený balík do ktorého triedy patria: package mymodel; */ // prvky majú spoločné vlastnosti // predovšetkým je to operácia spájania public abstract class MyElement { private int n = 0; // počet väzieb private MyElement[] con; // pripojené prvky private int value; // ohodnotenie prvku public MyElement(int value, int nmax) { this.value = value; con = new MyElement[nmax]; } public int getValue() { return value; } public void setValue(int i) { value = i; } public void spoj(MyElement e) throws ConnectionsExceededException { if (n < con.length) { // maximálny počet väzieb je daný veľkosťou reťazca con[n] = e; setValue(e.adaptValue(value)); n++; } else throw new ConnectionsExceededException(); } // metóda vypočíta ohodnotenie prvku po spojení s iným prvkom // spôsob úpravy ohodnotenia závisí od druhu prvku public abstract int adaptValue(int i); } public class Adder extends MyElement { // implicitný konštruktor už nie je public Adder(int value, int nmax) { super(value, nmax); } // úprava ohodnotenia pri spojení s Adderom public int adaptValue(int i) { return i + getValue(); } } public class Subtracter extends MyElement { public Subtracter(int value, int nmax) { super(value, nmax); } // úprava ohodnotenia pri spojení so Subtracterom public int adaptValue(int i) { return i - getValue(); } } public class Multiplier extends MyElement { public Multiplier(int value, int nmax) { super(value, nmax); } // úprava ohodnotenia pri spojení s Multiplierom public int adaptValue(int i) { return i * getValue(); } } public class ConnectionsExceededException extends Exception { } public class M { public static void main(String[] args) { Adder a = new Adder(1, 3); Subtracter s = new Subtracter(2, 5); Multiplier m = new Multiplier(3, 2); System.out.println("a: " + a.getValue() + " s: " + s.getValue() + " m: " + m.getValue()); try { a.spoj(s); s.spoj(m); m.spoj(a); } catch(ConnectionsExceededException e) { System.out.println("Bol prekroceny pocet spojeni."); } System.out.println("a: " + a.getValue() + " s: " + s.getValue() + " m: " + m.getValue()); } }