Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обучение VC++ / ЛекцииКарасева / ОбзорнЛекцииМетС++05.doc
Скачиваний:
42
Добавлен:
16.02.2016
Размер:
167.94 Кб
Скачать

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

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

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

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

В практике создания ПС наибольшее распространение получили распространение две модели ЖЦ ПС: каскадная и спиральная.

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

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

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

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

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

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

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

сред программирования, поддерживающих технологии процедурного, объектно-ориентированного и параметрического программирования, сред программирования контроллеров и интегрированных микропроцессоров;

 CASE-средств для поддержки многочисленных технологий проектирования экономических информационных систем;

 SCADA-средств для поддержки многочисленных технологий проектирования автоматизированных систем управления технологическими процессами и производствами на базе контроллерных и микропроцессорных платформ.

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

На этапах формирования требований, анализа и проектирования программных систем, работающих в режиме виртуального времени используются, информационные технологии создания и сопровождения программных систем - CASE-технологии(Computer Aided Software Engineering), например, Rational Rose фирмы Rational Software, Visual Modeler корпорации Microsoft, Silverrun американской фирмы Silverrun Technologies Inc., Oracle Designer фирмы Oracle и ряд других.

На этапах прототипирования, кодирования и тестированияразрабытываемых программных систем наиболее широко используются системы визуального программирования:Visual Basic, Visual C++ корпорации Microsoft, а также Delphi корпорации Inprise Corporation, система программирования контроллеров ISaGRAF и ряд других.

При разработке программных систем, предназначенных для работы в реальном времени(преимущественно системы автоматизированного управления стационарными технологическими процессами(АСУ ТП) и производствами, системы управления подвижными объектами транспортных систем и др.) широкое развитие получили инструментальные SCADA- системы(Software for Control And Data Acquisition): GENESIS фирмы Iconics, GENIE фирмы Advantech, InTouch фирмы Wonderware, TraceMode Laboratori компании AdAstra и др.

Концептуальные положения объектно-ориентированного программирования

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

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

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

предметная область расчленяется на совокупность объектов;

каждый объект является экземпляром некоторого класса;

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

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

каких-либо действий;

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

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

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

расположенному ниже в иерархической структуре наследования.

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

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

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

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

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

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

Бъярн Страуструп о языке С++

«Я придумал С++, записал его первоначальное определение и выполнил первую реализацию. Я выбрал и сформулировал критерии проектирования С++, разработал его основные возможности и отвечал за судьбу предложений по расширению языка в комитете по стандартизации С++ ». Эти слова принадлежат сотруднику фирмы AT&T Bell Laboratories Бъярну Страуструпу(Bjarne Stroustrup) и представлены на страницах его специального издания « The C++ Programming Language»(Язык программирования С++), которое трижды издавалось на русский язык. Начало этой работы восходит к началу 80-х годов прошлого века, когда стали появляться ранние версии языка под названием «С с классами». Но уже в 1989году Бъярн Страуструп совместно с Маргарет Эллис опубликовал «Справочное руководство по языку С++», послужившее основой для разработки проекта стандарта ANSI/ISOP C++. Стандарт ISO/IES 14882 “Standart for the C++ Programming Language” был единогласно принят в августе 1998 г.[3].

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

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

Концепция классов и виртуальных функций была перенесена в С++ из оригинального объектно-ориентированного языка Simula67(1970-72гг.). Изначально С++ был ориентирован на создание событийно управляемых моделирующих программ, для которых Simula67 была бы идеальным средством, если бы не низкая эффективность программного кода, не отвечающая требованиям проекта С++. Средства перегрузки операторов и возможность помещения объявлений в любом месте, где может быть записана инструкция, заимствованы из Algol68(1974г.). Идея шаблонов была частично заимствована из механизма наследования в языке Ada(1979г.) и из параметризованных модулей в Clu(1979г.) и ML(1987г.).

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

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

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

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

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

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

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

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

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

В настоящее время язык С++ используют сотни тысяч программистов во многих предметных областях. Ранние приложения С++ носили явно выраженную системную ориентацию. Действительно, несколько ведущих операционных систем в 80-х и 90-х годах прошлого века были написаны на С++. Эффективность низкоуровневых средств С++ позволила использовать его для написания драйверов и других программ, предназначенных для непосредственного управления аппаратурой в реальном времени.

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

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

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

Характеризуя свое детище по результатам его использования в разных сферах целесообразной деятельности Бъярн Страуструп пишет [3]: « С++ не является ни самым маленьким, ни самым понятным языком . Тем не менее, он:

достаточно ясен для обучения основным концепциям;

достаточно реалистичен, эффективен и гибок для критических проектов;

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

достаточно содержателен, чтобы служить инструментом обучения более сложным концепциям и методам;

достаточно «рыночен», чтобы приобретенные знания оказались полезными вне академической среды.

С++ - язык, вместе с которым Вы можете расти ».

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

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

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

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

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

Для написания хороших программ требуется ум, вкус и терпение.

Как писать хорошие программы на С++ ? Есть два совета: «Знай что хочешь сказать» и «Тренируйся. Подражай хорошему стилю»

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

Если вы думаете об «этом» как об отдельном понятии, оформите «это» в виде класса.

Если вы думаете об «этом» как об отдельной сущности, сделайте «это» объектом класса.

Если два класса имеют общий интерфейс, оформите его в виде абстрактного класса.

Если реализации двух классов имеют нечто существенно общее, реализуйте это общее в виде базового класса.

Если класс является контейнером объектов, сделайте из него шаблон

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

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

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

Не используйте глобальные данные(пользуйтесь членами)

Не используйте глобальные функции.

Не используйте открытые члены класса

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

Не создавайте в классе «поля типа»- пользуйтесь виртуальными функциями.

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

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

Соседние файлы в папке ЛекцииКарасева