Страница 3 из 9

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:27
Сионист
Romeo писал(а):К тому же в коде ты в любом случае в некоторых местах сейчас вынужден определять был ли вызван метод для экземпляра, либо для эталона, используя конструкцию типа:
Код cpp:
if (m_pParent != NULL)
{
...
}
После разнесения на отдельные классы такие условия пропадут и как раз дадут разницу в коде методов между двумя классами.
Единственный оператор-член, которому в явном виде нужен parent, возвращает отношение любых двух экземпляров и в любом случае должен перебрать до ближайшего общего предка ветви, заканчивающиеся обоими операндами. При этом не избежна проверка на то, является ли текущий предок корнем дерева всех экземпляров данного класса. Ни одной функции-члену parent в явном виде не нужен.

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:34
Romeo
Сионист писал(а):А Вы разве нет?

Хорошо, похоже придётся объяснить, что именно я не понял. Я тебе скажу, что ты слышал некоторые термины, но используешь их ни к селу, ни к городу, похоже не осознавая до конца, что они обозначают.

Поясню. Синглтон (в русском варианте "одиночка") - это такой класс, который может быть инстанцирован в системе ровно один раз. В языке нет иных способов наложить ограничение на одноразовое инстанцирование, кроме как перенести все конструкторы в закрытую секцию класса и выставить наружу метод, обеспечивающей доступ к единому объекту. Я намеренно выделил слово все. Теперь посмотри, что пишешь ты.
Сионист писал(а): А можно сделать, чтоб один конструктор контруировал "обычный" сингилтон...
Не может конструктор конструировать синглтон, так как у "обычного" синглтона он закрыт и его прямой вызов из внешенго кода невозможен!
Сионист писал(а): ...а второй - обычный объект?
И вот тут тоже лажа. Если это синглтон, то второй конструктор тоже должен быть спрятан. Иначе его можно будет вызвать сколько угодно раз и это уже будет никакой не синглтон.

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

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:38
Сионист
Romeo писал(а):Слушай, ты можешь рассказать, чего именно тебе нужно добиться, а не описывать ту архитектуру, которую ты уже успел навернуть?
Мне нужен класс, экземпляры которого вообще не имеют какого либо смысла по одиночке вне парных транзитивных отношений между ними, а любой экземпляр определяется только через парное отношение с его участием. Но так как по синтаксису декларации объекта нельзя декларировать два объекта одновременно, то при создании одного объекта каждой пары задание отношения откладывается до создания второго объекта.
Romeo писал(а):Мне уже очевидно, что архитектура неоправданно изощрена и ущербна. Расскажи, чего нужно добиться и давай придумаем вместе, как всё должно выглядеть. В правильной архитектуре всех этих надуманных проблем просто не будет. В том числе статических методов, знающих о всех объектах.
Надуманы как раз твои "правила" и "вырожденные методы", которым в качественной архитектуре взяться неоткуда и для возможности самого существования которых её необходимо изуродовать так, что не всякий компилятор разберёт, что же в итоге получилось.

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:38
Romeo
Сионист писал(а):Единственный оператор-член, которому в явном виде нужен parent, возвращает отношение любых двух экземпляров и в любом случае должен перебрать до ближайшего общего предка ветви, заканчивающиеся обоими операндами. При этом не избежна проверка на то, является ли текущий предок корнем дерева всех экземпляров данного класса. Ни одной функции-члену parent в явном виде не нужен.
Если это так, то вся эта логика по работе со связанными объектами должна быть вынесена в отдельный класс-менеджер. Он же будет ответственен и за правильное создание объектов и их отношений. Это решит проблему однократного вызова конструктора, так как менеджер будет знать, когда вызывать один конструктор, а когда другой, и сам не будет делать повторный вызов первого конструктора.

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:45
Сионист
Romeo писал(а):Хорошо, похоже придётся объяснить, что именно я не понял. Я тебе скажу, что ты слышал некоторые термины, но используешь их ни к силе, ни к городу, похоже не осознавая до конца, что они обозначают.

Поясню. Синглтон (в русском варианте "одиночка") - это такой класс, который может быть инстанцирован в системе ровно один раз. В языке нет иных способов наложить ограничение на одноразовое инстанцирование, кроме как перенести все конструкторы в закрытую секцию класса и выставить наружу метод, обеспечивающей доступ к единому объекту. Я намеренно выделил слово все. Теперь посмотри, что пишешь ты.
Вот как раз ты путаешь сущность с реализацией. Сингилтон есть класс, который гарантированно имеет ровно один экземпляр. Всё. А защищённые конструкторы - это уже особенности реализации. Как этот единственный объект инстанцировать то, если все конструкторы закрыты?

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:46
Romeo
Сионист писал(а):Надуманы как раз твои "правила" и "вырожденные методы", которым в качественной архитектуре взяться неоткуда и для возможности самого существования которых её необходимо изуродовать так, что не всякий компилятор разберёт, что же в итоге получилось.
Вообще-то я говорил о необходимости устранения вырожденных методов. Ты в очередной раз доказываешь, что не умеешь читать.
Про то, что компилятор не разберёт - ты наивен, как младенец и по всей видимости не видел никогда в глаза хоть сколько-нибудь сложных проектов.
То, что я предлагаю, называется не уродованием, а построением архитектуры, которая сейчас у тебя не просто "не качественная", а отсутствует напрочь. Ещё раз призываю тебя почитать книги. Например ГОФа. На данный момент ты просто профан в вопросах архитектуры.

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:47
Сионист
Romeo писал(а):Если это так, то вся эта логика по работе со связанными объектами должна быть вынесена в отдельный класс-менеджер. Он же будет ответственен и за правильное создание объектов и их отношений. Это решит проблему однократного вызова конструктора, так как менеджер будет знать, когда вызывать один конструктор, а когда другой, и сам не будет делать повторный вызов первого конструктора.
Не распарсил.

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:48
Сионист
Romeo писал(а):Про то, что компилятор не разберёт - ты наивен, как младенец
Ога. Вот только я своими глазами видел шесть классов, каждый из которых использовал функции-члены, операторы-члены и закрытые поля пяти других. И всё там было хорошо ровно до первой компиляции, а потом оказалось, что компилятор это "проглотить" не способен, мессагу о чём я тоже видел своими глазами. А вот ты подобных извращений походу не встречал.
Romeo писал(а): и по всей видимости не видел никогда в глаза хоть сколько-нибудь сложных проектов.
Как же я их писал то?

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:49
Сионист
Romeo писал(а):Вообще-то я говорил о необходимости устранения вырожденных методов.
Зачем устранять то, чего нет?

Re: Как запретить повторное использование конструктора?

Добавлено: 02 сен 2015, 14:50
Romeo
Сионист писал(а):Вот как раз ты путаешь сущность с реализацией. Сингилтон есть класс, который гарантированно имеет ровно один экземпляр. Всё. А защищённые конструкторы - это уже особенности реализации. Как этот единственный объект инстанцировать то, если все конструкторы закрыты?
Уууу, вот тут мне уже нечего добавить. Ну-ка покажи мне, как по-твоему должен выглядеть настоящий синглтон в твоём понимании. Говоришь особенности реализации? Покажи мне свою реализацию.

Сионист, ты просто неуч, который пытается казаться важным и умным, но у тебя ничего не получается, к сожалению.

Синглтон без скрытых конструкторов в студию! Я жду!