Как разработать программу


Этапы разработки программы – как создаются и проектируются программы? | Info-Comp.ru - IT-блог для начинающих

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

Зачем нужно проектировать программу и соблюдать этапы разработки?

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

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

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

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

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

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

Основные этапы разработки ПО

Вот этапы, которые в большинстве случаев должны соблюдаться при разработке программного обеспечения:

Некоторым может показаться, что это слишком сложный план, но если Вы будете работать над крупным проектом, то столкнётесь со всем этим, и даже более детализированным планом.

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

Этап 1 – Определение проблемы

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

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

Определение проблемы – это фундамент всего процесса программирования!

Этап 2 – Выработка требований

Что такое требования и зачем их нужно выработать?

Требования к программе – это подробное описание всех возможностей программы и действий, которые должна выполнять программа. Такие требования иногда также называют «Функциональной спецификацией» или просто «Спецификацией».

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

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

Этап 3 – Создание плана разработки

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

Этап 4 – Разработка архитектуры системы или высокоуровневое проектирование

Архитектура системы – это каркас программы, это высокоуровневое проектирование программы.

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

Архитектура системы обычно включает:

  • Общее описание системы;
  • Основные компоненты;
  • Формат и способ хранения данных;
  • Специфические бизнес-правила;
  • Способ организации пользовательского интерфейса;
  • Подход к безопасности системы;
  • Оценки производительности;
  • Возможности масштабирования;
  • Моменты, связанные с интернациональностью, т.е. будет ли система интернациональной.

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

Этап 5 – Детальное проектирование

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

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

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

Этап 6 – Кодирование и отладка

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

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

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

Этап 7 – Тестирование компонентов

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

Этап 8 – Интеграция компонентов

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

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

Этап 9 – Тестирование всей системы

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

Этап 10 – Сопровождение, внесение изменений, оптимизация

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

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

Если Вы еще не умеете программировать, и даже не знаете, с чего начать, то в этом случае я рекомендую Вам начать с книги «Как стать программистом? 14 советов по достижению поставленной цели», в ней приведены советы и рассмотрен конкретный план действий, которые помогут Вам стать программистом.

У меня на этом все, надеюсь, статья была Вам интересна. Пока!

Этапы разработки программы

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

Спецификация (определение требований к программе):

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

Разработка алгоритма:

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

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

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

Кодирование:

После проведения спецификации и составления алгоритма решения, используемый алгоритм в итоге будет записан на необходимом языке программирования (Pascal, Delphi, C++ и др.). Результатом этапа кодирования является готовая программа.

Этапы разработки программы. Отладка:

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

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

Тестирование:

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

Создание справочной системы:

Если программист разрабатывает программу, чтоб ею впоследствии пользовались другие, то программисту необходимо разработать справочную систему и установить для пользователя легкий быстрый доступ к этой справочной системе при работе с программой. Современные программы обладают справочной информацией, имеющей форму CHM- или HLP-файлов.

Кроме справочной информации справочная система содержит необходимые инструкции по инсталляции программы. Обычно их представляют в виде файла Readme разных форматов: *.doc, *.txt, *.htm. Более подробно рассматриваемый этап разработки программы будет описан позже.

Создание установочного диска (CD-ROM):

Инсталяционный диск (CD-ROM) разработчики создают для того, чтобы пользователи могли самостоятельно, без помощи программиста, проинсталировать данную программу на свой ПК.

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

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

Этот этап разработки программы на примере утилиты InstallShield Express (она входит в состав Delphi) подробнее будет рассмотрен позже. Итак, мы вкратце рассмотрели этапы разработки программы. В следующих статьях поподробнее остановимся на каждом из них.

Похожие записи:

Этапы создания программ

Введение

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

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

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

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

  1. Быстрая смена вычислительной техники и алгоритмических языков;

  2. Не стыковка ЭВМ друг с другом (VAX и IBM);

  3. Отсутствие полного взаимопонимания между заказчиком и исполнителем к разработанному программному продукту.

Этапы технологии программирования

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

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

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

  1. постановка задачи;

  2. проектирование программы

  3. построение модели

  4. разработка алгоритма;

  5. написание программы;

  6. отладка программы;

  7. тестирование программы;

  8. документирование.

Кратко остановимся на каждом из этих этапов.

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

  • как определить решение;

  • каких данных не хватает и все ли они нужны;

  • какие сделаны допущения и т. п.

Таким образом, кратко можно сказать, что на этапе постановки задачи необходимо:

  • описание исходных данных и результата;

  • формализация задачи;

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

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

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

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

Методы проектирования архитектуры делятся на две группы:

  1. ориентированные на обработку

  2. ориентированные на данные.

Методы, ориентированные на обработку, включают следующие общие идеи.

а) Модульное программирование.

Основные концепции:

  • каждый модуль реализует единственную независимую функцию;

  • имеет единственную точку входа/выхода;

  • размер модуля минимизируется;

  • каждый модуль разрабатывается независимо от других модулей;

  • система в целом построена из модулей.

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

б) Функциональная декомпозиция.

Подобна стратегии «разделяй и управляй». Практически является декомпозицией в форме пошаговой детализации и концепции скрытия информации.

в) Проектирование с использованием потока данных.

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

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

г) Технология структурного анализа проекта.

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

Методы проектирования, основанные на использовании структур данных, описаны ниже.

а) Методология Джексона.

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

б) Методология Уорнера.

Подобна предыдущей, но процедура проектирования более детализирована.

в) Метод иерархических диаграмм.

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

г) Объектно-ориентированная методология проектирования.

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

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

При построении моделей, как правило, используют два принципа: дедуктивный (от общего к частному) и индуктивный (от частного к общему).

Рис. 1. Схема построения модели при дедуктивном способе

При дедуктивном подходе (рис. 1) рассматривается частный случай общеизвестной фундаментальной модели. Здесь при заданных предположениях известная модель приспосабливается к условиям моделируемого объекта. Например, можно построить модель свободно падающего тела на основе известного закона Ньютона ma = mg – Fсопр и в качестве допустимого приближения принять модель равноускоренного движения для малого промежутка времени.

Рис. 2. Схема построения модели при индуктивном способе

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

Технология построения модели при индуктивном способе:

1) эмпирический этап

  • умозаключение;

  • интуиция;

  • предположение;

  • гипотеза.

  1. постановка задачи для моделирования;

  2. оценки; количественное и качественное описание;

  3. построение модели.

Разработка алгоритма - самый сложный и трудоемкий процесс, но и самый интересный в творческом отношении. Выбор метода разработки зависит от постановки задачи, ее модели.

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

При дедуктивном подходе рассматривается частный случай общеизвестных алгоритмических моделей. Здесь при заданных предположениях известный алгоритм приспосабливается к условиям решаемой задачи. Например, многие вычислительные задачи линейной алгебры, в частности, нелинейные уравнения, системы алгебраических уравнений и т.п., могут быть решены с использованием известных иетодов и алгоритмов, для которых существует множество специальных библиотек юдпрограмм, модулей. В настоящее время получили распространение специализи-эованные пакеты, позволяющие решать многие задачи (Mathcad, Autocad и т.п.).

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

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

Структурное программирование основано на использовании блок-схем, формируемых с помощью управляющих структурных элементов.

Выделяют три базовых структурных элемента (управляющие структуры): композицию, альтернативу, итерацию.

Композиция – это линейная конструкция алгоритма, составленная из последовательно следующих друг за другом функциональных вершин:

begin S1; S2; end

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

if B then S1 else S2

и неполной развилки:

if B then S1

Итерация – это циклическая конструкция алгоритма, которая, вообще говоря, является составной структурой, состоящей из композиции и альтернативы. Итерации могут быть представлены в двух формах: с предусловием:

while B do S1

и с постусловием:

repeat S1 until B

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

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

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

Для иллюстрации технологии структурного программирования сверху-вниз рассмотрим пример.

Пример. Технология разработки программы решения квадратного уравнения.

На рис. 4.6 проиллюстрирована пошаговая детализация процесса построения алгоритма. Заметим, что для начального шага разработки программы имеем в качестве входных данных коэффициенты а, b, с квадратного уравнения ах2 + bх + с = 0, а на выходе - значения двух корней х1, х2.

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

На этапе написания программы по разработанному алгоритму на выбранном языке программирования составляется программа.

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

Тестирование - это процесс исполнения программ с целью выявления (обнаружения) ошибок.

Существуют различные способы тестирования программ.

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

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

Разумная и реальная стратегия тестирования - сочетание моделей «черного» и «белого ящиков».

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

  • описание предполагаемых значений выходных данных или результатов должно быть необходимой частью тестового набора;

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

  • необходимо проверять не только делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать;

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

Инспекция и сквозной просмотр - это набор процедур и приемов обнаружения ошибок при чтении текста.

Основные типы ошибок, встречающихся при программировании:

  • обращения к переменным, значения которым не присвоены или не инициализированы;

  • выход индексов за границы массивов;

  • несоответствие типов или атрибутов переменных величин;

  • явные или неявные проблемы адресации памяти;

  • ошибочные передачи управления;

  • логические ошибки.

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

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

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

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

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

Есть золотое правило программистов - оформляй свои программы в том виде, в каком бы ты хотел видеть программы, написанные другими. К каждому конечному программному продукту необходимо документированное сопровождение в виде помощи (help), файлового текста (readme.txt).

❶ Как начать разработку программы

Вам понадобится

  • - компьютер;
  • - знание языков программирования;
  • - навыки программирования.

Инструкция

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

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

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

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

Выберите язык программирования, руководствуясь своим опытом, имеющимися навыками и стоящими перед вами задачами. Опытные программисты предпочитают использовать языки C, C++ или C#. Вы можете применить и более простой язык программирования, например, Visual Basic.

Непосредственную работу над конструированием программы начните с создания ее прототипа. Он обычно содержит полноценный графический интерфейс (кнопки, диалоговые окна, меню) и выглядит внешне как обычная программа, но не обладает всей функциональной полнотой. Цель прототипа – продемонстрировать заказчику интерфейс и внести в него коррективы, руководствуясь пожеланиями потенциального пользователя.

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

Видео по теме

Источники:

  • какую разработать программу

Тема 3. Этапы создания программ

Контрольные вопросы

1. Что означает аббревиатура СУБД?

2. Что принято называть базой данных?

3. Для чего предназначено СУБД?

4. Что называется объектом, атрибутом и ключевым элементом в теории БД?

5. Что такое первичный и вторичный ключи в БД?

6. Каким принципам должны подчиняться процедуры хранения данных в БД?

7. Перечислите модели данных в теории БД?

8. Охарактеризуйте иерархическую модель данных в СУБД.

9. Охарактеризуйте сетевую модель данных в СУБД.

10. Охарактеризуйте реляционную модель данных в СУБД.

11. Достоинства и недостатки СУБД, основанные на иерархической и сетевой моделях.

12. Как называют столбец и строку в таблице реляционной СУБД?

13. Охарактеризуйте первую, вторую и третью нормальную формы в СУБД.

14. Какие средства существуют в СУБД для ускорения доступа к данным?

15. Какой язык используется в реляционных СУБД для доступа к информации в ней?

16. Какие группы инструкций могут быть выделены в составе SQL?

17. Для чего предназначен язык описания данных?

18. Для чего предназначен язык манипулирования данными?

19. Что такое транзакция в теории БД?

20. На какие классы можно разделить все СУБД?

21. Охарактеризуйте профессиональные СУБД. Назовите их.

22. Охарактеризуйте персональные СУБД. Назовите их.

23. Что значит задать структуру БД?

24. Назовите объекты БД.

25. Охарактеризуйте таблицы БД.

26. Охарактеризуйте запросы БД. Их назначение.

27. Охарактеризуйте формы БД. Их назначение.

28. Охарактеризуйте отчеты БД. Их назначение.

29. Охарактеризуйте макросы и модули БД. Их назначение.

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

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

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

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

1. Быстрая смена вычислительной техники и алгоритмических языков;

2. Нестыковка ЭВМ друг с другом (VAX и IBM);

3. Отсутствие полного взаимопонимания между заказчиком и исполнителем к разработанному программному продукту.

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

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

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

1) постановка задачи;

2) проектирование программы;

3) построение модели;

4) разработка алгоритма;

5) написание программы;

6) отладка программы;

7) тестирование программы;

8) документирование.

Кратко остановимся на каждом из этих этапов.

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

• как определить решение;

• каких данных не хватает и все ли они нужны;

• какие сделаны допущения и т. п.

Таким образом, кратко можно сказать, что на этапе постановки задачи необходимо:

- описание исходных данных и результата;

- формализация задачи;

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

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

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

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

Методы проектирования архитектуры делятся на две группы:

1) ориентированные на обработку

2) ориентированные на данные.

Методы, ориентированные на обработку, включают следующие общие идеи.

а) Модульное программирование.

Основные концепции:

• каждый модуль реализует единственную независимую функцию;

• имеет единственную точку входа/выхода;

• размер модуля минимизируется;

• каждый модуль разрабатывается независимо от других модулей;

• система в целом построена из модулей.

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

б) Функциональная декомпозиция.

Подобна стратегии «разделяй и управляй». Практически является декомпозицией в форме пошаговой детализации и концепции скрытия информации.

в) Проектирование с использованием потока данных.

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

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

г) Технология структурного анализа проекта.

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

Методы проектирования, основанные на использовании структур данных, описаны ниже.

а) Методология Джексона.

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

б) Методология Уорнера.

Подобна предыдущей, но процедура проектирования более детализирована.

в) Метод иерархических диаграмм.

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

г) Объектно-ориентированная методология проектирования.

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

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

При построении моделей, как правило, используют два принципа: дедуктивный (от общего к частному) и индуктивный (от частного к общему).

При дедуктивном подходе (рис. 3.1) рассматривается частный случай общеизвестной фундаментальной модели. Здесь при заданных предположениях известная модель приспосабливается к условиям моделируемого объекта. Например, можно построить модель свободно падающего тела на основе известного закона Ньютона ma = mg – Fсопр и в качестве допустимого приближения принять модель равноускоренного движения для малого промежутка времени.

Рис. 3.1. Схема построения модели при дедуктивном способе

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

Рис. 3.2. Схема построения модели при индуктивном способе

Технология построения модели при индуктивном способе:

1) эмпирический этап

• умозаключение;

• интуиция;

• предположение;

• гипотеза.

2)постановка задачи для моделирования;

3)оценки; количественное и качественное описание;

4)построение модели.

Разработка алгоритма – самый сложный и трудоемкий процесс, но и самый интересный в творческом отношении. Выбор метода разработки зависит от постановки задачи, ее модели.

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

При дедуктивном подходе рассматривается частный случай общеизвестных алгоритмических моделей. Здесь при заданных предположениях известный алгоритм приспосабливается к условиям решаемой задачи. Например, многие вычислительные задачи линейной алгебры, в частности, нелинейные уравнения, системы алгебраических уравнений и т. п., могут быть решены с использованием известных методов и алгоритмов, для которых существует множество специальных библиотек подпрограмм, модулей. В настоящее время получили распространение специализированные пакеты, позволяющие решать многие задачи (Mathcad, Autocad и т. п.).

Индуктивный способ предполагает эвристический системный подход (декомпозиция – анализ – синтез). В этом случае общих и наиболее удачных методов не существует. Возможны некоторые подходы, позволяющие в каждом конкретном случае находить и строить алгоритмы. Методы разработки алгоритмов можно разбить на методы частных целей, подъема, отрабатывания назад, ветвей и границ и т. п.

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

Структурное программирование основано на использовании блок-схем, формируемых с помощью управляющих структурных элементов.

Выделяют три базовых структурных элемента (управляющие структуры): композицию, альтернативу, итерацию.

Композиция – это линейная конструкция алгоритма, составленная из последовательно следующих друг за другом функциональных вершин:

begin S1; S2; end.

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

if B then S1 else S2

и неполной развилки:

if B then S1.

Итерация – это циклическая конструкция алгоритма, которая, вообще говоря, является составной структурой, состоящей из композиции и альтернативы. Итерации могут быть представлены в двух формах: с предусловием:

while B do S1

и с постусловием:

repeat S1 until B.

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

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

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

Для иллюстрации технологии структурного программирования сверху-вниз рассмотрим пример.

Пример. Технология разработки программы решения квадратного уравнения.

На рис. 3.3 проиллюстрирована пошаговая детализация процесса построения алгоритма. Заметим, что для начального шага разработки программы имеем в качестве входных данных коэффициенты а, b, с квадратного уравнения ах2 + bх + с = 0, а на выходе – значения двух корней х1, х2.

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

На этапе написания программы по разработанному алгоритму на выбранном языке программирования составляется программа.

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

Тестирование – это процесс исполнения программ с целью выявления (обнаружения) ошибок.

Существуют различные способы тестирования программ.

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

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

Разумная и реальная стратегия тестирования – сочетание моделей «черного» и «белого ящиков».

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

• описание предполагаемых значений выходных данных или результатов должно быть необходимой частью тестового набора;

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

• необходимо проверять не только делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать.

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

Инспекция и сквозной просмотр – это набор процедур и приемов обнаружения ошибок при чтении текста.

Основные типы ошибок, встречающихся при программировании:

• обращения к переменным, значения которым не присвоены или не инициализированы;

• выход индексов за границы массивов;

• несоответствие типов или атрибутов переменных величин;

• явные или неявные проблемы адресации памяти;

• ошибочные передачи управления;

• логические ошибки.

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

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

Сам процесс тестирования может быть пошаговым и/или монолитным. В том и в другом случае используют стратегии нисходящего тестирования, – начиная с верхнего, головного модуля и затем подключая последовательно другие модули (аппарат заглушек), и восходящего тестирования, начиная с тестирования отдельных модулей.

В процессе отладки программы используют метод грубой силы – использование выводов промежуточных данных по всей программе (трассировка) или использование автоматических средств. Например, в Турбо-Паскале имеется в наличии мощный аппарат автоматической отладки программ (режим DEBUG).

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

Есть золотое правило программистов – оформляй свои программы в том виде, в каком бы ты хотел видеть программы, написанные другими. К каждому конечному программному продукту необходимо документированное сопровождение в виде помощи (help), файлового текста (readme.txt).

Не нашли то, что искали? Воспользуйтесь поиском:

Page 2

Тема 4. Системы и языки программирования

Контрольные вопросы

1. Перечислите этапы создания программ.

2. Что выполняется на этапе постановки задачи?

3. Что представляет собой декомпозиция?

4. Какие принципы используются на этапе построения модели?

5. На каких принципах основано структурное программирование?

6. Какие базовые структурные элементы выделяют в структурном программировании?

7. Какие две формы итерации (как элемент структурного программирования) вы знаете?

8. Что собой представляет идея структурного программирования сверху-вниз?

9. Что собой представляет идея структурного программирования снизу-вверх?

10. Что такое отладка программы?

11. Какие классы программных ошибок вы знаете и когда они выявляются?

12. Назначение тестирования программы?

13. Какие способы тестирования вы знаете?

14. Чем отличается стратегия «белого ящика» в тестировании от стратегии «черного ящика»?

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

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

· трансляторы с языков высокого уровня;

· средства редактирования, компоновки и загрузки программ;

· макроассемблеры (машинно-ориентированные языки);

· отладчики машинных программ.

Системы программирования, как правило, включают в себя:

· текстовый редактор (Edit), осуществляющий функции записи и редактирования исходного текста программы;

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

· запускатель программ (Run), осуществляющий процесс выполнения программы;

· компилятор (Compile), предназначенный для компиляции или интерпретации исходного текста программы в машинный код с диагностикой синтаксических и семантических (логических) ошибок;

· отладчик (Debug), выполняющий сервисные функции по отладке и тестированию программы;

· диспетчер файлов (File), предоставляющий возможность выполнять операции с файлами: сохранение, поиск, уничтожение и т. п.

Ядро системы программирования составляет язык.

Широкое распространение среди разработчиков программ, а также при обучении программированию, получили системы программирования «Турбо» (Turbo) фирмы Borland, ядром которых являются трансляторы с языков программирования Бейсик, Паскаль, Си, Пролог и др. Интерфейс Турбо-оболочки для любых систем программирования внешне совершенно одинаков и предоставляет пользователю стандартный набор функций и команд.

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

Не нашли то, что искали? Воспользуйтесь поиском:

Page 3

Контрольные вопросы

Классификация языков программирования

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

Существующие языки программирования можно разделить на две группы: процедурные и непроцедурные (см. рис. 4.1).

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

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

Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. Имеется в виду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора.

Рис. 4.1. Общая классификация языков программирования

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

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

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

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

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

Работа всех трансляторов строится по одному из двух принципов: интерпретация или компиляция.

Интерпретация подразумевает пооператорную трансляцию и последующее выполнение оттранслированного оператора исходной программы. В связи с этим можно отметить два недостатка метода интерпретации: во-первых, интерпретирующая программа должна находиться в памяти ЭВМ в течение всего процесса выполнения исходной программы, т. е. занимать определенный объем памяти; во-вторых, процесс трансляции одного и того же оператора повторяется столько раз, сколько раз должна исполняться эта команда в программе, что резко снижает производительность работы программы.

Несмотря на указанные недостатки, трансляторы-интерпретаторы получили достаточное распространение, так как они удобны при разработке и отладке исходных программ.

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

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

Полученная в результате трансляции методом компиляции программа называется объектным модулем, который представляет собой эквивалентную программу в машинных кодах, но не «привязанную» к конкретным адресам оперативной памяти. Поэтому перед исполнением объектный модуль должен быть обработан специальной программой операционной системы (редактором связей – Link) и преобразован в загрузочный модуль.

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

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

технологии программирования.

Принципиально иное направление в программировании связано с методологиями (иногда говорят «парадигмами») непроцедурного программирования. К ним можно отнести объектно-ориентированное и декларативное программирование. Объектно-ориентированный язык создает окружение в виде множества независимых объектов. Каждый объект ведет себя подобно отдельному компьютеру, их можно использовать для решения задач как «черные ящики», не вникая во внутренние механизмы их функционирования. Из языков объектного программирования, популярных среди профессионалов, следует назвать прежде всего Си++, для более широкого круга программистов предпочтительны среды типа Delphi и Visual Basic.

При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом процедуру его получения («алгоритм») программист не строит (по крайней мере, в идеале). В этих языках отсутствует понятие «оператор» («команда»). Декларативные языки можно подразделить на два семейства – логические (типичный представитель – Пролог) и функциональные (Лисп).

Охарактеризуем наиболее известные языки программирования.

1.Фортран (FORmula TRANslating system – система трансляции формул); старейший и по сей день активно используемый в решении задач математической ориентации язык. Является классическим языком для программирования на ЭВМ математических и инженерных задач

2.Бейсик (Beginner's All-purpose Symbolic Instruction Code – универсальный символический код инструкций для начинающих); несмотря на многие недостатки и изобилие плохо совместимых версий – самый популярный по числу пользователей. Широко употребляется при написании простых программ.

3.Алгол (ALGOrithmic Language – алгоритмический язык); сыграл большую роль в теории, но для практического программирования сейчас почти не используется.

4.ПЛ/1 (PL/1 Programming Language – язык программирования первый); многоцелевой язык; сейчас почти не используется.

5.Паскаль (Pascal – назван в честь ученого Блеза Паскаля); чрезвычайно популярен как при изучении программирования, так и среди профессионалов. Создан в начале 70-х годов швейцарским ученым Никлаусом Виртом. Язык Паскаль первоначально разрабатывался как учебный, и, действительно, сейчас он является одним из основных языков обучения программированию в школах и вузах. Однако качества его в совокупности оказались столь высоки, что им охотно пользуются и профессиональные программисты. Не менее впечатляющей, в том числе и финансовой, удачи добился Филип Кан, француз, разработавший систему Турбо-Паскаль. Суть его идеи состояла в объединении последовательных этапов обработки программы – компиляции, редактирования связей, отладки и диагностики ошибок – в едином интерфейсе. Версии Турбо-Паскаля заполонили практически все образовательные учреждения, программистские центры и частные фирмы. На базе языка Паскаль созданы несколько более мощных языков (Модула, Ада, Дельфи).

6.Кобол (COmmon Business Oriented Language – язык, ориентированный на общий бизнес); в значительной мере вышел из употребления. Был задуман как основной язык для массовой обработки данных в сферах управления и бизнеса.

7.АДА;является языком, победившим (май 1979 г.) в конкурсе по разработке универсального языка, проводимым Пентагоном с 1975 году. Разработчики – группа ученых во главе с Жаном Ихбиа. Победивший язык окрестили АДА, в честь Огасты Ады Лавлейс. Язык АДА – прямой наследник языка Паскаль. Этот язык предназначен для создания и длительного (многолетнего) сопровождения больших программных систем, допускает возможность параллельной обработки, управления процессами в реальном времени и многое другое, чего трудно или невозможно достичь средствами более простых языков.

8.Си (С – «си»); широко используется при создании системного программного обеспечения. Наложил большой отпечаток на современное программирование (первая версия – 1972 г.), является очень популярным в среде разработчиков систем программного обеспечения (включая операционные системы). Си сочетает в себе черты как языка высокого уровня, так и машинно-ориентированного языка, допуская программиста ко всем машинным ресурсам, чего не обеспечивают такие языки, как Бейсик и Паскаль.

9.Си++ (С++);объектно-ориентированное расширение языка Си, созданное Бьярном Страуструпом в 1980 году. Множество новых мощных возможностей, позволивших резко повысить производительность программистов, наложилось на унаследованную от языка Си определенную низкоуровневость.

10.Дельфи (Delphi); язык объектно-ориентированного «визуального» программирования; в данный момент чрезвычайно популярен. Созданный на базе языка Паскаль специалистами фирмы Borland язык Delphi, обладая мощностью и гибкостью языков Си и Си++, превосходит их по удобству и простоте интерфейса при разработке приложений, обеспечивающих взаимодействие с базами данных и поддержку различного рода работ в рамках корпоративных сетей и сети Интернет.

11.Ява (Java); платформенно-независимый язык объектно-ориентированного программирования, чрезвычайно эффективен для создания интерактивных веб-страниц. Этот язык был создан компанией Sun в начале 90-х годов на основе СИ++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей.

12.Лисп (Lisp) – функциональный язык программирования. Ориентирован на структуру данных в форме списка и позволяет организовать эффективную обработку больших объемов текстовой информации.

13.Пролог (PROgramming in LOGic – логическое программирование). Главное назначение языка – разработка интеллектуальных программ и систем. Пролог – это язык программирования, созданный специально для работы с базами знаний, основанными на фактах и правилах (одного из элементов систем искусственного интеллекта). В языке реализован механизм возврата для выполнения обратной цепочки рассуждений, при котором предполагается, что некоторые выводы или заключения истинны, а затем эти предположения проверяются в базе знаний, содержащей факты и правила логического вывода. Если предположение не подтверждается, выполняется возврат и выдвигается новое предположение. В основу языка положена математическая модель теории исчисления предикатов.

Языки программирования для Интернета:

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

2. PERL.Он задумывался как средство эффективной обработки больших текстовых файлов, генерации текстовых отчетов и управления задачами. По мощности Perl значительно превосходит языки типа Си. В него введено много часто используемых функций работы со строками, массивами, управление процессорами, работа с системной информацией.

3. Tcl/Tk.Этот язык ориентирован на автоматизацию рутинных процессов и состоит из мощных команд. Он независим от системы и при этом позволяет создавать программы с графическим интерфейсом.

4. VRML.Создан для организации виртуальных трехмерных интерфейсов в Интернете. Он позволяет описывать в текстовом виде различные трехмерные сцены, освещение и тени, текстуры.

Выбор языка программирования зависит от многих факторов: назначения, удобства написания исходных программ, эффективности получаемых объектных программ и т. п. Разнотипность решаемых компьютером задач и определяет многообразие языков программирования.

1. Что такое системы программирования и к какому классу программ они относятся?

2. Что входит в состав систем программирования?

3. На каком языке программирования создавались первые программы?

4. На какие языки подразделяются процедурные языки?

5. Охарактеризуйте языки низкого уровня.

6. Какой язык относится к языку низкого уровня?

7. Достоинства языков низкого уровня.

8. Охарактеризуйте языки высокого уровня.

9. Достоинства языков высокого уровня.

10. Приведите примеры языков высокого уровня.

11. Для чего предназначены трансляторы?

12. Чем отличается компилятор от интерпретатора?

13. Недостатки интерпретации (как вид транслятора).

14. Что представляет собой процесс компиляции программы?

15. Какие действия выполняются при компиляции?

16. Чем отличается загрузочный модуль от объектного?

17. Чем отличается процедурное программирование от непроцедурного?

18. Какие виды программирования относятся к непроцедурному программированию?

19. Особенность декларативных языков.

20. Охарактеризуйте кратко языки программирования: Фортран, Бейсик, Паскаль, Кобол.

21. Охарактеризуйте кратко языки программирования: Ада, Си, Си++, Delphi, Java.

22. Приведите примеры объектно-ориентированных языков.

23. К какому классу языков относится язык Лисп?

24. К какому классу языков относится язык Пролог?

Подходы к созданию алгоритмов претерпели изменения в ходе эволюции компьютеров.

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

Не нашли то, что искали? Воспользуйтесь поиском:

Page 4

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

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

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

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

Следование – самая важная из структур. Она означает, что действия могут быть выполнены друг за другом (рис. 5.1).

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

Ветвление– это структура, обеспечивающая выбор между двумя альтернативами. Выполняется проверка, а затем выбирается один из путей (рис. 5.2).

Эта структура называется также «ЕСЛИ – ТО – ИНАЧЕ», или «развилка». Каждый из путей (ТО или ИНАЧЕ) ведет к общей точке слияния, так что выполнение программы продолжается независимо от того, какой путь был выбран.

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

Цикл (или повторение) предусматривает повторное выполнение некоторого набора команд программы. Если бы циклы не существовали, вряд ли занятие программированием было бы оправданным: циклы позволяют записать длинные последовательности операций обработки данных с помощью небольшого числа повторяющихся команд. Разновидности цикла изображены на рис. 5.4 и 5.5.

Цикл «Пока» начинается с проверки логического выражения. Если оно истинно, то выполняется «Выполнить а», затем все повторяется снова, пока логическое выражение сохраняет значение «истина». Как только оно становится ложным, управление передается по программе дальше (см. рис. 5.4).

В цикле «До» проверка условия выполняется после операторов цикла («Выполнить а»). Цикл повторяется, если условие ложно. Как только оно становится истинным, управление передается по программе дальше (см. рис. 5.5).

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

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

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

Не нашли то, что искали? Воспользуйтесь поиском:

Page 5

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

Рис 5.6. Пример схемы иерархии

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

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

Не нашли то, что искали? Воспользуйтесь поиском:

Page 6

Модуль – основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходом. Функциональная декомпозиция задачи – разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач – модулей.

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

Использование модулей имеет следующие преимущества:

1) возможность создания программы несколькими программистами;

2) простота проектирования и последующих модификаций программы;

3) упрощение отладки программы – поиска и устранения в ней ошибок;

4) возможность использования готовых библиотек наиболее употребительных модулей.

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

Объектно-ориентированное программирование (ООП)

Само структурное программирование, наиболее отчетливо выраженное в языке Паскаль (PASCAL), возникло в ходе развития процедурно-ориентированного подхода, заложенного в исторически первом из языков программирования Фортране (FORTRAN). Во всех языках этого направления разработчик алгоритма (он же, как правило, и программист) описывает, какими действиями следует реализовать процесс. В основе языков этой группы лежат понятия команд (операторов) и данных. Отдельные группы операторов могут объединяться во вспомогательные алгоритмы (процедуры, подпрограммы).

Основное понятие объектного программирования – объект.

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

• Инкапсуляция – объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы – объектными методами.

• Наследование – свойство объектов порождать своих «потомков». Объект - «потомок» автоматически наследует от «родителей» все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы «родителя» или дополнять их.

• Полиморфизм – свойство родственных объектов (т.е. объектов, имеющих одного общего «родителя») решать схожие по смыслу проблемы разными способами.

Не нашли то, что искали? Воспользуйтесь поиском:

Page 7

Параллельное программирование

Декларативное программирование

Декларативный подход в разработке компьютерных программ появился в начале 70-х годов. Он не получил столь широкого применения как процедурный, поскольку был направлен на относительно узкий круг задач искусственного интеллекта. При его применении программист описывает свойства исходных данных, их взаимосвязи, свойства, которыми должен обладать результат, а не алгоритм получения результата. Разумеется, для получения результата этот алгоритм все равно нужен, но он должен порождаться автоматически той системой, которая поддерживает декларативно-ориентированный язык программирования. При логическом варианте такого подхода (прежде всего это относится к языку Пролог, PROLOG) задача описывается совокупностью фактов и правил в некотором формальном логическом языке, при функциональном варианте – в виде функциональных соотношений между фактами (язык Лисп, LISP).

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

За последнее десятилетие в области средств автоматизации программирования сформировалось новое направление под общим названием CASE-технология (Computer Aided Software Engineering-CASE) – средство для создания информационных систем.

Основная цель CASE-систем состоит в автоматизировании всего процесса создания программного обеспечения. CASE-система позволяет исследовать прототип создаваемой программной системы на основе ее модели.

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

Сегодня лидирующей в мире CASE-системой считается Rational Rose корпорации Rational Software. Система Rational Rose нацелена на создание модулей с использованием языка Unified Modeling Language (UML).

Последняя версия CASE-системы компании Rational Software Rational Rose 98 успешно применяется для создания коммерческого ПО и поддерживает популярные языки программирования Java, Си++, Смолток, Ада, Visual Basic, Power Builder и Forte. Кроме того, пакет Rose 98 способен генерировать описания на языках Interface Definition Language (IDL) для приложений CORBA (технологии распределенных вычислений) и Data Definition Language (DDL) для приложений доступа к базам данных, в том числе и Oracle 8. Разумеется, поддержка того или иного языка программирования зависит от того, о какой редакции пакета Rational Rose 98 идет речь. К примеру, нельзя требовать многого от самого простого варианта пакета – Rose 98 Modeler Edition. Зато Rose 98 Enterprise Edition оснащен от души.

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

Не нашли то, что искали? Воспользуйтесь поиском:

Page 8

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

А что если программиста удалить из технологической цепи решения задачи? Это можно сделать лишь тогда, когда в самой ЭВМ появиться «автоматический программист», который будет взаимодействовать с пользователем и помогать ему составлять программы. Так возникает идея ЭВМ нового – пятого поколения. В отличие от ЭВМ предшествующих поколений новые машины должны иметь средства для интеллектуального взаимодействия с пользователем на его профессиональном естественном языке. Другими словами, не пользователь приближается к ЭВМ, а сама ЭВМ становится интеллектуальным собеседником и помощником пользователя.

Бум, возникший в конце 70-х годов в искусственном интеллекте и приведший к созданию новой отрасли промышленности, не случаен. Его вызвали три причины:

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

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

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

ЭВМ пятого поколения, интеллектуальные роботы, экспертные системы и многие другие интеллектуальные системы обладают одним общим свойством: их работа основывается на знаниях, хранимых в базе знаний системы. Их часто так и называют – системами, основанными на знаниях.

Не нашли то, что искали? Воспользуйтесь поиском:

Page 9

Данные и знания

При изучении интеллектуальных систем традиционно возникает вопрос – что же такое знания и чем они отличаются от данных.

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

При обработке на ЭВМ данные трансформируются, проходя этапы:

1. Данные как результат измерений и наблюдений;

2. Данные на материальных носителях информации;

3. Модели данных в виде диаграмм, графиков;

4. Данные в компьютере на языке описания данных;

5. Базы данных на машинных носителях информации.

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

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

Знания трансформируются аналогично данным:

1. Знания в памяти человека как результат мышления;

2. Материальные носители знаний (учебники, методические пособия);

3. Поле знаний – условное описание основных объектов предметной области, их атрибутов и закономерностей, их связывающих;

4. Знания, описанные на языке представления знаний (продукционные модели, семантические сети, фреймы);

5. База знаний на машинных носителях информации.

Знания – это хорошо структурированные данные, или данные о данных, или метаданные.

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

Существуют десятки моделей (или языков) представления знаний для различных предметных областей. Большинство из них может быть сведено к следующим классам:

• продукционные модели;

• семантические сети;

• фреймы;

• формальные логические модели.

Продукционная модель

Продукционная модель или модель, основанная на правилах, позволяет представить знания в виде предложений типа «Если (условие), то (действие)».

Под «условием» понимается некоторое предложение – образец, по которому осуществляется поиск в базе знаний, а под «действием» – действия, выполняемые при успешном исходе поиска.

Чаще всего вывод на такой базе знаний бывает прямой (от данных к поиску цели) или обратный (от цели для ее подтверждения – к данным).

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

Имеется большое число программных средств, реализующих продукционный подход (язык OPS 5; «оболочки» или «пустые» ЭС – EXSYS Professional, Kappa, ЭКСПЕРТ и др; инструментальные системы ПИЭС и СПЭИС и др.), а также промышленных ЭС на его основе.

Семантические сети

Термин семантическая означает «смысловая».

Семантическая сеть – это ориентированный граф, вершины которого – понятия, а дуги – отношения между ними.

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

• класс – элемент класса (цветок – роза);

• свойство – значение (цвет – красный);

• пример элемента класса (роза – голландская).

Пример семантической сети (см. рис. 5.7). В качестве вершин выступают понятия «человек», «Иванов», «Волга», «автомобиль», «вид транспорта» и «двигатель».

Рис. 5.7. Семантическая сеть

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

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

Для реализации семантических сетей существуют специальные сетевые языки, например NET, язык реализации систем SIMER+MIR и др. Известны ЭС, использующие семантические сети в качестве языка представления знаний – PROSPECTOR, CASNET, TORUS.

Фреймы

Термин фрейм (от англ. Frame, что означает «каркас» или «рамка») был предложен Марвином Минским, одним из пионеров искусственного интеллекта в 70-е годы.

Фрейм – это абстрактный образ для представления некоего стереотипа восприятия.

Например, произнесение слова «комната» порождает образ комнаты: «жилое помещение с четырьмя стенами, полом, потолком, окнами и дверью, площадью 6 – 20 м2». Из этого описания ничего нельзя убрать (например, убрав окна, мы получим уже чулан, а не комнату), но в нем есть «дырки» или «слоты» - это незаполненные значения некоторых атрибутов, например, количество окон, цвет стен, высота потолка, покрытие пола и др.

В теории фреймов такой образ комнаты называется фреймом комнаты. Фреймом также называется и формализованная модель для отображения объекта.

Пример фреймов (рис. 5.8).

Рис. 5.8. Сеть фреймов

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

Важнейшим свойством теории фреймов является заимствование из теории семантических сетей – так называемое наследование свойств. Наследование происходит по АКО-связям (A-Kind-of = это). Слот АКО указывает на фрейм более высокого уровня иерархии, откуда неявно наследуются значения слотов.

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

Специальные языки представления знаний в сетях фреймов FRL (Frame Representation Language), KRL, фреймовая «оболочка» Кара [Стрельников, Борисов] и др., фрейм-ориентированные ЭС – ANALYST, TRISTAN, МОДИС.

Формальные логические модели

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

Исчисление предикатов 1-го порядка в промышленных ЭС практически не используется. Эта логическая модель применима в основном в исследовательских системах, так как предъявляет очень высокие требования и ограничения к предметной области.

В промышленных ЭС используются различные ее модификации и расширения.

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

Не нашли то, что искали? Воспользуйтесь поиском:

Page 10

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

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

Структура ЭС приведена на рис. 5.9.

Рис. 5.9. Структура экспертной системы

ЭС состоит из следующих компонент.

· База знаний предназначена для хранения экспертных знаний о предметной области, используемых при решении задач экспертной системой. База знаний состоит из набора фреймов и правил-продукций.

o Фреймы используются в базе знаний для описания объектов, событий, ситуаций, прочих понятий и взаимосвязей между ними. Фрейм – это структура данных, состоящая из слотов (полей).

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

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

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

Машина логического вывода может реализовывать рассуждения в виде:

o дедуктивного вывода (прямого, обратного, смешанного);

o нечеткого вывода;

o вероятностного вывода;

o унификации (подобно тому, как это реализовано в Прологе);

o поиска решения с разбиением на последовательность подзадач;

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

o монотонного или немонотонного рассуждения;

o рассуждений с использованием механизма аргументации;

o ассоциативного поиска с использованием нейронных сетей;

o вывода с использованием механизма лингвистической переменной.

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

· Подсистема объяснений необходима для того, чтобы дать возможность пользователю контролировать ход рассуждений и, может быть, учиться у экспертной системы. Если нет этой подсистемы, экспертная система выглядит для пользователя как «вещь в себе», решениям которой можно либо верить, либо нет. Нормальный пользователь выбирает последнее, и такая ЭС не имеет перспектив для использования.

· Подсистема приобретения знаний служит для корректировки и пополнения базы знаний. В простейшем случае это – интеллектуальный редактор базы знаний, в более сложных экспертных системах – средства для извлечения знаний из баз данных, неструктурированного текста, графической информации и т. д.

Не нашли то, что искали? Воспользуйтесь поиском:

Page 11

End.

Begin

Структура программы

Программирования высокого уровня

Тема 6. Паскаль – структурный язык

Контрольные вопросы

1. Приведите структуры следования и ветвления (полное и неполное).

2. Приведите структуры циклов Пока и До.

3. Отличие циклов До и Пока.

4. На чем основано нисходящее проектирование?

5. Что вы можете сказать о концепции модульного проектирования?

6. Что такое объект в объектно-ориентированном программировании?

7. Три принципа объектно-ориентированного программирования.

8. Особенность декларативного программирования.

9. Перечислите методологии программирования.

10. Что такое CASE-системы?

11. В каких областях применяются экспертные системы?

12. Что входит в состав экспертной системы?

13. Отличие знаний от данных.

14. Приведите модели представления знаний.

15. Что такое продукционная модель представления знаний?

16. Что такое семантические сети в представлении знаний?

17. Что такое фреймы в представлении знаний?

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

Паскаль-программа является текстовым файлом с собственным именем и с расширением .pas.

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

Program ;

Здесь слова Program, Begin и End являются служебными.

Программа заканчивается служебным словом end, после которого ставится точка. Описания величин (в разделе Const, Var) и операторы друг от друга отделяются символом «;» (точкой с запятой).

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

Имена программы и используемых величин (констант, переменных) выбираются программистом самостоятельно в соответствии с правилами построения идентификаторов:

· идентификатор должен быть уникальным, то есть одним и тем же именем разные объекты не могут быть названы;

· идентификатор имеет ограничение по длине (зависит от конкретной реализации языка на компьютере);

· идентификатор может состоять только из символов латинского алфавита, цифр и знака подчеркивания («_»);

· идентификатор не может начинаться с цифры.

Все объекты, не являющиеся зарезервированными в Паскале, перед первым использованием в программе должны быть описаны. Это производится для того, чтобы компьютер перед выполнением программы зарезервировал память под соответствующие объекты и поставил в соответствие этим участкам памяти идентификаторы. Раздел описаний может состоять из шести подразделов:

1. Описание внешних модулей, процедур и функций (Uses);

2. Описание меток (Label);

3. Описание констант (Const);

4. Описание типов, задаваемых пользователем (Type);

5. Описание переменных (Var);

6. Описание функций и процедур (Procedure, Function).

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

Следует обратить внимание на то, что при записи числовых констант с дробной частью эта часть отделяется от целой точкой, а не запятой (например, 3.15). Для записи очень больших по модулю или очень малых (близких к нулю) чисел существует возможность записи их в так называемой экспоненциальной форме (форме с плавающей точкой). Например: 2.4567Е-06. Здесь буква «Е» отделяет мантиссу (совокупность значащих цифр числа с десятичной точкой после первой цифры) от порядка (показателя степени десятки в стандартном виде числа).

Константы, представляющие собой строковые величины, заключаются в апострофы (например, 'привет').

Описание именованных констант начинается служебным словом Const. Далее следуют записи вида: = ;

Пример:

Не нашли то, что искали? Воспользуйтесь поиском:

Page 12

Основные типы данных

Var

Const

P=5.64;

Name1='Татьяна';

Name2='Виктор';

R21=6.33187E+03;

Тип константы определяется ее значением в разделе Const.

Переменная в Паскале – именованный участок памяти для хранения данных определенного типа. Значение переменной (информация в соответствующих ячейках памяти) в ходе выполнения программы может быть изменено.

Раздел описания переменных начинается служебным словом Var, после которого следуют записи следующего вида:

: ;

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

Пример:

A,B,H_22,Angle : Real;

Name3 : String;

Flag : Boolean;

I,J,K,Count : Word;

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

В Паскале существует пять базовых типов данных:

1) Integer (целый);

2) Real (вещественный);

3) Char (символьный);

4) String (строковый);

5) Boolean (логический).

Целочисленные типы данных занимают в памяти компьютера от 1 до 4 байт (табл 6.1).

Таблица 6.1.Целочисленные типы данных

Тип Диапазон значений Требуемая память (байт)
Byte 0…255
ShortInt – 128…127
Integer – 32768…32767
Word 0…65535
LongInt – 2147483648…2147483647

Пример.

Var

x1,x2: byte;

y1: word;

z: integer;

Над данными целого типа определены следующие арифметические операции: +, -, *, /, div, mod. Результат выполнения этих операций над целыми операндами получается также целого типа (исключение составляет операция / – результат всегда вещественное число).

Над данными целого типа определены следующие операции отношения: =, , , =. Результат выполнения этих операций – логический тип.

Для целых чисел определены следующие стандартные функции:

Abs(x) – Возвращает модуль x
Sqr(x) – Возвращает квадрат числа x
Sqrt(x) – Возвращает квадратный корень из x
Sin(x) – Возвращает sin(x), результат вещественного типа
Cos(x) – Возвращает cos(x), результат вещественного типа
Arctan(x) – Возвращает arctg(x), результат вещественного типа
Ln(x) – Возвращает ln(x), результат вещественного типа
Exp(x) – Возвращает результат вещественного типа
Succ(x) – Возвращает следующее целое число (x + 1)
Pred(x) – Возвращает предыдущее целое число (x – 1)
Ord(x) – Возвращает аргумент x
Odd(x) – Возвращает результат логического типа: false – для четного x, true – для нечетного x

Для целых чисел определены следующие стандартные процедуры:

Dec(x,i) – уменьшает x на i, если i не задано – то на 1;

Inc(x,i) – увеличивает x на i, если i не задано – то на 1.

Не нашли то, что искали? Воспользуйтесь поиском:

Page 13

Вещественные типы данных занимают в памяти компьютера от 4 до 10 байт (табл. 6.2).

Таблица 6.2. Вещественные типы данных

Тип Диапазон значений Мантисса Требуемая память (байт)
Real 11–12
Single 7–8
Double 15–16
Extended 19–20
comp 19–20

Пример.

Var

W: real;

Summa: Extended;

Вещественные значения могут изображаться в форме с фиксированной точкой, например, 7.54, 0.015, а также в форме с плавающей точкой, то есть парой чисел вида E: 7.54Е+00, 1.5Е-02.

Над данными вещественного типа определены следующие арифметические операции: +, -, *, /. Результат выполнения этих операций получается также вещественного типа.

Над данными вещественного типа определены следующие операции отношения: =, , , =. Результат выполнения этих операций – логический тип.

Для вещественных чисел определены следующие стандартные функции:

Abs(x) – Возвращает модуль x, результат вещественного типа
Sqr(x) – Возвращает квадрат числа x, результат вещественного типа
Sqrt(x) – Возвращает квадратный корень из x, результат вещественного типа
Sin(x) – Возвращает sin(x), результат вещественного типа
Cos(x) – Возвращает cos(x), результат вещественного типа
Arctan(x) – Возвращает arctg(x), результат вещественного типа
Ln(x) – Возвращает ln(x), результат вещественного типа
Exp(x) – Возвращает , результат вещественного типа
Trunk(x) – Преобразует вещественный аргумент x в целое число путем отбрасывания дробной части
Round(x) – Преобразует вещественный аргумент x в целое число путем округления до ближайшего целого

Не нашли то, что искали? Воспользуйтесь поиском:

Page 14

Символьный тип

Символьный тип определяет множество символов кодовой таблицы ASCII. Каждому символу поставлено в соответствии число в диапазоне от 0 до 255.

Занимает в памяти 1 байт.

Пример

Var

s: char;

В программе значения переменных и констант типа char должны быть заключены в апострофы, например, ¢А¢, ¢а¢.

Определены следующие операции отношения: =, , , =. Результат – логический тип.

Определены следующие стандартные функции:

Ord(s) – преобразует символ s в его код типа byte.

Pred(s) – возвращает предыдущий символ.

Succ(s) - возвращает следующий символ.

Примеры:

Ord( ¢:¢ ) = 58

Ord( ¢А¢ ) = 65

Pred( ¢Б¢ ) = А

Succ( ¢Г¢ ) = Д

Строка – последовательность символов (до 255).

Пример

Var

Str: string; {будет зарезервировано 256 байт}

Name: string[25]; {будет зарезервировано 26 байт}

В программе значения переменных и констант типа String должны быть заключены в апострофы, например ¢Информатика¢.

К любому символу в строке можно обратиться как к элементу одномерного массива, например Str[5].

Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки.

[0] [1] [2] [3] … [255]

Str:=’КУКЛА’

Среди стандартных функций назовем две:

Ord(Str[0]) – определяет текущую длину строки

Length(Str) – определяет текущую длину строки

К строкам применима операция «+» – сцепление, например:

Str:=’a’+’bc’;

Определены следующие операции отношения: =, , , =. Эти операции выполняются над двумя строками посимвольно слева направо (сравнение внутренней кодировки символов), например

‘A’ > ‘:’ {65 > 58} - результат True

‘Turbo’ < ‘Turbo Pascal’ - результат True

Не нашли то, что искали? Воспользуйтесь поиском:

Page 15

Выражения, операнды, операции

Логический тип

Этот тип данных представлен двумя значениями: True и False.

Занимает в памяти 1 байт.

Пример

Var

Flag: Boolean;

Для значений True и False истинны следующие соотношения:

False < True

Ord(False) = 0

Ord(True) = 1

Succ(False) = True

Pred(True) = False

Конструкция языка, задающая порядок выполнения действий над данными, называется выражением.

Выражение состоит из операндов (константы, переменные и функции, над которыми выполняются операции), круглых скобок и знаков операций. Операции определяют действия, которые надо выполнить над операндами. Например, в выражении (x+y)*2 x, y и 2 – операнды, а «+», «*» – знаки операций.

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

Тип результата выражения определяется типом операндов и операциями, выполняемыми над ними.

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

Порядок вычисления определяется скобками и старшинством операций:

1) *, /, div, mod

2) +, -

Арифметические операции:

Операция Замечания  
-a Обращение знака
a+b Сложение операндов
a-b Вычитание операндов
a*b Умножение операндов
a/b Деление операндов. b0. Результат всегда вещественное число.
a div b Целочисленное деление. b0. a и b должны быть целыми числами. Пример: 7 div 2 = 3
a mod b Остаток от целочисленного деления. b0. a и b должны быть целыми числами. Пример: 7 mod 2 = 1

Тип константы определяется ее значением, например, -152 – целая константа, 3.2Е-2 – вещественная константа.

Тип переменной задается в разделе Var.

Как правило, если оба операнда имеют целый тип, то и результат выражения имеет целый тип; если хотя бы один из операндов имеет вещественный тип, то и результат выражения имеет вещественный тип. Исключение составляет операция деления ( / ) – результат всегда вещественного типа независимо от типов операндов.

Пример. Записать арифметическое выражение и определить его тип.

Выражение будет записано: z:=(x+y)/(1-(x-y)/2)

Тип результата – вещественный, так как есть операция деления.

Не нашли то, что искали? Воспользуйтесь поиском:

Page 16

Основные операторы языка

Совместимость и преобразование типов

Логические выражения, выражения отношения

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

Логическим называется выражение, составленное из операндов логического типа, скобок и логических операций (Not – отрицание, And – логическое «И», Or – логическое «Или»). В качестве операндов могут быть переменные логического типа или выражения отношения, например, (x>0)And(x

Как разработать идеальную программу обучения сотрудников | Rusbase

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

Как разработать идеальную программу обучения сотрудников Алексей Зеньков

По данным Pew Research Center, в состав рабочей силы США помимо поколения X и бэби-бумеров сейчас входит более 50 млн миллениалов. Работодателям нужно смотреть в будущее, и пока традиционные компании начинают разве что нервно моргать при упоминании слова «миллениал», современные организации ищут способы привлечь их к работе. Лучший на сегодня способ это сделать – онлайн-обучение.

Программы обучения, разработанные для ваших сотрудников, усиливают их вовлеченность в работу, что приводит к повышению продуктивности в среднем на 38% и предотвращает утечку кадров. Как утверждает колумнист Forbes и директор по персоналу компании GL Group Лиза Уилон (Lisa Whealon), содействие в развитии карьеры ваших сотрудников показывает, что «вам небезразлично их будущее, а также позволяет повысить мораль и доверие людей, которые на вас работают».

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

1. Задайте для себя цели обучения и KPI (создание структуры)

Фото: Ennio Dybeli/Unsplash

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

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

  • Какие навыки должны получить сотрудники к завершению программы?
  • Какие KPI или бизнес-метрики должны быть улучшены в результате?
  • Будет ли курс доступен в любое удобное для сотрудников время и с любого устройства?
  • Будет ли информация актуальна в повседневной работе и полезна в самых разных ситуациях?
  • Нацелена ли программа не только на оценку результатов прохождения, но и на получение обратной связи, чтобы улучшить курс?

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

2. Создавайте контент (начать лучше с адаптации новых сотрудников)

Фото: Maarten van den Heuvel/Unsplash

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

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

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

3. Следите за вовлечением и собирайте обратную связь (продолжайте совершенствовать курс)

Фото: Rawpixel/Shutterstock

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

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

  • Сколько сотрудников смогли пройти каждый курс?
  • Сколько участников успешно окончили каждый курс?
  • Положительно ли в целом они оценили этот опыт?
  • О чем сотрудники хотели бы узнать подробнее?
  • Повлиял ли курс на рабочие процессы?
  • Как быстро сотрудники записываются на дальнейшее обучение?
  • Как в ходе адаптации программы менялись KPI и бизнес-метрики, заданные на первом шаге?

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

От правильно выстроенной программы обучения выигрывают все

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

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

Источник

Материалы по теме:

Мы ввели «план развития карьеры», и сотрудникам стало проще влиять на свое положение в компании

Названы лучшие компании для удаленной работы в 2018 году

Как управлять людьми, чтобы они были счастливы (и делали все, что тебе от них нужно)

Экономика офиса, или почему мы все еще ездим на работу

Фото на обложке: shio cracho/Shutterstock


Смотрите также