Методы beforeUse и afterUse сделанны виртуальными, чтобы избавится от ненужного кода в классах - наследниках.
Классы карт перенесенны в отдельные файлы.