Файл: Объектно-ориентированное программирование.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 110

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
  • тяжелая – основой которой являются процессы операционной системы. В данном случае каждый поток обладает собственным адресным пространством;
  • легкая – основой которой являются потоки в рамках одного процесса. В данном случае потоки используют одно адресное пространство.

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

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

Параллелизм может обеспечиваться не только средствами языка, как это сделано в Java, но и специальными библиотеками, которые используются для разработки параллельных систем на языках, не имеющих встроенной поддержки этого принципа, например в C++ [16].

2.7. Сохраняемость

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

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

В языках программирования традиционно можно встретить поддержку верхних трех уровней этого спектра. Три нижних уровня принято относить к компетенции баз данных.

Проблема сохраняемости данных связана с проблемой сохранения информации о структуре этих данных, что при сохранении объектов приводит к сохранению классов в объектно-ориентированных базах данных [17].

2.8. Выводы

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

3. Язык C#


3.1. История создания

Язык программирования C# является одним из представителей множества объектно-ориентированных языков программирования, разработанных в период 1998-2001 гг. компанией Microsoft под руководством А. Хейлсберга. Изначально цель данного языка заключалась в разработке прикладных программ для платформы Microsoft .NET Framework [10].

Свое название язык берет от музыкальной нотации, где символ диез обозначает повышение на полутон звука, соответствующего ноте. В случае программирования данный подход аналогичен названию языка C++, где «++» обозначает операцию инкремента переменной. Также название является игрой с цепочкой преобразований C → C++ → C++++(C#), так как символ «#» может быть представлен из четырех символов «+».

По причине существующих технических ограничений на отображение и того факта, что знак диез отсутствует на классической клавиатуре, для отображения названия используется знак номера «#» - это соглашение зафиксировано в спецификации ECMA-334 [19].

C# является языком C-подобного синтаксиса. Наиболее близкими к нему являются языки C++ и Java. C# характеризуется статической типизацией и поддерживает объектно-ориентированные особенности, делегаты, перегрузку операторов (сюда же относятся операторы приведения типа), а также атрибуты, свойства, обобщенные методы и типы, анонимные функции с поддержкой замыканий, события, итераторы, исключительные ситуации, комментарии в формате XML и т.д.

Основой языка C# стали лучшие черты языков-предшественников, таких как Modula, Pascal, C++, Smalltalk и, особенно Java. В C# нет моделей, которые считаются проблематичными в процессе разработки программных систем. Так, например, данный язык не предоставляет возможность множественного наследования классов, которая доступна в C++ и Java. Эта особенность избавляет разработчика от избыточных ошибок еще на этапе проектирования будущей структуры программы [20].

3.2. Характерные особенности

Одной из задач языка C# была задача создания прикладного языка общеязыковой исполняющей среды (Common Language Runtime, CLR - исполняющая среда для байт-кода, в которой компилируются программы, написанные на языках программирования, совместимых с платформой .NET) [3].

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


Развитие информационных технологий способствовало развитию языка программирования C#. Компания Microsoft постоянно обновляет список доступных технологий, компонентов и библиотек. Кроме того, развитие глобальной сети Интернет позволило создавать web-приложения на языке C#, опираясь на технологии ADO+, SOAP, COM+ и BiztalkFramework.

Разработчики языка C# хотели создать универсальный язык, позволяющий успешно сочетать в себе выразительность и простоту существующих объектно-ориентированных языков с мощными возможностями C++, из которого были взяты все основные языковые конструкции. Так, например, в языке C# можно встретить такие типы, как перечисления и структуры, отсутствующие в Java. Еще одним предшественником в области синтаксиса C# является язык VisualBasic, из которого взяты понятия свойств классов [12].

Одним из недостатков C# являются операции, критичные по продолжительности исполнения. Этот факт объясняется тем, что в С# нет некоторых ключевых моментов, необходимых для создания высокопроизводительных приложений. Так, например, в нем отсутствуют подставляемые деструкторы и функции, исполнение которых гарантировано в определенных местах программного кода [11].

Таким образом, к характерным особенностям языка C# относятся:

  • полный набор основных типов данных, доступных в C++;
  • поддержка технологии объектно-ориентированного программирования, в том числе наследование интерфейсов, перегрузка операторов и виртуальных функций;
  • наличие стандартной библиотеки шаблонных классов .NET, а также возможность легкого использования Windows API;
  • автоматическое освобождение динамической памяти;
  • автоматическая генерация XML-документов;
  • возможность добавления меток в виде атрибутов не только классам, но и методам. Эта особенность является полезной в случаях документирования, что позволяет воздействовать на процесс компиляции (например, пользуясь данной особенностью, можно особым образом помечать методы, которые необходимо компилировать исключительно в режиме отладки);
  • поддержка событий и свойств в стиле Visual Basic;
  • реализация прямого доступа к памяти и использование указателей (хотя C# разработан таким образом, что позволяет обходиться без этих особенностей);
  • быстрое и легкое изменение ключей компиляции, с помощью которых формируются библиотеки компонентов .NET или исполняемые файлы, используемые в последствии другим программным кодом аналогично элементам управления ActiveX (компоненты СОМ);
  • создание динамических web-страниц ASP.NET [13, 15].

3.3. Платформа .NET

Схема работы .NET Framework изображена на рисунке 5.

Рисунок 5 – Схема работы .NET Framework

Первой задачей любого разработчика является выбор среды разработки и компилятора, отвечающего за создание промежуточного кода на языке MSIL. С помощью базовых инструментов, поставляемых компанией Microsoft, разработчик может оперировать не только языком С#, но также C++ или Visual Basic. Кроме того, в настоящее время более двадцати независимых компаний предлагают собственные программные продукты, предназначенные для работы с платформой .NET.

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

В состав готового приложения .NET включаются сборки, представляющие собой один или несколько файлов, в которых кроме MSIL-кода также хранятся и метаданные. Метаданными принято называть различную служебную информацию о приложении. Таким образом, приложения .NET не требуют регистрации в системном реестре, аналогично COM-приложениям, потому что вся требующаяся информация поставляется вместе с приложением. Сюда же, к примеру, добавляются данные о разработчике, версии приложения и т.п.

Итоговое приложение может исполняться на любом компьютере с установленной операционной средой .NET Framework. Код приложения не затрагивает уровень операционной системы, а взаимодействует только с операционной средой.

После запуска приложения в дело вступает среда выполнения приложения CLR, которая загружает сборки приложения и обеспечивает его выполнение. Но для этого необходимо преобразовать код MSIL в машинные команды процессора [18].

3.4. Основы языка

3.4.1. Пространство имён

.NET Framework дает программисту определенный базовый набор различных функций. Каждая функция принадлежит какому-то конкретному классу. Классы группируются по пространствам имен. Эти пространства обладают вложенной структурой и могут быть представлены в виде иерархии Для навигации между пространствами в C# используется ключевое слово «using».

Прикладные программные продукты используют собственные пространства имен, определяемые разработчиком. Наиболее популярным и масштабным пространством имен является системное пространство (System). При компиляции программного модуля транслятор по полному имени функции (если используется оператор using – то по восстановленному) находит ее код, который и используется в процессе выполнения сборки.


3.4.2. Система типов

В языке программирования C# система типов характеризуется типами двух категорий. В свою очередь, каждая категория содержит подкатегории: типы-значения и типы-ссылки.

На рисунке 6 изображена схема типов языка C#.

Рисунок 6 – Схема типов языка C#

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

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

К простым типам относятся:

  • целые числа (int);
  • числа с плавающей точкой (float);
  • decimal;
  • логический тип (bool).

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

Наряду с простыми типами, существуют еще и производные - типы, требующие предварительного объявления.

Основные отличия ссылочных типов от типов-значений представлены в таблице 2.

Таблица 2 – Отличия типов-значений и ссылочных типов

Тип-значение

Ссылочный тип

Содержимое

Значение

Ссылка

Хранение

В стеке

В динамической памяти

Значение по умолчанию

0, false, ‘\0’

null

Особенности копирования

Копируется значение

Копируется ссылка

Объявление любого класса или структуры в языке C# основано на объявлении предопределенного класса Object (наследование от класса Object). В результате этого разработчик получает возможность вызова от имени объектов-представителей любой структуры или класса методов-наследников класса Object. В частности, метода ToString, который предназначен для получения строкового (значение типа string) представления объекта.

Также в C# существует важное ограничение на использование объектов размерных типов - так, необходимым условием использования этих объектов является их явная инициализация.

3.5. Выводы

В данной главе описана история создания языка высокого уровня C#, его характерные особенности и основы, а также платформа .NET.