- •План лекции
- •Отношения между классами
- •Отношения «является» и «имеет»
- •Отношения «является» и «имеет»
- •Клиент класса
- •Отношения между клиентами и поставщиками
- •Наследование
- •Наследование
- •Наследование
- •Объект потомка вызывает поля и методы родителя
- •Наследование. Примеры
- •Добавление методов и изменение методов родителя
- •Статический контроль типов и динамическое связывание
- •Механизмы обеспечения полиморфизма
- •Механизмы обеспечения полиморфизма
- •Полиморфизм. Пример
- •Полиморфизм. Пример
- •Абстрактные классы
- •Абстрактные классы
- •Абстрактные классы
- •Абстрактные классы
- •Пример работы со стеком
- •Вопросы
Наследование. Примеры
public class Derived:Found
{
protected int debet;
}
public Derived() {}
public Derived(string name, int cred, int deb):base (name,cred)
{
debet = deb;
}
05. C#. Наследование. Полиморфизм |
12 |
Добавление методов и изменение методов родителя
public void DerivedMethod()
{
Console.WriteLine("Это метод класса Derived");
}
new public void Analysis()
{
base.Analysis(); Console.WriteLine("Сложный анализ");
}
public void Analysis(int level)
{
base.Analysis();
Console.WriteLine("Анализ глубины {0}", level);
}
05. C#. Наследование. Полиморфизм |
13 |
Статический контроль типов и динамическое связывание
x1.M(arg1, arg2, ... argN)
Контролем типов называется проверка каждого вызова, удостоверяющая, что:
в классе A1 объекта x1 действительно имеется метод M ;
список фактических аргументов в точке вызова соответствует по числу и типам списку формальных аргументов метода M, заданного в классе A1.
Статическим связыванием называется связывание цели вызова и вызываемого метода на этапе компиляции, когда с сущностью связывается метод класса, заданного при объявлении сущности.
Динамическим связыванием называется связывание цели вызова и вызываемого метода на этапе выполнения, когда с сущностью связывается метод класса объекта, связанного с сущностью в момент выполнения.
05. C#. Наследование. Полиморфизм |
14 |
Механизмы обеспечения полиморфизма
public override void VirtMethod()
{
Console.WriteLine("Сын: " + this.ToString());
}
public override string ToString()
{
return(String.Format("поля: name = {0},
credit = {1},debet ={2}",name, credit, debet));
}
public ChildDerived(string name, int cred, int deb):base (name,cred, deb)
{}
public override void VirtMethod()
{
Console.WriteLine("внук: " + this.ToString());
}
05. C#. Наследование. Полиморфизм |
15 |
Механизмы обеспечения полиморфизма
public void Work()
{
VirtMethod();
NonVirtMethod();
Analysis();
}
public void NonVirtMethod()
{
Console.WriteLine ("Мать: "+ this.ToString());
}
05. C#. Наследование. Полиморфизм |
16 |
Полиморфизм. Пример
public void TestFoundDerivedReal()
{
Found bs = new Found ("father", 777); Console.WriteLine("Объект bs вызывает методы класса Found"); bs.VirtMethod();
bs.NonVirtMethod();
bs.Analysis();
bs.Work();
Derived der = new Derived("child", 888, 555);
Console.WriteLine("Объект der вызывает методы класса Derived");
der.DerivedMethod();
der.VirtMethod();
der.NonVirtMethod();
der.Analysis();
der.Work();
05. C#. Наследование. Полиморфизм |
17 |
Полиморфизм. Пример
ChildDerived chider = new ChildDerived("grandchild", 999, 444);
Console.WriteLine("Объект chider вызывает методы
ChildDerived");
chider.VirtMethod();
chider.NonVirtMethod();
chider.Analysis(5);
chider.Work();
}
05. C#. Наследование. Полиморфизм |
18 |
Абстрактные классы
public abstract class Stack
{
public Stack() {}
///<summary> втолкнуть элемент item в стек </summary>
///<param name="item"></param>
public abstract void put(int item);
///<summary> удалить элемент в вершине стека </summary> public abstract void remove();
///<summary> прочитать элемент в вершине стека </summary> public abstract int item();
///<summary> определить, пуст ли стек </summary>
///<returns></returns>
public abstract bool IsEmpty();
}
05. C#. Наследование. Полиморфизм |
19 |
Абстрактные классы
public class Linkable
{
public Linkable()
{ }
public int info; public Linkable next;
}
05. C#. Наследование. Полиморфизм |
20 |
Абстрактные классы
public class ListStack: Stack
{
public ListStack()
{
top = new Linkable();
}
Linkable top;
///<summary> втолкнуть элемент item в стек </summary>
///<param name="item"></param>
public override void put(int item)
{
Linkable newitem = new Linkable(); newitem.info = item;
newitem.next = top; top = newitem;
}
05. C#. Наследование. Полиморфизм |
21 |