Глава 5. Классы и Объекты

Содержание

Приступая к изучению классов
Могу ли я обладать состоянием?
Методы
Конструкторы
Использование нашего класса
Наследование
Переопределение унаследованных методов
Множественное наследование
Интроспекция
Упражнения

Следующая программа показывает как может выглядеть обработчик зависимостей в Perl 6. Она демонстрирует использование пользовательских конструкторов, приватных и публичных атрибутов, методов, а также некоторые аспекты сигнатур. Кода в примере приведено не много, тем не менее он интересен и местами полезен.

    class Task {
        has      &!callback;
        has Task @!dependencies;
        has Bool $.done;

        method new(&callback, Task *@dependencies) {
            return self.bless(*, :&callback, :@dependencies);
        }

        method add-dependency(Task $dependency) {
            push @!dependencies, $dependency;
        }

        method perform() {
            unless $!done {
                .perform() for @!dependencies;
                &!callback();
                $!done = True;
            }
        }
    }

    my $eat =
        Task.new({ say 'eating dinner. NOM!' },
            Task.new({ say 'making dinner' },
                Task.new({ say 'buying food' },
                    Task.new({ say 'making some money' }),
                    Task.new({ say 'going to the store' })
                ),
                Task.new({ say 'cleaning kitchen' })
            )
        );

    $eat.perform();