Основные понятия языка программирования C#. Ход развития С#: Ветвь языков: В С С++ С# Кроме этого - еще знаковые языки программирования: Java и Visual.

Презентация:



Advertisements
Похожие презентации
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Advertisements

Объектно-ориентированный подход в языке C#. Класс в языке C# - ссылочный тип, определенный пользователем. Для классов ЯП C# допустимо только единичное.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Министерство образования Республики Беларусь Белорусский государственный университет Управляющие структуры языков программирования.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Переменные и операторы УРОК 2. Переменные ПЕРЕМЕННАЯ – ?... контейнер для хранения данных. Переменная имеет имя – это….? последовательность букв, цифр.
Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
1 Классы в Java Ключевое слово class означает: Я говорю тебе, как выглядит новый тип объекта. Класс является базовым элементом объектно-ориентированного.
Информационные технологии Стандартные библиотечные функции манипулирование данными преобразование и шифрование определение пользователями функций.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
ФИЛОСОФИЯ.NET Любому современному программисту, который желает идти в ногу с последними веяниями, каждые несколько лет приходится переучиваться.
К.т.н. Мерзлякова Екатерина Юрьевна, доцент кафедры ПМиК.
Структуры и объединения Structures and unions НГТУ ИРИТ кафедра ИСУ Ольга Пронина.
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Процедуры и функции. Разработал учитель информатики МБОУ СОШ 50 г. Краснодара Ракута Елизавета Григорьевна « Учиться и, когда придет время, прикладывать.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Транксрипт:

Основные понятия языка программирования C#

Ход развития С#: Ветвь языков: В С С++ С# Кроме этого - еще знаковые языки программирования: Java и Visual Basic.

Язык B придуман в 1963 году творческим коллективом разработчиков, основной создатель - К.Томпсон из Технологического института Массачусетса (Ken Thompson, MIT). Основная цель разработки языка - реализация операционной системы UNIX. Существовавший язык PL/I (для мэйнфреймов производства компании IBM) был громоздким и меньше подходил для поставленной задачи, чем новое, оригинальное решение ученых-практиков.

Язык С изобретен на основе языка B в 1972 году. Авторы - К.Томпсон и Д.Ритчи, работающие в исследовательской лаборатории компании AT&T (AT&T Bell Telephone Laboratories). В варианте C язык B расширился за счет явного использования типов, структур и ряда новых операций. Дальнейшее развитие языка происходило в той же организации.

Разработчики языка С Кен Томпсон (Kenneth Thompson) Деннис Ритчи (Dennis Ritchie) Известны благодаря двум важнейшим программным разработкам XX века: ОС UNIX и ЯП C. Оба начали карьеры в Bell Labs в 1960-х, навсегда изменив компьютерный мир своими идеями. Кен Томпсон больше не в компьютерной индустрии, Деннис Ритчи по-прежнему сотрудник Lucent Technology и работает над новой, основанной на UNIX ОС - Plan9.

Язык С++ В 1984 году, Б. Страуструп (Bjarne Stroustrup, Bell Labs) выступил с проектом языка С++ – ООП-расширения языка C, в котором вводится понятие класса как объекта данных. Название C++ для нового языка предложил Р.Маскитти (Rics Mascitti, Bell Labs).

Язык С# В 2000 году корпорация Microsoft выпустила в свет C++ нового поколения под названием C#, основной постулат которого: "всякая сущность есть объект". Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода. C# объединил лучшие черты целого ряда предшественников

Язык С# Несмотря на различия между моделью COM (стандарт Microsoft) и моделью Java Beans (стандарт Sun Microsystems) язык C# имеет много общего с языком Java. Немало черт C# унаследовал и от своего предшественника- языка Visual Basic (Microsoft).

Черты сходства C# и Java: -Относятся к категории ОО и предполагают единственность наследования. -Механизмы интерфейсов, обработки исключительных ситуаций, процессов или "нитей" (threads). -"Сборка мусора" и пространства имен реализованы сходным образом. -Характеризуются сильной (строгой) типизацией и динамической загрузкой кода при выполнении программы.

Черты сходства C# и С++: От прямого предшественника C++ язык C# унаследовал: -"перегруженные" операторы, -небезопасные арифметические операции с плавающей точкой и др. особенности синтаксиса. Но возможности нового языка С# не ограничиваются суммой возможностей его исторических предшественников.

Язык С# Подобен языкам Java, C++ и VB, но является компонентно- ориентированным и более безопасным. Добавлен ряд новых черт: - делегаты, -индексаторы, -механизм (un)boxing и др.

Основные возможности C# Сходство с Java Сходство с С++ - объектно-ориентированный (единственное наследование) - интерфейсы - исключения - нити (threads) - пространство имен - сильная (строгая) типизация - сборка мусора - отражение (reflection) - динамическая загрузка кода -"перегруженные операторы« -арифметические операции с плавающей точкой относятся к небезопасному коду - некоторые особенности синтаксиса

Принципиальные решения в С#: компонентно-ориентированный подход к программированию (характерен для идеологии Microsoft.NET в целом); свойства как средство инкапсуляции данных (характерно для ООП); обработка событий (имеются расширения, в том числе в части обработки исключений: try); унифицированная система типизации (соответствует идеологии Microsoft.NET в целом); делегаты (delegate – развитие указателя на функцию в C, C++); индексаторы (indexer – операторы индекса для обращения к элементам класса-контейнера); перегруженные операторы (развитие ООП); оператор foreach (обработка всех элементов классов- коллекций, аналог VB); механизмы boxing и unboxing для преобразования типов; атрибуты (средство оперирования метаданными в COM- модели); прямоугольные массивы (набор элементов с доступом по номеру индекса и одинаковым количеством столбцов и строк).

Структура программы на C#

Программа на C# состоит из одного или нескольких файлов с исходным текстом. Каждый файл имеет расширение.CS (FileName1, FileName2, FileName3). Файлы могут содержать и не содержать пространства имен (FileName2. cs включает три пространства имен, A, B,C, а FileName1. cs и FileName3. cs не содержат их). Каждое пространство имен может содержать описание классов (одного или нескольких) и не содержать (пространство имен B содержит 3 описания трех классов (X, Y и Z), а пространства имен А и С не содержат ни одного описания классов).

Преобразование типов Для преобразования типов выражений языков программирования из ссылочных в типы-значения и обратно используются механизмы boxing и unboxing.

Сопоставление ссылочных типов и типов-значений. Типы- значения Ссылочные типы Переменная содержит Переменная хранится Значение по умолчанию значение в стеке 0, false, \0 ссылку на значение в куче null

Сопоставление ссылочных типов и типов-значений. Типы-значения Ссылочные типы Примерint i = 25; int j = i; i [25] j [25] string s = "John" ; string sl = s; s [ ] [John] sl [ ]

Реализация основных семейств типов данных: ссылочных и типов-значений в C#. Простейший объект C# - переменная. В случае применения типов-значений переменная содержит собственно значение, а при использовании ссылочных типов – не само значение, а лишь ссылку (указатель) на него.

Объект – переменная в С# Место хранения переменной: -определенной как тип-значение - стек, -определенной как ссылочный тип – "куча". По умолчанию переменная инициализируется значением: -в случае типа-значения: 0 - для целого, вещественного типа данных false - для логического типа данных \0 -для строкового типа данных -в случае ссылочного типа: значение пустой ссылки null. При выполнении оператора присваивания: - в случае переменной-значения копируется значение - в случае переменной-ссылки – ссылка.

Объект – константа в С# Примеры описания констант посредством оператора перечисления enum (такой способ описания констант изначально ориентирован на написание безопасного кода, так как содержит обязательную инициализацию). Оператор перечисления enum – это список поименованных констант.

Объект – константа в С# Описание производится непосредственно в пространстве имен с необходимой областью видимости: enum Color {red, blue, green} enum Access {personal=1, group=2, all=4} enum Access1 : byte {personal=1, group=2, all=4} Пример использования константы: Color c = Color.blue; Для перечислимых констант нужно указать полное имя: Access a = Access.personal | Access.group; if((Access.personal & a) != 0) Console.WriteLine("access granted");

Определения типа для объекта - оператор typeof Оператор typeof - для любого заданного типа возвращает дескриптор этого типа. Дескриптор типа для объекта o возвращается операцией o.GetType(). Пример: Type t = typeof(int); Console.WriteLine(t.Name); При выполнении тип рассматриваемого выражения будет определен системой как Int32.

Оператор sizeof -возвращает размер элемента данного типа (в байтах). Применим только к типам-значениям и используется в блоках небезопасного кода (т.к. размер структур может изменяться от среды реализации); необходима компиляция кода командой csc /unsafe xxx.cs. Пример (блоки небезопасного кода - словом unsafe): unsafe { Console.WriteLine( sizeof(int)); Console.WriteLine( sizeof(MyEnumType)); Console.WriteLine( sizeof(MyStructType)); }

Структуры struct Пример описания структуры Point, моделирует точку на плоскости: struct Point { public int x, y; public Point (int x, int y) { this.x = x; this.y = y; } public void MoveTo (int a,int b) { x=a; y=b; } }

Структура struct Point Координаты точки x, y - атрибуты объекта, поля структуры. Операция Point - функция инициализации объекта - конструктор. Унаследованный от C++ указатель this - ссылка на текущий объект. Операция (метод) MoveTo изменяет текущее местоположение точки на пару координат (a,b).

Использование объекта-структуры Необходимо проинициализировать объект- значение в стеке посредством конструктора. Затем - вызвать метод MoveTo: Point p = new Point(3, 4); p.MoveTo(10, 20); В примере - дважды идентификатор Point. Проблемы коллизий переменных и возможных путях ее преодоления. В языке SML переменные могут быть описаны либо глобально (описание распространяется на весь текст программы), либо локально в теле функции (описание - на весь текст функции).

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

Область описания объектов Принимаются контекстные соглашения: Недопустимо двукратное описание в пределах данной области описания. Последовательность описаний является произвольной. Исключение - локальные переменные, которые описывают до первого использования. Принимаются соглашения об областях видимости. Любой идентификатор виден лишь из своей области описания. Область видимости можно изменить посредством модификаторов (private, protected).

Пространства имен языка C# Пример: два файла X.cs и Y.cs Файл X.cs - описания пространств имен A и B: namespace A { class C... interface I struct S enum e delegate d... namespace B { // полное имя: A.B... } }

Файл Y.cs - описания пространств имен A, B и С: namespace A {... namespace B {... } namespace C {... }} В обоих случаях пространства имен вложены в A. При обращении к вложенному пространству имен нужно указывать его полное имя, например A.B. Пространства имен из разных файлов, имеющие один и тот же идентификатор, составляют единую область описания. Вложенные пространства имен составляют собственную (отдельную) область описания.

Пример описания локальных переменных void foo(int a) { int b; if (...) { int b; // ошибка: переменная b уже описана в другом блоке int c; // описание корректно int d;... } else { int a; // ошибка: переменная а уже описана во внешнем блоке int d; // конфликта с d из предыдущего блока нет } for (int i=0;...){... } for (int i=0;...){... } // фрагмент корректен: нет конфликтов с переменной i из предыдущего цикла int c; // ошибка: c уже описана в данном пространстве имен }

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

Пример: три файла с описаниями структур данных, оформленными в виде отдельных пространств имен: Color.cs namespace Util { public enum Color {... } } Figures.cs namespace Util.Figures { public class Rect {... } public class Circle {... } } Triangle.cs namespace Util.Figures { public class Triangle {... } }

При использовании полного имени пространства имен (Util.Figures) можно обойтись без конкретизации классов (Rect), описанных внутри этого пространства имен. Но в случае обращения к классам вне данного пространства имен необходимо использовать полное имя объекта (Util.Color): using Util.Figures; class Test { Rect r; // без указания полного имени т.к. // используем (Util.Figures) Triangle t; Util.Color c; // c указанием полного имени }

Преимущества С#: -Претендует на подлинную объектную ориентированность -Призван практически реализовать компонентно- ориентированный подход, способствующий меньшей машинно-архитектурной зависимости программного кода, большей гибкости, переносимости и легкости повторного использования (фрагментов) программ. -Изначальная ориентация на безопасность кода -Унифицированная, максимально близкая по масштабу и гибкости к Common Type System, принятой в Microsoft.NET, система типизации -Расширенная поддержка событийно-ориентированного программирования -Язык C# является "родным" для создания приложений в среде Microsoft.NET, поскольку тесно и эффективно интегрирован с ней -Язык C# не просто сумма достоинств современных ЯП (Java, C++, Visual Basic), а ЯП нового поколения.

Недостатки С#: Сложный синтаксис (~ 75% его синтаксических возможностей аналогичны Java, 10% подобны C++, а 5% – взяты из языка Visual Basic) Объем свежих концептуальных идей в языке C# невысок (составляет ~ 10% от общего объема конструкций языка) Утверждение, что язык C# является чисто объектным, допускает неоднозначную интерпретацию. Профессор K. Гуткнехт (K.Gutknecht) (г. Цюрих) предложил альтернативную ("активную") объектную модель для разработанного им языка программирования Zonnon.

Недостатки С#: Компилятор и среда разработки ПО, поддерживающие C#, обладают невысокой производительностью (код программы на C# компилируется и выполняется ~ в 100 раз медленнее, чем тот же код на языке C). Производительность программ на C# сравнима с тем же показателем для языка Java. Пока программы на C#, не могут функционировать под управлением альтернативных ОС (ведутся работы по обеспечению совместимости с ОС Linux и FreeBSD семейства UNIX). Эти отдельные недостатки носят субъективный, локальный, временный характер.

Базовые конструкции языка C# Объявление и инициализация переменных: Тип_переменной имя_переменной [=значение]; Примеры: int x; //обьявление переменной x x=100; //инициализация переменной x long w,z=100; //обьявление переменных w и z и //инициализация z long q=100*z; //обьявление переменной с //динамической инициализацией

Язык C# - ЯП со строгим контролем типов данных. В C# две основные категории встроенных типов данных - простые типы и ссылочные типы. Область видимости переменной в C# - блок кода, заключенный в фигурные скобки { }. Создание переменных осуществляется при входе управления программой в область видимости; уничтожение - при выходе из нее.

Основные управляющие операторы Условный оператор: if (условие) оператор [else оператор]; if (условие 1) оператор 1; else if (условие 2) оператор 2; else if (условие 3) оператор 3;... Оператор выбора: switch (выражение){ case константа 1: оператор 1;... break; case константа 2: операторX1;... break;... default: операторZ1;... break;}

Основные управляющие операторы Оператор цикла: for(инициализация, условие_выхода, итерация) оператор; while (условие_продолжения) оператор; do оператор; while (условие продолжения);

Пространства имен - определяет область объявления данных, что позволяет хранить каждый набор имен данных отдельно от других наборов. В С# имена, объявленные в одном пространстве имен, не конфликтуют с именами, объявленными в другом пространстве имен. Библиотека.NET Framework (библиотека С#) использует пространство имен System. Чтобы сделать видимыми пространства имен без указания полного имени (с использованием оператора '.') в C# - директива using: using имя_пространства_имен; В C# возможно использование псевдонимов для имен вида: using псевдоним = имя; Объявление пространства имен в C# : namespace имя {члены_пространства_имен}