Работая над последним проектом, возникла проблема разделения абстрактных и конкретных сущностей. Вырву кусок ТЗ из контекста: необходимо была возможность легкой расширяемости служб инкассации. Например, существует на данный момент 3 вида инкассации: инкассация Сбербанка, внутренняя и фельдьегерская (вроде бы, инкассация НБУ, во всяком случае государственная) инкассации. Задача была в безболезненном добавлении новых служб.
В теории необходимо указать абстрактный класс, который будет содержать общие для всех видов инкассации свойства и методы, а в конкретных моделях указать специфические. Например, у каждой службы инкассации собственная формула расчета стоимости перевозки наличности, у какой-то ограничены дистанция и сумма перевозимой наличности и т.д.