Главная страница

стиль программирования. Стиль программирования. Стиль программирования


Скачать 38 Kb.
НазваниеСтиль программирования
Анкорстиль программирования
Дата21.10.2021
Размер38 Kb.
Формат файлаdocx
Имя файлаСтиль программирования.docx
ТипПрограмма
#252346

Стиль программирования

Понятие стиль программирования представляет собой совокупность правил, которые необходимо соблюдать при написании программы. Необходимо помнить, что программа написана в "хорошем стиле" программирования, если она написана структурно, легко читаема, в ней корректно используются все "ресурсы" языка программирования и программа сопровождается полным набором тестов.

Правильно разработанные программы должны не только удовлетворять своим функциональным требованиям, но и обладать такими свойствами, как:

повторная используемость;

расширяемость;

устойчивость к неправильным данным;

системность.

Правильный стиль программирования обеспечивает наличие этих свойств.

 

СТРУКТУРНОЕ ПРОГРАМИРОВАНИЕ

Модули

Существенное движение вперед произошло с внедрением “структурного программирования”, методологии, основанной на том, что, как показал опыт, большие задачи проще решаются, если рассматривать их как совокупность меньших задач.

Каждый такой кусочек называется “модулем”. Программы состоят из модулей внутри других модулей.

Структурное программирование подавляет кашеобразность кода, поскольку процессы переходов прослеживаются только в пределах модуля. Нельзя перепрыгнуть из середины одного модуля в середину другого.

Структурное программирование имеет три преимущества:

Каждая программа представляется линейной последовательностью содержательных функций, называемых “модулями”. Каждый модуль имеет ровно один вход и ровно один выход.

Каждый модуль состоит из одной или нескольких функций, каждая из которых имеет также ровно один вход и ровно один выход и сама может рассматриваться как модуль.

Модуль может содержать:

а) операции или другие модули;

б) структуры принятия решений (выражения типа ЕСЛИ ТО);

в) структуры для организации циклов.

Смысл модулей, имеющих “один вход, один выход”, состоит в том, что можно вынуть их, изменить их начинку и вставить обратно без развинчивания остальных соединений в программе. Это означает, что можно попробовать каждый кусок по отдельности. Такое возможно когда точно знаете что имеется при входе в модуль и что наблюдается после выхода из него.

Структурное программирование было изначально задумано как подход к проектированию. Модули были воображаемыми объектами, которые существовали в голове программиста или разработчика и не были частями реального кода.

Языки структурного программирования

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

Разработка модулей

Как приступать к разработке подобных модулей? Методология, называемая “разработкой сверху вниз”, утверждает, что модули следует строить, начиная с самого общего, главного и далее прорабатывать до уровня самых мелких модулей. Последователи такого подхода могут засвидетельствовать возникновение позорно огромных потерь времени в результате ошибок в планировании. На горьком опыте они познали, что попытки корректировать программу после того, как она была написана, известны как практика “наложение заплат”.

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

Вследствие таких трудностей при внесении изменений в однажды написанные программы, все упущения в проекте должны быть устранены на стадии предварительного планирования. В противном случае могут быть затрачены человеко-года усилий по написанию кода, который потом нельзя использовать.

Подпрограммы

Мы рассмотрели “модули” только как абстрактные объекты. Но любые высокоуровневые языки имеют аппарат, позволяющий кодировать модули проекта как модули реального кода – отдельные куски, которым можно дать имена и “вызывать” из других кусков кода. Эти куски называются подпрограммами, процедурами или функциями, в зависимости от языка программирования и способа реализации.

Фраза “вызвать подпрограмму strela” заставляет выполниться подпрограмму с таким именем. Когда выполнение заканчивается, управление возвращается назад в вызывающую программу в точку, следующую за вызовом. Подпрограммы повинуются законам структурированного программирования.

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

Годами ученые-компьютерщики совершенствовались в искусстве использования многочисленных маленьких подпрограмм в сильно разветвленных, протяженных программах. Они могут быть написаны и отлажены независимо друг от друга. Это облегчает повторное использование ранее написанных программ, и так легче распределять части работы между различными программистами. Короткие куски проще продумывать и проверять их правильность.

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

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

Существенен также сам способ вызова и передачи параметров подпрограмме. Для автономного тестирования подпрограммы приходится писать специальные тестовые программы для ее вызова.

По этой причине ученые рекомендуют умеренное использование подпрограмм. На практике они обычно получаются довольно большими, от половины до целой страницы текста в длину.

ОТЛАДКА

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

 Правила тестирования:

- должна быть испытана каждая "ветвь" программы;

- очередной тест должен контролировать то, что еще не было проверено на предыдущих тестах;

- первый тест должен быть максимально прост;

- возникающие затруднения следует четко разделять и устранять строго поочередно;

- количество проходов цикла должно быть временно уменьшено для сокращения объема вычислений;

- тесты должны быть целенаправленными и систематизированными;

- усложнение тестовых данных должно быть постепенное.

Этапы тестирования:

1. Проверка  нормальных условий. Тестирование на основе данных, характерных для реальных условий функционирования программы.

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

3. Проверка в  исключительных ситуациях . Проводится с использованием данных, значения которых лежат за пределами допустимой области изменения. Для табличных и литерных величин проверяются граничные объемы данных.

Таким образом, тестирование устанавливает факт наличия ошибки. Отладка объясняет его причину.

Ошибки, которые могут быть допущены человеком при написании программы можно разделить на три вида: (1) синтаксические ошибки  - вызов команды, не входящей в систему команд конкретного языка программирования, обычно их обнаруживает компилятор или интерпретатор данного языка программирования; (2) семантические ошибки  - вызов команды в ситуации, когда эта команда не может быть исполнена, эти ошибки приводят к отказу компилятора или интерпретатора работать; (3) логические ошибки  - ЭВМ выполнила программу, но цель, поставленная человеком, не достигнута. Эти ошибки не фиксируются ни ЭВМ, ни компилятором или интерпретатором, важно понимать, что "безотказное" выполнение программы еще не означает его правильность.

Контроль  правильности написанной программы состоит, как правило, из трех этапов:

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

2. Проверка. При проверке программы необходимо постараться мысленно восстановить вычислительный процесс, определяемый программой, и сравнить его с требуемым процессом.

3. Прокрутка. Пошаговое выполнение программы вручную человеком. Для выполнения прокрутки необходимо задать исходные данные и производить над ними необходимые вычисления. Исходные данные должны подбираться так, чтобы в прокрутку вовлекалось большинство ветвей алгоритма.

Для  отладки программы  обычно пользуются приемами: (а) пошаговое выполнение программы; (б) просмотр значения любой переменной  или нахождение значения любого выражения; (в)  установка контрольных точек (контрольная печать - вывод промежуточных результатов на экран), точек, в которых программа временно останавливает свою работу, так чтобы можно было оценить промежуточные результаты.

 

Сопровождение программ

Сопровождение программ — это работы, связанные с обслуживанием программ в процессе их эксплуатации.

Многократное использование разработанной программы для решения различных задач заданного класса требует проведения дополнительных работ, связанных сдоработками программы для решения конкретных задачпроведения дополнительных тестовых просчетов и т.п.

Программа, предназначенная для длительной эксплуатации, должна иметь соответствующуюдокументацию и инструкцию по ее использованию.

Документация по сопровождению программных продуктов

Документация по сопровождению ПП (system documentation) описывает ПП с точки зрения ее разработки. Эта документация необходима, если ПП предполагает изучение того, как она устроена (сконструирована), и модернизацию его программ. Как уже отмечалось, сопровождение - это продолжающаяся разработка. Поэтому в случае необходимости модернизации ПП к этой работе привлекается специальная команда разработчиков-сопроводителей. Этой команде придется иметь дело с такой же документацией, которая определяла деятельность команды первоначальных (основных) разработчиков ПП, - с той лишь разницей, что эта документация для команды разработчиков-сопроводителей будет, как правило, чужой (она создавалась другой командой). Команда разработчиков-сопроводителей должна будет изучать эту документацию, чтобы понять строение и процесс разработки модернизируемого ПП, и внести в эту документацию необходимые изменения, повторяя в значительной степени технологические процессы, с помощью которых создавалось первоначальное ПП.

Документация по сопровождению ПП можно разбить на две группы:

1) документация, определяющая строение программ и структур данных ПП и технологию их разработки;

2) документацию, помогающую вносить изменения в ПП.

Документация первой группы содержит итоговые документы каждого технологического этапа разработки ПП. Она включает следующие документы:

Внешнее описание ПП (Requirements document)

Описание архитектуры ПП (description of the system architecture), включая внешнюю спецификацию каждой ее программы.

Для каждой программы ПП - описание ее модульной структуры, включая внешнюю спецификацию каждого включенного в нее модуля.

Для каждого модуля - его спецификация и описание его строения (design description).

Тексты модулей на выбранном языке программирования (program source code listings).

Документы установления достоверности ПП (validation documents), описывающие, как устанавливалась достоверность каждой программы ПП и как информация об установлении достоверности связывалась с требованиями к ПП.

Документы установления достоверности ПП включают прежде всего документацию по тестированию (схема тестирования и описание комплекта тестов), но могут включать и результаты других видов проверки ПС, например, доказательства свойств программ.

Документация второй группы содержит

Руководство по сопровождению ПП (system maintenance guide), которое описывает известные проблемы вместе с ПП, описывает, какие части системы являются аппаратно - и программно-зависимыми, и как развитие ПП принято в расчет в его строении (конструкции).

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

Обеспечение сопровождаемости

Документированность, информативность и понятность определяют состав и качество документации по сопровождению. Кроме того, относительно текстов программ (модулей) можно сделать следующие рекомендации:

используйте в тексте модуля комментарии, проясняющие и объясняющие особенности принимаемых решений; по-возможности, включайте комментарии (хотя бы в краткой форме) на самой ранней стадии разработки текста модуля;

используйте осмысленные (мнемонические) и устойчиво различимые имена (оптимальная длина имени - 4-12 литер, цифры - в конце), не используйте сходные имена и ключевые слова;

соблюдайте осторожность в использовании констант (уникальная константа должна иметь единственное вхождение в текст модуля: при ее объявлении или, в крайнем случае, при инициализации переменной в качестве константы);

не бойтесь использовать не обязательные скобки (скобки обходятся дешевле, чем ошибки;

размещайте не больше одного оператора в строке; для прояснения структуры модуля используйте дополнительные пробелы (отступы) в начале каждой строки;

избегайте трюков, т.е. таких приемов программирования, когда создаются фрагменты модуля, основной эффект которых не очевиден или скрыт (завуалирован), например, побочные эффекты функций.

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОЕКТИРОВАНИЕ

Метод объектно-ориентированного проектирования основывается на:

модели построения системы как совокупности объектов абстрактного типа данных;

модульной структуре программ;

нисходящем проектировании, используемом при выделении объектов.

Объектно-ориентированный подход использует следующие базовые понятия:

объект;

свойство объекта;

метод обработки;

событие;

класс объектов.

Объект - совокупность свойств (параметров) определенных сущностей и методов их обработки (программных средств).

Объект содержит инструкции (программный код), определяющие действия, которые может выполнять объект, и обрабатываемые данные.

Свойство - характеристика объекта, его параметр. Все объекты наделены определенными свойствами, которые в совокупности выделяют объект из множества других объектов.

Объект обладает качественной определенностью, что позволяет выделить его из множества других объектов и обусловливает независимость создания и обработки от других объектов.

Например, объект можно представить перечислением присущих ему свойств:

ОБЪЕКТ_А (свойство-1, свойство-2,...., свойство-k).

Свойства объектов различных классов могут "пересекаться", т.е. возможны объекты обладающие одинаковыми свойствами:

ОБЪЕКТО_В (...свойство-n, свойство-m,...свойство-r,...) ОБЪЕКТ_С (...свойство-n,.., свойство-r,...).

Одним из свойств объекта являются метод его обработки.

Метод - программа действий над объектом или его свойствами.

Метод рассматривается как программный код, связанный с определенным объектом; осуществляет преобразование свойств, изменяет поведение объекта.

Объект может обладать набором заранее определенных встроенных методов обработки, либо созданных пользователем или заимствованных в стандартных библиотеках, которые выполняются при наступлении заранее определенных событий, например, однократное нажатие левой кнопки мыши, вход в поле ввода, выход из поля ввода, нажатие определенной клавиши и т.п.

По мере развития систем обработки данных создаются стандартные библиотеки методов, в состав которых включаются типизированные методы обработки объектов определенного класса (аналог - стандартные подпрограммы обработки данных при структурном подходе), которые можно заимствовать для различных объектов.

Событие - изменение состояния объекта.

Внешние события генерируются пользователем (например, клавиатурный ввод или нажатие кнопки мыши, выбор пункта меню, запуск макроса); внутренние события генерируются системой.

Объекты могут объединяться в классы ( группы или наборы - в различных программных системах возможна другая терминология).

Класс - совокупность объектов, характеризующихся общностью применяемых методов обработки или свойств.

Один объект может выступать объединением вложенных в него по иерархии других объектов.

В объектно-ориентированном программировании используется следующий формат записи работы с объектами:

ОБЪЕКТ.МЕТОД ОБЪЕКТ.СВОЙСТВО.МЕТОД

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

МЕТОДИКА ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОЕКТИРОВАНИЯ

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

инкапсуляция (замыкание) свойств данных и программ в объекте;

наследование;

полиморфизм.

Инкапсуляция означает сочетание структур данных с методами их обработки в абстрактных типах данных - классах объектов.

Класс может иметь образованные от него подклассы. При построении подклассов осуществляется наследование данных и методов обработки объектов исходного класса. Механизм наследования позволяет переопределить или добавить новые данные и методы их обработки, создать иерархию классов.

Полиморфизм - способность объекта реагировать на запрос (вызов метода) сообразно своему типу, при этом одно и то же имя метода может использоваться для различных классов объектов.

Для различных методик объектно-ориентированного проектирования характерны следующие черты:

объект описывается как модель некоторой сущности реального мира;

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

В процессе объектно-ориентированного анализа:

осуществляется идентификация объектов и их свойств;

устанавливается перечень операций (методов обработки), выполняемых над каждым объектом, в зависимости от его состояния (событий);

определяются связи между объектами для образования классов;

устанавливаются требования к интерфейсу с объектами.

Выделено четыре этапа объектно-ориентированного проектирования:

разработка диаграммы аппаратных средств системы обработки данных, показывающей процессоры, внешние устройства, вычислительные сети и их соединения;

разработка структуры классов, описывающей связь между классами и объектами;

разработка диаграмм объектов, показывающих взаимосвязи с другими объектами;

разработка внутренней структуры программного продукта.

Ошибки программного обеспечения

  Под ошибками программного обеспечения понимаются:

  -  Ошибки в тексте поставленных программ (включая подпрограммы, процедуры, функции и макросы), которые приводят к отказу в работе программного обеспечения или к генерации неверных данных, выводимых или записываемых в базу данных, либо приводят к тому, что описанные в документации функции не работают;

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

  К ошибкам программного обеспечения не относятся:

  -  Ошибки или сбои в работе системного программного обеспечения (операционной системы, сетевого программного обеспечения);

  -  Сбои в работе оборудования;

  -  Снижение показателей производительности и/или время отклика системы, по отношению к значениям, установленным на момент ввода в эксплуатацию.


написать администратору сайта