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

Министерство образования и науки РФ

ФГАОУ ВО «УрФУ имени первого Президента России Б.Н.Ельцина»

Институт Высшая школа экономики и менеджмента

Кафедра анализа систем и принятия решений

 

 

 

 

Утверждаю:

Зав.кафедрой

Медведева М.А.

_________________

«____»___________

 

 

 

Проект по модулю

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

Вариант №8

 

 

Руководитель Чернильцев А. Г.

Нормоконтролер Медведева М. А.

Студент гр. ЭМЗ-163402у Чеснокова Т. Н.

 

Оценка

Дата защиты

Члены комиссии 

Екатеринбург

2017

 

СОДЕРЖАНИЕ

  1. Преимущества и недостатки платформы Microsoft.NET.

Сравнение технологий .NET и Java…………………………………………3

  1. Работа с одномерным числовым массивом ………………………………..8
  2. Построение блок-схемы выполнения операций в рассматриваемой предметной области …………………………………………………….…..24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Преимущества и недостатки платформы 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 имеет много достоинств по сравнению с более ранними технологиями. Но ничего не дается даром, новая технология имеет и ряд недостатков. Рассмотрим и то, и другое немного подробнее.

Достоинства:

  1. Единые средства API для разработки программ на разных языках.
  2. Простота стыковки разноязыковых модулей.
  3. Многие тысячи готовых к употреблению классов, реализующие различные алгоритмы, сокращают сроки разработки новых программ и повышают надежность этих программ.
  4. Установка программ под .NET не требует программ-инсталляторов, делается простое копирование программы в нужную папку. Как следствие, при установке не вносятся ни какие записи в реестр Windows, поэтому после удаления таких программ в реестре не остается «мусор».

Недостатки:

  1. Заметно снижается скорость работы программ. По моим наблюдениям, процентов на 40-50 даже для чисто счётных алгоритмов. Это немало. Но с учетом постоянного роста производительности новых образцов вычислительной техники это не смертельно. Хотя на старенькой технике такие программы могут очень медленно работать.
  2. Требуется больше оперативной памяти. Программы под .NET обычно невелики, самые простые имеют размер в несколько килобайт. Но при запуске таких программ запускаются и средства Microsoft .NET Framework, а это «весит» порядка 20 Мбайт в зависимости от версии Framework.
  3. На компьютере должна быть установлена среда выполнения программ Microsoft .NET Framework. В операционных системах WindowsVista и Windows 7 эта среда имеется по-умолчанию, но в предшествующих операционных системах Framework необходимо устанавливать самим. Кроме того, возможно, потребуется обновить операционную систему Windows. Для Windows 2000 нужен четвертый сервис-пак, для Windows XP — второй. А о линейке Windows 95/98 нужно забыть.

Сравнительная характеристика технологий .NET и Java.

Подобно технологии Java, среда разработки .NET создаёт байт-код, предназначенный для исполнения виртуальной машиной. Входной язык этой машины в .NET называется MSIL (MicrosoftIntermediateLanguage), или CIL (CommonIntermediateLanguage, более поздний вариант), или просто IL. Применение байт-кода позволяет получить кроссплатформенность на уровне скомпилированного проекта (в терминах .NET: сборка), а не только на уровне исходного текста, как, например, в С. перед запуском сборки в среде исполнения CLR байт-код преобразуется встроенным в среду JIT-компилятором (justintime, компиляция на лету) в машинные коды целевого процессора. Также существует возможность скомпилировать сборку в родной (native) код для выбранной платформы с помощью поставляемой вместе с .NET Framework утилиты NGen.exe.

Следует отметить, что один из первых JIT-компиляторов для Java был также разработан фирмой Microsoft. Современная технология динамической компиляции позволяет достигнуть уровня быстродействия, аналогичного традиционным «статическим» компиляторам (например, C++), и вопрос быстродействия зачастую зависит от качества того или иного компилятора.

1) Вся платформа .NET основана на  единой объектно-ориентированной  модели. Что это значит? Дело в  том, что все сервисы, интерфейсы  и объекты, которые платформа  предоставляет разработчику объединены  в единую иерархию классов. Другими  словами, все, что может вам потребоваться  при создании приложений под платформу .NET будет всегда у вас под рукой. Причем, все это сгруппировано очень удобно и интуитивно понятно.

2) Приложение, написанное на любом .NET-совместимом языке является  межплатформенным (в идеале). Почему  в идеале? Дело в том, что приложение, написанное, скажем, на том же C#, не  зависит от платформы, на которой  будет выполняться, но зато зависит  от наличия платформы .NET. Но согласитесь, что намного легче один раз  портировать архитектуру .NET под  какую-либо систему, после чего  без проблем запускать абсолютно  любое .NET приложение. В настоящий  момент платформа .NET портирована  на большинство популярных систем, в том числе и на мобильные  системы, такие как MS Windowsmobile.

3) В состав платформы .NET входит  т.н. "сборщик мусора", который  освобождает ресурсы. Таким образом, приложения защищены от утечки  памяти и от необходимости  освобождать ресурсы. Это делает  программирование более легким  и более безопасным.

4) Приложения .NET используют метаданные, что позволяет им не пользоваться  системным реестром Windows.

5) Любое .NET приложение является  автономным, в том смысле, что  не зависит от других программ, в частности от ОС. Установка  приложения написанного на одном  из .NET языках может быть произведена  обычным копированием файлов (исключение  составляет создание ярлыков  в меню "Пуск" и др. местах).

6) Приложения .NET используют безопасные  типы, что повышает их надежность, совместимость и межплатформенность.

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

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

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

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

11) Повторное использование кода  стало еще удобнее. Это связано  с тем, что промежуточный язык MSIL не зависит от языка программирования. Например, вы можете написать  программу на C#, а патч к ней  писать уже, скажем, на J#.

Недостатки платформы .NET

1) Как это часто бывает, за  удобство нужно платить скоростью, так и случилось с .NET. Приложения, написанные под платформу .NET работают  медленнее, это факт. В некоторых  случаях скорость может упасть  на 15%, что иногда является неприемлемым (например, при создании 3D приложений, где бьются за каждый FPS). Задержки в выполнении связаны с промежуточным языком MSIL, ведь для того чтобы его скомпилировать в выполняемый файл тоже нужно время. Разумеется, что приложение компилируется не все сразу, а по частям, равномерно при работе программы.

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

3) Необходимо наличие библиотеки FrameWork. Данный недостаток будет  полностью устранен с выходом WindowsVista, т.к. данная библиотека будет  встроена в систему по умолчанию. Сейчас же наличие FrameWork на компьютерах  обычных пользователей являются  редкостью. Они попросту не знают, что это такое.

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

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

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

Этому способствовал ряд усовершенствований:

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

- широкое использование платформенно-ориентированного  кода (native-код) в стандартных библиотеках,

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

Основные возможности:

- автоматическое управление памятью;

- расширенные возможности обработки  исключительных ситуаций;

- богатый набор средств фильтрации  ввода/вывода;

- набор стандартных коллекций, таких как массив, список, стек  и т. п.;

- наличие простых средств создания  сетевых приложений (в том числе  с использованием протокола RMI);

- наличие классов, позволяющих  выполнять HTTP-запросы и обрабатывать  ответы;

- встроенные в язык средства  создания многопоточных приложений;

- унифицированный доступ к базам  данных:

- на уровне отдельных SQL-запросов  — на основе JDBC, SQLJ;

- на уровне концепции объектов, обладающих способностью к хранению  в базе данных — на основе JavaDataObjects (англ.) и JavaPersistence API (англ.);

- поддержка шаблонов (начиная с  версии 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("Массив случайных элементов\n");

richTextBox1.AppendText(strmas());

}

}

С помощью кода создаем массив случайных элементов заданного количества элементов. Для защиты от недопустимых значений используем защитные блоки 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\nСортировка методом выбора по возрастанию\n");

richTextBox1.AppendText(strmas());

}

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\nСортировка методом выбора по убыванию\n");

richTextBox1.AppendText(strmas());

 

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

 

 

Создаем блок-схему алгоритмов для метода сортировки «Выбор». Цикл наших действий: Возможно несколько вариантов завершения программы, если выполняется условие (и оно верно), то программа продолжает цикл, если же нет, то выводится строка и программа завершается. В ромбиках мы проверяем условие и идём по стрелочке либо «да» или «нет». Если да, то выводится результат данной операции или происходит присвоение значения.

 

 

 

 

 

 

 

 

 

 

 

 

 

5. Код кнопки Shell (сортировка пузырьковым методом).

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

if (radioButton1.Checked == true)

{

richTextBox1.AppendText("\n\nCортировка пузырьковым методом по возрастанию\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(strmas());

        }

        else

        {

        richTextBox1.AppendText("\n\nCортировка пузырьковым методом по убыванию\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(strmas());

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

 

 

 

Создаем блок-схему алгоритмов для метода сортировки «Shell». Цикл наших действий: Возможно несколько вариантов завершения программы, если выполняется условие (и оно верно), то программа продолжает цикл, если же нет, то выводится строка и программа завершается. В ромбиках мы проверяем условие и идём по стрелочке либо «да» или «нет». Если да, то выводится результат данной операции или происходит присвоение значения. Temp (временная переменная).

 

 

 

 

 

 

 

 

 

 

6. Пишем код на кнопку «Стандартное отклонение». Выводим формулы расчетов. Сначала обнуляем сумму, затем считаем общую сумму элементов массива. Используем тип double для точности вычислений, создаем переменную sum и z данного типа, используем цикл for для подсчета суммы.

double sum = 0;

double z = 0;

richTextBox1.AppendText("\n\nСтандартное октлонение \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);//вывод текста

Стандартное отклонение считаем по формуле:

  1. Код кнопки открыть.

Объявляем входной поток 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("Массив из файла\n");

richTextBox1.AppendText(strmas());

Для открытия из файла мы используем класс Streamreader. Создаем переменную этого класса – входной поток. И циклом while считываем каждую строку текстового документа в папке bin/debug, затем выводим на экран.

 

 

 

  1. Код кнопки закрыть.

Close();

  1. Кнопка сохранить

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

        SaveFileDialog saveFileDialog1 = new SaveFileDialog();

        saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

        saveFileDialog1.FilterIndex = 2;

       saveFileDialog1.RestoreDirectory = true;

if (saveFileDialog1.ShowDialog() == DialogResult.OK)//запуск savefiledialog

{

richTextBox1.SaveFile(saveFileDialog1.FileName,             RichTextBoxStreamType.PlainText); //копируем содержимое richtextbox

Text = saveFileDialog1.FileName;

 

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

  1. Кнопка  с домашним заданием.

Задание: Поменять местами элементы с четными и нечетными индексами.

Вводим временную переменную tmp типа int для обмена значениями.

 

{

int tmp; //tmp - переменная для обмена значениями двух элементов

// решение

for (int i = 1; i < N; i += 2)

{ // обмен значениями элементов

           tmp = Массив[i];

           Массив[i] =Массив[i - 1];

           Массив[i - 1] = tmp;

           }

// вывод результата 

          richTextBox1.AppendText("\n\nПоменять местами элементы с четными и нечетными индексами\n");

          richTextBox1.AppendText(strmas());

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Блок схема алгоритма решения задачи

 

 

 

 

 

 

 

 

  1. Построение блок-схемы выполнения операций в рассматриваемой предметной области.

 

Направления комплексного экономического анализа

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

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

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

2. Продукция не пользуется  спросом и поэтому необходимо  определить "слабые" места в  деятельности предприятия.

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

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

Интенсивность применения производственных ресурсов (блок 3) проявляется в трех измерениях: в объеме и качестве произведенной и реализованной продукции (блок 6); в величине затрат на производство (блок 4); в величине авансированного капитала (блок 5).

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