Трейты для PHP 5.x. Начало

В PHP 5.4 планируются так называемые трейты (traits) - возможность создавать классы как комбинацию методов и полей других классов. По сути, это реализация множественного наследования в PHP.

Однако, проблема в том, что это будет только в PHP 5.4, а даже 5.3 не везде установлен. А система является потенциально очень удобной. И хочется использовать уже сейчас. Я решил сделать эмуляцию трейтов, работающую в 5.х. И это получилось! Я расскажу как.

(Система находится в разработке. Это только первая, предварительная версия).

Итак, давайте посмотрим, что мы хотим от трейтов и чего можем добиться в PHP 5. Для этого рассмотрим наиболее вероятный случай их использования. Случай следующий: мы берем класс-наследник (Н) и хотим в нем использовать методы из нескольких заранее готовых кусочков (К1, К2 и т. п.). Читать полностью »

Генератор случайных чисел. Java 5

Как с помощью генератора случайных чисел от 0 до 5 сделать генератор случайных чисел от 0 до 7. Равномерное распределение

    package test;

    import java.util.Random;

    public class TestRandom {

            private static final Random r = new Random();

            private static final int[] result = new int[11];

            public static void main(String[] args) {
                    for (int i=0; i<100000; i++) {
                            result[getRandom7()]++;
                    }
                    for (int i=0; i< result.length; i++) {
                            System.out.println(i + " : " + result[i]);
                    }
            }

            private static int getRandom7() {
                    if (getNextRandom(3) != 3) {
                            return get5();
                    } else {
                            return(6 + getNextRandom(1));
                    }
            }

            private static int getNextRandom(int max) {
                    int tmp = get5();
                    if (tmp > max) {
                            tmp = getNextRandom(max);
                    }
                    return tmp;
            }

            private static int get5() {
                    return r.nextInt(6);
            }

    }

Читать полностью »