Опубликован: 18.05.2011 | Доступ: свободный | Студентов: 871 / 65 | Оценка: 4.40 / 4.20 | Длительность: 12:30:00
Лекция 4:

Наследование и полиморфизм

< Лекция 3 || Лекция 4: 123 || Лекция 5 >

Практическое занятие "Объектно-ориентированное программирование"

Цель занятия

Научиться самостоятельно создавать классы в C# и выполнять операции наследования и полиморфизма.

Практическая задача

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

для исполнителей:

  1. Личный номер
  2. Фамилия имя отчество
  3. должность
  4. оклад
  5. надбавка
  6. номер отдела

для руководителей:

  1. Личный номер
  2. Фамилия имя отчество
  3. должность
  4. оклад
  5. надбавка
  6. ранг руководителя

Мы видим, что первые пять пунктов личной карточки совпадает как у исполнителей, так и у руководителей. Поэтому имеет смысл создать основной класс TPerson который будет описывать общую персону, а затем с помощью механизма наследования мы создадим еще два класса-потомка TWorker и TMaster. В нашем примере мы будем рассматривать лишь один метод: int\ CalcPay(). Этот метод должен возвращать сумму, которую получает данный сотрудник. Для простоты мы будем считать, что эта сумма складывается из оклада и надбавки. Реализуем наши классы.

\begin{verbatim}
    class TPerson
    {
        public int ID;
        public string Name;
        public string Position;
        public int Salary;
        public int Bonus;

        public virtual int CalcPay()
        {
            return Salary + Bonus;
        }
    }

    class TWorker : TPerson
    {
        public int Deparment;
    }

    class TMaster : TPerson
    {
        public int Rank;
    }
\end{verbatim}

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

\begin{verbatim}
public int TotalPay(TPerson Person)
\end{verbatim}

Внутри этого метода происходит вызов метода CalcPay(). Предположим, теперь, что В нашей организации появились руководители высшего звена, для которых вводится дополнительная выплата - SuperBonus. Мы хотим описать этих топ-менеджеров таким образом, чтобы использовать класс - наследник от класса TMaster. Реализуем это:

\begin{verbatim}
    class TTopMaster : TMaster
    {
        public int SuperBonus;
        public override int CalcPay()
        {
            return base.CalcPay() + SuperBonus;
        }
    }
\end{verbatim}

С помощью механизма полиморфизма мы можем использовать в качестве параметра в методе TotalPay() экземпляры класса TTopMaster. При этом при расчете выплат будет учитываться и дополнительная выплата SuperBonus.

< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Олег Корсак
Олег Корсак
Латвия, Рига
Дмитрий Кифель
Дмитрий Кифель
Казахстан, Темиртау