Краткий обзор элементов С#

- Содержание:

- Краткий обзор элементов С#
- Типы данных, литералы и переменные

Краткий обзор элементов С#

Сообщение Marley 28 ноя 2009, 00:56

Наибольшие трудности в изучении языка программирования вызывает то обстоятельство, что ни один из его элементов не существует обособленно. Напротив, все элементы языка действуют совместно. Такая взаимосвязанность затрудняет рассмотрение одного аспекта С# безотносительно к другому. Поэтому для преодоления данного затруднения в этой главе дается краткий обзор нескольких средств языка С#, включая общую форму программы на С#, ряд основных управляющих и прочих операторов. Вместо того чтобы углубляться в детали, в этой главе основное внимание уделяется лишь самым общим принципам написания любой программы на С#.
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Объектно-ориентированное программирование

Сообщение Marley 28 ноя 2009, 01:07

Объектно-ориентированное программирование

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

ООП представляет собой эффективный подход к программированию. Методики программирования претерпели существенные изменения с момента изобретения компьютера, постепенно приспосабливаясь, главным образом, к повышению сложности программ. Например, когда появились первые ЭВМ, программирование заключалось в ручном переключении на разные двоичные машинные команды с переднего пульта управления ЭВМ. Такой подход был вполне оправданным, поскольку программы состояли всего из нескольких сотен команд. Дальнейшее усложнение программ привело к разработке языка ассемблера, который давал программистам возможность работать с более крупными и сложными программами, используя символическое представление отдельных машинных команд. Неуклонное усложнение программ вызвало потребность в разработке и внедрении в практику программирования таких языков высокого уровня, как, например, FORTRAN и COBOL, которые предоставляли программистам больше средств для того, чтобы как-то справиться с постоянно растущей сложностью программ. Но как только возможности этих первых языков программирования были полностью исчерпаны, появились разработки языков структурного программирования, в том числе и С.

На каждом этапе развития программирования появлялись методы и инструментальные средства для обуздания неуклонно растущей сложности программ. И на каждом таком этапе новый подход вбирал в себя все самое лучшее из предыдущих, знаменуя собой прогресс в программировании. Это же можно сказать и об ООП. До ООП многие проекты достигали (а иногда и превышали) предел, за которым структурный подход к программированию оказывался уже неработоспособным. Поэтому для преодоления трудностей, связанных с усложнением программ, и возникла потребность в ООП.

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

Совсем иначе работают объектно-ориентированные программы. Они организованы вокруг данных, исходя из главного принципа: "данные управляют доступом к коду". В объектно-ориентированном языке определяются данные и код, которому разрешается воздействовать на эти данные. Следовательно, тип данных точно определяет операции, которые могут быть выполнены над данными.

Для поддержки принципов ООП все объектно-ориентированные языки программирования, в том числе и С#, должны обладать тремя общими свойствами: инкапсуляцией, полиморфизмом и наследованием. Рассмотрим каждое из этих свойств в отдельности.
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Инкапсуляция

Сообщение Marley 28 ноя 2009, 01:10

Инкапсуляция

Инкапсуляция — это механизм программирования, объединяющий вместе код и данные, которыми он манипулирует, исключая как вмешательство извне, так и неправильное использование данных. В объектно-ориентированном языке данные и код могут быть объединены в совершенно автономный черный ящик. Внутри такого ящика находятся все необходимые данные и код. Когда код и данные связываются вместе подобным образом, создается объект. Иными словами, объект — это элемент, поддерживающий инкапсуляцию.

В объекте код, данные или же и то и другое могут быть закрытыми или же открытыми. Закрытые данные или код известны и доступны только остальной части объекта. Это означает, что закрытые данные или код недоступны части программы, находящейся за пределами объекта. Если же данные или код оказываются открытыми, то они доступны другим частям программы, хотя и определены в объекте. Как правило, открытые части объекта служат для организации управляемого интерфейса с закрытыми частями.

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

Код и данные, составляющие вместе класс, называют членами. Данные, определяемые классом, называют полями, или переменными экземпляра. А код, оперирующий данными, содержится в функциях-членах, самым типичным представителем которых является метод. В С# метод служит в качестве аналога подпрограммы. (К числу других функций-членов относятся свойства, события и конструкторы.) Таким образом, методы класса содержат код, воздействующий на поля, определяемые этим классом.
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Полиморфизм

Сообщение Marley 28 ноя 2009, 01:15

Полиморфизм

Полиморфизм, что по-гречески означает "множество форм", — это свойство, позволяющее одному интерфейсу получать доступ к общему классу действий. Простым примером полиморфизма может служить руль автомашины, который выполняет одни и те же функции своеобразного интерфейса независимо от вида применяемого механизма управления автомашиной. Это означает, что руль действует одинаково независимо от вида рулевого управления: прямого действия, с усилением или реечной передачей. Следовательно, при вращении руля влево автомашина всегда поворачивает влево, какой бы вид управления в ней ни применялся. Главное преимущество единообразного интерфейса заключается в том, что, зная, как обращаться с рулем, вы сумеете водить автомашину любого типа.

Тот же самый принцип может быть применен и в программировании. Рассмотрим для примера стек, т.е. область памяти, функционирующую по принципу "последним пришел — первым обслужен". Допустим, что в программе требуются три разных типа стеков: один — для целых значений, другой — для значений с плавающей точкой, третий — для символьных значений. В данном примере алгоритм, реализующий все эти стеки, остается неизменным, несмотря на то, что в них сохраняются разнотипные данные. В языке, не являющемся объектно-ориентированным, для этой цели пришлось бы создать три разных набора стековых подпрограмм с разными именами. Но благодаря полиморфизму для реализации всех трех типов стеков в С# достаточно создать лишь один общий набор подпрограмм. Зная, как пользоваться одним стеком, вы сумеете воспользоваться и остальными.

В более общем смысле понятие полиморфизма нередко выражается следующим образом: "один интерфейс — множество методов". Это означает, что для группы взаимосвязанных действий можно разработать общий интерфейс. Полиморфизм помогает упростить программу, позволяя использовать один и тот же интерфейс для описания общего класса действий. Выбрать конкретное действие (т.е. метод) в каждом отдельном случае — это задача компилятора. Программисту не нужно делать это самому. Ему достаточно запомнить и правильно использовать общий интерфейс.
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Наследование

Сообщение Marley 28 ноя 2009, 01:17

Наследование

Наследование представляет собой процесс, в ходе которого один объект приобретает свойства другого объекта. Это очень важный процесс, поскольку он обеспечивает принцип иерархической классификации. Если вдуматься, то большая часть знаний поддается систематизации благодаря иерархической классификации по нисходящей. Например, сорт яблок Джонатан входит в общую классификацию сортов яблок, которые, в свою очередь, относятся к классу фруктов, а те — к еще более крупному классу пищевых продуктов. Это означает, что класс пищевых продуктов обладает рядом свойств (съедобности, питательности и т.д.), которые по логике вещей распространяются и на его подкласс фруктов. Помимо этих свойств, класс фруктов обладает своим собственными свойствами (сочностью, сладостью и т.д.), которыми он отличается от других пищевых продуктов. У класса яблок имеются свои характерные свойства (растут на деревьях, не в тропиках и т.д.). Таким образом, сорт яблок Джонатан наследует свойства всех предшествующих классов, обладая в то же время свойствами, присущими только этому сорту яблок, например красной окраской кожицы с желтым бочком и характерным ароматом и вкусом.

Если не пользоваться иерархиями, то для каждого объекта пришлось бы явно определять все его свойства. А если воспользоваться наследованием, то достаточно определить лишь те свойства объекта, которые делают его особенным в его классе. Он может также наследовать общие свойства своего родителя. Следовательно, благодаря механизму наследования один объект становится отдельным экземпляром более общего класса.
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Первая простая программа

Сообщение Marley 28 ноя 2009, 01:23

Первая простая программа

А теперь самое время перейти к примеру конкретной программы на С#. Для начала скомпилируем и выполним короткую программу.


Код: Выделить всё
/*  
   This is a simple C# program. 
   Call this program Example.cs. 
*/
 
 
using System
;

class Example
{

    // A C# program begins with a call to Main(). 
    static void Main()
    {
        Console.WriteLine("A simple C# program.");
        
    
}

}
 


Основной средой для разработки программ на С# служит Visual Studio корпорации Microsoft. Для компилирования примеров всех программ, в том числе и тех, где используются новые средства С# 3.0, вам потребуется Visual Studio 2008 или же более поздняя версия, поддерживающая С#. Для изучения С# 3.0 как нельзя лучше подходит пакет Visual С# 2008 Express Edition, поскольку он свободно доступен. Он включает в себя полноценный компилятор, полностью поддерживающий С# 3.0, а следовательно, позволяющий компилировать примеры всех программ. Кроме того, в данный пакет входит интегрированная среда разработки Visual Studio. Несмотря на то что пакет Visual С# 2008 Express Edition не поддерживает все инструментальные средства, которые могут потребоваться для коммерческой разработки программ, он идеально подходит для изучения С#. На момент написания этой книги пакет Visual С# 2008 Express Edition можно было загрузить по адресу http://www.microsoft.com/express/ или http://www.microsoft.com/express/ru/download/. Весь код, был проверен с помощью компилятора из этого пакета.

Создавать, компилировать и выполнять программы на С#, используя пакет Visual С# 2008 Express Edition, можно двумя способами: пользуясь, во-первых, интегрированной средой разработки Visual Studio, а во-вторых, — компилятором командной строки esc.ехе. Далее описываются оба способа.
Последний раз редактировалось Marley 28 ноя 2009, 19:44, всего редактировалось 2 раз(а).
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Применение компилятора командной строки csc.eхе

Сообщение Marley 28 ноя 2009, 01:28

Применение компилятора командной строки csc.eхе

Для коммерческой разработки программ вам, скорее всего, придется пользоваться интегрированной средой Visual Studio, хотя для некоторых читателей более удобным может оказаться компилятор, работающий в режиме командной строки. Объясняется это тем, что для работы над отдельной программой не нужно создавать целый проект. Для этого достаточно написать программу, а затем скомпилировать и выполнить ее, причем все это делается из командной строки.

Таким образом, если вы умеете пользоваться окном Командная строка (Command Prompt) и его интерфейсом в Windows, то компилятор командной строки окажется для вас более простым и оперативным инструментальным средством, чем интегрированная среда разработки.

Настройка переменных среды окружения

Изображение

Изображение

Изображение

Изображение

Дописать строку с адресом, где расположенен csc.exe ;C:\WINDOWS\Microsoft.NET\Framework\v3.5\

Изображение



Для написания и выполнения программ на С# с помощью компилятора командной строки выполните следующую несложную процедуру:

1. Введите исходный текст программы, используя текстовый редактор.
2. Скомпилируйте программу с помощью компилятора esc.ехе.
3. Выполните программу.


Ввод исходного текста программы

Воспользуйтесь избранным текстовым редактором, например Notepad (лучше Notepad++). Но не забывайте, что вы должны создать файлы, содержащие простой, а не отформатированный текст, поскольку информация форматирования текста, сохраняемая в файле для обработки текста, может помешать нормальной работе компилятора С#. Введя исходный текст программы, присвойте ее файлу имя Example.cs.


Компилирование программы

Для компилирования программы на С# запустите на выполнение компилятор esc.ехе, указав имя исходного файла в командной строке:

Код: Выделить всё
С:\>csc Example.cs


Компилятор csc создаст файл Example.exe, содержащий версию MSIL данной программы. Несмотря на то что псевдокод MSIL не является исполняемым кодом, он содержится в исполняемом файле с расширением .ехе. Среда CLR автоматически вызывает JIT-компилятор при попытке выполнить файл Example.ехе. Следует, однако, иметь в виду, что если попытаться выполнить файл Example.ехе (или любой другой исполняемый файл, содержащий псевдокод MSIL) на том компьютере, где среда .NET Framework не установлена, то программа не будет выполнена, поскольку на этом компьютере отсутствует среда CLR.


Выполнение программы

Для выполнения программы введите ее имя в командной строке следующим образом:

Код: Выделить всё
С:\>Example


В результате выполнения программы на экране появится строка:

Изображение
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Применение интегрированной среды разработки Visual Studio

Сообщение Marley 28 ноя 2009, 20:09

Применение интегрированной среды разработки Visual Studio

Visual Studio представляет собой интегрированную среду разработки, созданную корпорацией Microsoft. Такая среда дает возможность править, компилировать, выполнять и отлаживать программы на С#, не покидая эту грамотно организованную среду. Visual Studio предоставляет не только все необходимые удобства для работы с программами, но и помогает правильно организовать их. Она оказывается наиболее эффективной для работы над крупными проектами, хотя может быть с тем же успехом использована и для разработки небольших программ, например, тех, которые приведены в качестве примера.

Ниже приведена краткая процедура правки, компилирования и выполнения программы на С# в интегрированной среде разработки Visual Studio 2008.

Изображение

Изображение

Изображение

Изображение
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Построчный анализ первого примера программы

Сообщение Marley 28 ноя 2009, 20:23

Построчный анализ первого примера программы

Несмотря на то что пример программы Example.cs довольно краток, в нем демонстрируется ряд ключевых средств, типичных для всех программ на С#. Проанализируем более подробно каждую строку этой программы, начиная с ее имени.

В отличие от ряда других языков программирования, и в особенности Java, где имя файла программы имеет большое значение, имя программы на С# может быть произвольным. Ранее вам было предложено присвоить программе из первого примера имя Example.cs, чтобы успешно скомпилировать и выполнить ее, но в С# файл с исходным текстом этой программы можно было бы назвать как угодно. Например, его можно было назвать Sample.cs, Test.cs или даже X.cs.

В файлах с исходным текстом программ на С# условно принято расширение . cs, и это условие вы должны соблюдать. Кроме того, многие программисты называют файлы с исходным текстом своих программ по имени основного класса, определенного в программе. Именно поэтому в рассматриваемом здесь примере было выбрано имя файла Example.cs. Но поскольку имена программ на С# могут быть произвольными, то они не указываются в большинстве примеров программ. Поэтому вы вольны сами выбирать для них имена.


Код: Выделить всё
/*  
   This is a simple C# program. 
   Call this program Example.cs. 
*/
 
 



Эти строки образуют комментарий. Как и в большинстве других языков программирования, в С# допускается вводить комментарии в файл с исходным текстом программы. Содержимое комментария игнорируется компилятором. Но, с другой стороны, в комментарии дается краткое описание или пояснение работы программы для всех, кто читает ее исходный текст. В данном случае в комментарии дается описание программы и напоминание о том, что ее исходный файл называется Example.cs. Разумеется, в комментариях к реальным приложениям обычно поясняется работа отдельных частей программы или же функции конкретных средств.

В С# поддерживаются три стиля комментариев. Один из них приводится в самом начале программы и называется многострочным комментарием. Этот стиль комментария должен начинаться символами /* и оканчиваться символами */. Все, что находится между этими символами, игнорируется компилятором. Как следует из его названия, многострочный комментарий может состоять из нескольких строк.

Рассмотрим следующую строку программы:

Код: Выделить всё
using System; 


Эта строка означает, что в программе используется пространство имен System. В С# пространство имен определяет область объявлений. Подробнее о пространстве имен речь пойдет далее, а до тех пор поясним вкратце его назначение. Благодаря пространству имен одно множество имен отделяется от других. По существу, имена, объявляемые в одном пространстве имен, не вступают в конфликт с именами, объявляемыми в другом пространстве имен. В анализируемой программе используется пространство имен System, которое зарезервировано для элементов, связанных с библиотекой классов среды .NET Framework, применяемой в С#. Ключевое слово using просто констатирует тот факт, что в программе используются имена в заданном пространстве имен.

Перейдем к следующей строке программы:

Код: Выделить всё
class Example { 


В этой строке ключевое слово class служит для объявления вновь определяемого класса. Как упоминалось выше, класс является основной единицей инкапсуляции в С#. A Example — это имя класса. Определение класса начинается с открывающей фигурной скобки ({) и оканчивается закрывающей фигурной скобкой (}). Элементы, заключенные в эти фигурные скобки, являются членами класса. Не вдаваясь пока что в подробности, достаточно сказать, что в С# большая часть действий, выполняемых в программе, происходит именно в классе.

Следующая строка программы содержит однострочный комментарий:

Код: Выделить всё
  // A C# program begins with a call to Main().   



Это второй стиль комментариев, поддерживаемых в С#. Однострочный комментарий начинается и оканчивается символами //. Несмотря на различие стилей комментариев, программисты нередко пользуются многострочными комментариями для более длинных примечаний и однострочными комментариями для коротких, построчных примечаний к программе.

Перейдем к анализу следующей строки программы:

Код: Выделить всё
static void Main() { 


Эта строка начинается с метода Main (). Как упоминалось выше, в С# подпрограмма называется методом. И, как поясняется в предшествующем комментарии, именно с этой строки начинается выполнение программы. Выполнение всех приложений С# начинается с вызова метода Main (). Разбирать полностью значение каждого элемента данной строки пока что не имеет смысла, так как для этого нужно знать ряд других средств С#. Но поскольку эта строка используется во многих примерах программ, приведенных в этой книге, то проанализируем ее вкратце.

Данная строка начинается с ключевого слова static. Метод, определяемый ключевым словом static, может вызываться до создания объекта его класса. Необходимость в этом объясняется тем, что метод Main () вызывается при запуске программы. Ключевое слово void указывает на то, что метод Main () не возвращает значение. В дальнейшем вы узнаете, что методы могут также возвращать значения. Пустые круглые скобки после имени метода Main означают, что этому методу не передается никакой информации. Теоретически методу Main () можно передать информацию, но в данном примере этого не делается. И последним элементом анализируемой строки является символ {, обозначающий начало тела метода Main (). Весь код, составляющий тело метода, находится между открывающими и закрывающими фигурными скобками.

Рассмотрим следующую строку программы (обратите внимание на то, что она находится внутри метода Main () ):

Код: Выделить всё
Console.WriteLine("A simple C# program."); 


В этой строке осуществляется вывод на экран текстовой строки "Простая программа на С# . ". Сам вывод выполняется встроенным методом WriteLine (). В данном примере метод WriteLine () выводит на экран строку, которая ему передается. Информация, передаваемая методу, называется аргументом. Помимо текстовых строк, метод WriteLine () позволяет выводить на экран другие виды информации. Анализируемая строка начинается с Console — имени предопределенного класса, поддерживающего ввод-вывод на консоль. Сочетание обозначений Console и WriteLine () указывает компилятору на то, что метод WriteLine () является членом класса Console. Применение в С# объекта для определения вывода на консоль служит еще одним свидетельством объектно-ориентированного характера этого языка программирования.

Обратите внимание на то, что оператор, содержащий вызов метода WriteLine (), оканчивается точкой с запятой, как, впрочем, и рассматривавшаяся ранее директива using System. Как правило, операторы в С# оканчиваются точкой с запятой. Исключением из этого правила служат блоки, которые начинаются символом { и оканчиваются символом }. Именно поэтому строки программы с этими символами не оканчиваются точкой с запятой. Блоки обеспечивают механизм группирования операторов и рассматриваются далее в этой главе.

Первый символ } в анализируемой программе завершает метод Main (), а второй — определение класса Example.
И наконец, в С# различаются прописные и строчные буквы. Несоблюдение этого правила может привести к серьезным осложнениям. Так, если вы неумышленно наберете main вместо Main или же writeline вместо WriteLine, анализируемая программа окажется ошибочной. Более того, компилятор С# не сможет выполнить классы, которые не содержат метод Main (), хотя и скомпилирует их. Поэтому если вы неверно наберете имя метода Main, то получите от компилятора сообщение об ошибке, уведомляющее о том, что в исполняемом файле Example.ехе не определена точка входа.
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

Обработка синтаксических ошибок

Сообщение Marley 28 ноя 2009, 20:41

Обработка синтаксических ошибок

Если вы только начинаете изучать программирование, то вам следует научиться правильно истолковывать ошибки (и реагировать на них), которые могут появиться при попытке скомпилировать программу. Большинство ошибок компиляции возникают в результате опечаток при наборе исходного текста программы. Все программисты рано или поздно обнаруживают, что при наборе исходного текста программы очень легко сделать опечатку. Правда, если вы наберете что-нибудь неправильно, компилятор выдаст соответствующее сообщение о синтаксической ошибке при попытке скомпилировать вашу программу. В таком сообщении обычно указывается номер строки исходного текста программы, где была обнаружения ошибка, а также кратко описывается характер ошибки.
Несмотря на полезность сообщений о синтаксических ошибках, выдаваемых компилятором, они иногда вводят в заблуждение. Ведь компилятор С# пытается извлечь какой-то смысл из исходного текста, как бы он ни был набран. Именно по этой причине ошибка, о которой сообщает компилятор, не всегда отражает настоящую причину возникшего затруднения. Неумышленный пропуск открывающей фигурной скобки после метода Main () в рассмотренном выше примере программы приводит к появлению приведенной ниже последовательности сообщений об ошибках при компиляции данной программы компилятором командной строки csc. (Аналогичные ошибки появляются при компиляции в интегрированной среде разработки Visual Studio.)

Код: Выделить всё
EXl.CS (12,21) : ошибка CS1002: ; ожидалось
ЕХ1.CS (13,22) : ошибка CS1519: Недопустимая лексема ' (' в объявлении члена класса, структуры или интерфейса
EX1.CS (15,1) : ошибка CS1022: Требуется определение типа или пространства имен либо признак конца файла


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

Из всего изложенного выше следует, что если программа содержит синтаксическую ошибку, то сообщения компилятора не следует понимать буквально, поскольку они могут ввести в заблуждение. Для выявления истинной причины ошибки может потребоваться критический пересмотр сообщения об ошибке. Кроме того, полезно проанализировать несколько строк кода, предшествующих той строке, в которой обнаружена сообщаемая ' ошибка. Иногда об ошибке сообщается лишь через несколько строк после того места, где она действительно произошла.
Marley
 
Сообщения: 38
Зарегистрирован: 28 ноя 2009, 00:31

След.

Вернуться в c# 3.0

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron