Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Введение в теорию программирования. Объектно-ориентированный подход. Учебное пособие
.pdf
77].
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
51

Разработка элементарных программ на языке
программирования C#
Цель: знакомство с базовыми особенностями языка программирования
C# и разработки программ с использованием среды Microsoft Visual
Studio .NET
Теоретические сведения
Краткая информация о платформе .NET
Платформа .NET Framework предоставляет среду для поддержки
создания и выполнения интероперабельных гетерогенных приложений.
Основными особенностями данной платформы являются не зависящая
от языка среда исполнения (Common Language Runtime, CLR) и
библиотека классов .NET.
Базовые конструкции языка C#
Объявление и инициализация переменных:
Тип_переменной имя_переменной [=значение];
Примеры:
int x; //обьявление переменной x
x=100; //инициализация переменной x
long w,z=100; //обьявление переменных w и z и
//инициализация z
long q=100*z; //обьявление переменной с
//динамической инициализацией
Язык C# является языком программирования со строгим контролем
типов данных. В языке C# выделяют две основные категории
встроенных типов данных - простые типы и ссылочные типы.
Характеристики основных простых типов данных в языке
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
52

программирования C# представлены в таблице 6 .
Под областью видимости переменной в C# понимается блок кода,
заключенный в фигурные скобки {}. Создание переменных
осуществляется при входе управления программой в область
видимости; уничтожение - при выходе из нее.
Таблица 6. Характеристики основных простых типовданных.
Тип Описание Объем,бит
bool Значение истина/ложь 1
byte 8-битовое беззнаковое целое 8
char Символ 16
decimal Числовой тип для финансовых вычислений 128
double Число двойной точности с плавающей точкой 64
float Число с плавающей точкой 32
int Знаковое целое 32
long Длинное знаковое целое 64
sbyte 8-битовое знаковое целое 8
short Короткое целое 16
uint Беззнаковое целое 32
ulong Беззнаковое длинное целое 64
ushort Беззнаковое короткое целое 16
Основные управляющие операторы
Условный оператор:
if (условие) оператор [else оператор];
if (условие1) оператор1;
else if (условие2) оператор2;
else if (условие3) оператор3;
...
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
53

Оператор выбора:
switch (выражение){
case константа1:
оператор1;
...
break;
case константа2:
операторX1;
...
break;
...
default:
операторZ1;
...
break;
}
Оператор цикла:
for(инициализация, условие_выхода, итерация)
оператор;
while (условие_продолжения) оператор;
do оператор;
while (условие продолжения);
Пространства имен
Понятие пространства имен определяет область объявления данных,
что позволяет хранить каждый набор имен данных отдельно от других
наборов. В языке С# имена, объявленные в одном пространстве имен,
не конфликтуют с именами, объявленными в другом пространстве
имен. Библиотекой .NET Framework (т.е. библиотекой языка С#)
используется пространство имен System.
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
54

Для того, чтобы сделать видимыми пространства имен без указания
полного имени (т.е. с использованием оператора ' .') в языке C#
существует директива using следующего вида.
Синтаксис:
using имя_пространства_имен;
Кроме того, в языке C# возможно использование псевдонимов для
имен следующего вида:
using псевдоним = имя;
Для объявления пространства имен в языке C# используется ключевое
слово namespace.
Синтаксис:
namespace имя {члены_пространства_имен}
Пример элементарной программы на C#
Программа ' Hello, World ' на языке C# выглядит следующим
образом:
using System;
class HelloWorld01
{
public static void Main()
{
Console.Write("Hello, World!");
Console.ReadLine();
}
}
Порядок выполнения работы
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
55

1. Сформулировать формальную постановку задачи (например, в
виде алгоритма на псевдокоде).
2. Реализовать программу на языке C# в соответствии с вариантом
исполнения.
3. Сравнить разработанную программу на C# с ранее созданной
программой на SML.
Варианты заданий
Написать C# программу, реализующую функцию согласно варианту
задания. Исходные данные вводятся с клавиатуры.
1. Реализовать функцию вычисления суммы двух целых чисел.
2. Реализовать функцию вычисления разности двух целых чисел.
3. Реализовать функцию вычисления произведения двух целых
чисел.
4. Реализовать функцию вычисления частного двух целых чисел.
5. Реализовать функцию вычисления суммы двух вещественных
чисел.
6. Реализовать функцию вычисления разности двух вещественных
чисел.
7. Реализовать функцию вычисления произведения двух
вещественных чисел.
8. Реализовать функцию вычисления частного двух вещественных
чисел.
9. Реализовать функцию возведения целого числа в квадрат.
10. Реализовать функцию возведения в квадрат суммы двух целых
чисел.
11. Реализовать функцию возведения в квадрат разности двух целых
чисел.
12. Реализовать функцию возведения в квадрат произведения двух
целых чисел.
13. Реализовать функцию возведения в квадрат частного двух целых
чисел.
14. Реализовать функцию возведения в квадрат суммы двух
вещественных чисел.
15. Реализовать функцию возведения в квадрат разности двух
вещественных чисел.
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
56

16. Реализовать функцию возведения в квадрат произведения двух
вещественных чисел.
17. Реализовать функцию возведения в квадрат частного двух
вещественных чисел.
18. Реализовать функцию возведения в куб целого числа.
19. Реализовать функцию возведения в куб суммы двух целых чисел.
20. Реализовать функцию возведения в куб разности двух целых
чисел.
21. Реализовать функцию возведения в куб произведения двух целых
чисел.
22. Реализовать функцию возведения в куб частного двух целых
чисел.
23. Реализовать функцию возведения в куб суммы двух вещественных
чисел.
24. Реализовать функцию возведения в куб разности двух
вещественных чисел.
25. Реализовать функцию возведения в куб произведения двух
вещественных чисел.
26. Реализовать функцию возведения в куб частного двух
вещественных чисел.
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
57

Семантика основных конструкций языка
программирования C#
В данной лекции будут рассмотрены вопросы, относящиеся к
понятийному аппарату и выразительным возможностям семантического
представления формальных теорий и языков программирования. При
этом основное внимание будет уделено сопоставлению семантики
языков объектно-ориентированного и функционального
программирования. В качестве примеров языков программирования
будут выступать уже знакомый нам по предыдущему курсу язык SML и
изучаемый нами язык C#.
Представим построение денотационной семантики важнейших
конструкций языка программирования C#.
Напомним, что история развития теории и практики семантического
анализа языков программирования были рассмотрены во
вступительной лекции.
Процедура построения денотационной семантики основных
конструкций языка программирования SML изложена в лекции 8.
Поставим задачу формализации семантики языка объектноориентированного программирования C#. Заметим сразу, что в рамках
данного курса будет рассматриваться не все множество возможных
конструкций данного языка, а некоторое весьма ограниченное (хотя и
вполне достаточное для иллюстрации основных идей курса) их
подмножество, которое условно назовем языком программирования C#
и будем именовать так в дальнейшем.
Прежде всего, рассмотрим синтаксис языка C#, т.е. перечислим
основные типы составляющих его конструкций.
Язык C# содержит множество выражений E, которые формализуются
посредством БНФ в следующем виде:
E ::= true|false|0|1|I|!E|E1==E2|E1+E2
Заметим, что выражения включают логические ( true и false ) и
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
58

целочисленные (в ограниченном объеме: 0 и 1 ) константы, множество
идентификаторов ( I ), а также операции отрицания ( !E ), сравнения (
E1==E2 ) и сложения ( E1+E2 ).
Кроме того, язык C# содержит множество команд С, которые
формализуются посредством БНФ в следующем виде:
С::=I=E | if(E)C1 else C2 |
while(E) C | C1;C2
Заметим, что команды включают присваивание I=E, условие if(E)C1
else C2, цикл с предусловием while(E) C, а также
последовательность команд C1;C2 .
Деление синтаксиса языка C# на выражения и команды во многом
является условным и служит иллюстративным целям.
Как и ранее, в качестве математической формализации, моделирующей
семантику языков программирования (в частности, языка C#), будет
использоваться теория вычислений Д. Скотта.
Приведем порядок построения формальной модели семантики языка
программирования C# согласно ранее представленному формальному
описанию синтаксиса языка в терминах БНФ.
Прежде всего, необходимо дать определение синтаксических доменов
(т.е. доменов, характеризующих основные синтаксические категории)
для идентификаторов ( домен Ide ), выражений ( домен Exp ) и команд
( домен Com ).
Далее, следует представить определение вычислительной модели на
основе синтаксических доменов.
Затем нужно перейти к определению семантических функций ( E для
домена Exp, C для домена Com и т.д.), которые отображают
синтаксические конструкции языка программирования в
соответствующие им семантические представления.
Наконец, следует сформулировать определение семантических
предложений в терминах смены состояний программы.
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
59

Заметим, что при выполнении программы (в частности, написанной на
языке программирования C#) происходит изменение состояния,
состоящего из памяти ( m, memory ), которая в простейшем случае
характеризует соответствие идентификаторов и значений (то есть, по
сути, связывание переменной со значением ) либо имеет значение
unbound (характеризующее отсутствие связи идентификатора со
значением, т.е. аналогичное свободной переменной).
В соответствии с намеченной схемой рассуждений, перейдем к
описанию синтаксических доменов, которые в полной мере определяют
синтаксис языка C#:
Ide ={I|I - идентификатор};
Com ={C|C - команда};
Exp ={E|E - выражение}.
Совокупность всех возможных идентификаторов языка C# организуем в
домен Ide, команд - в домен Com, и, наконец, выражений - в домен Exp
Далее, сформулируем вычислительную модель на основе состояний
программы языка C#, для наглядности систематизировав ее в виде
следующей таблицы:
Таблица 16.1. Вычислительная модель на основе состояний программы
языка C#
Параметр Домен Соотношение
Состояние State (s) State = Memory
Память Memory
(m) Memory = Ide -> [Value +
(unbound)]
Значение Value (v) Value = Int + Bool
Заметим, что состояние программы в произвольный момент времени
определяется состоянием "памяти" абстрактной машины той или иной
формы. При этом под памятью понимается отображение из домена
идентификаторов в домен значений (т.е. аналог связывания переменной
со значением в ламбда-исчислении). Для корректной обработки
исключительных ситуаций, возникающих в случае свободных
переменных, вводится дополнительный элемент unbound. Домен
Введение в теорию программирования. Объектно-ориентированный подходЗыков С. В.
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
