Индексируйте классы.
Проектирование компонентов интерфейса
Принцип Разделения Команд и Запросов: функция не должна иметь абстрактного побочного эффекта (конкретный побочный эффект допустим).
В качестве аргументов используйте только операнды.
Установите статус, затем выполняйте операцию.
Для каждой команды, устанавливающей статус, обеспечьте запрос, возвращающий статус.
Для запросов без аргументов внешне не должна быть видима разница в их реализации - атрибутом или функцией.
Допускайте у объектов изменение представления по умолчанию в зависимости от результата запрашиваемой операции (примером является класс комплексных чисел).
Структуры с курсором (LIST, LINKED_LIST и многие другие).