Файл: Отчет по учебной практике пм. 01 Разработка модулей программного обеспечения для компьютерных систем.docx
Добавлен: 23.11.2023
Просмотров: 549
Скачиваний: 36
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РД
ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ РЕСПУБЛИКИ ДАГЕСТАН
«КОЛЛЕДЖ ЭКОНОМИКИ И ПРАВА»
Отчет
по учебной практике
ПМ.01 «Разработка модулей программного обеспечения для компьютерных систем»
09.02.07«Информационные системы и программирование»
Выполнил студент 3 курса
Группы 39 ИСП 2
Исмаилов Тарлан Низамиевич .
(Ф.И.О. студента)
Руководитель практики
Преподаватель технических дисциплин
А.Н.Магомедова
дата оценка
Дербент – 2022 г.
СОДЕРЖАНИЕ
1.ДНЕВНИК ПО УЧЕБНОЙ ПРАКТИКЕ 2
1.1.Индивидуальный план выполняемых заданий по учебной практике 2
1.2.Тематический план выполняемых работ по учебной практике 4
ВВЕДЕНИЕ 6
2. Теоретическое обоснование прохождения учебной практики 7
2.1. Основы С++. Объектно-ориентированное программирование 7
2.2. Списки, кортежи и словари 9
2.3. Основные встроенные модули 10
2.4.Оптимизация программного кода 11
2.5.Тестирование и отладка программного обеспечения 12
3. Практическое применение модулей программного обеспечения для компьютерных систем 13
3.1. Задания по системному программирование. 13
3.2. Задачи по прикладному программированию. 19
ЗАКЛЮЧЕНИЕ 20
-
ДНЕВНИК ПО УЧЕБНОЙ ПРАКТИКЕ
-
Индивидуальный план выполняемых заданий по учебной практике
-
№ п/п | Наименование | Сроки | Отметка о выполнении |
1 | Введение и ознакомление с программой учебной практики | 2.12.2022 | |
2 | Основы С++, ООП | ||
3 | Списки, кортежи и словари | 3.12.2022 | |
4 | Работа с файлами Основные встроенные модули | 5.12.2022 | |
5 | |||
6 | Разработка программного кода для каждого задания на выбранном языке программирования. | 6.12.2022 | |
7 | Отладка программных модулей | 7.12.2022- | |
8 | Тестирование программных модулей | 8.12.2022 | |
9 | Оптимизация программного кода | 9.12.2022- | |
10 | Разработка условия практической задачи | 11.12.2022 | |
-
Тематический план выполняемых работ по учебной практике
№ п/п | Виды работ | Содержание работ | Оценка работы |
1 | Введение и ознакомление учебной практикой | Ознакомление с местом прохождения практики. Инструкция по технике безопасности, пожарной безопасности и должностные инструкции | |
2 | Основы С++. Объектно-ориентированное программирование | Написание программ на Microsoft visual studio C++, а также закрепление пройденного материала основ С++ (переменные, функции, типы данных, циклы и т.д.) и свойства ООП. | |
3 | Списки, кортежи и словари | Изучить списки, кортежи и словари с++ | |
Разработка программ включая списки, кортежи и словари | |||
4 | Работа с файлами | 1Изучения открытие и закрытие файлов. Бинарные файлы. Модуль OS и работа с файловой системой | |
2. Создать объект класса в режиме записи, связать объект класса с файлом, в который будет производиться запись. записать строку в файл и закрыть файл. | |||
5 | Основные встроенные модули | 1. Изучение модулей random , math, модуль locale и модуль decimal | |
2. Написание программ с использованием одно из модулей | |||
Запуск программы на выполнение | |||
6 | Разработка программного кода для каждого задания на выбранном языке программирования. | 1.Выбрать язык реализации программных продуктов, исходя из разработанной спецификации. | |
2.Разработать программный код для каждого значения на языке программирования. | |||
3. Проверка соответствие кода со спецификацией программного продукта. | |||
7 | Отладка программных модулей. | Выполнить отладку разработанных программ. | |
1. В случае найденных несоответствий спецификации, исправить выявленные ошибки и дефекты. | |||
2. Провести автоматическую отладку средствами выбранной автоматизированной системы. | |||
8 | Тестирование программных модулей. | Разработать план тестирования программных модулей. | |
Исправить выявленные при тестировании ошибки. | |||
9 | Оптимизация программного кода. | Оценить программные модули с точки зрения эффективности использования ресурсов. | |
При выявленной необходимости предложить пути оптимизации. | |||
Анализ оптимизации | |||
10 | Разработка условия практической задачи | Разработать техническую документацию (техническое задание, условие задач) для готовых программных модулей. | |
Составить условие задачи практической направленности, при решении которой можно было бы использовать данный программный код | | ||
Проверка условия задания | |
Студент___ Исмаилов Тарлан Низамиевич___________________
(Ф.И.О. студента)
Дата __________________________ Подпись ____________________
ВВЕДЕНИЕ
Целью прохождения учебной практики является получение представлений о практической части специальности и её конкретизация, укрепление ранее полученных теоретических знаний, в процессе обучения и приобретение необходимых навыков непосредственно самой практической работы с прикладными программами.
Основные задачи учебной практики состоят в следующем:
-
Ознакомиться с сутью и значением в обществе будущей профессии -
Разработать модульный программный продукт на основе готовых спецификаций. -
Обучиться рефакторингу кода. -
Заняться отладкой программных модулей с использованием специализированных программных средств. -
Осуществить тестирование программных модулей одним возможных способов.
Учебную практику проходил на базе Государственного бюджетного профессионально образовательного учреждения Республики Дагестан "Колледж экономики и права", расположенный по адресу, Республика Дагестан, город Дербент, переулок С. Стальского, дом 26 в период с 02.12.2022 по 12.02.2022 гг.
2. Теоретическое обоснование прохождения учебной практики
2.1. Основы С++. Объектно-ориентированное программирование
Языку C++ почти 40 лет, но он по-прежнему актуален и востребован: сегодня он применяется повсеместно — от разработки игр и десктопных программ до «мозгов» умного дома 1) поддержка абстракции данных (типов данных, определяемых пользователем);
При написании программ в языках С и С++ используются следующие понятия:
• алфавит;
• константы;
• идентификаторы;
• ключевые слова;
• комментарии.
Язык C++ представляет собой набор команд, которые говорят компьютеру, что необходимо сделать. Командами являются или «функции» или «ключевые слова». Ключевые слова (зарезервированные слова С/С++) являются основными строительными блоками языка. Функции являются сложными строительными блоками, так как записаны они в терминах более простых функций — вы это увидите в нашей самой первой программе, которая показана ниже. Такая структура функций напоминает содержание книги. Содержание может показывать главы книги, каждая глава в книге может иметь своё собственное содержание, состоящее из пунктов, каждый пункт может иметь свои подпункты. Хотя C++ предоставляет много общих функций и зарезервированных слов, которые вы можете использовать, все-таки возникает потребность в написании своих собственных функций.
Рис1. Этапы создания исполняемой программы.
Класс - в объектно-ориентированном программировании, представляет собой шаблон для создания объектов, обеспечивающий начальные значения состояний: инициализация полей-переменных и реализация поведения функций или методов.
Создав класс можно создать его экземпляр — объект. Объект — это функционирующий прототип класса, которому можно задавать свойства и вызывать методы.
У каждого созданного класса могут быть свойства и методы. Свойства — это все что может хранить информацию, которую вы потом можете заполнять (переменные, массивы и т.д.).
Методы — это обычные функции, в функционале которых можно использовать свойства.
В ООП входит такие свойства:
Инкапсуляция — это возможность задавать разную область видимости определенной части класса.
Наследование — это свойство создавать новый класс на базе старого. Такие классы называют потомками.
Полиморфизм — возможность создать объекты с одинаковым интерфейсом, но с разной их реализацией
Абстракция — это возможность выбирать только те свойства или функции, которые нам необходимы. Например, при создании класса про работника понадобится указать его имя, возраст, образование, но никак его цвет волос, глаз, рост и тому подобное.
2.2. Списки, кортежи и словари
Кортеж - коллекция элементов с фиксированным размером. Любая связанная пара, тройка, четверка и т.д элементов является кортежем. В качестве элементов кортежа могут выступать переменные произвольного типа.
Кортежи можно создавать, сравнивать, распаковывать. Некоторые языки позволяют менять значения в элементах кортежей. C++ не имеет встроенных кортежей. Первая реализация кортежей для C++ появилась в библиотеке boost в 2003 году.
Путем инстанцирования шаблона std::tuple<> можно создавать кортежи
std::tuple
std::tuple
Можно также задавать значения у элементов кортежа путем их последовательного перечисления в конструкторе:
std::tuple
std::tuple
Если элемент кортежа является ссылочным типом, то его значение должно быть определено:
std::tuple
double d = 5;
std::tuple
Класс list(список)
Класс списка стандартной библиотеки C++ — это шаблон класса контейнеров последовательностей, которые поддерживают их элементы в линейном расположении и разрешают эффективные вставки и удаления в любом расположении в последовательности. Последовательность хранится в виде двунаправленного связанного списка элементов, каждый из которых содержит элемент определенного типа Type.
У двусвязного списка нет индексов, но вместо их в C++ есть итераторы.
| i_am_list[2] = 8; // ошибка! |
Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, по произвольному, называется словарем или ассоциативным массивом. Ассоциативные контейнеры обеспечивают быстрый доступ к данным по ключу. Такие контейнеры построены на основе сбалансированных деревьев. К ассоциативным контейнерам относятся: словари (map), словари с дубликатами (multimap), множества (set), множества с дубликатами (multiset) и битовые множества (bitset). Для использования указанных контейнеров необходимо подключить заголовочные файлы: map, set, bitset.
2.3. Основные встроенные модули
Программа С++ почти всегда состоит из нескольких раздельно
транслируемых "модулей". Каждый "модуль" обычно называется исходным
файлом, но иногда - единицей трансляции. Он состоит из последовательности
описаний типов, функций, переменных и констант. Описание extern позволяет
из одного исходного файла ссылаться на функцию или объект, определенные в другом исходном файле. Например:
extern "C" double sqrt ( double );
extern ostream cout;
Самый распространенный способ обеспечить согласованность описаний
внешних во всех исходных файлах - поместить такие описания в специальные файлы, называемые заголовочными. Заголовочные файлы можно включать во все исходные файлы, в которых требуются описания внешних. Например, описание функции sqrt хранится в заголовочном файле стандартных математических функций с именем math.h, поэтому, если нужно извлечь квадратный корень из 4, можно написать:
#include
//...
x = sqrt ( 4 );
-
Оптимизация программного кода
Оптимизация кода или оптимизация программного обеспечения — это один из способов преобразования кода, приводящий к улучшению его характеристик и повышению производительности программы. Среди целей оптимизации можно выделить уменьшение размера кода, объема используемой оперативной памяти, повышение скорости выполнения программы, уменьшение количества операций ввода – вывода. При оптимизации важно провести оценку соответствующего кода и полностью понять, как будет использоваться код.
Проблемы оптимизации
В рамках процесса оптимизации может возникнуть множество проблем на разных его этапах. Эти проблемы включают в себя как программный характер, так и человеческий фактор.
Время оптимизации на прямую зависит от количества параметров, интервалов их возможных значении и количества тиков в истории. Также в тестировщике стратегий можно указывать ограничения на показатели работы системы, которые прекратят тестировать конкретный набор параметров при выходе этих значений из зоны ограничений.
Абсурдные результаты часто возникают при отсутствии здравых и четко описанных ограничениях на возможных комбинациях параметров. Проблема в том, что система не может отделять такие результаты от остальных и выводит показатели системы вместе с остальными. Это значительно увеличивает время поиска оптимальных значений параметров после завершения процесса оптимизации.
Скрытые ошибки в коде программа сама по себе не может определить точность следования за стратегией, которую задумал автор. Часто получается так, что не учтены какие-либо мелкие возможные условия рынка, и система выдает результаты для алгоритма, который не полностью соответствует задуманному.
-
Тестирование и отладка программного обеспечения
Отладка и тестирование — это два четко различимых и непохожих друг на друга этапа:
-
при отладке происходит локализация и устранение синтаксических ошибок и явных ошибок кодирования -
в процессе же тестирования проверяется работоспособность программы, не содержащей явных ошибок
Тестирование должно заранее планироваться и систематически проводиться специальными независимыми специалистами — тестировщиками. Тестировщик осуществляет поиск вероятных ошибок и сбоев в функционировании программного обеспечения, моделирует различные ситуации, которые могут возникнуть в процессе использования программного продукта. Тестирование завершается созданием отчетом о результатах тестирования.
К тестированию относятся отладка, контроль и испытание.
Отладка — тестирование программного кода на этапе разработки программного обеспечения. Контроль — поиск ошибок при выполнении программ в тестовой или моделируемой среде. Испытание — попытка найти ошибки при выполнении программы в реальной среде.
3. Практическое применение модулей программного обеспечения для компьютерных систем
3.1. Задания по системному программирование.
Задание-1. Создайте приложение, запрашивающее у пользователя 5 целых чисел, и для каждого числа выводящее на экран положительное оно или отрицательное. #include
using namespace std;
int main(){
int a,b,c,d,e;
cout<<"Введите чисчлло (а):"<
cin>>a;
cout<<"Введите числло (b):"<
cin>>b;
cout<<"Введите числло (c):"<
cin>>c;
cout<<"Введите числло (d):"<
cin>>d;
cout<<"Введите числло (e):"<
cin>>e;
if (a>=0){cout<<"Число (а) положительное"<
else{cout<<"Число (а) отрицательное"<
cout<<"-------------------"<
if (b>=0){cout<<"Число (b) положительное"<
else{cout<<"Число (b) отрицательное"<
cout<<"-------------------"<
if (c>=0){cout<<"Число (c) положительное"<
else{cout<<"Число (c) отрицательное"<
cout<<"-------------------"<
if (d>=0){cout<<"Число (d) положительное"<
else{cout<<"Число (d) отрицательное"<
cout<<"-------------------"<
if (e>=0){cout<<"Число (e) положительное"<
else{cout<<"Число (e) отрицательное"<
cout<<"-------------------"<
using namespace std;
int main()
{
int n;
cout<<"Введите кол-во элементов"<
cin>>n;
float arr[n];
int count = 0;
for(int i = 0; i < n; i++)
{
cout << "Введите " << i+1 << " элемент: ";
cin >> arr[i];
count += !!arr[i];
}
cout << "Кол-во ненулевых: " << count << endl;
return 0;
}
Задание 3 Написать программу, которая сортирует по убыванию введенный с клавиатуры одномерный массив.
#include
int comp2 (const void * a, const void * b)
{
return ( *(int*)b - *(int*)a );
}
using namespace std;
int main(){
int list[8]={32,76,3,21,38,2,90,28};//Сортируемые данные
int i;
qsort (list, 8, sizeof(int),comp2);
for(i=0; i<8; i++)
cout<
-
Ознакомился сущностью и социальной значимостью будущей профессии; -
Разобрался с разработкой программного продукта на основе готовых спецификаций на уровне модуля; -
Мной были закреплены знания, полученные во время выполнения практических заданий, связанных с оптимизацией программного кода; -
Набрался опыта в тестирование и в отладке программных модулей с использованием специализированных программных средств.
cout<<"\n";
cout<<"Cортировка завершена"<<endl;
Задание 4 Создайте стек из 10 элементов на базе массива (Используйте структуру FIFO (first in – first out) «первый пришел – первый вышел». Первый введенный элемент массива должен иметь последний номер, а последний введенный элемент начальный номер). Выведите его на экран. Найдите максимальный элемент стека.
#include
using namespace std;
class Queue
{
private:
enum { MAX = 10 };
int st[MAX];
int head;
int tail;
public:
Queue()
{
head = 0;
tail = MAX-1;
}
void put(int var)
{
st[++head] = var;
st[--tail] = var;
}
int get()
{
st [head--];
return st[tail--];
}
};
int main()
{
Queue s1;
s1.put(11);
s1.put(22);
cout<<"1: "<
cout << "2: " << s1.get() << endl;
s1.put(33);
s1.put(44);
s1.put(55);
s1.put(66);
cout<<"3: "<< s1.get() << endl;
cout << "4: " << s1.get() << endl;
cout << "5: " << s1.get() << endl;
cout << "6: " << s1.get() << endl;
system ("pause");
return 0;
}
Задание 5 Разработать программу, которая принимает от пользователя два одномерных произвольных целочисленных массива, а затем выводит на экран сумму и произведение всех элементов этих массивов.
int main()
{
setlocale(LC_ALL, "Russian"); // Добавление русского языка
int N;
int* A, * B;
int sub = 0, mult = 1;
cout << "Введите размерность массивов: ";
cin >> N;
A = new int[N];
B = new int[N];
cout << "Инициализация массива A (введите " << N << " элементов): ";
for (int i = 0; i < N; i++)
{
cin >> A[i];
}
cout << "Инициализация массива B (введите " << N << " элементов): ";
for (int i = 0; i < N; i++)
{
cin >> B[i];
}
// Подсчет суммы и произведения всех элементов массива
for (int i = 0; i < N; i++)
{
sub = sub + A[i] + B[i];
mult = mult * A[i] * B[i];
}
cout << "Сумма всех элементов массивов: " << sub << endl;
cout << "Произведение всех элементов массивов: " << mult << endl;
return 0;
}
3.2. Задачи по прикладному программированию.
Задача1. Разработать оконное приложение «калькулятор» в Microsoft visual studio 2022 C++
Фрагмент кода программы (без учета кода оконной формы, а также без основной части кода оконного приложения «калькулятор»)
ЗАКЛЮЧЕНИЕ
В ходе прохождения учебной практики я закрепил знания, полученные в процессе лекционных и практических занятий, а также лабораторных работ в рамках ПМ.01 «Разработка модулей программного обеспечения для компьютерных систем». Приобрел умения и опыт в практической работе с пакетами прикладных программ.
Кроме вышеперечисленного перед началом учебной практики состоялся инструктаж по технике безопасности, правилам поведения и пожарной безопасности.
В процессе выполнения практики были выполнены следующие задачи:
ВЫВОД
Итогом прохождения мной практики является следующий вывод: разрабатывать эффективные модули программного обеспечения для компьютерных систем, можно исключительно проверяя их на практике и последовательно тестируя в конкретной востребованной области.