Основы объектно-ориентированного программирования
Министерство образования и науки РФ
ФГАОУ ВО «УрФУ имени первого Президента России Б.Н.Ельцина»
Институт Высшая школа экономики и менеджмента
Кафедра анализа систем и принятия решений
Утверждаю:
Зав.кафедрой
Медведева М.А.
_________________
«____»___________
Проект по модулю
Основы объектно-ориентированного программирования
Вариант №8
Руководитель Чернильцев А. Г.
Нормоконтролер Медведева М. А.
Студент гр. ЭМЗ-163402у Чеснокова Т. Н.
Оценка
Дата защиты
Члены комиссии
Екатеринбург
2017
СОДЕРЖАНИЕ
- Преимущества и недостатки платформы Microsoft.NET.
Сравнение технологий .NET и Java…………………………………………3
- Работа с одномерным числовым массивом ………………………………..8
- Построение блок-схемы выполнения операций в рассматриваемой предметной области …………………………………………………….…..24
- Преимущества и недостатки платформы Microsoft.NET. Сравнение технологий .NET и Java.
Платформа Microsoft .NET
В процессе развития вычислительной техники было создано множество языков и технологий программирования, практически несовместимых между собой. Конечно, при разработке программ, работающих автономно, можно обойтись одним языком, одной технологией программирования и не иметь никаких проблем с совместимостью, но приложения для Интернета требуют использования разных языков и разных технологий.
Разработчики из Microsoft поставили перед собой задачу кардинально решить эту проблему. В 2000г был представлен первый вариант новой технологии, получившей название Microsoft .NET (.NET — по-русски произносится «Дот-Нэт»).
Microsoft .NET — это новая технология, ориентированная на разработку обычных (автономных) приложений и приложений для Интернета. В рамках Microsoft .NET первоначально были доступны всего несколько языков программирования:
- Microsoft C#;
- Managed C++;
- MicrosoftVisualBasic .NET;
- MicrosoftVisual J# .NET;
- JScript .NET.
Сейчас число таких языков исчисляется десятками. Но основным языком считается язык C# (по-русски читается «Си-Шарп»), разработанный специально для Microsoft .NET. Именно на C# доступны все возможности новой технологии от Microsoft.
В рамках Microsoft .NET создана весьма удобная интегрированная среда разработки приложений MicrosoftVisualStudio .NET, а также среда выполнения программ Microsoft .NET Framework.
Достоинства и недостатки технологии Microsoft .NET
Относительно недавно появившаяся технология Microsoft .NET имеет много достоинств по сравнению с более ранними технологиями. Но ничего не дается даром, новая технология имеет и ряд недостатков. Рассмотрим и то, и другое немного подробнее.
Достоинства:
- Единые средства API для разработки программ на разных языках.
- Простота стыковки разноязыковых модулей.
- Многие тысячи готовых к употреблению классов, реализующие различные алгоритмы, сокращают сроки разработки новых программ и повышают надежность этих программ.
- Установка программ под .NET не требует программ-инсталляторов, делается простое копирование программы в нужную папку. Как следствие, при установке не вносятся ни какие записи в реестр Windows, поэтому после удаления таких программ в реестре не остается «мусор».
Недостатки:
- Заметно снижается скорость работы программ. По моим наблюдениям, процентов на 40-50 даже для чисто счётных алгоритмов. Это немало. Но с учетом постоянного роста производительности новых образцов вычислительной техники это не смертельно. Хотя на старенькой технике такие программы могут очень медленно работать.
- Требуется больше оперативной памяти. Программы под .NET обычно невелики, самые простые имеют размер в несколько килобайт. Но при запуске таких программ запускаются и средства Microsoft .NET Framework, а это «весит» порядка 20 Мбайт в зависимости от версии Framework.
- На компьютере должна быть установлена среда выполнения программ Microsoft .NET Framework. В операционных системах WindowsVista и Windows 7 эта среда имеется по-умолчанию, но в предшествующих операционных системах Framework необходимо устанавливать самим. Кроме того, возможно, потребуется обновить операционную систему Windows. Для Windows 2000 нужен четвертый сервис-пак, для Windows XP — второй. А о линейке Windows 95/98 нужно забыть.
Сравнительная характеристика технологий .NET и Java.
Подобно технологии Java, среда разработки
.NET создаёт байт-код, предназначенный
для исполнения виртуальной машиной. Входной
язык этой машины в .NET называется MSIL (
Следует отметить, что один из первых JIT-компиляторов для Java был также разработан фирмой Microsoft. Современная технология динамической компиляции позволяет достигнуть уровня быстродействия, аналогичного традиционным «статическим» компиляторам (например, C++), и вопрос быстродействия зачастую зависит от качества того или иного компилятора.
1) Вся платформа .NET основана на
единой объектно-
2) Приложение, написанное на любом
.NET-совместимом языке
3) В состав платформы .NET входит т.н. "сборщик мусора", который освобождает ресурсы. Таким образом, приложения защищены от утечки памяти и от необходимости освобождать ресурсы. Это делает программирование более легким и более безопасным.
4) Приложения .NET используют метаданные,
что позволяет им не
5) Любое .NET приложение является
автономным, в том смысле, что
не зависит от других программ,
в частности от ОС. Установка
приложения написанного на
6) Приложения .NET используют безопасные
типы, что повышает их надежность,
совместимость и
7) Приложение, написанное на любом
.NET языке взаимодействует с
8) Приложения написанные на
9) .NET приложения могут быть
10) Абсолютно все ошибки
11) Повторное использование кода
стало еще удобнее. Это связано
с тем, что промежуточный язык
MSIL не зависит от языка
Недостатки платформы .NET
1) Как это часто бывает, за
удобство нужно платить
2) Не на любом языке можно
создавать .NET приложения. Дело в
том, что первоначально .NET "затачивался"
под C/JAVA-подобные языки. Это породило
некоторые трудности с
3) Необходимо наличие библиотеки
FrameWork. Данный недостаток будет
полностью устранен с выходом
WindowsVista, т.к. данная библиотека будет
встроена в систему по
Java — объектно-ориентированный
язык программирования, разработанный
компанией SunMicrosystems. Программы на Java
транслируются в байт-код, выполняемый
виртуальной машиной Java (JVM) — программой,
обрабатывающей байтовый код
и передающей инструкции
Достоинство подобного способа выполнения программ — в полной независимости байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.
Часто к недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность.
Этому способствовал ряд усовершенствований:
- применение технологии
- широкое использование
- аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).
Основные возможности:
- автоматическое управление
- расширенные возможности
- богатый набор средств
- набор стандартных коллекций, таких как массив, список, стек и т. п.;
- наличие простых средств
- наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;
- встроенные в язык средства
создания многопоточных
- унифицированный доступ к
- на уровне отдельных SQL-запросов — на основе JDBC, SQLJ;
- на уровне концепции объектов,
обладающих способностью к
- поддержка шаблонов (начиная с версии 1.5);
- параллельное выполнение
2. Работа с одномерным числовым массивом.
Необходимо построить приложение из одной формы, в которой предусмотреть определенные действия с одномерным массивом целых чисел. Массив должен быть объявлен как массив с отложенной инициализацией.
1. Создаем форму приложения (вид), для этого нам необходимы слейдующие элементы:
Button(кнопки)
Label(для подписи элементов)
TextBox(для вывода значений)
NumericUpDown(для выбора значений)
RadioButton(кнопки выбора)
RichTextBox(поле для вывода значений)
Начальный вид приложения:
2. Объявляем необходимые нам переменные с помощью int, объявляем строку, формируем для значений элементов, возвращаем строку с помощью return.
public partial class Form1 : Form
{
//данные класса
int[] Mассив; // массив с отложенной инициализацией
int N = 0;//количество чисел (размер массива)
int R = 0;//диапазон случайных чисел
int Rc = 0;
string strmas()//функция возвращает строку чисел
{
string s = " ";// пустая строка
for (int i = 0; i < N; i++)
s = s + Mассив[i] + " ";
return s;//возвращаем строку
}
3. Объявляем основной массив, вводим его размер (границы), выводим метод преобразования его из чисел в строку. Создаем защитный блок try, с помощью которого, происходит защита от недопустимых значений. При ошибке программа выводит сообщение
R = int.Parse(textBox2.Text);//
Rc= int.Parse(textBox3.Text);//
Button3.Enabled = true;
Button4.Enabled = true;
Button5.Enabled = true;
Button6.Enabled = true;
try//защищаем от неправильных значений(блок)
{
N = int.Parse(textBox1.Text);//
}
catch (Exception err)
{
MessageBox.Show("Ошибка ввода! \n" + err.Message, "Ошибка");
// вывод ошибки, если данная существует
return;
}
Mассив = new int[N];//инициализация массива размера
Random Rand = new Random(); //объявить объект-переменную Rand
for (int i = 0; i < N; i++)//цикл заполнения массива
{
try//защита от недопустимого диапазона
{
Mассив[i] = Rand.Next(R, Rc);// присвоить случайное число (0..R-1) элементу массива
}
catch (Exception err)
{
MessageBox.Show("Неверно указан диапазон, проверьте значения и повторите ввод.\n" + err.Message, " Ошибка ввода");
return;
}
richTextBox1.Clear();//очистка
richTextBox1.AppendText("
richTextBox1.AppendText(
}
}
С помощью кода создаем массив случайных элементов заданного количества элементов. Для защиты от недопустимых значений используем защитные блоки try…catch. Try пробует исполнить часть кода, если исполнить не получается, блок catch собирает данные об исключении и выводит сообщение об ошибке.
4. Код кнопки сортировать. Сортировка методом выбора (возрастание, убывание).
- Вводим переменные типа int max, nmax
int max = 0, nmax = 0; //сортировка выбором
- Используем условный оператор if для сортировки по возрастанию или убыванию, организуем внешний цикл просмотров и внутренний цикл определения минимального (максимального) значения и присвоения ему нового порядкового номера в массиве. Вывод отсортированного массива.
if (radioButton1.Checked == true)
{
for (int i = 0; i < N; i++) // внешний цикл
{
max = Массив[i];
nmax = i;
for (int j = i + 1; j < N; j++) // внутренний цикл
{
if (Массив[j] < max) // сортировка по возрастанию элементов
{
max = Массив[j]; //меняем местами элемент
nmax = j; //замена номера элемента
}
}
Массив[nmax] = Массив[i];
Массив[i] = max;
}
richTextBox1.AppendText("\n\
richTextBox1.AppendText(
}
else
{
for (int i = 0; i < N; i++)
{
max = Массив[i];
nmax = i;
for (int j = i + 1; j < N; j++)
{
if (Массив[j] > max)
{
max = Массив[j];
nmax = j;
}
}
Массив[nmax] = Массив[i];
Массив[i] = max;
}
richTextBox1.AppendText("\n\
richTextBox1.AppendText(
Сортировка методом выбора происходит в двух циклах. Первый – просмотр массива, во внутреннем цикле программа определяет максимум (минимум) на каждом участке и заменяет его с нужным элементом. Выбираем сначала кнопку «по возрастанию», выводим массив, затем кнопку «по убыванию», выводим массив.
Создаем блок-схему алгоритмов для метода сортировки «Выбор». Цикл наших действий: Возможно несколько вариантов завершения программы, если выполняется условие (и оно верно), то программа продолжает цикл, если же нет, то выводится строка и программа завершается. В ромбиках мы проверяем условие и идём по стрелочке либо «да» или «нет». Если да, то выводится результат данной операции или происходит присвоение значения.
5. Код кнопки Shell (сортировка пузырьковым методом).
Используем условный оператор if для сортировки по возрастанию или убыванию. Вводим временную переменную temp типа int для замены, организуем внешний цикл просмотров и внутренний цикл сравнения и присвоения значения. Выводим новый массив.
if (radioButton1.Checked == true)
{
richTextBox1.AppendText("\n\
int temp;//временная переменная для замены
for (int i = 0; i < N; i++) // массив
{
for (int j = N - 1; j > i; j--)//смотрим два соседних элемента
{
if (Mассив[j] < Mассив[j - 1])//сравнение для сортировки по возрастанию
{
temp = Mассив[j];//если условие подходит, производим замену
Mассив[j] = Mассив[j - 1];
Mассив[j - 1] = temp;
}
}
}
richTextBox1.AppendText(
}
else
{
richTextBox1.AppendText("\n\
int temp;
for (int i = 0; i < N; i++)
{
for (int j = N - 1; j > i; j--)
{
if (Массив[j] > Массив[j - 1])
{
temp = Массив[j];
Массив[j] = Массив[j - 1];
Массив[j - 1] = temp;
}
}
}
richTextBox1.AppendText(
Пузырьковый метод основывается на сравнении двух соседних элементов, если один элемент больше (меньше) другого, то происходит замена их друг другом.
Создаем блок-схему алгоритмов для метода сортировки «Shell». Цикл наших действий: Возможно несколько вариантов завершения программы, если выполняется условие (и оно верно), то программа продолжает цикл, если же нет, то выводится строка и программа завершается. В ромбиках мы проверяем условие и идём по стрелочке либо «да» или «нет». Если да, то выводится результат данной операции или происходит присвоение значения. Temp (временная переменная).
6. Пишем код на кнопку «Стандартное отклонение». Выводим формулы расчетов. Сначала обнуляем сумму, затем считаем общую сумму элементов массива. Используем тип double для точности вычислений, создаем переменную sum и z данного типа, используем цикл for для подсчета суммы.
double sum = 0;
double z = 0;
richTextBox1.AppendText("\n\
for (int i = 0; i < N; i++)//считаем сумму элементов массива
{
sum += Mассив[i];
}
double m = sum / N;
for (int i = 0; i < N; i++)//формула расчета
{
z = z + (Mассив[i] - m) * (Mассив[i] - m);
}
double std = Math.Sqrt(z / (N - 1));//стандартное отклонение
string s1 = std + " ";
richTextBox1.AppendText(s1);//
Стандартное отклонение считаем по формуле:
- Код кнопки открыть.
Объявляем входной поток f1, инициализируем размер массива, создаем цикл с условием завершения и присваиваем массиву элементы из файла.
//объявляемвходнойпоток f1
StreamReader f1 = new StreamReader("datai.txt");
Mассив = new int[100];//инициализация массива для открытия из файла
int i = 0;
while (!f1.EndOfStream)//цикл с условием завершения - завершение входного потока данных
{
Mассив[i] = Convert.ToInt32(f1.ReadLine())
i++;//следующая строка
}
f1.Close();//закрытие потока
N = i;//меняем количество элементов на количество строк
textBox1.Text = Convert.ToString(N);
richTextBox1.Clear();//чистим
richTextBox1.AppendText("
richTextBox1.AppendText(
Для открытия из файла мы используем класс Streamreader. Создаем переменную этого класса – входной поток. И циклом while считываем каждую строку текстового документа в папке bin/debug, затем выводим на экран.
- Код кнопки закрыть.
Close();
- Кнопка сохранить
Становится доступной после нажатия кнопки создать или открыть, что делает невозможным сохранение пустого файла.
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.
if (saveFileDialog1.ShowDialog() == DialogResult.OK)//запуск savefiledialog
{
richTextBox1.SaveFile(
Text = saveFileDialog1.FileName;
Сохраняется массив с помощью элемента savefiledialog. Выводится окно, пользователь выбирает место сохранения файла, текст из richtextbox копируется в текстовый документ и сохраняется.
- Кнопка с домашним заданием.
Задание: Поменять местами элементы с четными и нечетными индексами.
Вводим временную переменную tmp типа int для обмена значениями.
{
int tmp; //tmp - переменная для обмена значениями двух элементов
// решение
for (int i = 1; i < N; i += 2)
{ // обмен значениями элементов
tmp = Массив[i];
Массив[i] =Массив[i - 1];
Массив[i - 1] = tmp;
}
// вывод результата
richTextBox1.AppendText("\n\
richTextBox1.AppendText(
}
Блок схема алгоритма решения задачи
- Построение блок-схемы выполнения операций в рассматриваемой предметной области.
Направления комплексного экономического анализа
При проведении анализа составляется общая схема системы, устанавливаются главные ее компоненты, функции, взаимосвязи, разрабатывается схема подсистем, показывается соподчинение их элементов (рис. 1).
Комплексное исследование деятельности предприятия начинается с проведения маркетингового анализа (блок 1, см. рис. 1), в рамках которого изучаются спрос и предложение на его продукции), цена на нее, рассматриваются возможные конкуренты. В результате этих исследований можно прийти к следующим выводам.
1. На продукцию есть
спрос, цена устраивает потребителей,
в связи с чем надо изучить
возможности предприятия по
2. Продукция не пользуется спросом и поэтому необходимо определить "слабые" места в деятельности предприятия.
Решение поставленных вопросов возможно при изучении дальнейших блоков схемы.
В основе всех экономических показателей деятельности лежит организационно-технический уровень производства, т.е. качество техники, прогрессивность технологических процессов, уровень организации труда, производства, управления (блок 2). От организационно-технического уровня зависит степень использования производственных ресурсов.
Интенсивность применения производственных ресурсов (блок 3) проявляется в трех измерениях: в объеме и качестве произведенной и реализованной продукции (блок 6); в величине затрат на производство (блок 4); в величине авансированного капитала (блок 5).