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