Kartonagnick
> который даже не знает,
> ни что такое синглетон
синглетон это когда ООП-шники жидко обриставшись, делают вид что пишут не в процедурном стиле
Kartonagnick
> я предложил тебе:
> > создать два валидных экземпляра some.
> и ожидаю от тебя рабочий, корректный код.
Приведи рабочий, корректный getInstace.
totoro
> в питоне есть префикс _
Который не несёт никакого семантического значения, а только является конвенцией именования. Можно и в Си сделать такое же - объявить все поля, которые начинаются на специальный префикс "приватными" и запретить программистам менять их напрямую.
> Соответственно подходы к решению задач там не такие как в ООП языках.
Подходы определяются не языком, а задачами. Если для решения задачи хорошо подходит ООП, то его пытаются имитировать, а когда можно не париться и спокойно копаться в кишках структур, то так и поступают. В Си просто задачи второго типа более распространены, а что-то более сложное на нём писать уже более проблематично.
u960
> но в плюсах уже хеллоу ворлд без классов написать не могут.
Это ты сейчас про std::out?
Zefick
> Который не несёт никакого семантического значения, а только является конвенцией
> именования.
Ну как так-то?
https://ideone.com/PEyoXl
> Подходы определяются не языком, а задачами. Если для решения задачи хорошо
> подходит ООП, то его пытаются имитировать, а когда можно не париться и спокойно
> копаться в кишках структур, то так и поступают. В Си просто задачи второго типа
> более распространены, а что-то более сложное на нём писать уже более
> проблематично.
Это все красивые слова, а на деле на си написано 80% софта, который окружает тебя в повседневной жизни.
Zefick
> Подходы определяются не языком, а задачами. Если для решения задачи хорошо
> подходит ООП, то его пытаются имитировать, а когда можно не париться и спокойно
> копаться в кишках структур, то так и поступают. В Си просто задачи второго типа
> более распространены, а что-то более сложное на нём писать уже более
> проблематично.
Ну тогда надо признать, что и C++ - лишь "попытка имитировать ООП", а "настоящее ООП" было возможно только на ОО-ориентированных процессорах машин пятого поколения.
И, да, язык Си оказался не по зубам кодерам, пришедшим на смену инженерам в программировании, и для для неосиляторов придумали упрощенную версию - Си++, где надо только запоминать "кнопочки калькулятора".
totoro
> Это все красивые слова, а на деле на си написано 80% софта, который окружает тебя в повседневной жизни.
Я примерно такое же постоянно про С++ слышу. Так кто уже прав? Давайте устроим баттл.
А может быть это всё заговор и 80% софта на самом деле написано на Коболе.
totoro
> Это все красивые слова, а на деле на си написано 80% софта, который окружает
> тебя в повседневной жизни.
Употребить в одном предложении "красивые слова" и "софт, который окружает тебя в повседневной жизни", это надо суметь.
Zefick
> Давайте устроим баттл.
Тех, кто не умеет программировать, потому, что "язык неправильный", с теми, кто "умеет", потому что "все равно за это платят"?
NetSpider
> синглетон это когда ООП-шники жидко обриставшись, делают вид что пишут не в
> процедурном стиле
"это когда" - так пишут гуманитарии неграмотные люди,
которые в силу своего невежества,
не способны сформулировать четкое определение.
Kartonagnick
> которые в силу своего невежества,
> не способны сформулировать четкое определение.
Т.е. все IT-шники. Они не понимают, что "четкое определение" надо формулировать за пределами программирования.
Delfigamer
> Приведи рабочий, корректный getInstace.
представленный мной пример является и рабочим, и корректным.
ты код то смотрел?
Kartonagnick
Но на самом деле всё это нихрена не важно, потому что самая главная мысль вообще не в синглетонах.
Ничто не даёт никаких гарантий, если программист не приложит волевых усилий к соблюдению соответствующих правил.
Твой синглетон работает только при условии, если программист не полезет ему в кишки и не поломает. Ты можешь сделать это сложнее - понаписать приватов и статиков, спрятать исходный код подальше и поставлять только скомпилированные бинарники - но в конечном итоге ты никогда не сможешь запретить ему открыть дебаггер, раздизасмить весь твой код, залезть в память через void* и опять же сломать все твои гарантии.
Единственный способ защититься по-настоящему - это поставить свою логику на уровень выше, как это делают кернелы ОС и гипервизоры виртуальных машин.
А твой getInstance - это точно такая же табличка "мамка не входи", как и предшествовавший вариант - он точно так же будет иногда помогать против назойливых мамок, но бухой вооружённый вдвшник точно так же наплюёт на все твои гарантии, выломает дверь гранатой и сделает столько экземпляров, сколько ему захочется - хоть два, хоть двести, хоть сто тысяч пятьсот, и ничего ты ему не сделаешь, хоть заинкапсулируйся.
totoro
> Нету в си никакой инкапсуляции, я могу залезть во внутренние поля структуры и
> сделать с данными все что угодно, например перенаправиить вывод в другой файл.
И тебя это тоже касается, если оперировать твоей логикой "если я могу залезть в поля значит инкапсуляции нет", то инкапсуляции нет нигде. Но это бред, потому что термин "инкапсуляция", как и любой другой паттерн - это идея, а не криптографическая система, и описывает правила поведения для добросовестных агентов, а не защищает от злоумышленников.
Delfigamer
> И тебя это тоже касается, если оперировать твоей логикой "если я могу залезть в
> поля значит инкапсуляции нет", то инкапсуляции нет нигде.
Откуда это из моей логики такое следует, ты с цефиком меня не путаешь? Это он пытался убеждать, что инкапсуляция в си присутствует, потому что в языках, в которых она есть, можно открыть публичный доступ к полям класса. Но в си нет классов, и инкапсуляции стало быть нет. Там структура с приватными полями не имела бы смысла, потому что к ним невозможно было бы получить доступ вообще.
totoro
> Там структура с приватными полями не имела бы смысла, потому что к ним
> невозможно было бы получить доступ вообще.
Да ну, а это тогда что?
/* The complete definition of png_info has, as of libpng-1.5.0, * been moved into a separate header file that is not accessible to * applications. Read libpng-manual.txt or libpng.3 for more info. */ typedef struct png_info_def png_info; typedef png_info FAR * png_infop; typedef PNG_CONST png_info FAR * png_const_infop; typedef png_info FAR * FAR * png_infopp; /* <...> */ /* Returns image width in pixels. */ PNG_EXPORT(115, png_uint_32, png_get_image_width, ( png_const_structp png_ptr, png_const_infop info_ptr)); /* Returns image height in pixels. */ PNG_EXPORT( 116, png_uint_32, png_get_image_height, ( png_const_structp png_ptr, png_const_infop info_ptr));
Если это не инкапсуляция, то что? Корм для собак?
Delfigamer
> Да ну, а это тогда что?
Ну не знаю, макросня какая-то.
> PNG_EXPORT
Я что, по твоему должен все исходники libpng перелопатить, чтобы понять, что именно ты хотел донести?
> Если это не инкапсуляция, то что?
Ты точно знаешь, что означает этот термин?
Инкапсуляция (англ. encapsulation, от лат. in capsula) — в информатике размещение в одном компоненте данных и методов, которые с ними работают. Также может означать скрытие внутренней реализации от других компонентов. Например, доступ к скрытой переменной может предоставляться не напрямую, а с помощью методов для чтения (геттер) и изменения (сеттер) её значения.
https://ru.wikipedia.org/wiki/Инкапсуляция_(программирование)
Вот теперь, когда ты узнал, ты все еще будешь утверждать что инкапсуляция полей и методов есть в процедурных языках?
> Корм для собак?
Да, какая-то хрень собачья.
Kartonagnick
>NetSpider
>> синглетон это когда ООП-шники жидко обриставшись, делают вид что пишут не в
>> процедурном стиле
> "это когда" - так пишут гуманитарии неграмотные люди,
> которые в силу своего невежества,
> не способны сформулировать четкое определение.
Ты в курсе хоть что в споре указывать на ошибки в тексте - последнее прибежище дешевого тролля?
По существу ответь или промолчи уж.
Тема в архиве.