2. Въведение в. Net среда net framework архитектура. Поддържане на единна езикова среда



страница1/4
Дата07.08.2017
Размер0.51 Mb.
#27470
  1   2   3   4
2. Въведение в .NET среда. .NET framework архитектура. Поддържане на единна езикова среда.

Microsoft дефинират платформата .NET като съвкупност от технологии..NET платформата осигурява стандартизирана инфраструктура за разработка, използване, хостинг и интеграция на .NET приложения и XML уеб услуги, базирана на .NET сървърите на Microsoft, средствата за разработка .



Компоненти на .NET Framework

Можем да разделим .NET Framework на два основни компонента:

- Common Language Runtime (CLR) – средата, в която се изпълнява управляваният код на .NET приложенията. Представлява виртуална машина, която контролирано изпълнява .NET кода и осигурява различни услуги, като управление на сигурността, управление на паметта и др.

- Framework Class Library (FCL) – представлява основната библиотека от типове, които се използват при изграждането на .NET приложения. Съдържа основната функционалност за разработка, необходима за повечето приложения, като вход/изход, връзка с бази данни, работа с XML, изграждане на уеб приложения, използване на уеб услуги, изграждане на графичен потребителски интерфейс и др.



Архитектура на .NET Framework

Архитектурата на .NET Framework често пъти се разглежда на нива, както това е :



Операционна система

Операционната система управлява ресурсите, процесите и потребителите на машината. Тя предоставя и някои услуги на приложенията като например: COM+, MSMQ, IIS, WMI и други.

Средата, която изпълнява .NET приложенията (CLR), е обикновен процес в операционната система и се управлява от нея, както останалите процеси.

Common Language Runtime

Общата среда за изпълнение Common Language Runtime (CLR) управлява процеса на изпълнение на .NET код. Тя се грижи за заделяне и освобож-даване на паметта, управлява конкурентността, грижите за сигурността на приложенията и изпълнява други важни задачи, свързани с изпълнението на кода.



Base Class Library

BCL представлява богата обектно-ориентирана библиотека с основни кла-сове, които осигуряват базова системна функционалност. BCL осигурява вход-изход, работа с колекции, символни низове, мрежови ресурси, сигурност, отдалечено извикване, многонишковост и др.



ADO.NET и XML

Слоят на ADO.NET и XML предоставя удобен начин за работа с релационни и други бази от данни и средства за обработка на XML.



Езици за програмиране

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

Microsoft .NET Framework поддържа стандартно езиците C#, VB.NET, Managed C++ и J#.Съвместимостта на езиците за програмиране в .NET Framework се дължи на архитектурни решения, които ще разгледаме в детайли след малко.

Common Language Runtime

След като се запознахме накратко с архитектурата на .NET Framework, нека сега разгледаме в детайли и най-важният компонент от нея – CLR.

Common Language Runtime (CLR) е сърцето на .NET Framework. Той пред-ставлява среда за контролирано изпълнение на управляван код. На практика CLR е тази част от .NET Framework, която изпълнява компили-раните .NET програми в специална изолирана среда.

В своята същност CLR представлява виртуална машина, която изпълнява инструкции, на езика IL (Intermediate Language), езикът до който се компилират всички .NET езици. CLR е нещо като виртуален компютър, който обаче не изпълнява асемблерен код за процесор Pentium, AMD или някакъв друг, а IL код.



Управляван код

Управляваният код (managed code) е кодът, който се изпълнява от CLR. Той представлява поредица от IL инструкции, които се получават при компилацията на .NET езиците. По време на изпълнение управляваният код се компилира допълнително до машиннозависим код за текущата платформа и след това се изпълнява директно от процесора.

Intermediate Language (IL)

Междинният език Intermediate Language (IL), е език за програмиране от ниско ниво, подобен на асемблерните езици. За разлика от тях, обаче, IL е от много по-високо ниво, отколкото асемблерите за съвременните мик-ропроцесори.

IL е обектно-ориентиран език. Той разполага с инструкции за заделяне на памет, за създаване на обект, за предизвикване и обработка на изклю-чения, за извикване на виртуални методи и други инструкции, свързани с обектно-ориентираното програмиране.
11. Windows Forms в .NET. Контроли и йерархия на графичните конролите. Създаване на дъщерни форми и контроли. Пример.

Windows Forms е стандартната библиотека на .NET Framework за изграж-

дане на прозоречно-базиран графичен потребителски интерфейс (GUI) за

настолни (desktop) приложения. Windows Forms дефинира набор от

класове и типове, позволяващи изграждане на прозорци и диалози с

графични контроли в тях, чрез които се извършва интерактивно взаимо-

действие с потребителя.Windows Forms е типична компонентно-ориентирана библиотека за създаване на GUI, която предоставя възможност с малко писане на програмен код да се създава гъвкав графичен потребителски интерфейс.

Контролите в Windows Forms

Windows Forms съдържа богат набор от стандартни контроли: форми,

диалози, бутони, контроли за избор, текстови полета, менюта, ленти с

инструменти, статус ленти и много други.



Наследяване на форми и контроли

Windows Forms е проектирана така, че да позволява лесно наследяване и

разширяване на форми и контроли. Това дава възможност за преизполз-

ване на общите части на потребителския интерфейс.



Наследяване на форми

Наследяването на форми позволява повторно използване на части от

потребителския интерфейс. Чрез него е възможно да променим наведнъж

общите части на много форми. За целта дефинираме една базова форма,

която съдържа общата за всички наследници функционалност.

Базовата форма е най-обикновена форма. Единствената особеност е, че

контролите, които могат да се променят от наследниците, се обявяват

като protected. При наследяване на форма се наследява класът на базовата форма.Не всички класове от Windows Forms са контроли. Някои са обикновени .NET компоненти, например Menu, Timer и ImageList. Изглежда малко странно защо менюто не е контрола, но това е така, защото компонентата Menu реално няма графичен образ и представлява списък от MenuItem елементи. MenuItem класът вече има графичен образ и следователно е контрола.



12. Опционални и списъчни контроли. Основни пропъртита и събития. Приложение – пример.

Контролите в Windows Forms са текстовите полета, етикетите, бутоните, списъците, дърветата, таблиците, менютата, лентите с инструменти, статус лентите и много други. Windows Forms дефинира базови класове за контролите и класове-наследници за всяка контрола. Базов клас за всички контроли е класът System.Windows.Forms.Control. Пример за контрола е

например бутонът (класът System.Windows.Forms.Button).Всяка контрола обработва собствените си събитияКогато главната нишка на Windows Forms приложение получи съобщение,свързано с някоя от неговите форми, тя препраща съобщението до обработчика на съобщения на съответната форма. Този обработчик от своя страна проверява дали съобщението е за самата форма или за някоя нейна контрола. Ако съобщението е за формата, то се обработва директноот съответния обработчик на събития. Ако съобщението е за някоя от контролите във формата, то се предава на нея. Контролата, която получи съобщението, може да е обикновена контрола или контейнер-контрола.Когато обикновена контрола получи съобщение, тя го обработва директно. Когато контейнер-контрола получи съобщение, тя проверява дали то е за нея или е за някоя от вложените контроли. Процесът продължава,

докато съобщението достигне до контролата, за която е предназначено.Класът System.Windows.Forms.Form е базов клас за всички форми вWindows Forms GUI приложенията. Той представлява графична форма - прозорец или диалогова кутия, която съдържа в себе си контроли и управлява навигацията между тях. Повечето прозорци имат рамка и специални бутони за затваряне, преместване и други стандартни операции. Външният вид на прозорците и стандартните контроли по тяхната рамка зависят от настройките на

графичната среда на операционната система. Програмистът има само частичен контрол над външния вид на прозорците. Класът Form е наследник на класовете Control, ScrollableControl и ContainerControl и наследява от тях цялата им функционалност, всичките им свойства, събития и методи.

CheckBox е кутия за избор в стил "да/не". Свойството й Checked задава

дали е избрана.



RadioButton е контрола за алтернативен избор. Тя се използва в групи. Всички RadioButton контроли в даден контейнер (например форма) образуват една група и в нея само един RadioButton е избран в даден момент. ListBox контролата се използва за изобразяване на списък със символни низове, които потребителят може да избира чрез щракване с мишката

върху тях. По-важните свойства на тази контрола са:

- Items – колекция, която задава списъка от елементи, съдържащи се

в контролата.

- SelectionMode – разрешава/забранява избирането на няколко еле-

мента едновременно.

- SelectedIndex, SelectedItem, SelectedIndices, SelectedItems

връщат избрания елемент (или избраните елементи).



ComboBox представлява кутия за редакция на текст с възможност за dropdown

алтернативен избор.

- Text – съдържа въведения текст.

- Items – задава възможните стойности, от които потребителят може

да избира.

- DropDownStyle – задава стила на контролата – дали само се избира

стойност от списъка или може да се въвежда ръчно и друга стойност.

13. Диалози – стандартни и потребителски. Видове и приложение. Пример за употреба.

При разработката на Windows Forms приложения често пъти се налага да извеждаме диалогови кутии с някакви съобщения или с някакъв въпрос. Нека разгледаме стандартните средства за такива ситуации.

Стандартни диалогови кутии Класът MessageBox ни позволява да извеждаме стандартни диалогови

кутии, съдържащи текст, бутони и икони:

- съобщения към потребителя

- въпросителни диалози

Показването на диалогова кутия се извършва чрез извикване на статич-

ния метод Show(…) на класа MessageBox.

Следният код, например, ще покаже диалогова кутия със заглавие "Предупреждение" и текст "Няма връзка с интернет":

MessageBox.Show("Няма връзка с Интернет.", "Предупреждение");

Пример за стандартна диалогова кутия с малко повече функционалност:

bool confirmed =MessageBox.Show("Наистина ли ще изтриете това?",

"Въпрос", MessageBoxButtons.YesNo,

MessageBoxIcon.Question) == DialogResult.Yes;

Този код ще покаже диалогова кутия със заглавие "Въпрос" и текст "Наистина ли ще изтриете това?". Преди текста ще има икона с въпросителен знак в нея, а под него – бутони Yes и No. Ако потребителят

натисне Yes, променливата confirmed ще има стойност true, в противен случай ще има стойност false.

Извикване на диалогови кутии Освен стандартните диалогови кутии можем да използваме и потреби-

телски дефинирани диалогови кутии. Те представляват обикновени форми и се извикват модално по следния начин:

DialogResult result = dialog.ShowDialog();

Методът ShowDialog() показва формата като модална диалогова кутия. Типът DialogResult съдържа резултата (OK, Yes, No, Cancel и др.) от извикването на диалога. Задаването на DialogResult може да става автоматично, чрез свойството DialogResult на бутоните, или ръчно – преди затварянето на диалога чрез свойството му DialogResult.



14. SDI и MDI приложения. Структура и пример.

MFC прави лесно да се работи едновременно с един документен интерфейсни (SDI) и няколко документни интерфейсни (MDI) приложения.


SDI приложенията позволяват само един отворен прозорец на документ кадър по кадър. MDI приложенията позволяват няколко документа да бъде отворени в една и съща инстанция на приложението. Приложението MDI има прозорец, в който няколко MDI прозорци, които са прозорци сами по себе си, могат да бъдат отворени, всяка от които съдържа отделен документ. В някои приложения, детето прозорци могат да са от различен тип, като например прозорците на графиките и таблиците прозорци. В този случай, на лентата с менюта може да се променят MDI прозорците на различни видове ,които са активирани.

Осн. развичия в SDI и MDI прилож. Много изгледи в MDIпроблемът за синхронизация на промените в изглед.

Разлики между SDI и MDI:

1.В MDI има повече от един отворен документ, докато в SDI , за да отвори втори трябва да затворим първия.

2.В MDI могат да се поддържат различни типове документи.

3.При MDI в менюто има опция Windows за превключване на прозорците.

4.MDI има поне 2 менюта , а SDI има едно .Първото при отворен документ, а второто при затворен.

5.В SDI има една рамка, а в MDI има главна и дъщерна рамка.

Множество изгледи под един документ в MDI приложения

Използва се многодокументния шаблон- CMultiDocTemplate.Тъй като документа е същия не се създава нов документ, а само нов изглед.Т.е. документа и рамката си остават същите.MFC осигурява списъчна структура за обхождане на всички изгледи(като например при UpdateAllView).Всеки изглед вика Get Document, за да получи данни.Ако в някое View променим данните и искаме промените да се отразят в други View, налага се да се използва UpdateAllView, който пък вика OnUpdate на всеки View.Този метод не се вика автоматично-ние трябва да го осигурим. UpdateAllView обхожда всеки View и ги обновява, като инвалидизира (Invalidate) целия прозорец.Ако искаме оптимизация ние трябва да променим реализацията на UpdateAllView и по-точно да променим параметрите, с които се вика OnUpdate.

В SDI има един обект на приложението на документа.

Това означава , че за да отвори нов документ трябва да затворим стария.

В MDI имаме много документални обекти, затова не е необходимо припокриване.

При избиране на нов се създава нов обект.Ако е ….. Template то се взема от него документен шаблон и се създава , а ако са повече то се извежда та екрана от кой точно шаблон да се вземе.

Отваряне на съществуващ документ.

15. Свързване с база данни. Свързване на данни с контроли (Data Binding). DataGrid. Master-Details.Пример.

База от данни се нарича всяка организирана колекция от данни.

Свързване на данни

Свързването на данни (data binding) осигурява автоматично прехвърляне на данни между контроли и източници на данни. Можем например да свържем масив, съдържащ имена на градове, с ComboBox контрола и имената от масива ще се показват в нея.Всички Windows Forms контроли поддържат свързване на данни (data binding). Можем да свържем което и да е свойство на контрола към източник на данни.

Контролата DataGrid

DataGrid контролата визуализира таблични данни. Тя осигурява навигация по редове и колони и позволява редактиране на данните. Като източник на данни най-често се използват ADO.NET DataSet и DataTable. Чрез свойството DataSource се задава източникът на данни, а чрез свойството

DataMember – пътят до данните в рамките на източника. По-важни

свойства на контролата са:

- ReadOnly – разрешава / забранява редакцията на данни.

- CaptionVisible – показва / скрива заглавието.

- ColumnHeadersVisible – показва / скрива заглавията на колоните.

- RowHeadersVisible – показва / скрива колоната в ляво от редовете.

- TableStyles – задава стилове за таблицата.

o MappingName – задава таблицата, за която се отнася дефинира-

ният стил.

o GridColumnStyles – задава форматиране на отделните колони –

заглавие, ширина и др.

Master-Details навигация

Навигацията "главен/подчинен" (master-details) отразява взаимоотношения от тип едно към много (например един регион има много области). В Windows Forms се поддържа навигация "главен/подчинен". За да илюстрираме работата с нея, нека разгледаме един пример: Имаме DataSet, съдържащ две таблици – едната съдържа имена на държави, а другата – имена на градове. Те са свързани помежду си така, че на всяка държава от първата таблица съответстват определени градове от втората

таблица:


Тогава можем да използваме две DataGrid контроли – първата, визуализираща държавите, а втората, визуализираща градовете, съответстващи на текущо избраната държава от първата контрола. За целта контролите се свързват с един и същ DataSet. На главната контрола се задава за източник на данни главната таблица. На подчинената контрола се задава за източник на данни релацията на таблицата:

// Bind the master grid to the master table

DataGridCountries.DataSource = datasetCountriesAndTowns;

DataGridCountries.DataMember = "Countries";

// Bind the detail grid to the relationship

DataGridTowns.DataSource = datasetCountriesAndTowns;

DataGridTowns.DataMember = "Countries.CountriesTowns";

16. GDI+. Методи за изчертаване на основните фигури. Запълване, контур и специални ефекти.

Пакетът System.Drawing осигурява достъп до GDI+ функциите на

Windows:

- повърхности за чертане

- работа с графика и графични трансформации

- изчертаване на геометрични фигури

- работа с изображения

- работа с текст и шрифтове

- печатане на принтер

Той се състои от няколко пространства:

- System.Drawing – предоставя основни класове като повърхности,

моливи, четки, класове за изобразяване на текст.

- System.Drawing.Imaging – предоставя класове за работа с изобра-

жения, картинки и икони, класове за записване в различни файлови

формати и за преоразмеряване на изображения.

- System.Drawing.Drawing2D – предоставя класове за графични транс-

формации – бленди, матрици и др.

- System.Drawing.Text – предоставя класове за достъп до шрифтовете

на графичната среда.

- System.Drawing.Printing – предоставя класове за печатане на

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

Класът Graphics

Класът System.Drawing.Graphics предоставя абстрактна повърхност за

чертане. Такава повърхност може да бъде както част от контрола на

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

Най-често чертането се извършва в обработчика на събитието Paint. В

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

Параметърът PaintEventArgs, който се подава, съдържа Graphics обекта.

Graphics обект може да се създава чрез Control.CreateGraphics(). Той

задължително трябва да се освобождава чрез finally блок или с конс-

трукцията using, защото е ценен ресурс.

Чрез примера ще илюстрираме работата с GDI+ чрез пакета System.Drawing – чертане на геометрични фигури с четки и моливи и изобразяване на текст със зададен шрифт.

private void MainForm_Paint(object sender,

System.Windows.Forms.PaintEventArgs e)

{

Graphics g = e.Graphics;



g.SmoothingMode = SmoothingMode.AntiAlias;

Brush brush = new SolidBrush(Color.Blue);

g.FillEllipse(brush, 50, 40, 350, 250);

brush.Dispose();

Pen pen = new Pen(Color.Red, 2);

g.DrawRectangle(pen, 40, 50, 200, 40);

pen.Dispose();

brush = new SolidBrush(Color.Yellow);

Font font = new Font("Arial", 14, FontStyle.Bold);

g.DrawString(".NET Framework", font, brush, 60, 60);

brush.Dispose();

font.Dispose();

}

17. Вход/Изход в .NET. Работа с файлове, директории, потоци, четци и писци.

Потоците в обектно-ориентираното програмиране са една абстракция, с която се осъществява вход и изход от дадена програма. Потоците в C# като концепция са аналогични на потоците в други обектно-ориентирани езици, напр. Java, C++ и Delphi (Object Pascal).



Потокът е подредена серия от байтове, която служи като абстрактен канал за данни. Този виртуален канал свързва програмата с устройство за съхранение или пренос на данни (напр. файл върху хард диск), като достъпът до канала е последователен. Потоците предоставят средства за четене и запис на поредици от байтове от и към устройството. Това е стандартният механизъм за извършване на входно-изходни операции в .NET Framework.Потоците в .NET Framework се делят на две групи – базови и преходни. И едните, и другите, наследяват абстрактния клас System.IO.Stream, базов за всички потоци.Базовите потоци пишат и четат директно от някакъв външен механизъм за съхранение, като файловата система (например класът FileStream), паметта (MemoryStream) или данни, достъпни по мрежата (NetworkStream). По-нататък ще разгледаме класа FileStream в точката "Файлови потоци". Преходните потоци пишат и четат от други потоци (най-често в базови потоци), като при това посредничество добавят допълнителна функци-оналност, например буфериране (BufferedStream) или кодиране (CryptoStream). По-подробно ще разгледаме BufferedStream в точката "Буферирани потоци". За четене на данни от поток се използва методът int Read(byte[] buffer, int offset, int count). Той чете най-много count на брой байта от текущата позиция на входния поток, увеличава позицията и връ-ща броя прочетени байтове или 0 при достигне края на потока. Четенето може да блокира за неопределено време. Например, ако при четене от мрежа извикаме метода NetworkStream.Read(…), а не са налични данни за четене, операцията блокира до тяхното получаване. В такива случаи е уместно да се използва свойството NetworkStream. DataAvailable, което показва дали в потока има пристигнали данни, които още не са прочетени, т. е. дали последваща операция Read() ще блокира или ще върне резултат веднага.

Писане в поток

Методът Write(byte[] buffer, int offset, int count) записва в изход-ния поток count байта, като започва от зададеното отместване в байтовия масив. И тази операция е блокираща, т.е. може да предизвика забавяне за неопределено време. Не е гарантирано, че байтовете, записани в потока с Write(…), са достигнали до местоназначението си след успеш-ното изпълнение на метода. Възможно е потокът да буферира данните и да не ги изпраща веднага.Файловите потоци в .NET Framework са реализирани в класа FileStream, който вече беше използван в примера за потоци. Като наследник на Stream, той поддържа всичките му методи и свойства (четене, писане, позициониране) и добавя някои допълнителни.Четенето и писането във файлови потоци, както и другите по-рядко използвани операции, се извършват както при всички наследници на класа Stream – с методите Read(), Write() и т. н.

Файловите потоци поддържат пряк достъп до определена позиция от файла чрез метода Seek(…).

Четците и писачите (readers and writers) в .NET Framework са класове, които улесняват работата с потоците. При работа например само с файлов поток, програмистът може да чете и записва единствено байтове. Когато този поток се обвие в четец или писач, вече са позволени четенето и записа на различни структури от данни, например примитивни типове, текстова информация и други типове. Четците и писачите биват двоични и текстови. Двоичните четци и писачи осигуряват четене и запис на примитивни типове данни в двоичен вид – ReadChar(), ReadChars(), ReadInt32(), ReadDouble() и др. за четене и съответно Write(char), Write(char[]), Write(Int32), Write(double) – за запис. Може да се чете и записва и string, като той се представя във вид на масив от символи и префиксно се записва дължината му – ReadString(), респ. Write(string).Текстовите четци и писачи осигуряват четене и запис на текстова инфор-мация, представена във вид на низове, разделени с нов ред. Базови текстови четци и писачи са абстрактните класове TextReader и TextWriter. Основните методи за четене и запис са следните: - ReadLine() – прочита един ред текст.

- ReadToEnd() – прочита всичко от текущата позиция до края на потока.

- Write(…) – вмъква данни в потока на текущата позиция.




Сподели с приятели:
  1   2   3   4




©obuch.info 2024
отнасят до администрацията

    Начална страница