OberonCore
https://forum.oberoncore.ru/

Аналоги трудов Бертрана Мейера для Си++
https://forum.oberoncore.ru/viewtopic.php?f=26&t=6204
Страница 1 из 2

Автор:  Wlad [ Четверг, 28 Декабрь, 2017 02:48 ]
Заголовок сообщения:  Аналоги трудов Бертрана Мейера для Си++

Попрошу срача и религиозных войн не начинать.

Итак: есть ли что-то подобное книгам Б.Мейера по монументальности, охватности и основательности, для Си++?
Встречалось ли?
Что кто может рекоменднуть?

Автор:  Илья Ермаков [ Четверг, 28 Декабрь, 2017 04:47 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

С Мейером не сравнить,

но разумная очень книга по культуре программирования, паттерны алгоритмов и др.

Романов Е. Л. Практикум по программированию на C++

Автор:  Rifat [ Четверг, 28 Декабрь, 2017 08:15 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Основная идея в книгах Мейера - это контрактное программирование, которое в свою очередь раскрывается через предусловия, постусловия, инварианты циклов. Также в книгах Мейера большое внимание уделяется правильному использованию объекто-ориентированного программирования. Соответственно, если в книге по C++ также рассматриваются предусловия, постусловия, инварианты и правильное объектно-ориентированное программирование, то можно считать, что эта книга похожа на книгу Мейера.

P.S. Кстати, я виделся с Бертраном Мейером.

Автор:  Info21 [ Пятница, 29 Декабрь, 2017 02:33 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Не вполне понятен вопрос:

разве понятия предусловий и т.д. зависят от языка?

Автор:  Rifat [ Пятница, 29 Декабрь, 2017 09:56 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Эти понятия не зависят от языка.
Но то, включены ли эти понятия в книгу по какому-нибудь языку, зависит от языка.

Лично мои приблизительные оценки.
Думаю, что большинство книг по Eiffel содержат понятия о предусловии, постусловии и инварианте, так как эти конструкции входят в синтаксис языка, поэтому необходимо их описывать.
Процентов 10% книг по языку Pascal содержат эти понятия.
0,1% книг по языкам C/C++ содержат эти понятия. Единственная книга, которая мне встретилась, где бы описывался C++ и эти понятия, - это книга "Жемчужины программирования". Думаю, что трудно описывать понятие инварианта цикла, когда в цикле могут быть множественные break, continue, goto и return, поэтому, чтобы не вдаваться в подробности, эти понятия обычно скромно умалчиваются.
И не знаю, встречаются ли эти понятия в книгах по ассемблеру. Лично я не встречал.

Автор:  Valery Solovey [ Пятница, 29 Декабрь, 2017 19:10 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

То, включены ли эти понятия в книгу по какому-нибудь языку, зависит от автора.

Автор:  Rifat [ Пятница, 29 Декабрь, 2017 19:48 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Valery Solovey писал(а):
То, включены ли эти понятия в книгу по какому-нибудь языку, зависит от автора.

Пришла на ум следующая аналогия. Можно ручку при письме держать пальцами рук, а можно пальцами ног. Писать пальцами рук проще, поэтому так и пишут. Также и здесь, есть языки, где эти понятия гармонично ложатся на язык и там их чаще всего используют, а есть языки программирования, где их можно с трудом описать, поэтому их там чаще всего не описывают. А так да, дело за автором рукой писать или ногой :)

Автор:  Trurl [ Пятница, 29 Декабрь, 2017 22:00 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Если книга про язык, то незачем включать всякие лишние понятия. А если про методы программирования, автор обычно выбирает язык, на котором удобнее иллюстрировать. Бывают еще редкие случаи, когда автор хочет показать, что эти методы можно применять даже на ф̶о̶р̶т̶р̶а̶н̶е си.

Автор:  Valery Solovey [ Среда, 03 Январь, 2018 20:26 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Trurl писал(а):
Если книга про язык, то незачем включать всякие лишние понятия. А если про методы программирования, автор обычно выбирает язык, на котором удобнее иллюстрировать.
Так изначальный вопрос про инварианты, а не про справочник по синтаксису.

В аспекте инвариантов Оберон и плюсы почти не отличимы. Подходы к проектированию будут практически одинаковы.

Автор:  Valery Solovey [ Среда, 03 Январь, 2018 20:37 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Rifat писал(а):
есть языки, где эти понятия гармонично ложатся на язык и там их чаще всего используют, а есть языки программирования, где их можно с трудом описать, поэтому их там чаще всего не описывают.
Ни в каких языках эти понятия не описывают. Их используют. И тоже не в языках. А в программах. Которые не из слов языка остоят, а много из чего. А текст программы - это лишь жалкое отражение того, что имеется в виду на самом деле.

Плюсы не сказать, что хуже Оберона в этом месте. Эйфиль я бросил изучать не дойдя до середины, поэтому моё мнение на его счёт слишком грубое, но на мой взгляд и в этом языке понятия постусловий, инвариантов и предусловий лишь косметические. Ни от каких ошибок в этом аспекте язык не защищает. Да и вообще непонятно, как от таких ошибок может защитить хоть како-нибудь язык программирования.

Автор:  Wlad [ Среда, 03 Январь, 2018 23:50 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Valery Solovey писал(а):
Да и вообще непонятно, как от таких ошибок может защитить хоть како-нибудь язык программирования.

Расширьте и углубьте.

Автор:  Info21 [ Четверг, 04 Январь, 2018 11:47 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Wlad писал(а):
Valery Solovey писал(а):
Да и вообще непонятно, как от таких ошибок может защитить хоть како-нибудь язык программирования.
Расширьте и углубьте.
Хочу попробовать:

На уровне языка -- это на уровне статики. Что эквивалентно статической верификации семантической правильности программы (что, скажем, вызов процедуры изнутри какого-нибудь цикла состыкован по её пред- и постусловиям с одной стороны, и гарантирует инвариант цикла с другой) на уровне компилятора.
Действительно, звучит нереально.

Автор:  Valery Solovey [ Суббота, 06 Январь, 2018 16:35 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Да. Или если посмотреть немного с другого угла и воспользоваться другими словами, то то же постусловие - это синоним слова "цель".

Постусловие - это цель, которой должен достичь участок кода, к написанию которого мы сейчас готовимся. Цель нашего участка кода в конечном счёте диктуется характеристиками той программы, разработку которой нам поручили. В свою очередь, цель любой мало-мальски полезной программы - автоматизация. То есть, мы пишем участок кода программы, которая автоматизирует ряд действий в какой-то области. Назовём эту область предметной. И инвариант - это крупица предметной области.

Языки общего назначения - ада, лисп, оберон, си и т.д. - имеют различия по ряду признаков. Но и кое-что общее у них есть. А именно - в их синтаксисе нет элеметнов предметных областей. Всех предметных областей. Но зато есть кирпичики, из которых эти элементы можно построить. Таким образом, в коде программы на языке общего назначения сущности предметной области представлены идиоматически. И то же ООП такое популярное именно потому, что даёт очень удобно представлять идиомы. Но даже ООП не решает всех проблем. Например, нет гарантий, что метод вызывается в нужное время. Или что ему переданы правильные параметры.

Программист лишь в своей голове может прокрутить все ситуации и все условия. Язык за него это не сделает. Максимум, что может быть в языке - синтаксически отведённое место для того же постусловия. Теряется гибкость, но зато голове не приходится тратить калории на поиск подходящего места, и она может заняться более важным делом - собственно постусловием. И когда до собственно постусловий и инвариантов доходит, то ни эйфиль, ни плюсы друг от друга сильно не отличаются.

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

Автор:  Wlad [ Воскресенье, 07 Январь, 2018 02:59 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Valery Solovey писал(а):
Да. ...
...
... способны покрывать одну и ту же предметную область.
Несколько раз перечитал, так и не уразумел, про что и зачем это всё было написано...

Автор:  Valery Solovey [ Воскресенье, 07 Январь, 2018 23:48 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Ну, я не знаю как объяснить лучше.

Автор:  Wlad [ Понедельник, 08 Январь, 2018 13:46 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Valery Solovey писал(а):
Ну, я не знаю как объяснить лучше.

Ну, объясните, например вот эту вашу сентенцию: Постусловие - цель.
Насколько я понимаю, как и предусловие, постусловие - проверка нахождения в некоей области, только для постусловия это проверка после проведения работы функцией.
Оно не описывает, что мы должны получить.
Оно лишь проверяет, что процессе вычислений и операций мы не вылетели за пределы доменов в результатах.

Автор:  Wlad [ Понедельник, 08 Январь, 2018 13:57 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Valery Solovey писал(а):
Ну, я не знаю как объяснить лучше.

А, вообще-то, лучше и - не надо.

Подобные разговоры были актуальны где-то до 2005 года.
Потом История (для 99% программистов) закончилась.

Автор:  Rifat [ Понедельник, 08 Январь, 2018 15:13 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

А что случилось в 2005 году?

Автор:  Info21 [ Понедельник, 08 Январь, 2018 15:38 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Wlad писал(а):
Valery Solovey писал(а):
Ну, я не знаю как объяснить лучше.

Ну, объясните, например вот эту вашу сентенцию: Постусловие - цель.
Насколько я понимаю, как и предусловие, постусловие - проверка нахождения в некоей области, только для постусловия это проверка после проведения работы функцией.
Оно не описывает, что мы должны получить.
Оно лишь проверяет, что процессе вычислений и операций мы не вылетели за пределы доменов в результатах.
Почему же.
Постусловие проверяет всё, что можно проверить в имеющихся ограничениях по эффективности.
Никто не запрещает, например, проверить, что массив действительно упорядочен после сортировки.

Автор:  Comdiv [ Понедельник, 08 Январь, 2018 17:45 ]
Заголовок сообщения:  Re: Аналоги трудов Бертрана Мейера для Си++

Wlad писал(а):
Подобные разговоры были актуальны где-то до 2005 года.
Потом История (для 99% программистов) закончилась.
Rifat писал(а):
А что случилось в 2005 году?
Почему-то сразу приходит на ум посещение Виртом России http://oberon2005.oberoncore.ru/.
Вирт как вестник конца истории :D

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/