2. Анализ задачи.
3. Создание алгоритма решения задачи.
4. Реализация алгоритма.
5. Тестирование и отладка готовой программы.
6. Поддержка и обновление готовой программы.На первом этапе определяются условия задачи инеобходимо ясно понять, что требуется для её решения. Основная цель вданном случае - отсеять второстепенные аспекты от основной сути задачи.На втором этапе определяются входные данные,выходные, промежуточные и какие дополнительные трудности могутвозникнуть при решении поставленной задачи.На третьем этапе создается алгоритм - записьпошаговых процедур, а затем обеспечение таких условий, чтобы этоталгоритм решал задачу должным образом. Алгоритм может быть написан и ввиде блок-схем.Наверное, всем кто изучал программирование илиинформатику в учебных заведениях рассказывали, как нужно чертитьблок-схемы. И наверняка большинство не любит их чертить. Ваш покорныйслуга также относится к их числу. Но не стоит думать, что блок-схемыабсолютно бесполезны в программировании. Лично я никогда не черчублок-схемы при разработке программ, но я умею хорошо это делать. Инастоятельно советую Вам, научится чертить их лучше всех. Если Вы ненаучитесь самостоятельно и правильно чертить блок-схемы, Вы не сможетеосознать суть того, как работает программа! Именно блок-схема позволяетнаглядно и понятно (схематически) показать, как пошагово (построчно)выполняется программа. Ведь блок-схема это и есть алгоритм выполнениясамой программы. А что такое алгоритм?Алгоритм - это описание точного, пошаговоговыполнения действий решающих поставленную задачу должным образом.Поэтому если Вы сможете написать алгоритм выполнения программы, Высможете написать и саму программу, причем на любом языкепрограммирования (который конечно будете знать). Научившись чертитьблок-схемы, Вы научитесь построчно анализировать код программы,обрабатывая его в голове, так как это делает компьютер. Это очень важнопри отладке программы (пятый этап).Когда перед Вами стоит решение очень сложной задачи,можно (и нужно) применить метод "декомпозиции". Суть метода заключаетсяв разбиении одной сложной задачи на множество взаимосвязанных,маленьких и простых подзадач, решив которые в отдельности Вы получитенеобходимый результат. Здесь можно привести аналогию с веником. Весьвеник целиком сломать очень трудно, но если его ломать по одномупрутику, то все получится.Четвертый этап метода проектирования программныхсред заключается в записи созданного алгоритма в виде программы наопределенно языке программирования.На пятом этапе производится тестирование и отладкапрограммы. Он заключается в поиске всевозможных ошибок и позволяетдобиться правильности работы программы. В процессе выявления ошибокиспользуется "ручная отладка программы". Она заключается в мысленномвыполнении каждого шага алгоритма, решающего свою задачу (так как это впоследствии сделает компьютер), и позволяет убедиться, что данныйалгоритм будет функционировать должным образом.Также в процессе тестирования программы используется"эталонное решение". Это решение поставленной задачи другим методом(например, математически), которое позволяет получить заведомо верныерезультаты вычисления. Причем в эталонном решении используются неединичные данные, а множество различных данных позволяющих охватить всевозможные ситуации вычисления. На основе такого "эталонного решения"можно выявить все возможные "подводные камни" и ошибки программы илиситуации, в которых программа не будет работать должным образом. Такженеобходимо реализовать в своей программе "защиту от дурака". Это когдаучитываются такие ситуации, для которых программа в принципе непредназначена. Например, ввод цифр в поле или переменную,предназначенную для хранения фамилии.Некоторые ситуации и ошибки невозможно выявить дажена основе "эталонного решения". Такие ошибки проявляются только впроцессе длительного использования программы с множеством входныхданных. Именно на шестом этапе и производится их исправление, а такжеизменение программы в соответствие изменившимся государственным нормамили политике компании.При написании программ также необходимо соблюдать и другие правила, речь о которых пойдет ниже.ПеременныеИмена переменныхПочти во всех программах нам приходится использоватьпеременные, порой даже очень много переменных. Главное чтобы впоследствии не запутаться какая переменная, какие данные хранит. Дляэтого необходимо давать именам переменных содержательные имена.Исключением могут быть только переменные, используемые в циклах, но неучаствующие многократно в вычислениях.For I = 1 to 10 Step 1
For j = 1 to 10 Step 1
dmsTable(I, j) = I * j
Next j
Next i
Если нам нужно сохранить в переменную чей-то годрождения. Назовите переменную "vblYearsBorn", а не "A". Старайтесьчтобы имя переменной отражало суть тех данных для хранения которых онапредназначена, чтобы оно было интуитивно понятно. Пусть от этого имяпеременной будет немного длинным, но зато это не даст вам запутаться иисключит повторное использования данной переменной в другихвычислениях, для которых она не предназначена. Имя переменнойжелательно обязательно начинать с прописных букв vbl, от английскогоvariable (переменная). Это особенно актуально вОбъектно-Ориентированном Программировании (далее ООП). Так как имяпеременной можно спутать с названием, какого либо объекта на форме (обэтом пойдет речь ниже).Давайте для понятности назовем эти три начальныебуквы - "Идентификатором объекта", так как дальше я буду упоминать оних не однократно.После идентификатора, без пробелов, следует писатьимя переменной. Его нужно начинать с большой буквы, чтобы при просмотрелистинга программы Вы видели, что это переменная, или какой-то другойобъект, чтобы буквы выделялись, а не сливались в одну строку.vblFirstName
Объявление переменныхНекоторые языки программирования (например, VisualBasic) позволяют работать с переменными не объявляя их в кодепрограммы. Я считаю это большой ошибкой и не солидностью языкапрограммирования (но это не значит что этот язык программирования плох)!Объявление переменной это определение ее типа и имени.Dim vblFirstName as String
(Visual Basic)
Var vblFirstName: String; (Turbo Pascal)
Char vblFirstName; (C++)Т.е. мы как бы указываем программе, что будемиспользовать переменную с именем vblFirstName и тип данных этойпеременной String (текстовый/литеральный).Почему это важно (это касается только тех языковпрограммирования, которые разрешают так делать. Например, если Вы необъявите переменную в С++ или Turbo Pascal-е, при компиляции будетсгенерирована ошибка, что используемая переменная не объявлена)? Всеочень просто. Если мы не объявим переменную ей автоматически будетприсвоен тип Variant, это значит что в переменную можно будет сохранятьданные почти любого типа. Во-первых, мы сможем записать в переменную,которая хранит фамилию числовые данные или наоборот. ЭТО НЕПРАВИЛЬНО!Так как фамилия не может содержать цифры. Мы заведомо делаем впрограмме брешь, возможность для совершения ошибки. Вот такими ошибкамии пользуются хакеры для взлома систем и прочее. Во-вторых, тип,присваиваемый автоматически, очень "много" занимает места в оперативнойпамяти. А хорошая программа должна как можно меньше весить. И не важно,сколько гигабайт оперативки у Вас на компьютере. В-третьих, явноеобъявление переменных позволит назначить им тот тип данных, который Вамнеобходим. И Вам будет намного легче узнать, какие переменные ужеиспользуются в программе. Достаточно будет посмотреть в началепрограммного кода или модуля, какие переменные уже заданы, а неперелопачивать весь код программы. Вы никогда не сможете повторнообъявить уже объявленную переменную в одном и том же модуле, илиперепутать их имена, а значить не используете переменную в техвычислениях, для которых она не предназначена.В ООП разрешается многократно объявлять переменные содинаковыми именами, притом условии, что эти переменные локальны ииспользуются только в разных модулях. О видимости переменных пойдетречь чуть ниже.Инициализация переменныхПосле того как Вы объявили переменную её необходимоинициализировать, т.е. присвоить ей какое либо значение или обнулить.Это очень актуально для переменных используемых в вычислениях. Дело втом, при объявлении переменной для нее выделяется (резервируется)память. Резервирование памяти не отчищает ячейки от значений, которыеранее в них хранились, поэтому если за объявлением переменной неследует её инициализация, то текущее значение этой переменной будетнепредсказуемым, а не нулевым, как думают многие. Не обязательно, чтоименно так и будет, но если это произойдет причину неправильныхвычислений порой трудно выявить, так как код программы веренсинтаксически и логически, но все равно вычисления идут неверные.Если это переменная числового типа и используется в накоплении суммы, то достаточно её просто обнулить.vblSum = 0
For I = 1 to 10 Step 1
vblSum = vblSum + i
Next i
Или присвойте ей единицу, если переменная используется, как множитель или делитель.vblSum = 1
For I = 1 to 10 Step 1
vblSum = vblSum * i
Next i
Если это строковая переменная просто отчистите ее.vblFirstName = ""
Лично я всегда инициализирую переменные, даже если в следующей строке присвою ей другое значение.Глобальные и локальные переменныеВсе переменные имеют свою область видимости взависимости от того, как Вы их объявили. Переменные могут бытьлокальными и глобальными.Локальные переменные - это переменныеобъявленные внутри какой-либо функции (подпрограммы). Они видимы тольков пределах данной функции и не могут быть непосредственно вызваны изосновного текста программы. Когда выполнение программы возвращается изфункции к основному коду программы или другой функции, локальныепеременные удаляются из памяти.Глобальные переменные - это переменные,определенные вне тела какой-либо функции (для ООП, переменныеобъявленные в модулях проекта). Эти переменные имеют глобальную областьвидимости и доступны из любой процедуры, функции в подпрограмме.Очень часто возникают ошибки при использовании глобальных переменных.В некоторых языках программирования глобальнаяпеременная имя, которой совпадает с именем локальной переменной, могутизменить значения друг друга.Опасность использования глобальных переменныхисходит из их общедоступности, в результате чего одна функция можетизменить значение переменной незаметно для другой функции. В такихситуациях возможно появление ошибок, которые очень трудно выявить.Используйте глобальные переменные только при крайнейнеобходимости, когда невозможно или проблематично обойтись другимиметодами.КонстантыО константах буквально в двух словах. С ихиспользованием в программе также необходимо быть внимательным (как ивообще занимаясь программированием). Имена констант лучше всегоначинать с трех буков con, от английского constant (константа).Const conPi = 3.14159265
Помните, что значения констант нельзя изменить впрограмме (ведь они константы, а значить постоянные), в противномслучае будут сгенерированна ошибка. Лучше всего использовать константы,когда есть какое-либо значение, участвующее во многих вычислениях и егозначение никогда не меняется в программе. Либо когда необходимоиспользовать коэффициент (а они, как правило, тоже постоянны).Структурное программированиеСтруктурное программирование -дисциплинирующий подход к программированию, обеспечивающий созданиелегких для понимания программ и снижающий вероятность ошибок. Сутьэтого подхода состоит в соблюдении общепринятого стиля программированияи обеспечения удобочитаемости исходного текста. Вы наверняка заметили,что весь программный код, приведенный в примерах, написан сопределенной структурой. Вот это и есть структурное программирование.Операторы начала и конца цикла пишутся строго другпод другом, а все операторы внутри цикла чуть правее. Все отступыделаются с помощью табуляции (клавиша Tab). Точно также пишутсялогические схемы. Благодаря такому написанию ваша программа становитсяболее читабельной и легкой для восприятия. Также облегчается отладкапрограммы. Вы можете сами сравнить приведенный ниже пример, написаниякода по принципу структурированного программирования и без него. Примерприведен на языке Turbo Pascal (часть кода сортировки массива).Пример "Структурированный код":For i:=1 to 9 do
begin
vblMin:=A[i];
k:=i;
For j:=1+i to 10 do
begin
If (vblMin>A[j]) Then
begin
vblMin:=A[j];
k:=j;
end;
end;
vblStuf:=A[i];
A[i]:=vblMin;
A[k]:=vblStuf;
end;
Пример "Обычный код":For i:=1 to 9 do
begin
vblMin:=A[i];
k:=i;
For j:=1+i to 10 do
begin
If (vblMin>A[j]) Then
begin
vblMin:=A[j];
k:=j;
end;
end;
stuf:=A[i];
A[i]:=vblMin;
A[k]:=vblStuf;
end;
Какой вариант более читабелен и понятен? Несомненно, первый.Вы должны приучить себя соблюдать все вышеописанныенюансы. Конечно, несоблюдение не критично, но использование этихметодов намного упростит Вам написание программ и в будущем ихсопровождение.ОшибкиПрограммы очень редко работают правильно с первогораза. Закон Мерфи гласящий "Если что-то плохое может случиться, ононепременно случиться", похоже, был написан как раз применительно ккомпьютерным программам.Ошибки, возникающие в процессе работы программы можно разделить на несколько типов:1. Синтаксические ошибки
2. Ошибки времени выполнения
3. Логические ошибкиСинтаксические ошибки имеют место, когда исходныйкод программы записан с нарушением одного из правил грамматики тогоязыка программирования, на котором Вы пишите программу. Обнаруживаетсяэто нарушение при попытке откомпилировать программу.Ошибки времени выполнения выявляются компьютером вовремя выполнения программы. Подобные ошибки имеют место, когдапрограмма дает компьютеру указание выполнить неверную операцию(например, деление на ноль или манипулировать неописанными илиневерными данными).Ошибки ввода данных - также являются ошибкамивремени выполнения. Причиной таких ошибок является попытка ввестиданные неверного типа (например, переменной целочисленного типаприсваивается строковый параметр или число вещественного типа).Логические ошибки имеют место, когда программа выполняет неверный алгоритм. Данные ошибки являются самыми коварными,их очень сложно выявить, потому что они не фиксируются при компиляции.Данные ошибки проявляются при выводе неверных результатов программой.Единственно возможные способы выявления таких ошибок это использование методов: "эталонного решения" и "ручной отладки". Умелое использование всех этих методов и правил:метод декомпозиции, структурное программирование, метод проектирования программных средств, эталонное решение и другие, говорят о профессионализме.