Опубликован: 19.08.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Самостоятельная работа 2:

Объекты и классы

< Лекция 6 || Самостоятельная работа 2 || Лекция 7 >
Аннотация: Цель: ознакомление с основой объектного подхода в языке C#, созданием объектов, классов и механизмом наследования.

Теоретические сведения

Классы и обьекты

Понятие класса является фундаментальным в ООП и служит основой для создания объектов. В описании класса определяются данные (т.е. переменные) и код (т.е. методы), манипулирующий этими данными. Объекты являются экземплярами класса.

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

Инициализация переменных в объекте (как в экземпляре класса) производится непосредственно в конструкторе класса. В составе класса может быть определено несколько конструкторов.

Синтаксис определения класса:

class имя_класса{
тип_доступа тип имя_переменной1;
тип_доступа тип имя_переменной2;
...
тип_доступа возвращаемый_тип
имя_метода1(список_параметров) 
    {тело_метода}
}

где тип_доступа может принимать одно из следующих значений: public, private, protected, internal. Члены класса с типом доступа public являются общедоступными (т.е. доступны из любой точки программы за пределами данного класса), с типом доступа protected – внутри членов данного класса и его производных, с типом доступа private – только для других членов данного класса. Тип доступа internal применяется для типов, доступных в пределах одной сборки.

Приведем пример описания класса:

class Animal{
  public string Name;
  private int Weight;
  protected int Type;
  public int Animal(int W, int T, string N){
        Weight=W;
        Type=T;
        Name=N;
  }
  public int GetWeight(){return Weight;}
}

Создание обьекта

Синтаксис:

имя_класса имя_обьекта = new имя_класса();

При создании обьекта (т.е. экземпляра класса) происходит вызов соответствующего конструктора класса.

Понятия конструктора и деструктора

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

Конструктор существует для любого класса, независимо от того, определен он в явном виде или нет. Умолчаниями языка С# предусмотрено наличие конструктора, который присваивает нулевые значения всем переменным экземпляра (для переменных типов-значений) и значения null (для переменных ссылочного типа). В случае явного определения конструктора класса конструктор по умолчанию не используется.

Синтаксис описания конструктора:

имя_класса(список_параметров) 
    {тело_конструктора}

Под деструктором будем понимать метод, который автоматически вызывается при уничтожении объекта класса (непосредственно перед началом процедуры "сборки мусора"). Деструкторы не имеют параметров и не возвращают значений.

Синтаксис описания деструктора:

~имя_класса() {тело_деструктора}

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

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

Синтаксис описания объекта:

class имя_класса : имя_родительского_класса
{
тело_класса
}

Пример описания объекта:

class Predator:Animal{
private int Speed;
}

Наследование формирует иерархию классов на основе отношения частичного порядка ISA ("являться").

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

Порядок выполнения работы

  1. Разработать методы и свойства для каждого из определяемых классов.
  2. Реализовать программу на C# в соответствии с вариантом исполнения.

Варианты заданий

Построить иерархию классов в соответствии с вариантом задания:

  1. Студент, преподаватель, персона, заведующий кафедрой
  2. Служащий, персона, рабочий, инженер
  3. Рабочий, кадры, инженер, администрация
  4. Деталь, механизм, изделие, узел
  5. Организация, страховая компания, нефтегазовая компания, завод
  6. Журнал, книга, печатное издание, учебник
  7. Тест, экзамен, выпускной экзамен, испытание
  8. Место, область, город, мегаполис
  9. Игрушка, продукт, товар, молочный продукт
  10. Квитанция, накладная, документ, счет
  11. Автомобиль, поезд, транспортное средство, экспресс
  12. Двигатель, двигатель внутреннего сгорания, дизель, реактивный двигатель
  13. Республика, монархия, королевство, государство
  14. Млекопитающее, парнокопытное, птица, животное
  15. Корабль, пароход, парусник, корвет
< Лекция 6 || Самостоятельная работа 2 || Лекция 7 >