Краткие теоретические и учебно-методические материалы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Краткие теоретические и учебно-методические материалы



Лабораторная работа №1-2

«Моделирование объекта автоматизации»

Цель работы: получение навыков при моделировании объектов

Образовательные результаты, заявленные во ФГОС третьего поколения:

Студент должен

уметь:

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

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

 

знать:

-модели процесса разработки программного обеспечения;

-основные принципы процесса разработки программного обеспечения;

-основные подходы к интегрированию программных модулей;

-основные методы и средства эффективной разработки;

Краткие теоретические и учебно-методические материалы

По теме лабораторной работы

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

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

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

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

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

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

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

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

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

Моделью в C++ является объект класса.

 

Пример1. Класс студент:

class Students {

// Имя студента

std::string name;

// Фамилия

std::string last_name;

// Пять промежуточных оценок студента

int scores[5];

// Итоговая оценка за семестр

float average_ball;};

Пример2. Методы и функции для класса студент:

class Students {

public:

   // Функция, считающая средний балл

   void calculate_average_ball() {

       int sum = 0; // Сумма всех оценок

       for (int i = 0; i < 5; ++i) {

           sum += scores[i] }

       // считаем среднее арифметическое

       average_ball = sum /}

   // Имя студента

   std::string name;

   // Фамилия

   std::string last_name;

   // Пять промежуточных оценок студента

   int scores[5];

private:

   // Итоговая оценка за семестр

   float average_ball};

Задания для лабораторной работы:

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

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

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

2.Формы представления моделей.

3.Формализация.

4.Системный подход в моделировании.

5.Типы информационных моделей.


Лабораторная работа №3-4

«Построение модели жизненного цикла ПО»

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

Образовательные результаты, заявленные во ФГОС третьего поколения:

Студент должен

уметь:

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

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

 

знать:

-модели процесса разработки программного обеспечения;

-основные принципы процесса разработки программного обеспечения;

-основные подходы к интегрированию программных модулей;

-основные методы и средства эффективной разработки;

По теме лабораторной работы

К настоящему времени наибольшее распространение получили следующие две основные модели ЖЦ:

· каскадная модель (70-85 г.г.);

· спиральная модель (86-90 г.г.).

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

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

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

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

Рис. 1.1. Каскадная схема разработки ПО

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

Рис. 1.2. Реальный процесс разработки ПО по каскадной схеме

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

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

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

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

Рис 1.3. Спиральная модель ЖЦ

Пример: каскадная модели:

Задания для лабораторной работы:

Составить модели жизненного цикла и блок схемы разрабатываемого ПО.

 

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

1.Что включает в себя системный анализ.

2.Что включает в себя проектирование ПО.

3.Опишите работу каскадной модели

4.Опишите работу спиральной модели


Лабораторная работа №5-6

«Генерация программного кода диаграммы прецендентов на языке программирования Си++»

 

Цель работы: получение навыков при генерации кода выбранной диаграммы

Образовательные результаты, заявленные во ФГОС третьего поколения:

Студент должен

уметь:

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

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

 

знать:

-модели процесса разработки программного обеспечения;

-основные принципы процесса разработки программного обеспечения;

-основные подходы к интегрированию программных модулей;

-основные методы и средства эффективной разработки;

По теме лабораторной работы

 

При генерации кода учитываются свойства проекта в целом, а также свойства уровней классов, ролей, атрибутов и операций. К свойствам, регламентирующим характеристики проекта как такового, относятся имя файла проекта, названия контейнерных классов, используемых по умолчанию, и местоположение генерируемого кода. Свойства уровня класса обусловливают необходимость и способы создания конструкторов, деструкторов, конструкторов копии, операторов сравнения и методов get/set. Набор свойств роли определяет потребность в использовании методов get/set, признаки видимости методов и варианты применения того или иного контейнерного класса. Свойства операции позволяют отнести последнюю к одной из разновидностей (common — общая, virtual — виртуальная, abstract — абстрактная, static — статическая, friend —"дружественная") и/или придать ей статус "постоянной" (constant). Rational Rose предоставляет возможность создания любого количества наборов свойств, отвечающих существу проекта, и их редактирования. Для каждого класса генерируются два файла — файл заголовка (.h) и файл спецификации (.срр).

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

 

Пример:

Как создать набор свойств

1. Выбрать элемент меню Tools Options.

2. Перейти на вкладку C++ диалогового окна Options.

3. В раскрывающемся списке Туре установить требуемый тип набора свойств.Щелкнуть на кнопке Clone, чтобы открыть диалоговое окно Clone Property Set.

4. Ввести наименование нового набора свойств и закрыть окно щелчком на кнопке

ОК.

5. В списке Model Properties выбрать свойство, подлежащее модификации, и щелкнуть в пределах столбца Value.

6. Ввести новое значение свойства либо выбрать таковое с помощью раскрывающегося списка.

7. Повторить действия, перечисленные в п. п. 6, 7 для каждого свойства, которое должно быть изменено.

8. Щелкнуть на кнопке Apply, чтобы сохранить информацию.

9. Повторить действия, перечисленные в п.п. 3-9, с целью создания остальных наборов свойств.

10. Закрыть диалоговое окно Options щелчком на кнопке ОК.

Процесс создания набора свойств «Виртуальный деструктор» показан на рисунке 1

 

Рисунок 1. набор свойств

 

2. Определение спецификаций компонентов

 

Rational Rose генерирует код, принимая во внимание номенклатуру созданных компонентов в совокупности с их стереотипами. Для каждого компонента без стереотипа система генерирует файл.h, содержащий информацию объявления и определения соответствующего класса. Если компонент снабжен стереотипом Package Specification, генерируется файл.h с объявлением класса. Если же при этом существует надлежащий компонент со стереотипом Package Body, генерируется и файл.срр с определением класса.

 

Как определить или создать стереотип компонента

1. Двойным щелчком на элементе дерева в окне Browser, представляющем диаграмму компонентов, открыть окно диаграммы.

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

3. Выбрать элемент меню Open Specification.

4. Перейти на вкладку General диалогового окна Component Specification.

5. В поле Stereotype ввести значение стереотипа либо выбрать таковое с помощью раскрывающегося списка.

6. Закрыть диалоговое окно щелчком на кнопке ОК.

 

Диалоговое окно Component Specification изображено на рис..2.

Рисунок 2. Спецификация компонента

 

1. Двойным щелчком на элементе дерева в окне Browser, представляющем диаграмму компонентов, открыть окно диаграммы.

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

 

3. Выбрать элемент меню Open Specification.

4. Перейти на вкладку General диалогового окна Component Specification.

5. В раскрывающемся списке Stereotype выбрать значение стереотипа Package Specification для файла заголовка компонента либо значение Package Body — для файла, содержащего тело кода компонента.

 

6. Закрыть диалоговое окно щелчком на кнопке ОК.

 

Пример диаграммы компонентов, элементы которой отвечают файлам.h и.срр, приведен на рис. З. Светлый компонент соответствует файлу заголовка, темный - файлу тела кода.

 

 

Профессор                                            Профессор

Студент                                                 Студент

Рис. 3. Уточненная диаграмма компонентов

 

3. Выбор языка C++ для компонентов

 

Как только компоненты, представляющие файлы.h и.срр, созданы, им должен быть поставлен в соответствие язык программирования (C++). (Если языком, предлагаемым по умолчанию, является C++ - обратитесь к раскрывающемуся списку Default Language на вкладке Notation диалогового окна Options, активизируемого командой меню Tools' Options, - система автоматически выбирает опцию C++ для каждого компонента модели.)

 

1. Щелчком правой кнопки мыши указать компонент в дереве окна
Browser либо на диаграмме компонентов и активизировать контекстное меню.

 

2. Выбрать элемент меню Open Specification.

3. Перейти на вкладку General диалогового окна Component Specification.

4. В раскрывающемся списке Language выбрать требуемую опцию (в данном случае - C++).

5. Закрыть диалоговое окно щелчком на кнопке ОК.

4. Отнесение классов к компонентам

 

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

 

1. Двойным щелчком на элементе дерева в окне Browser, представляющем диаграмму с компонентами файлов.h и.срр, открыть окно диаграммы.

 

2. Выбрать класс в дереве окна Browser, перетащить в окно диаграммы и опустить на компонент, соответствующий требуемому файлу.h.

 

3. Связывание наборов свойств с элементами модели

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

Как связать набор свойств с элементом модели

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

1. Выбрать элемент меню Open Specification.

2. Перейти на вкладку C++ диалогового окна спецификации элемента.

3. В раскрывающемся списке Set выбрать требуемый набор свойств.

4. Закрыть диалоговое окно щелчком на кнопке ОК.

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

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

1. Щелчком правой кнопки мыши указать элемент модели в дереве окна Browser либо на диаграмме и активизировать контекстное меню.

2. Выбрать элемент меню Open Specification.

3. Перейти на вкладку C++ диалогового окна спецификации элемента

4. В раскрывающемся списке Set выбрать требуемый набор свойств.

5. В списке Model Properties указать свойство, подлежащее модификации, и щелкнуть в пределах столбца Value.

6. Ввести новое значение свойства либо выбрать таковое с помощью раскрывающегося списка.

7. Повторить действия, перечисленные в п.п. 5, 6, для каждого свойства, которое должно быть изменено.

8. Щелкнуть на кнопке Override.

9. Закрыть диалоговое окно щелчком на кнопке ОК.

6. Генерация кода

 

Код может быть сгенерирован для пакета в целом, для отдельного компонента либо группы компонентов. В качестве имени файла, в который помещается код, выбирается наименование пакета или компонента. Файл располагается в структуре каталогов, соответствующей поддереву Component View дерева Browser.

 

1. Щелчком выбрать пакет, компонент или группу компонентов в дереве окна Browser либо на диаграмме.

2. Выбрать элемент меню Tools C++ Code Generation.

3. Система осуществит генерацию кода и воспроизведет информацию о результатах в диалоговом окне Code Generation Status.

Окно Code Generation Status с данными об итогах генерации приведено на рис. А.6 (символы кириллицы в названиях элементов модели отображаются посредством восьмеричных кодов. — Прим, перев.).

 

7. Анализ ошибок

 

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

 

• Error: Missing attribute data type. Void is assumed. (Ошибка: отсутствует тип данных атрибута; подразумевается тип void.)

• Warning: Unspecified multiplicity/cardinality indicators. One is assumed. (Предупреждение: не заданы признаки множественности; подразумевается значение "один".)

 

• Warning: Missing operation return type. Void is assumed. (Предупреждение: отсутствует тип значения, возвращаемого операцией; подразумевается тип void.)

 

Задания для лабораторной работы:

Сгенерировать программный код на языке программирования C++ в программе Rational Rose по вашей модели, в соответствии с вашим вариантом

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

 

1.Какая команда выполняет генерацию кода с UML на С++?.

2.Как переопределить свойство элемента модели?.

3.Как отнести класс к компоненту?

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

5. Как создать заголовок и тело компонента?

 


Лабораторная работа №7-8

«Генерация программного кода диаграммы классов на языке

программирования Си++»

Цель работы: получение навыков при генерации кода выбранной диаграммы

Образовательные результаты, заявленные во ФГОС третьего поколения:

Студент должен

уметь:

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

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

 

знать:

-модели процесса разработки программного обеспечения;

-основные принципы процесса разработки программного обеспечения;

-основные подходы к интегрированию программных модулей;

-основные методы и средства эффективной разработки;

 

 

По теме лабораторной работы

 

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

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

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

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

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

Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

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

 

Пример: сгенерированный код класса «Бортовой компьютер»

 

//## begin module%1.2%.codegen_version preserve=yes

// Read the documentation to learn more about C++ code generator

// versioning.

//## end module%1.2%.codegen_version

//## begin module%54B65DB40040.cm preserve=no

// %X% %Q% %Z% %W%

//## end module%54B65DB40040.cm

//## begin module%54B65DB40040.cp preserve=no

//## end module%54B65DB40040.cp

//## Module: Server%54B65DB40040; Pseudo Package specification

//## Source file: C:\Program Files\Rational\Rose 2000\C++\source\Server.h

#ifndef Server_h

#define Server_h 1

using namespace std;

struct Spicok

{

int ID;};

struct list

{

Spicok spic;

list *next;

};

class Table{

private:

list *begin, *end;

public:

Table()

{     begin = NULL;

             end = NULL;}

~Table()

{

Public function Table();

Public function File();

Public function Add();

Public function Delete();

Public function Search();

Public function Edit();

}

Задания для лабораторной работы:

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

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

1.Какова основная функция объекта (процесса)?

2.Какие функции выполняет данный объект (процесс), нельзя ли часть из них сократить?

3.Что такое инкапсуляция?

4.Что такое полиморфизм?

5.Что такое сущность?


Лабораторная работа №9-10

«Генерация программного кода диаграммы кооперации

на языке программирования Си++»

Цель работы: получение навыков при генерации кода выбранной диаграммы

Образовательные результаты, заявленные во ФГОС третьего поколения:

Студент должен

уметь:

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

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

 

знать:

-модели процесса разработки программного обеспечения;

-основные принципы процесса разработки программного обеспечения;

-основные подходы к интегрированию программных модулей;

-основные методы и средства эффективной разработки;

По теме лабораторной работы

Метод в объектно-ориентированном программировании— это функция или процедура принадлежащая какому-то классу или объекту.

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

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

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

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

открытый (public) интерфейс — общий интерфейс для всех пользователей данного класса;

защищённый (protected) интерфейс — внутренний интерфейс для всех наследников данного класса;

закрытый (private) интерфейс — интерфейс, доступный только изнутри данного класса.

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

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

 

Пример: Основная функция программы

Рисунок1- Меню программы

 

Меню основной программы для работы с одной из модели

int main ()

{

list *begin = NULL;

int nomer(100),i(0);

setlocale(LC_ALL,"Rus");

n = metka.Stroka();

while(true)

{ cout<<endl;

cout << "1. Ввод таблицы из файла. \n";

cout << "2. Вывод таблицы на экран. \n";

cout << "3. Добавление записи в таблицу. \n";

cout << "4. Удаление записи из таблицы. \n";

cout << "5. Редактировать запись из таблицы. \n";

cout << "0. Выход из программы. \n";

cout << "\n Ваш выбор (1-12):";

cin>>nomer;

switch(nomer)

{

                   case 1: metka.fail(); metka.Init(&begin); cout<<endl; cout<<"Ввод таблицы прошел успешно!!!"<<endl; i=i+1; break;

     case 2: metka.tabl(&begin); break;

                   case 3: metka.Add(&begin); break;

     case 4: metka.delite(&begin); break;

                   case 5:     metka.redaktir(&begin);

     case 8: metka.sort(begin); break;

     case 0: cout << "Завершение рабоы."; return 0;

     default: cout << " Ошибка в выборе пункта меню. Повторите.";

}

}

return 0;

}

Задания для лабораторной работы:

 Разработать меню программы.

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

1.Что такое методы класса?

2.Чем отличается экземпляр класса от самого класса?

3.В чем разнится между public и private значением класса?

4.Что такое конструктор класса?

5.Что такое деструктор класса?


Лабораторная работа №11-12

«Генерация программного кода диаграммы последовательности действий на языке программирования Си++»

Цель работы: получение навыков при генерации кода выбранной диаграммы

Образовательные результаты, заявленные во ФГОС третьего поколения:

Студент должен

уметь:

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

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

 

знать:

-модели процесса разработки программного обеспечения;

-основные принципы процесса разработки программного обеспечения;

-основные подходы к интегрированию программных модулей;

-основные методы и средства эффективной разработки;

По теме лабораторной работы

Для осуществления операций с файлами предусмотрено три класса: ifstream, ofstream и fstream. Эти классы являются производными, соответственно, от классов istream, ostream iostream. Поскольку эти последние классы, в свою очередь, являются производными от класса ios, классы файловых потоков наследуют все функциональные возможности своих родителей (перегруженные операции << и >> для встроенных типов, функции и флаги форматирования, манипуляторы и пр.). Для реализации файлового ввода-вывода нужно включить в программу заголовочный файл fstream.h.

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

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

ifstream(); ofstream(); fstream();

создать поток, открыть файл и связать поток с файлом:

ifstream(const char *name, ios::openmode mode = ios::in); ofstream(const char* name, ios::openmode mode=ios::out | ios::trunc); fstream(const char * name, ios::openmode mode = ios::in | ios::out);

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

fstream fs("FileName.dat");

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

void ifstream::open(const char *name, ios::openmode mode = ios::in); void ofstream::open (const char * name, ios::openmode mode = ios::out | ios::trunc); void fstream::open (const char * name, ios::openmode mode = ios::in | ios::out);

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

ofstream ofs; ofs.open("FileName.dat");

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

ofstream ofs("FName.txt", ios::out | ios::app); написать ofstream ofs("FName.txt", ios::app);

Между режимами открытия файла ios::ate и ios::app имеется небольшая разница.

Если файл открывается в режиме добавления, весь вывод в файл будет осуществляться в позицию, начинающуюся с текущего конца файла, безотносительно к операциям позиционирования в файле. В режиме открытия ios::ate (от английского "at end") можно изменить позицию вывода в файл и осуществлять запись, начиная с нее. Для потоков вывода режим открытия эквивалентен ios::out | ios::trunc, то есть можно опустить режим усечения файла. Однако для потоков ввода-вывода его нужно указывать явно. Файлы, которые открываются для вывода, создаются, если они еще не существуют.

Если открытие файла завершилось неудачей, объект, соответствующий потоку, будет возвращать 0:

if (!ofs){ cout << "Файл не открыт\n";}

Проверить успешность открытия файла можно также с помощью функции-члена is_open(), имеющей следующий прототип:

int is_open() const;

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

if (!ofs.is_open()){ cout << "Файл не открыт\n"; return; }

Если при открытии файла не указан режим ios::binary, файл открывается в текстовом режиме и после того, как файл успешно открыт, для выполнения операций ввода-вывода можно использовать операторы извлечения и вставки в поток. Для проверки, достигнут ли конец файла, можно использовать функцию ios::eof(), имеющую прототип int eof();

Завершив операции ввода-вывода, необходимо закрыть файл, вызвав функцию-член close() с прототипом void close():

ofs.close();

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

 

Пример Функции работы с файлами

Рисунок 1 – Экранная форма добавление записи

 

Рисунок 2– Экранная форма редактирование записи

void Table::fail()

{

 

fstream f;

p = new Spicok[n];

f.open("input.txt");

for(int i=0; i<n;i++)

{

       f>>p[i].ID;

       f>>p[i].Name;

       f>>p[i].adress;

       f>>p[i].tip;

       f>>p[i].spec;

       f>>p[i].ks;

}

f.close();

}

void Table::tabl(list **begin)

{chet1=0;

       list *print1 = *begin;

       while(print1!= NULL)

       {

                   chet1 ++;

                   print1->spic.ID = chet1;

                   print1 = print1->next;

                   }

           

       list *print = *begin;

       cout<<endl;

       cout<<"Таб



Поделиться:


Последнее изменение этой страницы: 2021-12-07; просмотров: 143; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.41.187 (0.331 с.)