Потом можно и на стипендию жить, буквально недавно где-то тут в коментах писал об этом.
Не знаю, какая сейчас стипендия. В 2006-2007 году стипендия была РОВНО на место в общежитии, проездной на все виды транспорта, включая метро на месяц, и 50 рублей оставалось на тетрадки, ручку, карандаш. Жить на нее невозможно в принципе было.
Ну как не требует запоминания? Программисты на C святым духом что ли пользуются?
Независимо от того, где ставится крышка/звездочка это требует запоминания. Или только слева, или только справа, или одно слева, другое справа.
Вы все равно не поняли, или я выразился неточно. В С запоминается только одно: звездочка и потом переменная — это разыменовывание. Всё. В Паскале запоминается как синтаксис разыменовавания, так и синтаксис объявления, потому что он нелогичен. В С синтаксис объявления органично следует из синтаксиса разыменовывания.
Отсутствие публичного конструктора или его эквивалента — еще как является.
Неа.
У вас могут быть какие-то приватные поля, которые необходимы для работы объекта, но заполняются они классом самостоятельно.
Вы же не говорите, что класс, скрывая эти поля, выполняет побочную задачу.
Сокрытие конструкторов не отвечает за исходную функциональность — оно для этого не нужно.
Ну так и сокрытие вот тех полей, о которых я написал выше, тоже не отвечает. Класс так же работал бы, будь они публичны.
Это нужно только для реализации синглтона ЧТД.
… а добавление в класс геттеров нужно только для получения этих данных извне, вот чудо-то.
Это ничего не меняет и не делает сокрытие конструктора побочной ответственностью; это деталь реализации.
Я не знаю способа реализации синглтона без нарушения SRP и полагаю что его не существует. Вы легко сможете опровергнуть этот тезис просто предъявив код. Пока то что я видел было либо не SRP либо не синглтон.
Потому что вы предъявляете необоснованные волюнтаристские ограничения.
Конечно, нет. Приватные члены вполне нормальны, ненормально отсуствие публичных.
Ну так есть у этого класса публичные методы — работать-то с ним надо. А конструктор — только приватный. И воспользоваться им может только кто-то friendly, второй класс, который вкупе с первым и образует синглтон.
Сокрытие методов не является возложением ответственности на класс. Существование объекта класса — непосредственно часть его функциональности.
Иначе мы можем сказать, что наличие любого конструктора класса — это возложение на него не связанной с его функциональностью ответственности. Вот есть у нас класс String какой-нибудь. Его функциональность — хранение строкового типа данных и разные преобразования этих данных. А вот, мол, создание объекта такого класса с его функциональностью напрямую не связано…
И второй ваш класс со своей задачей справиться сам не может, т.е. делит свою ответственность с первым.
А кто сказал, что мы не можем вмешиваться в его код, спроектировать его специальным образом, так, чтобы его нельзя было инстанцировать извне просто так, изначально?
Простите, но это уже глупо. Если вести речь не о своих исходниках, а о закрытых 3rd party, как вы вообще можете гарантировать, что там что-то происходит вот так, а не иначе? Это определенно невозможно — вы не знаете, что есть в черном ящике чужого кода.
Следовательно, это толкование - заведомо неверное.
Я использую общепринятое определение синглтона.
Вы в статье использовали не общепринятое, а свое понимание, сузив шаблон проектирования до класса.
Далее, скрытие или запрещение конструктора означает, что класс начинает контролировать возможность создания своих экземпляров, т.е. берет на себя дополнительную ответственность.
Нет, конечно. Какая жирная демагогия. Тогда у вас, по вашей логике, любой класс, имеющий приватные поля и методы имеет в качестве дополнительной отетственность по контролю за доступом.
Да пусть хоть 99% ускорение.
В OS/2 мне больше всего понравилась эмуляция устройств внутри DOS сессии. Это была единственная из доступных ОС, которая эмулировала DOS вместе с графикой, последовательными портами, корректно все это поддерживая.
Еще как получится.
Говорить, что синглтон — это «класс, не допускающий создания более одного экземпляра»(себя) — ошибочно.
Синглтон — это шаблон проектирования, а не класс.
Если у вас есть класс (или даже просто процедурной парадигмы функция), который единственный допускает создание второго класса, и только единожды, то эта пара будет тоже синглтоном. И у каждого класса будет только одна задача.
Нет, не может. Когда потом преподают хорошо, чувствуешь разницу.
Это точно.
Когда-то у нас пошла дискретка, и по учебнику она мне казалась скучной вещью. Поэтому ряд пар в начале, штуки 3-4, я пропустил, а потом пришел-таки.
И тогда впервые в жизни реально сильно пожалел, что пропустил — настолько замечательно преподаватель вел предмет.
Не знаю, какая сейчас стипендия. В 2006-2007 году стипендия была РОВНО на место в общежитии, проездной на все виды транспорта, включая метро на месяц, и 50 рублей оставалось на тетрадки, ручку, карандаш. Жить на нее невозможно в принципе было.
Вы все равно не поняли, или я выразился неточно. В С запоминается только одно: звездочка и потом переменная — это разыменовывание. Всё. В Паскале запоминается как синтаксис разыменовавания, так и синтаксис объявления, потому что он нелогичен. В С синтаксис объявления органично следует из синтаксиса разыменовывания.
Неа.
У вас могут быть какие-то приватные поля, которые необходимы для работы объекта, но заполняются они классом самостоятельно.
Вы же не говорите, что класс, скрывая эти поля, выполняет побочную задачу.
Ну так и сокрытие вот тех полей, о которых я написал выше, тоже не отвечает. Класс так же работал бы, будь они публичны.
… а добавление в класс геттеров нужно только для получения этих данных извне, вот чудо-то.
Это ничего не меняет и не делает сокрытие конструктора побочной ответственностью; это деталь реализации.
Потому что вы предъявляете необоснованные волюнтаристские ограничения.
Ну так есть у этого класса публичные методы — работать-то с ним надо. А конструктор — только приватный. И воспользоваться им может только кто-то friendly, второй класс, который вкупе с первым и образует синглтон.
Иначе мы можем сказать, что наличие любого конструктора класса — это возложение на него не связанной с его функциональностью ответственности. Вот есть у нас класс String какой-нибудь. Его функциональность — хранение строкового типа данных и разные преобразования этих данных. А вот, мол, создание объекта такого класса с его функциональностью напрямую не связано…
Может, но это ограничивается областью видимости.
В чем финт-то? Это удобный механизм добавления посредника.
Мне кажется, что так же гибко не реализовать.
Следовательно, это толкование - заведомо неверное.
Вы в статье использовали не общепринятое, а свое понимание, сузив шаблон проектирования до класса.
Нет, конечно. Какая жирная демагогия. Тогда у вас, по вашей логике, любой класс, имеющий приватные поля и методы имеет в качестве дополнительной отетственность по контролю за доступом.
В OS/2 мне больше всего понравилась эмуляция устройств внутри DOS сессии. Это была единственная из доступных ОС, которая эмулировала DOS вместе с графикой, последовательными портами, корректно все это поддерживая.
Публичный конструктор можно скрыть или запретить.
Говорить, что синглтон — это «класс, не допускающий создания более одного экземпляра»(себя) — ошибочно.
Синглтон — это шаблон проектирования, а не класс.
Если у вас есть класс (или даже просто процедурной парадигмы функция), который единственный допускает создание второго класса, и только единожды, то эта пара будет тоже синглтоном. И у каждого класса будет только одна задача.
Это точно.
Когда-то у нас пошла дискретка, и по учебнику она мне казалась скучной вещью. Поэтому ряд пар в начале, штуки 3-4, я пропустил, а потом пришел-таки.
И тогда впервые в жизни реально сильно пожалел, что пропустил — настолько замечательно преподаватель вел предмет.