package elte.java2_utikalauz5.ood; /** Jármű. @link.forrásfájl {@docRoot}/../data/ood/src bottleneck.java @since Java 2 Útikalauz programozóknak */ class Jarmu { private int prioritás = 10; public void prioritás_be(int aprioritás) { prioritás = aprioritás; } public int prioritás_ki() { return prioritás; } public void kezdet() { prioritás_be(10); } } // Jarmu /** Mentő. @link.forrásfájl {@docRoot}/../data/ood/src bottleneck.java @since Java 2 Útikalauz programozóknak */ class Mento extends Jarmu { public void kezdet() { prioritás_be(20); } } // Mento /** Autó. @link.forrásfájl {@docRoot}/../data/ood/src bottleneck.java @since Java 2 Útikalauz programozóknak */ class Auto extends Jarmu { } // Auto /** Prioritásos sor. @link.forrásfájl {@docRoot}/../data/ood/src bottleneck.java @since Java 2 Útikalauz programozóknak */ class PrioritasosSor { // csak metódusok megvalósítás nélkül // a sor fejelemének prioritását adja vissza public int prioritás() { // ... return 0; } // sor fejelemét adja vissza public Object kivesz() { // ... return null; } // beszúr egy elemet a sorba, egy olyan elem elé, melynek // prioritása kisebb, és olyan elem után, melynek prioritása // nagyobb vagy egyenlő, mint az adott elemé public void berak(Object elem, int prioritás) { // ... } } // PrioritasosSor /** Generátor. @link.forrásfájl {@docRoot}/../data/ood/src bottleneck.java @since Java 2 Útikalauz programozóknak */ class Generator { private PrioritasosSor sor; public Jarmu generál() { Jarmu j; if(Math.random() < 0.5) { j = new Mento(); } else { j = new Auto(); } j.kezdet(); // sor.berak(j, j.prioritás_ki()); return j; } } // Generator /** Jelzőlámpa. @link.forrásfájl {@docRoot}/../data/ood/src bottleneck.java @since Java 2 Útikalauz programozóknak */ class JelzoLampa { private PrioritasosSor sor; public void elenged() { Jarmu j = (Jarmu)sor.kivesz(); // szabad jelzés j-nek } public int fej_prioritása() { return sor.prioritás(); } } // JelzoLampa /** Ütemező. @link.forrásfájl {@docRoot}/../data/ood/src bottleneck.java @since Java 2 Útikalauz programozóknak */ class Utemezo { private static final int lámpák_száma = 2; private int aktuális = 0; // az aktuális lámpa private JelzoLampa[] lámpák; // a vezérelt lámpák private int[] prioritások; // elsô Jarmuvek prioritásai // a jelzôlámpáktól megkérdi az elsô Jarmuvek prioritását public void érdeklôdés() { for(int oldal=0; oldal prioritások[1]) { // bal oldal fontosabb return 0; } else if(prioritások[0] > 0) { // mindkét oldalon ugyanolyan fontos Jarmuvek // az aktuális oldal lesz elengedve aktuális = (aktuális + 1) % lámpák_száma; return aktuális; } else { // nincs Jarmu return -1; } } // választ public void kezdet() { lámpák = new JelzoLampa[lámpák_száma]; prioritások = new int[lámpák_száma]; } // kezdet } // Utemezo