Выбрать главу

с названием Имя решения\Имя.

С формальностями мы закончили. Теперь пора перейти к анализу про-

граммного кода (вспоминаем о листинге 1.1). Один важный момент от-

метим сразу: все, что начинается с двойной косой черты, является ком-

ментарием и компилятором игнорируется. Другими словами, следующие

инструкции предназначены исключительно для homo sapience, которые бу-

дут просматривать программный код:

// Описание класса:

// Главный метод программы:

// Отображение окна:

Как только компилятор в программном коде встречает две косые черты, он

игнорирует все, что находится справа от них (до конца строки).

ПРИМЕЧАНИЕ Это так называемые однострочные комментарии. Если в программный

код необходимо добавить комментарий, который занимает несколько

строк, обычно используют инструкции /* и */. Все, что находится

между этими инструкциями, является комментарием.

Если убрать комментарии, то непосредственно программный код состоит

из таких инструкций:

using System.Windows.Forms;

class HelloWindow{

static void Main(){

MessageBox.Show("Всем огромный привет!");

}

}

Командой using System.Windows.Forms подключается пространство имен, а все остальное — это описание класса HelloWindow. И с этого места, как

говорится, поподробнее.

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

ся описывать класс. Что же такое класс? Вопрос простой и одновремен-

но сложный. Мы прибегнем к аналогии. Допустим, нужно построить дом.

Дом строят из чего-то, то есть из строительных материалов. Рассмотрим

Очень простая программа           31

два способа постройки дома. Вариант первый: у нас есть кирпичи, оконные

рамы и дверные блоки. В этом случае мы из кирпичей выкладываем стены, вставляя дверные блоки и оконные рамы. Каковы преимущества данного

подхода? Выложить можно здание практически любой формы с любой

комбинацией и размещением дверей и окон. Каковы недостатки? Он, по-

жалуй, один: если здание очень большое, придется строить долго. К тому

же, если работают несколько бригад строителей, всяких нестыковок и бра-

ка будет более чем достаточно.

Вариант второй. Заказываем на заводе готовые панельные блоки: блок

с окном, блок с дверью, блок с дверью и двумя окнами, и т. д. Складываем

дом из блоков. Какие преимущества? Быстро и просто. Какие недостатки?

Далеко не все можно построить. Если, например, блоки цилиндрической

формы не заказали, то башню уже не построишь.

Постройка дома — это и есть написание программы. Кирпичи играют

роль данных, а двери и окна — это функции (процедуры), которые вы-

полняют некоторые действия. Первый способ построения дома соответ-

ствует классическому процедурному программированию, когда данные

и функции (процедуры) существуют независимо друг от друга и объе-

диняются вместе по потребности, по воле программиста. Этот подход

достаточно эффективен при написании не очень больших программ.

Если же программы большие, то в принципе несложно запутаться среди

огромного набора данных и списка функций. Поэтому при написании

больших и сложных программ прибегают к объектно-ориентированному

программированию — то есть строят дом из блоков. Такой отдельный

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

целое панели, оконные рамы и дверные проемы. Объект создается по об-

разцу. Этим образцом является класс. Аналог класса — это чертеж, по

которому на заводе изготовляется блок. Таким образом, класс задает

шаблон, по которому создаются объекты. Наличие класса не означает

наличие объекта, точно так же, как наличие чертежа не означает, что соз-

дан строительный блок. При этом создать объект без класса нельзя (во

всяком случае, в C#). На основании одного класса можно создать много

объектов, а можно не создать ни одного. Это именно наш случай — в про-

грамме мы описали класс, но объект на основании этого класса создавать

не будем.

В известном смысле класс напоминает описание типа данных, с той лишь

принципиальной разницей, что кроме непосредственно данных в класс

включаются и функции (как правило, предназначенные для обработки

этих данных).

32

Глава 1. Информация к размышлению: язык C# и даже больше