4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|||||||||||
13.01.2015, 20:39 | 21 | ||||||||||
Что, серьезно? А что имеет?
Я и продемонстрировал — реализации процедуры String выбирается в рантайме в зависимости от типа значения. При чем тут возможность/невозможность решения в статике? При чем тут вообще статика, если ООП — это по определению динамика? Мои слова были: «Удобные средства для использования динамический ad-hoc полиморфизм вполне себе доступны и в более процедурных языках, например Go». Я их подтвердил примером. В Ocaml, как и в любом языке с GC, нет RAII. И зачем ему об этом знать? А в твоем коде телепатия работает, да? Лол, а тело конструктора и деструктора компилятор сам сочинит? Не, ну он-то конечно сочинит дефолтные, но от них ни толку, ни отличий от структур С. О, понеслись проповеди. Почему же? Будет. И чем не автоматика? Что это вообще за бред? И? С++ запрещает использовать циклы? Лол.
А кто-то выше говорил, что «Пользователю вообще не нужно ничего знать ни о каких ядрах, и ни о каких фреймах.»
Это мешает использовать C++ в проектах на C++. Конечно. Только это не C++. Мой код решает задачу, а не навязывает пользователю свою религию. Плохой это программист, раз он мыслит не в терминах задачи. 1) Последний раз: ни в одном ООП-языке, кроме C++, нет RAII. 2) Единственное косвенное отношение RAII к ООП — виртуальность деструктора. Всё. Больше никакого отношения к ООП. Это фича C++ и только C++, а не ООП. В каком месте ты там человеческий фактор увидел? Я тебе показывал, но, похоже ты слеп. При том, что сам же упомянул GTK+. Феерично. Тебе так сложно было открыть вики по ссылкам и прочитать хотя бы определения (я уж не надеюсь на беглый просмотр всего текста)? Я тут бессилен. Ладно, убери слова «математическая» и «модель». Формальное описание ООП есть? Не всякая рекламная туфта, а строгое определение, описание необходимых и достаточных критериев, что является ООП? Постулаты и законы ООП? Или эти словосочетания тебе тоже непонятны? Добавлено через 2 минуты Что люди больше ведутся на рекламу? Да, это она показывает. К тому, что в этом вашем С++ объекты — такие же просто куски памяти, не более. На практике Сишники используют, то, что удобно подходит для решения задачи, а не, извиняюсь за выражения, фапают на религиозные агитки. Добавлено через 2 минуты Зря, это полезно. Тем более там мало букв.
0
|
13.01.2015, 20:39 | |
Ответы с готовыми решениями:
926
ООП или функции ООП или Структурный подход? литература и/или статьи по ООП Гавнокоддинг или учить ООП? |
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
13.01.2015, 23:08 | 22 |
Я вроде бы по-русски пишу, не?
Ещё раз повторяю: решение, которое тривиальным образом реализуется в статике мне не интересно. Потому что я итак знаю, как это можно реализовать в процедурном языке. Я не увидел в этом примере "динамики". Ваш пример не отражает принципа действия "динамического ad-hoc полиморфизма", поскольку ни с точки зрения дизайна, ни с точки зрения реализации ничем не отличается от обычного статического аналога. Вы наверное забыли, но изначальный ваш посыл был о процедурных языках. На языке, которому неведомы объекты, полиморфизм, и тп. Теперь вы спрашиваете, при чем тут ООП? На процедурном языке реализовать статическую перегрузку не сложно. Зачем там вообще может понадобится "динамическая перегрузка", и как она вообще может работать в условиях отсутствия поддержки оопнутого полиморфизма - для меня загадка. Поэтому я попросил у вас предоставить пример использования. Честно говоря, я уже не рассчитываю получить от вас вразумительного ответа. Ваш пример ничего не объясняет, потому что не иллюстрирует работу динамики. Возможно там действительно рантайм. Но по дизайну это ничем не отличается от возможного статического аналога. А следовательно не дает никаких профитов, которые может дать полиморфизм. Вы как то странно демонстрируете эрудицию касательно различных языков и технологий в сочетании с полным незнанием простых вещей. Это производит на меня впечатление "поверхностных знаний". Любой новичок в с++ знает, что для автоматических переменных конструкторы/диструкторы отрабатывают автоматически. Очевидно, что для того, что бы попользоваться логом, нужно сначала создать его объект. При этом конструктор запустится автоматом и запросит фрейм. Очевидно, что когда функция завершится, лог подохнет, и автоматом запустится диструктор, который закроет фрейм. Это так просто, что даже скучно. Ваши познания языков меня разочаровывают. О дизайне механизма позаботился изготовитель. Вам не нужно знать внутреннего устройства, что бы пользоваться. В клиентском коде ничего лишнего, никаких open/close. Никаких "кишков реализации". Это - главное, что вы должны уяснить. Вам в руки дают инструмент. Для того, что бы пользоваться, знать устройство не обязательно. В отличие от примера с вашим макросом, подробности реализации инструмента не будут засорять ваш клиентский код. И вам не придется городить всякой ботвы в клиентском коде, только для того, что бы эта хрень заработала. Если вы захотите узнать детали реализации - вы сможете рассмотреть её отдельно от вашего бизнес-проекта. Полностью сосредоточив свой взор на самом логгере, без оглядки на среду использования. Разделяй и Властвуй(ц) Гай Юлий Цезарь. Самый первый в истории человечества человек, применивший оо-парадигму на практике. Бред - это тот макрос который вы написали. Копипаста через одно место. Что бы эта галимая "автоматика" заработала, нужно знать нюансы этого долбанного макроса, что само по себе есть нарушение инкапсуляции. Одна ошибка, и все, приехали - потом сами отлаживайте в таком макросе ошибки. Проще написать эти самые функции вручную, чем следовать модели такой "автоматики". "Автомат", который ничего не облегчает, а только усложняет - это где-то на грани потери здравого смысла. В нашем с++ мульти-парадигма. Восприятие зависит от точки зрения, а точка зрения зависит от задачи. Когда я пишу аллокатор памяти, я смотрю на вещи сквозь призму "низкого уровня". Когда создаю колобков для бизнес-приложения, то смотрю на них сквозь призму "высокого уровня", и меня уже не парит, какой там аллокатор отвечает за размещение в памяти, и как это вообще все происходит. Вам стоит понять одну вещь: парадигма это система взглядов. Это способ абстрагирования. И не более того. И на случай, вдруг вы не в курсе: как сишник, открою вам страшную тайну - любые объекты, на любых языках всего лишь куски памяти. Единственное, что вы мне показали - это макрос "развидеть меня это". С такими друзьями - враги не нужны. Больше я ничего от вас не увидел. Остальные ваши сообщения не комментирую. Лень. Вы меня разочаровали.
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
13.01.2015, 23:26 | 23 |
Ну так это всё объясняет. Вопрос однозначный и вполне понятный более или менее образованному специалисту. Просто надо знать. А если не знаете, то не надо с пеной у рта кидаться на адекватную критику.
Это еще раз подтверждает сказанное мной выше. Синдром утенка.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
13.01.2015, 23:41 | 24 |
Не заметил никакой критики. И не помню, что бы я на кого то кидался.
Если вам известно о чем тут речь - вы можете рассказать об этом своими простыми словами. Я не кидаюсь поверхностными знаниями, и не боюсь чего то не знать. Если я что-то не знаю - не боюсь спросить. Про утенка - не мой случай. Я открыт для нового, но материал изучаю целенаправленно, и основательно, не хватаясь за все подряд. Предпочитаю знать мало, но основательно, чем много, но везде по чуть-чуть. И у меня нет так уж много времени, что бы тратить его непойми на что, непойми зачем.
0
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
14.01.2015, 00:25 | 25 |
Полная ерунда. Система типов не может выразить предметную область (возможно лишь какую-то небольшую часть) и ООП нет таких средств.
Добавлено через 5 минут Не очень понял. О каких конструкциях идёт речь (применительно к С++)? ООП делает, но не намного.
0
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
14.01.2015, 00:27 | 26 |
Я не понимаю Вас. Это имеет прямое отношение к Вашей специальности. Вы отстаиваете ооп, а на поверку ничего кроме ооп не знаете (процедурное я имею ввиду как знание по умолчанию), да и в ооп знаете только с++, который является чуть ли не худшим (и я подозреваю что худший) из примеров. Киллер-фичи? GC "was invented by John McCarthy around 1959" (c).
0
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
14.01.2015, 00:42 | 27 |
Это старый уровень кретинизма недокрестьян. <object>.<method> всего лишь синтаксический сахар, от которого больше вреда чем пользы: ведь нужно выдумывать какой-то дополнительный механизм для частичного применения и мультиметоды не реализовать.
Что за препроцессор там такой? Добавлено через 4 минуты RAII к ООП не имеет никакого отношения. Разве что конкретно в C++ за счёт формализованной семантики вызова конструкторов и деструкторов. Добавлено через 5 минут Убийственная логика Блин, чё-то я опоздал. korvin_, всё уже сказал и я остался голодным
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
14.01.2015, 00:47 | 28 |
Ты написал, что мой пример не имеет отношения к ad-hoc полиморфизму. Обоснуй.
Какая разница, как оно решается? Речь шла о наличии средств. Ты заикнулся, что одна из фич ООП — полиморфизм. Я тебе показал, что он существует не только в ООП. Точка. Сочинять «правильные» задачи — не моя забота. Полиморфизм есть в процедурных языках, что я и показал своим примером. И я спрашивал не при чем тут ООП, а какое отношение статика имеет к ООП? Чел, покури мат.часть. Динамический полиморфизм вполне себе самостоятельная техника, которая может существовать без ООП. Реализация функции String выбирается в рантайме в зависимости от типа значения. Я об этом уже писал. О боже... Какие подробности? Считай, что макрос и прочее — такой же механизм, о «котором позаботился изготовитель». Вот один в один с твоим плюсовым примером. И в клиентском коде (foo, bar, main) ничего лишнего. Это называется модульность, ООП лишь позаимствовало эту терминологию. Эту вещь как раз стоит понять тебе, тогда перестанешь писать глупости, о велосипедостроении. Как человек, хоть сколько-нибудь знающий эти самые «любые языки», открою еще более страшную тайну: нет. Ибо семантика этих языков не позволяет вытворять подобные финты с приведением типа и нарушением целостности объекта. Держи нас в курсе. Добавлено через 1 минуту Забавно, что он сломался уже на парсинге, а до собственно компиляции/интерпретации даже не дошел. Ну хоть не на лексическом анализе. =))
0
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
||||||
14.01.2015, 01:30 | 29 | |||||
Вроде макросы для того и нужны что бы не пастить со всеми вытекающими, не?
Добавлено через 16 минут Ещё раз: RAII и ООП не связанные вещи. Хоп, короче, без ООП:
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.01.2015, 08:28 | 30 |
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.01.2015, 09:10 | 31 |
Имеется ввиду синтаксис самого языка.
Любые конструкции на языке. Значительнее в сравнении с функциональной или процедурной парадигмой. (это - не личное мнение) Может быть менее значительно в сравнении с декларативной парадигмой. (это - личное мнение) Да. Но их готовить нужно по уму, а не уродовать весь клиентский код повсеместным использованием. Они не предназначены для того, что бы менять синтаксис самого языка. Здесь такая же проблема, как и в сишке. Во-первых. Не помню, что бы мы с вами пили вино и рассказывали друг другу о жизни. Вы не можете знать, какова моя специальность. Во-вторых, что именно "это"? "формальная мат.модель ООП"? "λ-исчисление"? "π-исчисление"? "конкурентное программирование"? Для начала было бы не плохо провозгласить, что значат все эти пункты. Просто и в двух словах. В третьих, я - практик. Я не очень много знаю. Но все что я знаю: языки, технологии - все это все это я применял, и применяю на практике. Я зарабатываю этим на жизнь. И осваиваю что-то новое заранее зная для чего я это делаю. Какой будет профит. На что будет потрачено время. Возможно, что-то из этих пунктов и попадалось мне на пути. Но при этом сами формулировки были другими. (есть подозрение, что "λ-исчисление" есть ни что иное, как "лямбда выражения", например) А возможно, пункты не знакомы, просто потому что без надобности. Сматалк - только на уровне концепции. Звучит интересно. Реализация... в общем посмотрел, поплевался, закрыл тему. Не осилил в общем. Объектный-си. Нужно было портировать фреймворк с плюсов на объектный-си. Работали в паре со специалистом по этому языку. Как средство выражения язык мне очень не понравился. Не хотелось бы ещё раз с ним соприкоснуться. Жава/сишарп/Д/с++ Эти языки я знаю поверхностно. На уровне беглого чтения. Не заметил никаких принципиальных различий между плюсовой оо-моделью. Питон. Его я использую в повседневной практике. "Очаровательный язык", с первого дня вызвавший симпатию. Приятно поразила продуманность синтаксиса. Никаких принципиальных различий с оо-моделью плюсов так же не обнаружил. ---------------------------- В целом, моих познаний ооп мне хватает. У меня нет потребности изучать ооп ради ооп. Мне не очевидно, по каким критериям вы определяете: "лучший"/"худший". Более того,таких критериев не существует. Инструмент выбирают под конкретные условия, и задачу. В этом смысле ваша оценка несколько наивная, ну да ладно. Вы ошибаетесь. Динамический полиморфизм невозможно реализовать в виде одного лишь синтаксического сахара. Это - целая технология, которую с рядом серьёзных ограничений сишники велосипедят вручную. А отсюда прямиком следует, что невозможно в виде сахара реализовать работу с исключениями, например. Таки имеет. Если есть объект, который при создании умеет захватить ресурсы, значит есть RAII. Объекты, которые при создании ничего не умеют... такое ооп я себе представить не в состоянии. Я нигде не утверждал, что пример не имеет отношения к ad-hoc полиморфизму. Я утверждал, что пример не отражает работу полиморфизма, поскольку ничем не отличается от обычной статической перегрузки. Кстати, вот такие повороты сюжета заставляют меня усомниться в умственных способностях собеседника. Может быть для вас не очевидно, но тот факт, что под капотом какого нибудь процедурного интерпретатора динамика, вовсе не означает, что на самом языке есть динамика. Голословные утверждения мне не интересны. На протяжении всего диалога вы не смогли привести ни одного примера-иллюстрации процедурного полиморфизма на языке. Статическая перегрузка - продукт процедурной парадигмы. Перпендикулярное, поскольку ооп включает процедурную парадигму. Не уверен, что мне это настолько интересно, что бы это курить. Хотя любопытно. Я ожидал от вас хотя бы одно примера техники. Поскольку сделать это вы оказались не в состоянии, то не вижу смысла обсуждать это с вами дальше. Не нужно повторяться. Я могу построить интерпритатор для процедурного языка, в котором будет доступна перегрузка функций. От того факта, что все работает в рантайме, в самом языке динамика не появится. Динамика, которая реализуется через статику не интересна. И к динамике на самом языке отношения не имеет. Нет, не буду считать. Макрос засирает код, приводя его в нечитабельное состояние. И вынуждает клиентов следовать неким синтаксическим правилам. Любой более менее опытный сишник сразу же откажется от использования такой мерзости. Выше я писал: "автомат", который ничего не облегчает, а только усложняет - это на грани потери здравого смысла. И даже описал почему. Более я не хочу к этому возвращаться. На си велосипедят оо-архитектуру. О боже! Какая глупость! Интересно зачем они это делают? Наверное, наверное, это о чем то нам намекает. Вы ошибаетесь. И "Приведения типов" к этому не имеет никакого отношения. Говорю вам это, как человек, который сколько-нибудь знает, что примерно находится у трансляторов этих самых языков под капотом.
0
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
14.01.2015, 09:41 | 32 |
Так а ООП-то причём тут? Сам по себе они не позволяет менять/расширять синтаксис. Максимум семантику некоторых операторов на объектах определить. А это сущие пустяки, ad-hoc мелочёвка. Тут нужные другие средства и в С++ они есть (к ООП отношения не имеющие), правда очень не удобные и сильно ограниченные.
Добавлено через 8 минут Верно. Макросы Си-препроцессора и не могут этого сделать и не безопасны (ведь они просто с текстом работают и ничего не знают о Си). Но иногда вполне себе применимы, как раз для борьбы с boilerplate-ом не сложным.
0
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
14.01.2015, 09:47 | 33 |
функциональная парадигма это часть декларативной. теперь расшифруйте свои противоречивые утверждения.
0
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
14.01.2015, 10:04 | 34 |
Где здесь? В приведенном коде на CL? Приведен идиоматический вид макроса -- "with" макрос генерирующий unwind-protect. Используй, пожалуйста. Всё автоматически и надёжно. RAII и никакого ООП. Какие-же там проблемы?
Добавлено через 5 минут Конечно не возможно, ведь полиморфизм это семантика. Я же говорил исключительно про синтаксис вызова метода. То есть принципиальной разницы между синтаксисом object.method(a, b, ...) и method(object, a, b, ...) нет; кроме того, второй вариант более общий и гибкий. Добавлено через 1 минуту Конечно не возможно. Exceptions - это семантика. Очевидные вещи, Капитан. Добавлено через 7 минут Такие нет. Ведь захватить ресурсы это одно, надо ведь ещё и освободить их планируемым образом (лексически описанным, как правило). А в большинстве ООП языках нет такой семантики вызова деструкторов, как в C++, но тем не менее RAII реализовано и, в связи с этим, совершенно очевидно должно быть, что сам по себе RAII к ООП отношения не имеет. Добавлено через 2 минуты Ну вот, если Python действительно знаешь, то должен понимать, что RAII механизмы в языке к ООП отношения не имеют: try/finally & context managers (with).
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
14.01.2015, 10:08 | 35 |
О, вот это вброс. Ты не смог «распарсить» λ-исчисление, но имеешь что-то сказать про ФП? Как обычно, пруфов не будет, и Солнце продолжает вращаться вокруг Земли?
Возможно. В любом Лиспе он реализуется в несколько десятков строк. Захват ресурсов — один из множества способов использовать объекты, которым они не ограничиваются. А не можешь представить, возьми любой другой язык и посмотри. Твои посты, к сожалению, не заставляют меня сомневаться в твоих умственных способностях. Последняя попытка. Серьёзно? То-то ни в Си, ни в Паскале её нет. Пример был, но ты слишком слеп. Твои личные половые трудности не интересны. Стандартные правила Си. Пока что все пользуются. «Голословные утверждения мне не интересны.» Лол, а как тогда называется вот это: ((char*)&foo)[6] = 'a'; ? Уж не приведением ли типа foo* к типу char*? Пока что ты говоришь как человек, который не знает ничего, кроме чуть-чуть C++, и из-за отсутствия знаний не способный понять элементарных вещей, которых ему говорят.
0
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
14.01.2015, 10:09 | 36 |
Ага. Я вообще когда слышу слово "парадигма", меня начинает подташнивать. А когда слышу "деклагхъативная парадигма", то всё - бегу к унитазу. Вообще ХЗ что за этим имеет ввиду говорящий. Всё что угодно может быть.
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
14.01.2015, 10:52 | 37 |
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.01.2015, 11:22 | 38 |
Не, конечно если опускаться до маразма, то конечно можно посчитать, что вообще любая парадигма - часть декларативной.
Вот только я таким не страдаю. Поэтому, мне как то сложно воспринимать лесенку из вложенных друг в друга функций - декларативщиной. декларативщина: Код
[TABLE] kokoko [ INT][ DATE ][TROLOLO] [num][день рождения ][ лололо ] 10 , AUTO, ляляля и ещё 100500 возможных записей. select num from kokoko where "день_рождения" == сегодня или шаблоны с++
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
14.01.2015, 11:26 | 39 |
Это если до анацефалии. Но функциональная действительно входит в декларативную.
Добавлено через 43 секунды c++ не поддерживает функциональную парадигму.
0
|
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
|
|
14.01.2015, 11:26 | 40 |
0
|
14.01.2015, 11:26 | |
14.01.2015, 11:26 | |
Помогаю со студенческими работами здесь
40
прога или игра ооп Mysqli ООП или процедурный подход Определить, программа с ооп или нет Изучаю ООП можно или нет так? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |