Сионист писал(а):Получается, что можно создать экземпляр класса IObjectя который знать не будет ни о каких стореджах, а по условию это не имеет смысла.
Бред. Вообще-то IObject - это абстрактный класс. Если ты умудришься создать объект этого класс, то получишь нобелевскую премию... и параллельно дарвиновскую.
Вообще-то я расположил все классы для удобства в одном листинге. На самом деле объявления классов IObject и CObjectStorage должны быть вынесены в хедер, который будет включаться вызывающим кодом. А вот классы CObject, CRootObect и CAnyObject должны быть спрятаны в cpp файле, где расположенo определение класса CObjectStorage. Это позволит сокрыть имплементации объектов от вызывающего кода, благодаря чему вызывающей стороне будет доступен только GetObject и создать объекты напрямую не получится. Надеюсь, я достаточно доходчиво описал принцип работы фабричного метода. Если не понятно, то почитай о нём в интернете. Это такой же обобщённый паттерн проектирования, как и любимый тобой синглтон.
Сионист писал(а):По условию IObject - полуящик того же цвета. Так что без себе подобного он не имеет даже входов/выходов, с которыми хоть как то можно было бы работать
Неправильная трактовка. IObject - это интерфейс. Реальные классы для элементов множества - это CRootObject и CAnyObject. У CAnyObject как раз есть связь. Дочитать нужно было код просто...
Сионист писал(а):Пользователь с гуя набирает значения поля IObject, обработчик события спрашивает класс, а какой же объект имеет такое значение поля, указатель именно на этот объект присваивается полю экземпляра A. Тоже самое делается для другого экземпляра A. А потом пользователь куда то жмёт мышкой и машина должна сказать, во сколько раз один экземпляр A больше другого.
Ага, то есть новый объект создаётся не на основании связи. Связь позже устанавливается? Это может потребовать пересмотра концепции. Хотя с другой стороны в предыдущих постах ты писал, что один элемент не имеет смысла без второго. Вот тут я запутался.
Сионист писал(а):Ни в какой другой задаче IObject вообще не имеет смысла. Но у Вас он самостоятелен. Нафига эта сущность вообще нужна на этом уровне?
Ещё раз говорю, что IObject - это не класс, описывающий самостоятельный объект. Это всего лишь интерфейс. Объект этого класса создать невозможно. Тебе что-то говорит ключевое слово virtual и =0 в конце методов класса? Нафига нужен интерфейс, говоришь? А зачем вообще полиморфизм нужен? Зачем его объявили одной из составляющий частей ООП, не знаешь?
Сионист писал(а):ни когда в жизни в глаза не видевший ни каких ТЗ и ни каких требований к софту.
Не путай DS (design specification) и FS (functional specification). В советской номенлатуре DS'у соответствует ТЗ (тех. задание), которое описывает постановку задачи и результат, который нужно достигнуть. Но DS никогда не содержит деталей того, как цель должна быть достигнута, так как DS часто пишется людьми, далёкими от программирования. Программист сам имеет право выбрать, как достичь желаемого результата, потому он пишет для себя FS и утверждает его у человека, который разбирается в этом (например у лидера команды или архитектора). Я к чему это веду. Если у тебя есть ТЗ, то никто не заставляет тебя строить архитектуру именно так, как ты её сейчас строишь. ТЗ содержит информацию о том, кто куда кликнул и что в результате вышло, а не внутреннюю структуру классов.
Так свой код не хочешь показать? Я хоть пойму тогда, как доработать свою модель.