
Лабораторная работа 2
Объекты и классы языка C#
Цель работы:
Ознакомление с основой объектного подхода в языке C#, созданием объектов, классов и механизмов наследования.
Необходимые теоретические сведения:
Классы и объекты
Понятие класса является фундаментальным в ООП и служит основой для создания объектов. В описании класса определяются данные (т.е. переменные) и код (т.е. методы), манипулирующий этими данными. Объекты являются экземплярами класса.
Методы и переменные, составляющие класс, называются членами класса. При определении класса объявляются данные, которые он содержит, и код, манипулирующий этими данными. Данные содержаться в переменных экземпляра, которые определены классом, а код содержится в методах. В языке C# определены несколько разновидностей членов класса. К ним относятся: переменные экземпляра, статические переменные, константы, методы, конструкторы, деструкторы, индексаторы, события, операторы и свойства.
Инициализация переменных в объекте (как в экземпляре класса) производится непосредственно в конструкторе класса. В состав класса может быть определено несколько конструкторов.
Синтаксис определения класса:
сlass имя_класса
{
тип_доступа тип имя_переменной1;
тип_доступа тип имя_переменной2;
…
тип_доступа возвращаемый_тип имя_метода1(список параметров){тело метода}
}
где тип_доступа может принимать одно из следующих значений:
public, private, protected, internal. Члены класса с типом доступа public являются общедоступными (т.е. доступны из любой точки программы за пределами данного класса), с типом доступа protected – внутри членов данного класса и производных, с типом доступа private – только для других членов данного класса. Тип доступа internal применяется для типов, доступных в пределах одной сборки.
Приведем пример описания класса:
class Animal{
public string Name;
private int Weigth;
protected int Type;
public int Animal(int W, int T, string N){
Wiegth=W;
Type=T;
Name=N;
}
Public int Getweigth(){return Weigth;}
}
Создание объекта
Синтаксис:
имя_класса имя_объекта = имя_класса();
При создании объекта (т.е. экземпляра класса) происходит вызов соответствующего конструктора класса.
Понятие конструктора и деструктора
Под конструктором класса будем понимать метод для инициализации объекта при его создании. Конструктор имеет то же имя, что и его класс. В конструкторах тип возвращаемого значения не указывается явно. Конструкторы используются для присваивания начальных значений переменным экземпляра, определенным классом, и для выполнения любых других процедур инициализации, необходимых для создания объекта.
Конструктор существует для любого класса, независимо от того, определен он в явном виде или нет. Умолчаниями языка C# предусмотрено наличие конструктора, который присваивает нулевые значения всем переменным экземпляра (для переменных типов-значений) и значения null (для переменных ссылочного типа). В случае явного определения конструктора класса конструктор по умолчанию не используется.
Синтаксис описания конструктора:
имя_класса(список_параметров){тело_конструктора}
Под деструктором будем понимать метод, который автоматически вызывается при уничтожении объекта класса (непосредственно перед началом процедуры «сборки мусора»). Деструкторы не имеют параметров и не возвращают значений.
Синтаксис описания деструктора:
~имя_класса(){тело_деструктора}
Наследование
Под наследованием будем иметь в виду свойство, с помощью которого один объект может приобретать свойства другого. При этом поддерживается концепция иерархической классификации, имеющей направление сверху вниз. При принятии концепции наследования, для вновь создаваемых объектов необходимо определить только те свойства, которые делают его уникальным в пределах своего класса. Объект может наследовать общие атрибуты от родительских по отношению к нему классов.
Синтаксис описания объекта:
class имя_класса : имя_родительского_класса{
тело_класса
}
Пример описания объекта:
class Predator : Animal{
private int Speed;
}
Наследование формирует иерархию классов на основе отношения частичного порядка ISA («являться»).
Иерархия может быть построена и для объектов. В этом случае она имеет структуру, которая строится на основе отношения структурного вхождения («часть-целое»), при котором один объект является частью другого.
Контрольные вопросы
Что понимается под термином «класс»?
Что понимается под термином «объект»?
Что понимается под термином «конструктор»?
Какие элементы называют членами класса?
Какие элементы (члены) класса содержат код?
Какие элементы (члены) класса содержат данные?
Как относятся понятия класс и объект?
Сколько конструкторов может содержать класс языка C#?
Какие классы языка C# оснащены конструкторами?
Какие значения может принимать тип спецификатора доступа?
Какое значение имеет спецификатор общедоступного объекта?
Какие умолчания для конструкторов приняты в языке C#?
В чем состоит значение деструктора?
Сколько параметров имеет деструктор?
Какие значения может возвращать деструктор?
Какой вид классификации соответствует наследованию?
Какому отношению соответствует иерархия классов?
Какому отношению соответствует иерархия объектов?
Варианты заданий
Построить иерархию классов на языке C# в соответствии с вариантом исполнения:
Студент, преподаватель, персона, заведующий кафедрой.
Служащий, персона, рабочий, инженер.
Рабочий, кадры, инженер, администрация.
Деталь, механизм, изделие, узел.
Организация, страховая компания, нефтегазовая компания, завод.
Журнал, книга, печатное издание, учебник.
Тест, экзамен, выпускной экзамен, испытание.
Место, область, город, мегаполис.
Игрушка, продукт, товар, молочный продукт.
Квитанция, накладная, документ, счет.
Автомобиль, поезд, транспортное средство, экспресс.
Двигатель, двигатель внутреннего сгорания, дизель, реактивный двигатель.
Республика, монархия, королевство, государство.
Млекопитающее, парнокопытное, птица, животное.
Корабль, пароход, парусник, корвет.
Порядок выполнения работы:
1) Разработать методы и свойства для каждого из определяемых классов.
2) Реализовать программу на C# в соответствии с вариантом исполнения.
3) Подготовить отчет в твердой копии и в электронном виде.
Полиморфные методы языка C#
Цель работы:
Ознакомление с особенностями создания и применения полиморфных методов в языке программирования C#.
Необходимые теоретические сведения:
Концепция полиморфизма
Понятие полиморфизма является одной их фундаментальных составляющих объектно-ориентированного программирования и позволяет определять в наследуемом классе методы, которые являются общими для всех наследуемых классов. При этом наследуемый класс может определять специфическую реализацию для некоторых (а возможно, и всех) полиморфных методов. Важнейший принцип полиморфизма можно сформулировать фразой «один интерфейс, несколько методов». Благодаря полиморфизму можно пользоваться методами, не обладая точными знаниями о типе объектов.
Основными механизмами для реализации концепции полиморфизма в ООП (в том числе в языке C#) являются виртуальные методы и абстрактные классы.