Framework class library что это
Проблемы разработки современных информационных систем
Проблемы интеграции
- Модулей, написанных на различных языках, использующих разный API (или версии API) или разный формат представления данных;
- Программ, разработанных для различных платформ, в рамках единого программного комплекса;
- Систем, использующих разные программные модели.
Особенно часто возникают проблемы интеграции с унаследованным кодом ( legacy ). При решении задач интеграции возникают проблемы несовместимости.
Проблемы переносимости
Все чаще к программам предъявляются требования поддержки нескольких платформ (например, возможность работы с программой на платформе Windows и Mac OS).
Проблемы версий
Windows-разработчики знают о проблеме совместимости версий, известной под названием "ад DLL". Этот "ад" возникает, когда компоненты, устанавливаемые для нового приложения, заменяют компоненты старого приложения. В итоге старое приложение начинает работать неправильно или перестает работать.
Управление ресурсами
Одной из проблем программирования является управление и корректное освобождение ресурсов, файлов, памяти, пространства экрана, сетевых соединений, ресурсов баз данных и т. д. Некорректное управление этими ресурсами может привести к некорректному выполнению программы.
Безопасность типов
Когда упоминают проблему безопасности типов, имеют в виду некорректное обращение с типами данных: попытки обратиться к областям памяти за границей типа, попытки вызвать методы, отсутствующие у типа, или попытки вызвать метод, принимающий в качестве параметра тип А, и передать ему в качестве параметра объект типа В.
Обработка сбоев
При разработке Windows-приложений с использованием Win32 API некоторые функции возвращают исключения, другие — коды состояний, третьи — HRESULT . Таким образом, отсутствует согласованный механизм обработки сбоев и есть возможность игнорировать некоторые исключения, что делает код небезопасным.
Один из способов решения проблемы неоднородности — разработка и поддержка стандартных программных интерфейсов, облегчающих задачу переноса приложений на серверы различных платформ. Однако приложения могут использовать базы данных , коммуникационные и другие сервисы, интерфейсы которых не являются компонентами языка или среды программирования. Другой способ, применяемый производителями для решения проблемы неоднородности, — поддержка стандартных протоколов. Системы, поддерживающие один и тот же протокол, могут взаимодействовать друг с другом, даже если они опираются на различные машинные архитектуры и операционные системы.
. NET Framework — инфраструктура разработки приложений. Ее основные компоненты — общеязыковая исполняющая среда (Common Language Runtime) и библиотека классов . NET Framework Class Library .
Общеязыковая исполняющая среда (Common Language Runtime)
Common Language Runtime (CLR) — общеязыковая исполняющая среда, абстрагирующая сервисы операционной системы и исполняющая управляемые приложения, любое действие которых должно получить разрешение со стороны CLR.
Код для CLR представляет собой команды псевдомашинного языка Common Intermediate Language (CIL). Эти команды компилируются в машинный код соответствующего типа процессора по запросу (just-in-time) в период выполнения. Обычно компиляция метода происходит один раз во время его первого вызова. Затем результат кэшируется в памяти, чтобы избежать задержек при повторных вызовах. JIT-компилятор выполняет оптимизацию кода специально для процессора, на котором исполняется этот код.
Преобразуя команды CIL в команды процессора, JIT-компилятор выполняет верификацию кода на предмет безопасности типов.
Практически невозможно выполнить команду, обращающуюся к области памяти, к которой у этой команды нет разрешения на доступ. В управляемом приложении устраняется проблема ошибочно инициализированных указателей, запрещается преобразовать тип в нечто, чем он не является, так как это нарушение безопасности типов. CLR не позволяет вызывать методы с разрушенным стековым фреймом.
Ресурсы, выделяемые управляемым кодом, освобождаются сборщиком мусора. Иначе говоря, программист только выделяет память, но не освобождает ее — это делает CLR. Сборщик мусора отслеживает все ссылки на объекты, создаваемые программой, и уничтожает эти объекты, когда занимаемая ими память требуется где-то еще. Таким образом в приложениях с управляемым кодом разрешается проблема утечек памяти.
Верификация кода также является основой способности CLR выполнять несколько приложений внутри одного процесса. Процесс разделяется на виртуальные отсеки — домены приложений ( application domain ). Таким образом повышается эффективность использования памяти, выделяемой процессам. Домены приложений не менее безопасны, чем процессы, так как их границы не могут быть нарушены управляемыми приложениями.
В . NET включены сборки библиотеки классов . NET Framework Class library ( FCL ), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Наборы "родственных" типов собраны в отдельные пространства имен. Так, пространство имен System содержит базовый класс Object , из которого в конечном счете порождаются все остальные типы.
Таким образом, всякая сущность в . NET является объектом со своими полями и методами.
Кроме того, System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода/вывода, группу типов для безопасного преобразования одних типов в другие, форматирования данных, генерации случайных чисел и выполнения математических операций. Типами из пространства имен System пользуются все приложения.
Для изменения существующего FCL -типа можно создать свой собственный производный тип . Можно создавать свои собственные пространства имен. Все это будет четко соответствовать принципам, предлагаемым платформой . NET
Приведем некоторые наиболее распространенные пространства имен и краткое описание содержащихся там типов.
Все управляемые приложения используют библиотеку классов FCL . Это упрощает интеграцию приложений и позволяет легче переносить приложения с одного языка на другой.
Итоги
Инфраструктура . NET Framework поддерживает разработку и исполнение различных приложений. . NET Framework ставит своей целью решение следующих задач:
- предоставление объектно-ориентированной среды программирования;
- предоставление среды исполнения, решающей проблемы конфликта версий;
- предоставление среды безопасного исполнения кода (безопасность типов и другие особенности управляемого кода);
- предоставление среды исполнения, улучшающей производительность за счет управления памятью и кэширования результатов компиляции;
- улучшение интеграции и переносимости приложений за счет использования общего промежуточного языка и библиотеки типов.
. NET Framework состоит из двух основных компонент : общеязыковой исполняющей среды ( CLR ) и библиотеки классов . NET Framework.
Имена нынешнего поколения продуктов от Microsoft сопровождаются окончанием . Net (читается Dot Net ), отражающим видение Microsoft современного коммуникативного мира. Компьютерные сети объединяют людей и технику. Человек, работающий с компьютером или использующий мобильный телефон , естественным образом становится частью локальной или глобальной сети. В этой сети используются различные специальные устройства, начиная от космических станций и заканчивая датчиками, расположенными, например, в гостиницах и посылающими информацию об объекте всем мобильным устройствам в их окрестности. В глобальном информационном мире коммуникативная составляющая любых программных продуктов начинает играть определяющую роль.
Открытость
- статический - FCL (Framework Class Library) - библиотеку классов каркаса;
- динамический - CLR (Common Language Runtime) - общеязыковую исполнительную среду.
Библиотека классов FCL - статический компонент каркаса
Понятие каркаса приложений - Framework Applications - появилось достаточно давно; по крайней мере оно широко использовалось еще в четвертой версии Visual Studio. Десять лет назад, когда я с Ильмиром писал книгу [В.А. Биллиг, И.Х. Мусикаев "Visual C++, 4-я версия. Книга для программистов"], для нас это было еще новое понятие. Мы подробно обсуждали роль библиотеки классов MFC (Microsoft Foundation Classes) как каркаса приложений Visual C. Несмотря на то, что каркас был представлен только статическим компонентом, уже тогда была очевидна его роль в построении приложений. Уже в то время важнейшее значение в библиотеке классов MFC имели классы, задающие архитектуру строящихся приложений. Когда разработчик выбирал один из возможных типов приложения, например, архитектуру Document-View, то в его приложение автоматически встраивались класс Document, задающий структуру документа, и класс View, задающий его визуальное представление. Класс Form и классы, задающие элементы управления, обеспечивали единый интерфейс приложений. Выбирая тип приложения, разработчик изначально получал нужную ему функциональность, поддерживаемую классами каркаса. Библиотека классов поддерживала и более традиционные для программистов классы, задающие расширенную систему типов данных, в частности, динамические типы данных - списки, деревья, коллекции, шаблоны.
За прошедшие 10 лет роль каркаса в построении приложений существенно возросла - прежде всего, за счет появления его динамического компонента, о котором чуть позже поговорим подробнее. Что же касается статического компонента - библиотеки классов, то и здесь за десять лет появился ряд важных нововведений.
Единство каркаса
Каркас стал единым для всех языков среды. Поэтому, на каком бы языке программирования ни велась разработка, она использует классы одной и той же библиотеки. Многие классы библиотеки, составляющие общее ядро, используются всеми языками. Отсюда единство интерфейса приложения, на каком бы языке оно не разрабатывалось, единство работы с коллекциями и другими контейнерами данных, единство связывания с различными хранилищами данных и прочая универсальность.
Встроенные примитивные типы
Структурные типы
Частью библиотеки стали не только простые встроенные типы , но и структурные типы , задающие организацию данных - строки, массивы, перечисления, структуры (записи). Это также способствует унификации и реальному сближению языков программирования.
Архитектура приложений
Модульность
Число классов библиотеки FCL велико (несколько тысяч). Поэтому понадобился способ их структуризации. Логически классы с близкой функциональностью объединяются в группы, называемые пространством имен (Namespace). Для динамического компонента CLR физической единицей, объединяющей классы и другие ресурсы, является сборка (assembly).
Основным пространством имен библиотеки FCL является пространство System, содержащее как классы, так и другие вложенные пространства имен. Так, уже упоминавшийся примитивный тип Int32 непосредственно вложен в пространство имен System и его полное имя, включающее имя пространства - System.Int32 .
В пространство System вложен целый ряд других пространств имен. Например, в пространстве System.Collections находятся классы и интерфейсы, поддерживающие работу с коллекциями объектов - списками, очередями, словарями. В пространство System.Collections , в свою очередь, вложено пространство имен Specialized , содержащее классы со специализацией, например, коллекции, элементами которых являются только строки. Пространство System.Windows.Forms содержит классы, используемые при создании Windows-приложений. Класс Form из этого пространства задает форму - окно, заполняемое элементами управления, графикой, обеспечивающее интерактивное взаимодействие с пользователем.
По ходу курса мы будем знакомиться со многими классами, принадлежащими различным пространствам имен библиотеки FCL .
Имена нынешнего поколения продуктов от Microsoft сопровождаются окончанием . Net (читается Dot Net ), отражающим видение Microsoft современного коммуникативного мира. Компьютерные сети объединяют людей и технику. Человек, работающий с компьютером или использующий мобильный телефон , естественным образом становится частью локальной или глобальной сети. В этой сети используются различные специальные устройства, начиная от космических станций и заканчивая датчиками, расположенными, например, в гостиницах и посылающими информацию об объекте всем мобильным устройствам в их окрестности. В глобальном информационном мире коммуникативная составляющая любых программных продуктов начинает играть определяющую роль.
Открытость
- статический - FCL (Framework Class Library) - библиотеку классов каркаса;
- динамический - CLR (Common Language Runtime) - общеязыковую исполнительную среду.
Библиотека классов FCL - статический компонент каркаса
Понятие каркаса приложений - Framework Applications - появилось достаточно давно; по крайней мере оно широко использовалось еще в четвертой версии Visual Studio. Десять лет назад, когда я с Ильмиром писал книгу [В.А. Биллиг, И.Х. Мусикаев "Visual C++, 4-я версия. Книга для программистов"], для нас это было еще новое понятие. Мы подробно обсуждали роль библиотеки классов MFC (Microsoft Foundation Classes) как каркаса приложений Visual C. Несмотря на то, что каркас был представлен только статическим компонентом, уже тогда была очевидна его роль в построении приложений. Уже в то время важнейшее значение в библиотеке классов MFC имели классы, задающие архитектуру строящихся приложений. Когда разработчик выбирал один из возможных типов приложения, например, архитектуру Document-View, то в его приложение автоматически встраивались класс Document, задающий структуру документа, и класс View, задающий его визуальное представление. Класс Form и классы, задающие элементы управления, обеспечивали единый интерфейс приложений. Выбирая тип приложения, разработчик изначально получал нужную ему функциональность, поддерживаемую классами каркаса. Библиотека классов поддерживала и более традиционные для программистов классы, задающие расширенную систему типов данных, в частности, динамические типы данных - списки, деревья, коллекции, шаблоны.
За прошедшие 10 лет роль каркаса в построении приложений существенно возросла - прежде всего, за счет появления его динамического компонента, о котором чуть позже поговорим подробнее. Что же касается статического компонента - библиотеки классов, то и здесь за десять лет появился ряд важных нововведений.
Единство каркаса
Каркас стал единым для всех языков среды. Поэтому, на каком бы языке программирования ни велась разработка, она использует классы одной и той же библиотеки. Многие классы библиотеки, составляющие общее ядро, используются всеми языками. Отсюда единство интерфейса приложения, на каком бы языке оно не разрабатывалось, единство работы с коллекциями и другими контейнерами данных, единство связывания с различными хранилищами данных и прочая универсальность.
Встроенные примитивные типы
Структурные типы
Частью библиотеки стали не только простые встроенные типы , но и структурные типы , задающие организацию данных - строки, массивы, перечисления, структуры (записи). Это также способствует унификации и реальному сближению языков программирования.
Архитектура приложений
Модульность
Число классов библиотеки FCL велико (несколько тысяч). Поэтому понадобился способ их структуризации. Логически классы с близкой функциональностью объединяются в группы, называемые пространством имен (Namespace). Для динамического компонента CLR физической единицей, объединяющей классы и другие ресурсы, является сборка (assembly).
Основным пространством имен библиотеки FCL является пространство System, содержащее как классы, так и другие вложенные пространства имен. Так, уже упоминавшийся примитивный тип Int32 непосредственно вложен в пространство имен System и его полное имя, включающее имя пространства - System.Int32 .
В пространство System вложен целый ряд других пространств имен. Например, в пространстве System.Collections находятся классы и интерфейсы, поддерживающие работу с коллекциями объектов - списками, очередями, словарями. В пространство System.Collections , в свою очередь, вложено пространство имен Specialized , содержащее классы со специализацией, например, коллекции, элементами которых являются только строки. Пространство System.Windows.Forms содержит классы, используемые при создании Windows-приложений. Класс Form из этого пространства задает форму - окно, заполняемое элементами управления, графикой, обеспечивающее интерактивное взаимодействие с пользователем.
По ходу курса мы будем знакомиться со многими классами, принадлежащими различным пространствам имен библиотеки FCL .
Сегодня мы более подробно рассмотрим, каждый из этих компонентов.
CLR
На компьютере храниться в виде файла динамической библиотеки mscoree.dll, в проекте данная сборка подключается автоматически.
Какие задачи решает CLR?
- Загрузка пользовательских сборок
- Управление памятью
- Работа с потоками
- Безопасность выполнения кода
- Очистка памяти (сборщик мусора)
- и многое другое
CTS (Common Type System) – система общих типов.
Это детальное описание (спецификация) всех типов данных и программных конструкций, поддерживаемых исполняющей средой.
В частности описываются такие моменты, как взаимодействие между типами и их представление в формате метаданных. А так же определяет способы объявления, использования и управления типами в среде CLR, а так же обеспечивает многоязыковую поддержку.
Важно знать то, что CTS предоставляет разработчикам 5 типов. О них я уже писал ранее, но повторюсь ещё раз.
Типы: класс, интерфейс, делегат, структура, перечисление. Каждый тип может содержать любое количество членов.
Какие задачи решает CTS?
- Обеспечивает многоязыковую поддержку
- ООП
- Описывает характеристики членов. Например: доступность: public, private, protected
- Определяет правила, которых нужно придерживаться языкам, чтобы типы и объекты написанные на разных языках мог бы взаимодействовать между собой
И хотя в любом языке, у каждого типа свое ключевое слово, но стоит понимать, что все они в итоге соответствуют одному и тому же типу, который храниться в сборке mscorlib.dll.
// int a = 5;
// System.Int32 b = 10;
CLS
Как видно из описания, понимание CLS требуется в основном разработчикам компиляторов, рядовым разработчикам данная информация вряд ли пригодиться.
В итоге мы получаем примерно вот такую структуру:
- BCL (Base Class Library) библиотека базовых классов
- FCL (Framework Сlass Library) библиотека классов платформы
Данная библиотека подключается автоматически во время создания проекта, так же стоит понимать, что существуют и другие файлы сборки базовых библиотек.
Framework Class Library (FCL)
В принципе можно сказать, что Framework Class Library включает в себя библиотеку базовых классов BCL, которая, по сути, является её ядром.
Такую официальную формулировку так же приводят: MSDN, Wiki и многие другие авторы книг.
Но мы знаем, что FCL включает в себя библиотеки базовых классов. И правильнее формулировка должна звучать так:
Beforehand let’s take a look at Framework Class Library (FCL) in which you can see so many other classes, functionalities and other services and this article covers Base Class Library and Common Language Runtime.
CLR (Common Language Runtime)
CTS (Common Type System)
CLS (Common Language Specification)
Base Class Library (BCL)
Stands for Base class library also known as Class library (CL). BCL is a subset of Framework class library (FCL). Class library is the collection of reusable types that are closely integrated with CLR. Base Class library provides classes and types that are helpful in performing day to day operation e.g. dealing with string and primitive types, database connection, IO operations.
BCL define types that can be used to build any type of software application.
Managed and Unmanaged Code
Now that you’ve found out the definition about BCL and CLR I’m going to talk about Managed and unmanaged codes.
CIL and type metadata, assemblies themselves are also described using metadata, which is calledmanifest. The manifest contains information about the current version of the assembly, and a list of all externally referenced assemblies that are required for proper execution.so in the following article I’m going to use a tool to examine an assembly’s type, metadata, and manifest.
As you can see we have two classes,
- Program: which is the app’s entry point
- Calc:which has a method named Addnumbers and add two number and return the result of adding numbers.
Now let’s use ildasm.exe to examine our Calculator.exe file.
You can find ildasm.exe file in C:\Program Files (x86)\Microsoft SDKs\Windows\[your windows version]\Bin
If you want to use this tool in Visual Studio just follow these steps and add it in Visual Studio tools,
- First find ildasm.exe location (usually it’s located in C:\Program Files (x86)\Microsoft SDKs\Windows\[Windows Verwsion]\Bin\ildasm.exe
- Open up Visual Studio
- From Tools menu open External Tools and then you should see External Tools dialog,
- Click on add button, choose a Title of your tool (my title is ILDASM) ,in Command text box enter the path of ildasm.exe and in Argument textbox just click on right-arrow button and choose $(TargetPath)
- Check Close and exit.
- That’s it, it’s done.
What ildasm.exe offers?
ildasm will show you three basic things,
- A list of all classes and methods in your assembly
- The contents of the assembly’s manifest
- IL code for any method implemented in the assembly.
To open related assembly just go to tools menu and here we go,ILDASM is appear in this menu,just open it.
So,if you want to find some information about your application,open ildasm in your Tools menu,and you’ll see ildasm.exe dialog.
As you see there are some information about assembly’s type, manifest and metadata.
If I expand Calculator.Calc there would be AddNumbers methods.by double clicking on the method I can see the information about this method in new dialog windows.
So as you can see the AddNumbers method is represented using CIL as above picture.
To show you the format of the metadata, let’s take a look at our project metadata generated by AddNumbers method.to do that,simply open ildasm in your Tools menu and after dialog popped up ,just hit ctl+m to illustrate the type of Metadata of your project.
The Role of the Assembly Manifest
Manifest documents all external assemblies information such as the assembly’s version number, copyright information and so on.so accordingly it is compiler duty to generate assembly’s manifest rather than the programmer.
Читайте также: