Написание программ осложняется тем, что компьютер совсем не похож на людей и "воспитание" у нас разное. Если бы это было не так, то и компьютер, и мы одинаково бы воспринимали окружающий мир и умели бы говорить на одном языке. Тогда нам было бы легче понимать друг друга: достаточно попросить компьютер нарисовать кота — и все.
Вы скажете: "В чем же дело? Давайте научим компьютер понимать нас!". Но эти машины устроены совсем не так, как человеческий мозг, и "видят" мир иначе, поэтому обучить их мышлению, подобному нашему, — непростая задача.

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

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


Он смотрит на вас озадаченно. Затем с таким же видом переводит взгляд на изображение кокосовой пальмы. Потом опять на вас. И снова на рисунок. Бесполезно — он не понимает! Осознав свою ошибку, вы хватаетесь за голову и растерянно показываете на настоящую пальму. Но Алджи по-прежнему не может понять. Оказывается, он понимает только рисунки. Ага! Теперь-то становится ясно, что, хотя Алджи и может использовать ваш язык, он фактически НЕ понимает реальных вещей, о которых вы говорите.

Вы не знаете, сон это, галлюцинации или видение, но в ярком, туманном свете появляется фигура в белом. Низкий голос подсказывает: "Вот отличный способ восприятия окружающего мира! Только так вы и Знифф12 (вот оно – настоящее имя Алджи!) сможете понять друг друга". Неизвестно сколько времени проходит, пока образы магически проникают в ваш разум, обучая новому способу описания мира. Наконец, успокоившись, вы выбираетесь из этого состояния.


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

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

Рассмотрим другой пример: в группе живых организмов можно выделить два класса — "растения" и "животные".
Теперь попробуем научиться выражать свои мысли так, чтобы компьютер смог понять то, что мы пытаемся сказать.
В C# описание класса для компьютера может иметь следующий вид:
class Animal
{
}
Из этого небольшого отрывка кода компьютер понимает следующее:
Animal ;{ … }.Класс "Animal" имеет смысл определить в программе, выводящей на экран изображения животных или сохраняющей интересные факты о них. При решении других задач надо будет описывать другие классы, например, классы MyPhotoProgram или MyGradeCalculator. Нужно понимать, что классы объединяют не только те объекты, которые существуют в реальном мире. Они полезны и при работе с абстрактными объектами.
| Строительный блок: Классы | |
|---|---|
| Все программы на языке C# представляют собой описание множества классов. Компьютеру известно слово "class", которое должно быть написано строчными буквами, но имя класса может быть любым и содержать как прописные, так и строчные буквы, причем использование пробелов не допускается. | class Animal
{
}
|
Немного позже мы расскажем о том, что происходит внутри описания класса (между фигурными скобками). Но сначала рассмотрим объекты.
Каждый класс описывает, как устроены объекты класса. В процессе работы с классом "Animal" могут появиться объекты этого класса:

Вы уже знаете, как вести разговор с компьютером о классе животных. Возможно, в какой-то момент вам захочется поговорить и об объектах. Например, о том, что "есть одно существо в классе животных, которого зовут Барсиком".
Это можно выразить следующим образом:
Animal Barsik;
Мы написали небольшой отрывок кода, и здесь нужно остановиться и подумать, иначе можно упустить главное. Компьютер понимает следующее: "Этот человек хочет поговорить об объекте в классе Animal и назвать его Barsik. Я не знаю, что такое Barsik, и мне все равно – пусть называет, как хочет".
Теперь дополним приведенный выше код еще одним выражением:
Barsik = new Animal();
Может показаться странным, но нужно сделать именно так, потому что с точки зрения компьютера в этом есть смысл. Подумайте "как машина" и представьте себе следующее:
(рис 2.11) Animal Barsik ) предупреждает компьютер, что вскоре мы попросим его работать с объектом из класса Animal. Теперь у компьютера появляется возможность проверить свои знания об этом классе. Он просматривает всю программу и ищет нужное описание. Не найдя такого класса, он сообщит вам, что сделать ничего не сможет. Если же отыскать нужное описание удастся, компьютер продолжит выполнение программы, ожидая вашей дальнейшей просьбы совершить некоторое действие с объектом класса Animal по имени Barsik.Barsik = new Animal(); ) напоминает компьютеру: "Помнишь объект Barsik? Теперь мне нужно выполнить с ним действие. Выдели немножко памяти в своей голове, где ты хранил бы данные об этом животном". Компьютер запоминает новый объект класса Animal и понимает, что это объект Barsik, упомянутый ранее. Изучив класс Animal, компьютер кое-что знает о Барсике и держит эту информацию наготове, понимая, что может получить от вас дополнительные сведения об этом объекте.Теперь рассмотрим все три момента и представим себе, как компьютер "думает" о них.
Заметьте, в первом блоке мы описываем класс объектов в общем, а в блоках 2 и 3 выделяем определенный объект в классе Animal.
| Строительный блок: Объекты | |
|---|---|
| Объекты — это отдельные, четко обозначенные экземпляры некоторого класса. Класс дает общее описание объектов, указывает "на что они похожи". Рассмотрим процесс объявления и создания объектов класса. |
class Animal
{
}
|
| Если планируется работать с определенным объектом, необходимо заранее сообщить компьютеру, к какому классу он принадлежит, для того чтобы компьютер проверил свои знания о нужном нам классе. Поэтому сначала указываем имя класса, а затем даем имя объекту. Этот процесс называется "объявлением объекта". Затем необходимо попросить компьютер "создать экземпляр" класса. |
Animal percyThePorcupine; //ПерсиДикобраз |
| На основе своих знаний о классе компьютер создаст реальный объект, с которым он сможет выполнять действия. В нашем примере объект |
percyThePorcupine = new Animal(); |
Теперь мы знаем, как рассказать об определенном объекте в классе, но поскольку класс, который мы рассматриваем, достаточно прост (можно сказать, он совсем пустой), то работать с ним неинтересно. Итак, в следующей лекции мы добавим к нему некоторые элементы.
Если бы я попросил вас перечислить несколько свойств животных, то список мог быть следующим:
При рассмотрении свойств этих животных вы можете присвоить значения каждому из них:

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

В задаче с бананами поля можно было бы назвать так: numberOfBananas ("количествоБананов"), numberOfPeople ("количествоЛюдей") и numberEachOneGets ("количествоПолучаемоеКаждым"). Они должны иметь числовой тип, поскольку с их помощью мы выполняем некие математические вычисления.
Примечание. В языке C# имена полей не могут содержать пробелы. Используйте в именах только буквы и числа, причем первой всегда ставится буква.
Каждый "тип" обрабатывается компьютером особым образом, поэтому при определении полей мы должны указывать их тип. В одной программе мы определим поле numberOfLegs как строку, поскольку мы не планируем выполнять математические операции над этим полем, а в другом случае, когда надо будет узнать, сколько конечностей у 500 одинаковых объектов, может потребоваться использование такого поля в качестве числового.
Для того чтобы попросить компьютер рассматривать некое свойство как строку, состоящую из букв, достаточно просто объявить объект следующим образом:
string kindOfAnimal;
Пока мы не задаем значение в этом поле, а всего лишь сообщаем, с каким типом данных будем работать, и присваиваем полю имя. Поставьте себя на место компьютера и представьте, как бы вы отреагировали, если бы человек написал для вас следующее:
Извещая компьютер о том, что значение поля нужно рассматривать как число, необходимо выбрать один из нескольких числовых типов, известных в языке C#. Наиболее распространенный — integer. Из курса математики вы должны знать, что это не что иное, как целое число, которое может быть отрицательным, положительным или нулем.

То, что значение поля должно быть целым числом, проще всего сообщается так:
int numberOfLegs;
А вот что подумает в этом случае наш цифровой друг:
Если вам известно, что некоторое поле будет всегда принимать значения "true" ("истина") или "false" ("ложь") и ничего другого, то использование в C# поля типа "true/false" может оказаться полезным. Это самый простой из всех типов, хотя такие поля носят довольно странное название — булевые (Boolean), по имени математика Джорджа Буля.
Извещая компьютер о том, что поле "hasTail" должно принимать значения "true/false", используйте следующий код:
bool hasTail;
Машина будет думать следующим образом:

Итак, поля представляют собой элементы информации, позволяющие лучше описать объекты в классе. Они всегда имеют определенный тип.
Ранее, когда мы знакомили компьютер с классом животных, то просто дали классу название – Animal, добавили в код фигурные скобки и пообещали рассказать о нем больше, а точнее — сообщить о том, что находится внутри него. Запись выглядела так:
class Animal
{
...
}
А теперь мы готовы добавить несколько полей в определение класса.
class Animal
{
string kindOfAnimal;
string name;
int numberOfLegs;
int height;
int length;
string color;
bool hasTail;
bool isMammal;
bool spellingCorrect;
}
Код должен быть аккуратным и легко читаемым, для чего и создаются отступы полей, показанные выше. Это делается при помощи клавиши TAB на клавиатуре – для одной строки или, выделив сразу несколько строк, для всех сразу.
Итак, мы объяснили компьютеру, что ВСЕ объекты класса Animal имеют перечисленные выше поля. Теперь давайте попросим его создать экземпляр, представляющий определенный объект класса Animal (как мы делали это в предыдущем разделе), и сообщим компьютеру некоторую информацию об этом объекте, присвоив значения каждому полю.
Animal Barsik; Barsik = new Animal(); Barsik.kindOfAnimal = "Cat"; Barsik.name = "Кот Барсик"; Barsik.numberOfLegs = 4; Barsik.height = 50; Barsik.length = 110; Barsik.color = "Black"; Barsik.hasTail = true; Barsik.isMammal = true;
Обратите внимание, что в кавычки ("") заключается значение только строковых полей. В конце каждого выражения ставится точка с запятой (;), после чего полученная конструкция становится оператором присваивания.
На данном этапе стоит упомянуть, что выбранное нами имя объекта Barsik не имеет никакого значения для компьютера, который будет работать с объектом, даже если мы заменим имя Barsik на X или любое другое:
Animal X; X = new Animal(); X.kindOfAnimal = "Cat"; X.height = 50; X.length = 110; X.color = "Black"; X.hasTail = true; X.isMammal = true;
Еще одно важное замечание. Каждый объект можно рассматривать как коробочку, внутри которой находятся ящички (поля). У двух объектов одного класса коробочки одинаковые, но значения, хранящиеся в ящичках (полях), — разные. Например, два объекта Миша и Гриша имеют поле "Рост", но Миша высокий, а Гриша маленького роста.
| Строительный блок: Поля | |
|---|---|
| Обычно в классе присутствует одно поле или несколько полей, которые позволяют описывать определенные черты объектов этого класса. | class SchoolKid
{
string firstName;
string lastName;
int age;
bool isWideAvake;
}
|
Поля всегда имеют определенный тип. Допустимых типов очень много, вот описание наиболее распространенных из них:
| Тип | Описание | Примеры значений |
|---|---|---|
| string | "Petr" ("Петя") "Eight-legged Octopus" ("Восьминогий Осьминог") "Girls are too clever to fall out of their |
|
| int | Числовой тип данных предполагает, что значение поля может быть целым числом. Название типа – это сокращение от слова "integer" |
328 28000 -520 |
| bool | True — истина False — ложь |
При определении поля в программе необходимо указать его тип и имя:
string lastname;
Обозначение типа должно быть известно компьютеру. Указанные выше основные типы пишутся строчными буквами, однако некоторые могут содержать и прописные буквы.
Давая имя полю, можно использовать любое слово, например, VsegdaNacheku – здесь сочетаются заглавные и строчные буквы. Обратите внимание: пробелы ставить нельзя.
При работе с определенным объектом полям присваиваются значения, которые помогают описывать объект. Если, например, у нас есть объект с именем schoolKid (Школьник), то его полям можно было бы присвоить следующие значения:
schoolKid.firstName = "Petr"; schoolKid.age = 13;
Имя объекта и имя поля разделяются точкой (.).
Итак, schoolKid. означает следующее: " Petr становится значением поля ( Имя ) объекта schoolKid ".
На первом этапе изучения языка C# этот раздел не столь важен, но в дальнейшем вам могут встречаться слова private, protected и public. Давайте обсудим их смысл.
class Animal
{
string kindOfAnimal;
string name;
int numberOfLegs;
int height;
int length;
string color;
bool hasTail;
bool isMammal;
bool spellingCorrect;
}
class MyTestClass
{
Animal myAnimal;
}
Объекты одного класса могут быть полями в другом классе. Например, в классе MyTestClass появится поле myAnimal, принадлежащее классу Animal.
При объявлении полей так, как показано выше, мы можем решить, должны ли другие классы иметь к ним доступ. Иногда очень важно делать поля закрытыми ( private ) — для того, например, чтобы другой класс не помещал неверные значения в поля и не нарушал работу программы. Использование полей private, protected и public определяет степень защиты объектов класса.

На рисунке изображены дети, живущие в одной семье. Обратите внимание на то, как обеспечивается безопасность каждого из них. Малютка Света закрыта ( private ) в комнате — ее не выпускают из дома, и она имеет наиболее высокий уровень защиты. С ней могут общаться люди, обладающие наибольшим доверием. Борису разрешается находиться как на переднем, так и на заднем дворе, но он по-прежнему в некоторой степени защищен ( protected ). Толя, старший ребенок, является открытым ( public ) для других, и любой желающий может общаться с ним.
Итак, в начало
class Animal
{
public string kindOfAnimal;
public string name;
public int numberOfLegs;
public int height;
public int length;
public string color;
bool hasTail;
protected bool isMammal;
private bool spellingCorrect;
}
Вы можете поинтересоваться: а что произойдет, если мы не станем включать эти слова? В таком случае по умолчанию задается значение private и компьютер воспринимает код, как если бы в начале объявления было написано слово private. Поэтому в последнем примере поле hasTail автоматически становится закрытым ( private ).
Давайте уточним значения этих слов:
Следующие примеры двух классов демонстрируют описанный принцип полей public и private. Поля типа protected мы оставим без обсуждения, а сведения о них можно найти в справке Visual C# Express.
Как и ранее, сначала мы определяем несколько закрытых и открытых полей в классе Animal и затем пытаемся обратиться к ним из класса Zoo.
class Animal
{
public string kindOfAnimal;
public string name;
public int numberOfLegs;
public int height;
public int length;
public string color;
bool hasTail;
protected bool isMammal;
private bool spellingCorrect;
}
class Zoo
{
Animal a = new Animal ();
// Следующая строка будет выполнена успешно, поскольку классу "Zoo"
// разрешено обращаться к открытым полям в классе "Animal"
a.kindOfAnimal = "Kangaroo";
// Обе следующие строки НЕ будут выполнены, поскольку классу "Zoo"
// не разрешено обращаться к закрытым или защищенным полям
a.isMammal = false; // Попытка обращения к защищенному методу
a.spellingCorrect = true; // Попытка обращения к закрытому свойству класса
}
Написание программ осложняется тем, что компьютер совсем не похож на людей и "воспитание" у нас разное. Если бы это было не так, то и компьютер, и мы одинаково бы воспринимали окружающий мир и умели бы говорить на одном языке. Тогда нам было бы легче понимать друг друга: достаточно попросить компьютер нарисовать кота — и все.
Вы скажете: "В чем же дело? Давайте научим компьютер понимать нас!". Но эти машины устроены совсем не так, как человеческий мозг, и "видят" мир иначе, поэтому обучить их мышлению, подобному нашему, — непростая задача.

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

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


Он смотрит на вас озадаченно. Затем с таким же видом переводит взгляд на изображение кокосовой пальмы. Потом опять на вас. И снова на рисунок. Бесполезно — он не понимает! Осознав свою ошибку, вы хватаетесь за голову и растерянно показываете на настоящую пальму. Но Алджи по-прежнему не может понять. Оказывается, он понимает только рисунки. Ага! Теперь-то становится ясно, что, хотя Алджи и может использовать ваш язык, он фактически НЕ понимает реальных вещей, о которых вы говорите.

Вы не знаете, сон это, галлюцинации или видение, но в ярком, туманном свете появляется фигура в белом. Низкий голос подсказывает: "Вот отличный способ восприятия окружающего мира! Только так вы и Знифф12 (вот оно – настоящее имя Алджи!) сможете понять друг друга". Неизвестно сколько времени проходит, пока образы магически проникают в ваш разум, обучая новому способу описания мира. Наконец, успокоившись, вы выбираетесь из этого состояния.


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

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

Рассмотрим другой пример: в группе живых организмов можно выделить два класса — "растения" и "животные".
Теперь попробуем научиться выражать свои мысли так, чтобы компьютер смог понять то, что мы пытаемся сказать.
В C# описание класса для компьютера может иметь следующий вид:
class Animal
{
}
Из этого небольшого отрывка кода компьютер понимает следующее:
Animal ;{ … }.Класс "Animal" имеет смысл определить в программе, выводящей на экран изображения животных или сохраняющей интересные факты о них. При решении других задач надо будет описывать другие классы, например, классы MyPhotoProgram или MyGradeCalculator. Нужно понимать, что классы объединяют не только те объекты, которые существуют в реальном мире. Они полезны и при работе с абстрактными объектами.
| Строительный блок: Классы | |
|---|---|
| Все программы на языке C# представляют собой описание множества классов. Компьютеру известно слово "class", которое должно быть написано строчными буквами, но имя класса может быть любым и содержать как прописные, так и строчные буквы, причем использование пробелов не допускается. | class Animal
{
}
|
Немного позже мы расскажем о том, что происходит внутри описания класса (между фигурными скобками). Но сначала рассмотрим объекты.
Каждый класс описывает, как устроены объекты класса. В процессе работы с классом "Animal" могут появиться объекты этого класса:

Вы уже знаете, как вести разговор с компьютером о классе животных. Возможно, в какой-то момент вам захочется поговорить и об объектах. Например, о том, что "есть одно существо в классе животных, которого зовут Барсиком".
Это можно выразить следующим образом:
Animal Barsik;
Мы написали небольшой отрывок кода, и здесь нужно остановиться и подумать, иначе можно упустить главное. Компьютер понимает следующее: "Этот человек хочет поговорить об объекте в классе Animal и назвать его Barsik. Я не знаю, что такое Barsik, и мне все равно – пусть называет, как хочет".
Теперь дополним приведенный выше код еще одним выражением:
Barsik = new Animal();
Может показаться странным, но нужно сделать именно так, потому что с точки зрения компьютера в этом есть смысл. Подумайте "как машина" и представьте себе следующее:
(рис 2.11) Animal Barsik ) предупреждает компьютер, что вскоре мы попросим его работать с объектом из класса Animal. Теперь у компьютера появляется возможность проверить свои знания об этом классе. Он просматривает всю программу и ищет нужное описание. Не найдя такого класса, он сообщит вам, что сделать ничего не сможет. Если же отыскать нужное описание удастся, компьютер продолжит выполнение программы, ожидая вашей дальнейшей просьбы совершить некоторое действие с объектом класса Animal по имени Barsik.Barsik = new Animal(); ) напоминает компьютеру: "Помнишь объект Barsik? Теперь мне нужно выполнить с ним действие. Выдели немножко памяти в своей голове, где ты хранил бы данные об этом животном". Компьютер запоминает новый объект класса Animal и понимает, что это объект Barsik, упомянутый ранее. Изучив класс Animal, компьютер кое-что знает о Барсике и держит эту информацию наготове, понимая, что может получить от вас дополнительные сведения об этом объекте.Теперь рассмотрим все три момента и представим себе, как компьютер "думает" о них.
Заметьте, в первом блоке мы описываем класс объектов в общем, а в блоках 2 и 3 выделяем определенный объект в классе Animal.
| Строительный блок: Объекты | |
|---|---|
| Объекты — это отдельные, четко обозначенные экземпляры некоторого класса. Класс дает общее описание объектов, указывает "на что они похожи". Рассмотрим процесс объявления и создания объектов класса. |
class Animal
{
}
|
| Если планируется работать с определенным объектом, необходимо заранее сообщить компьютеру, к какому классу он принадлежит, для того чтобы компьютер проверил свои знания о нужном нам классе. Поэтому сначала указываем имя класса, а затем даем имя объекту. Этот процесс называется "объявлением объекта". Затем необходимо попросить компьютер "создать экземпляр" класса. |
Animal percyThePorcupine; //ПерсиДикобраз |
| На основе своих знаний о классе компьютер создаст реальный объект, с которым он сможет выполнять действия. В нашем примере объект |
percyThePorcupine = new Animal(); |
Теперь мы знаем, как рассказать об определенном объекте в классе, но поскольку класс, который мы рассматриваем, достаточно прост (можно сказать, он совсем пустой), то работать с ним неинтересно. Итак, в следующей лекции мы добавим к нему некоторые элементы.
Если бы я попросил вас перечислить несколько свойств животных, то список мог быть следующим:
При рассмотрении свойств этих животных вы можете присвоить значения каждому из них:

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

В задаче с бананами поля можно было бы назвать так: numberOfBananas ("количествоБананов"), numberOfPeople ("количествоЛюдей") и numberEachOneGets ("количествоПолучаемоеКаждым"). Они должны иметь числовой тип, поскольку с их помощью мы выполняем некие математические вычисления.
Примечание. В языке C# имена полей не могут содержать пробелы. Используйте в именах только буквы и числа, причем первой всегда ставится буква.
Каждый "тип" обрабатывается компьютером особым образом, поэтому при определении полей мы должны указывать их тип. В одной программе мы определим поле numberOfLegs как строку, поскольку мы не планируем выполнять математические операции над этим полем, а в другом случае, когда надо будет узнать, сколько конечностей у 500 одинаковых объектов, может потребоваться использование такого поля в качестве числового.
Для того чтобы попросить компьютер рассматривать некое свойство как строку, состоящую из букв, достаточно просто объявить объект следующим образом:
string kindOfAnimal;
Пока мы не задаем значение в этом поле, а всего лишь сообщаем, с каким типом данных будем работать, и присваиваем полю имя. Поставьте себя на место компьютера и представьте, как бы вы отреагировали, если бы человек написал для вас следующее:
Извещая компьютер о том, что значение поля нужно рассматривать как число, необходимо выбрать один из нескольких числовых типов, известных в языке C#. Наиболее распространенный — integer. Из курса математики вы должны знать, что это не что иное, как целое число, которое может быть отрицательным, положительным или нулем.

То, что значение поля должно быть целым числом, проще всего сообщается так:
int numberOfLegs;
А вот что подумает в этом случае наш цифровой друг:
Если вам известно, что некоторое поле будет всегда принимать значения "true" ("истина") или "false" ("ложь") и ничего другого, то использование в C# поля типа "true/false" может оказаться полезным. Это самый простой из всех типов, хотя такие поля носят довольно странное название — булевые (Boolean), по имени математика Джорджа Буля.
Извещая компьютер о том, что поле "hasTail" должно принимать значения "true/false", используйте следующий код:
bool hasTail;
Машина будет думать следующим образом:

Итак, поля представляют собой элементы информации, позволяющие лучше описать объекты в классе. Они всегда имеют определенный тип.
Ранее, когда мы знакомили компьютер с классом животных, то просто дали классу название – Animal, добавили в код фигурные скобки и пообещали рассказать о нем больше, а точнее — сообщить о том, что находится внутри него. Запись выглядела так:
class Animal
{
...
}
А теперь мы готовы добавить несколько полей в определение класса.
class Animal
{
string kindOfAnimal;
string name;
int numberOfLegs;
int height;
int length;
string color;
bool hasTail;
bool isMammal;
bool spellingCorrect;
}
Код должен быть аккуратным и легко читаемым, для чего и создаются отступы полей, показанные выше. Это делается при помощи клавиши TAB на клавиатуре – для одной строки или, выделив сразу несколько строк, для всех сразу.
Итак, мы объяснили компьютеру, что ВСЕ объекты класса Animal имеют перечисленные выше поля. Теперь давайте попросим его создать экземпляр, представляющий определенный объект класса Animal (как мы делали это в предыдущем разделе), и сообщим компьютеру некоторую информацию об этом объекте, присвоив значения каждому полю.
Animal Barsik; Barsik = new Animal(); Barsik.kindOfAnimal = "Cat"; Barsik.name = "Кот Барсик"; Barsik.numberOfLegs = 4; Barsik.height = 50; Barsik.length = 110; Barsik.color = "Black"; Barsik.hasTail = true; Barsik.isMammal = true;
Обратите внимание, что в кавычки ("") заключается значение только строковых полей. В конце каждого выражения ставится точка с запятой (;), после чего полученная конструкция становится оператором присваивания.
На данном этапе стоит упомянуть, что выбранное нами имя объекта Barsik не имеет никакого значения для компьютера, который будет работать с объектом, даже если мы заменим имя Barsik на X или любое другое:
Animal X; X = new Animal(); X.kindOfAnimal = "Cat"; X.height = 50; X.length = 110; X.color = "Black"; X.hasTail = true; X.isMammal = true;
Еще одно важное замечание. Каждый объект можно рассматривать как коробочку, внутри которой находятся ящички (поля). У двух объектов одного класса коробочки одинаковые, но значения, хранящиеся в ящичках (полях), — разные. Например, два объекта Миша и Гриша имеют поле "Рост", но Миша высокий, а Гриша маленького роста.
| Строительный блок: Поля | |
|---|---|
| Обычно в классе присутствует одно поле или несколько полей, которые позволяют описывать определенные черты объектов этого класса. | class SchoolKid
{
string firstName;
string lastName;
int age;
bool isWideAvake;
}
|
Поля всегда имеют определенный тип. Допустимых типов очень много, вот описание наиболее распространенных из них:
| Тип | Описание | Примеры значений |
|---|---|---|
| string | "Petr" ("Петя") "Eight-legged Octopus" ("Восьминогий Осьминог") "Girls are too clever to fall out of their |
|
| int | Числовой тип данных предполагает, что значение поля может быть целым числом. Название типа – это сокращение от слова "integer" |
328 28000 -520 |
| bool | True — истина False — ложь |
При определении поля в программе необходимо указать его тип и имя:
string lastname;
Обозначение типа должно быть известно компьютеру. Указанные выше основные типы пишутся строчными буквами, однако некоторые могут содержать и прописные буквы.
Давая имя полю, можно использовать любое слово, например, VsegdaNacheku – здесь сочетаются заглавные и строчные буквы. Обратите внимание: пробелы ставить нельзя.
При работе с определенным объектом полям присваиваются значения, которые помогают описывать объект. Если, например, у нас есть объект с именем schoolKid (Школьник), то его полям можно было бы присвоить следующие значения:
schoolKid.firstName = "Petr"; schoolKid.age = 13;
Имя объекта и имя поля разделяются точкой (.).
Итак, schoolKid. означает следующее: " Petr становится значением поля ( Имя ) объекта schoolKid ".
На первом этапе изучения языка C# этот раздел не столь важен, но в дальнейшем вам могут встречаться слова private, protected и public. Давайте обсудим их смысл.
class Animal
{
string kindOfAnimal;
string name;
int numberOfLegs;
int height;
int length;
string color;
bool hasTail;
bool isMammal;
bool spellingCorrect;
}
class MyTestClass
{
Animal myAnimal;
}
Объекты одного класса могут быть полями в другом классе. Например, в классе MyTestClass появится поле myAnimal, принадлежащее классу Animal.
При объявлении полей так, как показано выше, мы можем решить, должны ли другие классы иметь к ним доступ. Иногда очень важно делать поля закрытыми ( private ) — для того, например, чтобы другой класс не помещал неверные значения в поля и не нарушал работу программы. Использование полей private, protected и public определяет степень защиты объектов класса.

На рисунке изображены дети, живущие в одной семье. Обратите внимание на то, как обеспечивается безопасность каждого из них. Малютка Света закрыта ( private ) в комнате — ее не выпускают из дома, и она имеет наиболее высокий уровень защиты. С ней могут общаться люди, обладающие наибольшим доверием. Борису разрешается находиться как на переднем, так и на заднем дворе, но он по-прежнему в некоторой степени защищен ( protected ). Толя, старший ребенок, является открытым ( public ) для других, и любой желающий может общаться с ним.
Итак, в начало
class Animal
{
public string kindOfAnimal;
public string name;
public int numberOfLegs;
public int height;
public int length;
public string color;
bool hasTail;
protected bool isMammal;
private bool spellingCorrect;
}
Вы можете поинтересоваться: а что произойдет, если мы не станем включать эти слова? В таком случае по умолчанию задается значение private и компьютер воспринимает код, как если бы в начале объявления было написано слово private. Поэтому в последнем примере поле hasTail автоматически становится закрытым ( private ).
Давайте уточним значения этих слов:
Следующие примеры двух классов демонстрируют описанный принцип полей public и private. Поля типа protected мы оставим без обсуждения, а сведения о них можно найти в справке Visual C# Express.
Как и ранее, сначала мы определяем несколько закрытых и открытых полей в классе Animal и затем пытаемся обратиться к ним из класса Zoo.
class Animal
{
public string kindOfAnimal;
public string name;
public int numberOfLegs;
public int height;
public int length;
public string color;
bool hasTail;
protected bool isMammal;
private bool spellingCorrect;
}
class Zoo
{
Animal a = new Animal ();
// Следующая строка будет выполнена успешно, поскольку классу "Zoo"
// разрешено обращаться к открытым полям в классе "Animal"
a.kindOfAnimal = "Kangaroo";
// Обе следующие строки НЕ будут выполнены, поскольку классу "Zoo"
// не разрешено обращаться к закрытым или защищенным полям
a.isMammal = false; // Попытка обращения к защищенному методу
a.spellingCorrect = true; // Попытка обращения к закрытому свойству класса
}
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.