Software Engineering
Более подробно можете почитать тут: http://ict.edu.ru/ft/001843/aut_prog.html
Кстати, поверхностно, но знаком с ним лично. Некоторые мои деловые и по учебе друзья общались с ним более плотно. Это пример того, как можно автоматизировать и практически избавить от ошибок процесс программирования.
Наличие жестких правил в средстве разработки вовсе не означает того, что при разработке будет меньше логических ошибок, которые отловить труднее всего.
Конечно, скажем, наличие типизации в языке, облегчает поиск некоторых ошибок, но это мелочи!
По крайней мере в работе http://is.ifmo.ru/download/turing.pdf не содержится никаких новых материалов. Описание систем конечными автоматами было предложено еще за долго до работ г.Шалыто. Так, в спецификации языка VHDL (разработанного в 1983 году) предложено описание поведения объектов с помощью конечных автоматов (наряду с традиционным "поведенческим" программным описанием). А работы г.Шалыто являются лишь переосмыслением известных методик и имеют местное значение (ни в коем случае не хочу никого обитеть т.о.).
Возможно, это действительно так, раз VHDL старше. О степени локальности "открытий" Шалыто я могу только поддержать.
Но это не мешает идее оставаться хорошей. Вернемся к сабжу. Да, автоматизация увеличивает количество человекочасов, но целостность, инкапсулированность имхо увеличивается, что приводит к меньшим затратам на отладку. Все имхо. Я на такие объемные проекты никогда не работал. Максимум 2500 человекочасов, да и те размазаны были почти на полгода.
i = i++ * --i;
Что получится в результате? Способствует-ли синтаксис языка устранению подобных неоднозначностей или наоборот - благоприятствует их появлению?
Перед тем, как приступить к программированию, задача должна быть раздроблена на подзадачи, структура продумана и испробавана в уме. Потом, когда все раздроблено, надо писать каркасы функций и объектов, но сами функции ничем, кроме подробнейших комментариев не наполнять(!).
Ну а потом заполнять функции постепенно. Умея программировать при этом. Если в одной функции получается больше 20 строк, то ее надо дробить.
У меня ошибки в коде уже пару лет как появляются крайне редко. Думаю, у многих, кто читает этот пост, примерно то же самое. Это приходит, наверное, с опытом, ведь большинство ошибок легко предсказуемы и легко отлаживаются.. :)
Жесткие правила и надежные средства разработки от ошибок не избавят, программы пишут люди. Уже были подобные попытки, и именно они привели к появлению Си++ и других языков программирования :)
Может быть, будет интересна эта мощнейшая разработка А.А. Шалыто: Автоматное программирование.
Более подробно можете почитать тут: http://ict.edu.ru/ft/001843/aut_prog.htm
Разработка мошнейшая. только причём тут автор этой статьи, не понятно. Что такое конечный автомат знали люди и до него, и он совсем не пионер. Многие программисты пишут такие программы(а многие пишут так интуитивно), потому что это очень удобный принцип формализации. (цитата: "используются не флаги , а состояния" - флаги это и есть состояния, наверно автор хочет сказать, что состояние инкапсулирует флаг).
2 all
Причём тут вообще синтаксические ошибки ? Это же тривиальные ошибки, их просто избежать. а код, который вы привели про i++ ++i - ни один нормальный(подчекиваю) прог в коммерческом проекте так писать не будет. Давайте поговорим об избежании алгоритмических ошибок. И так - есть такой человек Бертран Мейер. Является автором книги "объектно ориентированное проектирование программных систем" и создателям языка Eifell (слышали о таком ? читается Эйфель). Так вот, суть там в том, что в язык встроена так называемая система контрактов, которая строго декларирует что должно быть на входе, на выходе и во время работы. с помощью предусловия, инварианта и постусловия. В целом - опять же ничего нового, т.к. это ничто иное, как верификация программ методом Хоара, но это действительно первая реализация метода на практике. Расскажу суть - что такое инвариант, я думаю многие знают - так вот , там берётся кусок куда и к нему цепляется инвариант, если условие нарушается -прога вываливается. В с++ есть кое что подобное - называется assertion, но это менее мощная штука. Подробности в следующих постах, если появятся вопросы.
Кстати, интересная ссылка
Извините, коллега, но если вы думаете, что я говорил про алгоритм дейкстры или алгоритм Хоара Quicksort, то вы плохо прочитали и не поняли мой пост. Если же вы имели в виду что-то другое, пожалуйста поясните.
value : NonNegFloat;
то при всяких манипуляциях с переменной value, автоматически будет генериться код проверки попадания в диапазон.
с++ таки развращает конструкциями типа ++.
недавно поймал себя на том, что интуитивно написал подобную конструкцию: f(a[i++], a[i++], a[i++])
:) догадываетесь что получилось?
На самом деле то что произойдет зависит от компилятора.
Увы, не туда. Имелось в виду исчисление Хоара, и соотвествующий ему метод верификации программ. Это из теоретического программирования (computer science , формально говоря). Суть, в том, что мы получаем инструмент доказательства программ, где мы имеем специальные конструкции - тройки Хоара, (тройка состоит из предусловия , постусловия и программы) , а так же имеем множество правил вывода, и применяя эти правила мы можем верифицировать ПО, посредством инвариантов, в частности. Именно это и реализовано фактически Б.Мейером в языке Эйфель. Если интересует литература - то могу посоветовать почитать самого Хоара, а так же книжку по названием "Математическое введение в информатику", тут её качать
http://window.edu.ru/window/library?p_rid=24022 , предупреждаю, нужно знать математику.
На всем протяжениии програмирования, главное уследить размерность множества над которым сейчас возишся. И ошибки стают орфографическими. Подробно мысленно трасировать алгоритм, блокируюя ветки не нужные к обработке.
А для простоты, в множествах вариантов, идентифицировать первый, т.е. нулевой приравненым ко все тем что использованы не будут, причем на протяжени всего алгоритма. (Вроде "Неивестный" вариант). И соответсвенно просто достаточно вставить фильтр "если индекс варианта больше зарервированых, утрировать до нулевого", что бы не допускать в тело ошибочные значения. Не труден тогда и обработчик исключений (значение по умолчанию, перезапросы, вывод места претензии и т.п.). Тогда легко уследить в дальнейших апгрейдах откуда берется "нечистый" в вашем окне.
Запрограмируйте ошибку приемлимой изначально. :) грубо говоря, объсните священику нормальным стиль умеренного грешения.
Это главное. А остальное дело выбора.
Смысл всего выше сказаного.