ЗНАЕТЕ ЛИ ВЫ?

Лекция 2: Платформа .NET и ее применение для ООП



© Учебный Центр безопасности информационных технологий Microsoft

Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Заметим, что попытки построения компонентных программных систем предпринимались

и рядом других компаний – разработчиков программного обеспечения (в частности,

технология JavaBeans производства Sun Microsystems), а также международных

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

программирования (например, стандарт брокеров объектных запросов CORBA

организации Object Management Group, или OMG).

В основе таких попыток лежали варианты объектных моделей. Один из подобных

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

двухуровневой концептуализации, нам предстоит рассмотреть в ходе данного курса.

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

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

объектных моделей.

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

именуется в литературе аббревиатурой COM (что происходит от слов Component Object

Model).

Компонентная объектная модель COM является основным стандартом Microsoft для

компонентного проектирования и реализации программного обеспечения. На сегодня это

самая развитая, и, пожалуй, самая удачная в практическом плане модель, которая

практически обеспечивает возможность инициализации и использования компонентов

как внутри одного процесса, так и между процессами или между компьютерами

независимо от языка реализации. COM-модель поддерживается в идеологии .NET для

целого ряда языков программирования (C#, SML, Visual Basic, C++ и др.), является

основой для ActiveX, OLE, а также для многих других технологий Microsoft.

В отличие от СОМ, модель Java Beans, базовый стандарт Sun Microsystems для компонент,

оказывается зависимой от языка реализации.__

 

 

14. Концепция применения программных платформ. Преимущества применения программных платформ при разработке приложений (на примере Microsoft .NET)

 

Платформа Microsoft .NET Framework

Платформа Microsoft .NET Framework, предназначенная для работы приложений Mi-

Microsoft .NET, дает большие преимущества разработчикам программ. В частности, она

способна преодолеть барьеры языковой несовместимости, допуская создание отдель-

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

Среди других преимуществ Microsoft .NET Framework заслуживает упоминания

наличие обширной библиотеки классов, существенно облегчающей решение задач,

наиболее часто возникающих при создании автономных программ и Web-приложений.

Эта библиотека, насчитывающая десятки тысяч (!) классов, готовых к употреблению,

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

Платформа Microsoft .NET Framework обеспечивает возможность использова-

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

компонентам из разработанного ранее программного кода. В результате после от-

относительно небольших переделок старые программы смогут приобрести новую

функциональность.

Приложения Microsoft .NET работают в среде Microsoft .NET Framework в рамках

системы исполнения программ Common Language Runtime (CLR). Примененная в Mi-

Microsoft .NET Framework концепция управляемого кода обеспечит надежное и безопас-

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

ошибок в процессе программирования. Этому же способствует система обработки ис-

исключений и система автоматического освобождения неиспользуемой оперативной па-

памяти, называемой системой сборки мусора (garbage collection).

Встроенные в язык С# и рассчитанные на среду Microsoft .NET Framework

средства документирования, такие, как атрибуты и операторы комментариев спе-

специального вида, позволят существенно упростить создание конструкторской доку-

документации на программный код. Это особенно ценно при разработке больших про-

проектов, когда из-за сложности и объемности задачи сопровождение разработки пре-

превращается в непосильную задачу и становится настоящим кошмаром для менед-

менеджера проекта.

В сочетании с мощным средством ускоренной разработки приложений Microsoft

Visual Studio .NET набор языков платформы Microsoft .NET послужит отличным под-

подспорьем при создании программ самого разного типа, как автономных, так и рассчи-

рассчитанных на использование в Интернете.

 

Концепция виртуальной машины возникла очень давно, еще на заре компьютерной

техники. Эта концепция была реализована в ОС IBM VM, созданной для «больших»

вычислительных машин (мейнфреймов) серии IBM 360/370.

ОС IBM VM разделяла физические ресурсы одного дорогостоящего компьютера

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

компьютера — виртуальный диск, виртуальный процессор, виртуальную оперативную

память и виртуальные устройства ввода-вывода. Получалось, что каждая ОС работала

на своем виртуальном компьютере (виртуальной машине).

Некоторые ресурсы (например, дисковое пространство и участки оперативной па-

памяти) выделялись виртуальным машинам в монопольное пользование, некоторые ис-

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

на какое-то время сначала одной виртуальной машине, затем другой и т. д. При этом

создавалось впечатление, что все ОС работают одновременно.

Современные системы виртуальных машин, такие, как, например, VMWare, позво-

позволяют запускать на одном компьютере сразу несколько ОС — Microsoft Windows раз-

различных версий, MS-DOS, Linux и др. Лишь бы хватило мощности процессора, объема

дисковой и оперативной памяти.

Для нас сейчас принципиально важным является то, что программы, работающие

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

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

и «повесит» ОС своей виртуальной машины, это никак не отразится на работоспособ-

работоспособности других виртуальных машин.

Так вот, виртуальная машина CLR, обеспечивающая работу программ платформы

Microsoft .NET Framework, закрывает доступ этим программам к ресурсам других про-

процессов, работающих на том же компьютере. В результате программа никоим образом

не сможет нарушить работоспособность остальных программ или ОС.

 

Компилятор JIT

Еще одним преимуществом технологии, предоставляемой в рамках платформы Micro-

Microsoft .NET Framework, перед традиционными технологиями программного обеспечения

является наличие так называемых сборок. Сборка представляет собой один или не-

несколько файлов, содержащих все необходимое не только для работы приложения,

но и для ее самодокументирования.

 

Упрощение отладки программ С#

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

времени и сил, чем на ее разработку и написание. Объем отладочного кода, создаваемого

специально для тестирования модулей программы, может многократно превышать

объем кода самих отлаживаемых модулей.

Исполнимый код, получающийся в результате трансляции исходного текста про-

программы, написанной на таких языках программирования, как C++ и Pascal, имеет

практически полный доступ к ресурсам своего процесса. Такие ошибки, как чтение

неинициализированных переменных, неправильное преобразование типов указателей

или их неправильная инициализация, забывчивость при освобождении динамически

полученных блоков памяти, ошибки при выполнении числовых операций, могут при-

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

Многие ошибки обычно остаются незамеченными на этапе компиляции и сказыва-

сказываются только при работе программы, причем, как это обычно бывает, в самый неподхо-

неподходящий момент.

Компилятор языка С# исключает возникновение перечисленных выше и многих

других ошибок еще на этапе компиляции, что существенно облегчает и ускоряет про-

процесс отладки сложных программ. Необходимые для этого средства встроены непо-

непосредственно в язык С#.

Среди других средств, встроенных в язык С# и упрощающих отладку программ,

следует упомянуть объектно-ориентированную обработку исключений и систему

сборки мусора.

1. Легкость развертывания приложений в глобальной среде

Интернет

2. Экономичная разработка программного обеспечения

3. «Бесшовная», гибкая интеграция программных продуктов

и аппаратных ресурсов

4. Предоставление программного обеспечения как сервиса

5. Новый уровень безопасности и удобства использования

Компонентный подход как развитие объектно-

ориентированной модели

2. Универсальная система типизации: «всякая сущность

есть объект»; унификация данных и метаданных

3. Строго иерархическая организация кода, пространств

имен и классов

4. Универсальный интерфейс .NET Framework (включая

поддержку различных подходов к программированию)

5. Высокая вариативность экземпляров реализации (в

частности, на основе веб-сервисов)

Многоязыковая поддержка (десятки языков

программирования)

 

15. Массивы в языке С#. Объявление и применение массивов в языке С#, обращение к элементам массива.

 

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

type[] arrayName;

// Declare a single-dimensional array

int[] array1 = new int[5];

 

// Declare and set array element values

int[] array2 = new int[] { 1, 3, 5, 7, 9 };

 

// Alternative syntax

int[] array3 = { 1, 2, 3, 4, 5, 6 };

 

// Declare a two dimensional array

int[,] multiDimensionalArray1 = new int[2, 3];

 

// Declare and set array element values

int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

 

// Declare a jagged array

int[][] jaggedArray = new int[6][];

 

// Set the values of the first array in the jagged array structure

jaggedArray[0] = new int[4] { 1, 2, 3, 4 };

 

int[][] jaggedArray = new int[2][];

jaggedArray[0] = new int[4];

jaggedArray[1] = new int[3];

 

В платформе .NET Framework массивы реализуются как экземпляры класса Array. Этот класс обеспечивает несколько ценных методов, например Sort иReverse.

 

Типы массива являются ссылочными типами, производными от абстрактного базового типа Array. Поскольку этот тип реализует IEnumerable иIEnumerableHYPERLINK "http://msdn.microsoft.com/ru-ru/library/9eekhta0(v=VS.90).aspx"<HYPERLINK "http://msdn.microsoft.com/ru-ru/library/9eekhta0(v=VS.90).aspx"THYPERLINK "http://msdn.microsoft.com/ru-ru/library/9eekhta0(v=VS.90).aspx">, в C# во всех массивах можно использовать итерацию foreach.

 

Невыровненный массив является массивом массивов, и поэтому его элементы являются ссылочными типами и инициализируются значением null.

int[][] jaggedArray3 =

{

new int[] {1,3,5,7,9},

new int[] {0,2,4,6},

new int[] {11,22}

};

 

 


 

16. Обработка исключений на платформе Microsoft .NET. Практическое применение.

 

Для работы с исключениями код должен быть организован особым образом. Часть кода, в которой может быть выработано исключение, заключается в блок try, а код, обрабатывающий исключение - в блок catch. Исключения могут вырабатываться самой CLR (например при попытке деления на 0) либо пользовательским методом, для чего служит ключевое слово throw после которого указывается объект-исключение, передаваемый в блок catch. Класс этого объекта должен быть производными от класса Exception. В отличие от С++ имеется блок finally. Код, заключенный в блок finally будет выполнен как при обычном завершении работы блока try, так и при вызове исключения в этом блоке. Если перед завершением функции, исполнение которой может быть прервано исключением, обязательно должны быть выполнены некоторые действия (например, закрытие ранее открытого файла), следует заключить соответствующий код в блок finally.

 

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

 

 

17. Объектно-ориентированный подход к программированию. Классы и объекты. Определения; Определения классов и объектов. Проблемы, решаемые этим подходом.

 

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

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

ООП характеризуется следующими принципами (по Алану Кею):

- все является объектом;

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

- каждый объект имеет независимую память, которая состоит из других объектов;

- каждый объект является представителем класса, который выражает общие свойства объектов данного типа;

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

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

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

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

Инкапсуляция (encapsulation) -- техника, при которой несущественная с точки зрения интерфейса объекта информация прячется внутри него.

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

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

Полиморфизм (polymorphism) -- свойство, позволяющее использовать один и тот же интерфейс для различных действий; полиморфной переменной, например, может соответствовать несколько различных методов.

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

Класс (class) -- множество объектов, связанных общностью структуры и поведения; абстрактное описание данных и поведения (методов) для совокупности похожих объектов, представители которой называются экземплярами класса.

Объект (object) -- конкретная реализация класса, обладающая характеристиками состояния, поведения и индивидуальности, синоним экземпляра.

Плюсы ООП:

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

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

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

 

18. Операторы ветвления на языке C#.

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

If, else и else if

Эти операторы одинаковы в обоих языках.

Оператор switch

В обоих языках оператор switch обеспечивает несколько условных операций ветвления. При этом разница заключается в том, что Java позволяет "проваливаться" в case и выполнять следующий case, если в конце варианта не используется оператор break. Однако в C# в конце каждого case необходимо использовать оператор break или оператор goto, и если не использовать ни одного оператора, то компилятор выдаст следующую ошибку:

Управление не может "проваливаться" из одной метки case в другую.

Обратите внимание, что там, где case не указывает какого-либо кода для выполнения при совпадении с этим case, управление проваливается к последующему case. При использовании goto в операторе switch можно только переходить в другой блок case в том же переключателе. Для перехода к case по умолчанию следует использовать goto default.. В противном случае, потребуется использовать goto case cond, где cond – совпадающее условие case, к которому требуется перейти. Другое отличие от switch в Java заключается в том, что в Java switch можно применять только для целочисленных типов, в то время как язык C# позволяет использовать switch для переменной строки.

Возврат goto

goto в Java – это зарезервированное ключевое слово, которое не реализовано. При этом можно использовать операторы с метками с break или continueдля достижения той же цели, что и с использованием goto.

Язык C# не позволяет оператору goto переходить к оператору с меткой. При этом следует отметить, что для перехода к соответствующей метке операторgoto должен быть в области этой метки. Другими словами, goto нельзя использовать для перехода в блок оператора, хотя можно использовать для выхода из него, выхода из класса или выхода из блока finally в операторах try...catch. Использование ключевого слова goto не рекомендуется в большинстве случаев, так расходится с принятой практикой объектно-ориентированного программирования.


19. Основные операторы языка C#

 

 

Основные x.y f(x) a[x] x++ x-- new typeof checked unchecked ->

Унарные + - ! ~ ++x --x (T)x true false & sizeof

Мультипликативные * / % Аддитивные + -

Сдвиг << >> Относительные и тестирующие тип < > <= >= is as

Операторы равенства == !=

Логическое AND & Логическое XOR ^ Логическое OR |

Условное AND &&

Условный оператор OR ||

Условное ?:

Присваивание = += -= *= /= %= &= |= ^= <<= >>= Поддержка значения NULL ?? Лямбда-оператор Оператор =>

public struct Complex

{

public int real;

public int imaginary;

 

public Complex(int real, int imaginary) //constructor

{

this.real = real;

this.imaginary = imaginary;

}

 

// Declare which operator to overload (+),

// the types that can be added (two Complex objects),

// and the return type (Complex):

public static Complex operator +(Complex c1, Complex c2)

{

return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);

}

}

Кроме того, многие операторы могут перегружаться пользователем. Таким образом, их значение при применении к пользовательскому типу меняется.

 


 

20. Основные типы данных в языке С#. Приведение типов в языке С#.

byte 0 .. 255

sbyte -128 .. 127

short -32,768 .. 32,767

ushort 0 .. 65,535

int -2,147,483,648 .. 2,147,483,647

uint 0 .. 4,294,967,295

long -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807

ulong 0 .. 18,446,744,073,709,551,615

float -3,402823e38 .. -3,402823e38 ..

double -1,79769313486232e308 .. 1,79769313486232e308

 

decimal -79228162514264337593543950335 .. 79228162514264337593543950335

char Символ Юникода.

string Строка символов Юникода.

bool true или false

object Объект.

 

Приведение типов данных

Int i=1;

Double d=23;

i = (int) d;

 


 

21. Преимущества технологии Windows Forms над Win32 API и MFC. Примеры.

Windows Forms это имя, данное в графическийинтерфейс прикладного программирования (API) включены как частьMicrosoft в. NET Framework , обеспечивая доступ к родной Microsoft Windows элементов интерфейса, заключив существующих API Windows в управляемом коде . Хотя видно, в качестве замены для более ранних и более сложные C + + основана Microsoft Foundation Class библиотека , она не дает парадигмы сопоставимы с модель-представление-контроллер . Некоторые после рынка и библиотеки сторонних производителей были созданы, чтобы обеспечить эту функциональность. Наиболее широко используемый из них Пользовательский интерфейс процесса Application Block , который выделяется на модели Microsoft и практики группы для бесплатного скачивания, что включает в себя исходный код для быстрого начала примеры.

Конструктор Windows Forms обеспечивает визуальную среду разработки для размещения Windows Presentation Foundation контроля. Управления WPF размещается в специальных форм управления Windows, который называется ElementHost . Этот элемент управления позволяет контролировать WPF для участия в макет формы и получить клавиатуры и мыши сообщений. Во время разработки, вы можете организовать ElementHost управления так же, как и любой формы управления Windows.

 

public Form1()

{

InitializeComponent();

}

 

private void button1_Click(object sender, EventArgs e)

{

label1.Text = label1.Text + "0";

label1.Text.Collor = red;

}

int APIENTRY WinMain(HINSTANCE hCurrentInst,HINSTANCE hPreviousInst, LPSTR lpszCmdLine,int nCmdShow)

{

// Задать класс окна

WNDCLASS wndClass;

wndClass.style = CS_HREDRAW | CS_VREDRAW; // Стиль окна

wndClass.lpfnWndProc = WndProc;

LRESULT APIENTRY WndProc(HWND hWnd, UINT message,WPARAM wParam, LPARAM lParam)

{

// обработать все сообщения, на которые приложение должно реагировать

switch(message)

{

case …:

 

Когда ОС Microsoft Windows только появилась на свет, мы, как и множество других про-

программистов, создавали для нее приложения на языках С и C++. При этом нам приходилось

напрямую обращаться к программному интерфейсу (API) этой ОС, обрабатывая сообще-

сообщения при помощи оператора swi tch.

Пока приложения состояли из нескольких окон и диалоговых панелей, такая техно-

технология программирования не вызывала особых проблем. Когда же перед нами встала

задача создания действительно сложных приложений Windows, имеющих очень боль-

большое количество окон и диалоговых панелей, а также нетривиальный пользовательский

интерфейс, пришлось примейить библиотеку классов MFC.

Несмотря на то что MFC сильно упрощает создание приложений Microsoft Win-

Windows, даже в комплекте с этой библиотекой инструментарий Microsoft Visual C++ едва

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

Во-первых, все еще приходится писать слишком много программного кода,

не имеющего непосредственного отношения к прикладной задаче, для решения кото-

которой создастся приложение.

Во-вторых, визуальные средства проектирования пользовательского интерфей-

интерфейса не позволяют выйти дизайну этого интерфейса за рамки стандартных «серых»

Введение 21

диалоговых панелей и надоевших уже элементов управления — кнопок, меню, спи-

списков и т. п. Сегодня, когда пользователь компьютера привык видеть на экране красоч-

красочно оформленные страницы Web-сайтов, едва ли стоит предлагать ему программы

с блеклым интерфейсом, разработанным еще на заре создания Microsoft Windows.

22, 31. Программирование на платформе. Структура программы на языке C#.

Структура программы на .NET, объявление и вызов методов в языке C#.

Полностью объектно ориентированный язык. Точка входа – статический метод main.

 

namespace ConsoleApplication1

{

class Class1

{

public static void Main(string[] args)

{

System.Console.WriteLine("Hello World");

}

}

}

 

 


 

23. Пространства имен. Их назначение, архитектура и применение. Примеры использования пространств имен.

 

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

Например, пространство имен System содержит класс Console, который включает методы для чтения и записи в окне консоли. В пространство имен Systemвходит ряд других пространств, например System.IO и System.Collections. Только в платформе .NET Framework представлено более 80 пространств имен, в каждом из которых находятся тысячи классов, поскольку пространства имен используются для того, чтобы избежать путаницы с типами и методами, имеющими одинаковые имена.

При написании класса вне объявления пространства имен компилятор предоставит ему заданное по умолчанию пространство имен.

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

namespace StatisticalData

{

class FileHandling

{

public void Load() {} // code to load statistical data

}

}

 

namespace Images

{

class FileHandling

{

public void Load() {} // code to load an image file

}

}

 

class Program

{

static void Main()

{

StatisticalData.FileHandling data = new StatisticalData.FileHandling();

data.Load();

 

Images.FileHandling image = new Images.FileHandling();

image.Load();

}

}

 


 

24. Процессы(processes), потоки(threads), в ОС Windows и их использование на платформе Microsoft .NET. Определения, функции. Пул потоков.

Для разделения различных выполняемых приложений в операционных системах используются процессы.

Процесс – единица владения ресурсами. Включает в себя стек, кучу, все содержание программы и потоки выполнения программы.

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

Компьютеры с несколькими процессорами или с многоядерными процессорами и Hyper-Threading-процессы могут выполнять несколько потоков в одно и то же время.Параллельная обработка нескольких потоков может значительно повысить производительность программы, но также может сделать отладку намного сложнее, так как появляется необходимость следить за несколькими потоками.

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

myThread = new System.Threading.Thread(new

System.Threading.ThreadStart(myStartingMethod));

myThread.Start();

 

Пул потоков — это коллекция потоков, которые могут использоваться для выполнения нескольких задач в фоновом режиме.(Дополнительные сведения см. в разделе Работа с потоками (C# и Visual Basic).) Это позволяет разгрузить главный поток для асинхронного выполнения других задач.

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

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

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

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

Используя группировку потоков в пул, можно вызвать метод ThreadPool.QueueUserWorkItem с делегатом для процедуры, которую требуется выполнить, а Visual Basic или C# создаст поток и выполнит процедуру.

public void DoWork()

{

// Queue a task.

System.Threading.ThreadPool.QueueUserWorkItem(

new System.Threading.WaitCallback(SomeLongTask));

// Queue another task.

System.Threading.ThreadPool.QueueUserWorkItem(

new System.Threading.WaitCallback(AnotherLongTask));

}

 


 

25. Работа с файлами в языке С#. Синтаксис, алгоритм работы при чтении/записи в файл.

 

Используется пространство имен ввода – выдова System.IO

FileStream, StreamWriter, StreamReader;

Способы открытия файлового потока.

Append,

Create

CreateNew

Open

OpenOrCreate

Truncate

StreamReader sr= new SreamReader(“d:\\123.txt”);

//читаем;

Close(sr);

аналогично

using (FileStream fs = File.OpenRead(path))

{

byte[] b = new byte[1024];

UTF8Encoding temp = new UTF8Encoding(true);

while (fs.Read(b,0,b.Length) > 0)

{

Console.WriteLine(temp.GetString(b));

}

}

 


 

26. Работа с файлами и директориями на платформе Microsoft .NET. Примеры использования.????

 

 

С помощью OpenDialogFile и SaveDialogFIle;

 

OpenFileDialog openDialog = new OpenFileDialog();

openDialog.Filter = "Image files (*.bmp, *.jpg, *.gif)|*.bmp;*.jpg;*.gif|All files (*.*)|*.*";// типы отсортированных файлов

openDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);// начальная директория

openDialog.FileName – имя выбранного файла

 

27. Роль общеязыковой исполняющей среды (CLR) в архитектуре .NET. Задачи, решаемые общеязыковой исполняющей средой





Последнее изменение этой страницы: 2017-01-26; Нарушение авторского права страницы

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