При вызове виртуального метода, метод определяется типом объекта. — КиберПедия 

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

При вызове виртуального метода, метод определяется типом объекта.

2022-10-04 50
При вызове виртуального метода, метод определяется типом объекта. 0.00 из 5.00 0 оценок
Заказать работу

Определение виртуального метода происходит следующим образом:

В базовом классе при определении метода используется ключевое слово virtual, а во всех производных классах, в которых этот метод переопределяется, слово override. Например:

public class B {

public virtual int f()

    {return 1;} }

public    class C:B{

              public override int f()

              {return 2;} }

public class D:C {

                       public override int f()

                       { return 3;} }

В следующем фрагменте программы во всех случаях будет вызван метод f из класса D:

B b=new D();

int i=b.f();

i = ((C) b). f ();

Замечание. Поскольку вызов виртуального метода не зависит от того, через какую ссылку он вызывается, то некоторые авторы термин переопределение метода используют только для виртуальных методов.

Этапы выполнения задания

1. Создать иерархию классов, определенную вариантом задания. Базовый «Точка» должен содержать два метода, вычисляющие площадь, одну обычную, другую виртуальную, оба эти метода должны возвращать значение 0. Базовый класс может не содержать полей, все производные должны содержать поля, которые позволяют решать поставленные в индивидуальном задании задачи. Все производные классы должны содержать конструкторы, задающие не нулевые значения полям класса.

2. В классе формы(Form1) определить поля, которые являются объектами созданных Вами классов, по одному на каждый класс и еще одно поле t, являющееся ссылкой базового класса «Точка». Ссылка t всегда будет указывать на активный объект, по умолчанию, t указывает на объект базового класса.

3. На форму поместить две панели (компоненты Panel). На них будут размещены кнопки и метки (компоненты Label).

4. Кнопки, расположенные на первой панели (кнопки первой группы), предназначены для выбора активного объекта. Число этих кнопок равно числу полей класса Form1, являющихся объектами Ваших классов. Каждому объекту ставиться в соответствии кнопка. Если кнопке поставлен в соответствие объект некоторого класса, то надпись на этой кнопке должна отражать имя этого класса. Например, если кнопка связана с объектом класса Circle, то название этой кнопки должно быть «Окружность»

5. При нажатии на кнопку из первой группы ссылке t присваивается адрес объекта, с которым эта кнопка связана, т.е. данный объект считается активным. Кроме того, через одну из меток выводится на форму имя класса активного объекта или название нажатой кнопки.

6.  На вторую панель помещаются кнопки, которым в соответствие ставятся методы, определенные в классах Вашей иерархии. Для одноименных методов, описанных в разных классах ставиться в соответствие одна кнопка. Поскольку в каждом классе определены по два метода (они должны иметь разные имена), вычисляющие площадь (одна – обычная, другая – виртуальная), то для вычисления площади помещаются две кнопки. Например, кнопки с названиями «Площадь_О» и «Площадь_В». Названия кнопок второй группы должны соответствовать именам методов поставленных в соответствие кнопкам.

7. При нажатии на любую кнопку из второй группы, кроме кнопки с именем «Площадь_O», производится проверка того может ли активный объект приведен к типу, в котором определен метод, соответствующий нажатой кнопки, если да, то выводится значение этого метода, а если нет то сообщение о невозможности произвести вычисления. Например:
if (t is Circle) label 2. Text =((Circle) t). f (). ToString ();
else label 2. Text =”Метод f () для активного объекта не определен”;

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

8. При нажатии на кнопку «Площадь_В», вызывается виртуальный метод вычисления площади для активного объекта.

План отчета

1. Титульный лист.

2. Цель работы.

3. Задание.

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

5. Распечатка программы.

 

Варианты индивидуальных заданий.

1. Базовый класс «Точка». Классы «Окружность» и «Прямоугольный треугольник» являются производными от класса «Точка». Класс «Конус» является производным от класса «Окружность». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Прямоугольный треугольник» еще определить метод, вычисляющий периметр. В классе «Конус» определить метод, вычисляющий объем.

2. Базовый класс «Точка». Классы «Окружность» и «Ромб» являются производными от класса «Точка». Класс «Конус» является производным от класса «Окружность». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Ромб» еще определить метод, вычисляющий периметр. В классе «Конус» определить метод, вычисляющий объем.

3. Базовый класс «Точка». Классы «Правильный пятиугольник», «Прямоугольный треугольник», «Прямоугольник» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Прямоугольник» еще определить метод, вычисляющий диагональ. В классах «Треугольник», «Правильный пятиугольник» и «Прямоугольник» определить методы, вычисляющие периметры соответствующих фигур.

4. Базовый класс «Точка». Классы «Ромб», «Прямоугольный треугольник», «Прямоугольник» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Прямоугольник» еще определить метод, вычисляющий диагональ. В классах «Прямоугольный треугольник», «Ромб» и «Прямоугольник» определить методы, вычисляющие периметры соответствующих фигур.

5. Базовый класс «Точка». Классы «Окружность» и «Равнобедренный треугольник» являются производными от класса «Точка». Класс «Цилиндр» является производным от класса «Окружность». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Окружность» еще определить метод, вычисляющий диаметр. В классе «Цилиндр» определить метод, вычисляющий объем.

6. Базовый класс «Точка». Классы «Окружность» и «Ромб» являются производными от класса «Точка». Класс «Цилиндр» является производным от класса «Окружность». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Окружность» еще определить метод, вычисляющий диаметр. В классе «Цилиндр» определить метод, вычисляющий объем.

7. Базовый класс «Точка». Классы «Окружность», «Равнобедренный треугольник», «Квадрат» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Квадрат» еще определить метод, вычисляющий диагональ. В классе «Окружность» еще определить метод, вычисляющий диаметр. В классах «Равнобедренный треугольник» и «Квадрат» определить методы, вычисляющие периметры.

8. Базовый класс «Точка». Классы «Окружность», «Равнобедренный треугольник», «Ромб» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Ромб» еще определить метод, вычисляющий сторону. В классе «Окружность» еще определить метод, вычисляющий диаметр. В классах «Равнобедренный треугольник» и «Ромб» определить методы, вычисляющие периметры.

9. Базовый класс «Точка». Классы «Окружность» и «Прямоугольник» являются производными от класса «Точка». Класс «Конус» является производным от класса «Окружность». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Прямоугольник» еще определить метод, вычисляющий диагональ прямоугольника. В классе «Конус» определить метод, вычисляющий объем.

10. Базовый класс «Точка». Классы «Окружность» и «Ромб» являются производными от класса «Точка». Класс «Конус» является производным от класса «Окружность». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Ромб» еще определить метод, вычисляющий сторону. В классе «Конус» определить метод, вычисляющий объем

11. Базовый класс «Точка». Классы «Правильный шестиугольник», «Правильный треугольник», «Квадрат» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. Один метод виртуальный, другой обычный. В классе «Квадрат» еще определить метод, вычисляющий диагональ. В классах «Правильный треугольник», «Правильный шестиугольник» и «Квадрат» определить методы, вычисляющие периметры.

12. Базовый класс «Точка». Классы «Правильный шестиугольник», «Правильный треугольник», «Ромб» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. Один метод виртуальный, другой обычный. В классе «Ромб» еще определить метод, вычисляющий сторону. В классах «Правильный треугольник», «Правильный шестиугольник» и «Квадрат» определить методы, вычисляющие периметры.

13. Базовый класс «Точка». Классы «Окружность» и «Правильный треугольник» являются производными от класса «Точка». Класс «Правильная треугольная призма» является производным от класса «Правильный треугольник». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Окружность» еще определить метод, вычисляющий диаметр. В классе «Правильная треугольная призма» определить метод, вычисляющий объем.

14. Базовый класс «Точка». Классы «Ромб» и «Правильный треугольник» являются производными от класса «Точка». Класс «Правильная треугольная призма» является производным от класса «Правильный треугольник». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Ромб» еще определить метод, вычисляющий периметр. В классе «Правильная треугольная призма» определить метод, вычисляющий объем.

15. Базовый класс «Точка». Классы «Окружность» и «Квадрат» являются производными от класса «Точка». Класс «Правильная четырехугольная призма» является производным от класса «Квадрат». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Квадрат» еще определить метод, вычисляющий периметр. В классе «Правильная четырехугольная призма» определить метод, вычисляющий объем.

16. Базовый класс «Точка». Классы «Окружность», «Прямоугольный треугольник», «Прямоугольник» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Окружность» еще определить метод, вычисляющий диаметр. В классах «Прямоугольный треугольник» и «Прямоугольник» определить методы, вычисляющие периметры.

17. Базовый класс «Точка». Классы «Окружность», «Прямоугольный треугольник», «Ромб» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Окружность» еще определить метод, вычисляющий диаметр. В классах «Прямоугольный треугольник» и «Ромб» определить методы, вычисляющие периметры.

18. Базовый класс «Точка». Классы «Правильный шестиугольник», «Квадрат» являются производными от класса «Точка». Класс «Правильная четырехугольная призма» является производным от класса «Квадрат». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Квадрат» еще определить метод, вычисляющий диагональ. В классах, «Правильный шестиугольник» и «Квадрат» определить методы, вычисляющие периметры. В классе «Правильная четырехугольная призма» определить метод, вычисляющий объем.

19. Базовый класс «Точка». Классы «Окружность», «Сектор», «Прямоугольник» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Прямоугольник» еще определить метод, вычисляющий диагональ. В классе «Окружность» еще определить метод, вычисляющий диаметр. В классе «Сектор» определить метод, вычисляющий длину дуги.

20. Базовый класс «Точка». Классы «Окружность», «Сектор», «Ромб» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Ромб» еще определить метод, вычисляющий сторону. В классе «Окружность» еще определить метод, вычисляющий диаметр. В классе «Сектор» определить метод, вычисляющий длину дуги.

21. Базовый класс «Точка». Классы «Окружность» и «Сектор» являются производными от класса «Точка». Класс «Конус» является производным от класса «Окружность». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Сектор» еще определить метод, вычисляющий длину дуги. В классе «Конус» определить метод, вычисляющий объем.

22. Базовый класс «Точка». Классы «Сектор» и «Квадрат» являются производными от класса «Точка». Класс «Правильная четырехугольная пирамида» является производным от класса «Квадрат». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный. В классе «Квадрат» еще определить метод, вычисляющий периметр. В классе «Правильная четырехугольная призма» определить метод, вычисляющий объем.

23. Базовый класс «Точка». Классы «Окружность» и «Прямоугольник» являются производными от класса «Точка». Класс «Параллелепипед» является производным от класса «Прямоугольник». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Прямоугольник» еще определить метод, вычисляющий периметр. В классе «Параллелепипед» определить метод, вычисляющий объем.

24. Базовый класс «Точка». Классы «Сектор», «Прямоугольный треугольник», «Прямоугольник» являются производными от класса «Точка». Во всех классах определить по два метода, вычисляющих площадь фигуры (площадь точки равна нулю, для объемных тел вычисляется площадь полной поверхности). Один метод виртуальный, другой обычный.  В классе «Сектор» еще определить метод, вычисляющий длину дуги. В классах «Прямоугольный треугольник» и «Квадрат» определить методы, вычисляющие периметры.

 

Вопросы:

1. Что такое наследование?

2. Как на языке С# оформляется наследование?

3. Какое наследование называется множественным?

4. Реализовано ли множественное наследование классов на языке С#?

5. Как оформляется виртуальный метод?

6. В чем отличие виртуального метода от не виртуального?

7. На какие объекты могут указывать ссылки базового класса?

 

 

Лабораторная работа №6
Абстрактные классы и интерфейсы.

Цель работы – Самостоятельное определение абстрактного класса и интерфейса. Изучение особенностей наследования от абстрактного класса или интерфейса

Справочный материал.

Окно Solution Explorer

Окно Solution Explorer позволяет просматривать и редактировать файлы проекта.

Рассмотрим это окно на примере проекта WindowsApplication1. Проекты объединяются в решения.

 Для нашего приложения было создано одно решение. Решению соответствует корневой значок дерева файлов, обозначенный как Solution «WindowsApplication1»

На следующем уровне иерархии находится значок с надписью WindowsApplication1. Далее следуют папки и файлы, входящие в проект.

Для создания новой формы надо выделить значок проекта и вызвать оперативное меню. В оперативном меню выбрать команду Add, при этом откроется дополнительный список, в котором выбрать Add Windows Form...Далее, в открывшемся окне в поле ввода Name ввести желаемое имя формы и нажать кнопку OK. При этом будет создан класс новой формы.

Для создания нового файла для нового класса нужно надо выделить значок проекта и вызвать оперативное меню. В оперативном меню выбрать команду Add, при этом откроется дополнительный список, в котором выбрать Add Class...Далее, в открывшемся окне в поле ввода Name ввести желаемое имя класса и нажать кнопку OK.

Для вывода новой формы на экран надо поступить следующим образом:

1. Создать объект класса новой формы. (Form2 f=new Form2();)

2. Вывести созданный объект на экран с помощью методов Show или ShowDialog.

Например, f.Show();f.ShowDialog();

Метод Show предназначен для вывода на экран нескольких форм и даёт возможность работать с этими формами в параллельном режиме. Для того чтобы перейти к некоторой форме t достаточно щёлкнуть по ней мышкой, при этом остальные формы будут оставаться на экране, и к любой из них мы тоже сможем перейти по щелчку мыши. Во многих приложениях такая работа не нужна, она может привести к путанице. Чаще для активизации формы используют метод ShowDialog.

При выводе формы методом ShowDialog переход к ранее открытым формам возможен только после закрытия формы открытой с помощью метода ShowDialog. Более того, выполнение команд, следующих за вызовом метода ShowDialog, приостанавливается до закрытия соответствующей формы. Поэтому фрагмент программы:

Form2 f=new Form2();

                       f.ShowDialog();

                       int i=f.j;

Не только создает и выводит на экран новую форму, но записывает в переменную i то значение открытого поля j формы f, которое окажется в этом поле в момент закрытия формы f. Если бы форма f выводилась методом Show, то в переменную i, записалось бы число, которое находилось бы в поле j в момент открытия формы f.

Окно Class Vew предназначено для быстрого перехода к нужному описанию метода, свойства, поля или класса. Для быстрого перехода, надо в представленном в окне Class Vew структурном дереве приложения найти необходимое имя и выполнить двойной щелчок по нему.

Абстрактные классы

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

Пример.

abstract class M{

public int x;

public int g(){return x;}

              abstract public int fun ();    }

Абстрактный класс М, содержит поле х, не абстрактный метод g () и абстрактный метод fun ().

Абстрактные методыне могут содержаться в неабстрактных классах. Все абстрактные методы должны быть определены в производных классах с использованием служебного слова override.

class N:M{

              override public int fun(){return 3;}}

Интерфейсы

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

Интерфейс – это именованный набор абстрактных членов. Интерфейсы не могут содержать поля, но могут содержать абстрактные методы, свойства и события.

В языке С# интерфейс – это специальный тип (interface), содержащий толь абстрактные члены. Поскольку других членов в интерфейсе быть не может, то при их описании не используется слово abstract, поскольку интерфейс определяет только общедоступные члены, то при их описании не указывается уровень доступа.

Пример.

interface I {

    int Sq();}

Если класс наследует интерфейс, то в нем обязательно должны быть определены все члены, входящие в интерфейс.

Class A:I{

public int Sq(){return 6;} }

Замечание. Вместо фразы «класс А наследует интерфейс I» говорят «класс А реализует интерфейс I» или «класс А поддерживает интерфейс I».

Класс может поддерживать несколько интерфейсов.

Ссылки на интерфейс

Ссылки на интерфейс - это ссылки на объекты классов, поддерживающих данный интерфейс. Если объявлена ссылка на интерфейс I, (I b;), а А – класс поддерживающий интерфейс I, то можно написать b = new A (); и работать с вновь созданным объектом класса А, через ссылку b. Если с объектом класса мы работаем через ссылку на интерфейс, то в этом случае будут доступны только члены, описанные в интерфейсе.

Ссылки на интерфейс могут быть формальными параметрами методов и могут возвращаться методами.

Свойства

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

Пример описания свойства:

private int svv;

              public int sv

              { get{return svv;}

                       set { svv = value;} }

Если в определении свойства отсутствует раздел get, то свойство предназначено только для записи, а если раздел set – то свойство предназначено только для чтения.

Свойство имеет еще одно преимущество перед обычными методами, обеспечивающими доступ к закрытому члену. Они вызываются специальным образом, имитирующим обращение к полю. Например

f. sv =5;                       int i = f. sv;

 

Этапы выполнения задания

1. Размер фигуры определяется размером прямоугольника, в который она помещается, назовем его базовым. Расположение фигуры в этом прямоугольнике, определяется вариантом задания. При выводе фигуры на экран базовый прямоугольник не рисуется.

2. Создать форму Dialog для ввода размеров базового прямоугольника.

a. В класс формы Dialog добавить два открытых поля Х, У типа int, для хранения вводимой информации.

b. На форму Dialog поместить два текстовых поля и одну кнопку. При нажатии на кнопку информация, записанная в поля ввода должна преобразовываться в тип int и записываться в поля Х и У.

3. Описать иерархию классов, определяемую вариантом задания. Каждый класс иерархии определить в отдельном файле.

4. В класс Form 1 добавить поле Figure, которое является ссылкой на абстрактный класс для нечетных вариантов и ссылкой на интерфейс для четных вариантов.

5. На форму Form 1 поместить три кнопки и два поля ввода. Первые две из кнопок должны иметь названия соответствующие именам производных классов, третья – надпись «Рисование».

6. При нажатии на одну из двух первых кнопок должны выполняться следующие действия:

a. Создаваться объект класса, имя которого соответствует надписи на кнопке. Адрес созданного объекта должен записываться в ссылку типа Figure.  

b. Выводиться на экран форма Dialog. После ее закрытия, информация из ее полей Х и У должна быть переписана в поля созданного объекта.

7. При нажатии на кнопку «Рисование» должна выполняться проверка того, что ссылка Figure не является нулевой, и если - нет, то на экран должна выводиться фигура. Место положения фигуры должно определяться информацией, находящейся в полях ввода формы Form 1.

План отчета

9. Титульный лист.

10. Цель работы.

11. Задание.

12. Теоретический материал, используемый при выполнении задания.

13. Распечатка программы.

Варианты иерархий классов

1.  Иерархия включает абстрактный базовый класс под названием «Фигура», и два его подкласса. Абстрактный класс содержит абстрактный метод рисования фигуры и два поля или два свойства, определяющие размер фигуры. В подклассах переопределяется абстрактный метод.

2. Иерархия включает интерфейс и два класса, поддерживающих этот интерфейс. Интерфейс содержит метод рисования фигуры и два свойства, определяющие размер фигуры.

Варианты фигур

 

1. Эллипс, вписанный в базовый прямоугольник.

2. Прямоугольник, совпадающий с базовым прямоугольником.

3. Шестиугольник (не обязательно правильный), расположение шестиугольника в базовом прямоугольнике студент определяет самостоятельно.

4. Пятиугольник (не обязательно правильный), расположение пятиугольника в базовом прямоугольнике студент определяет самостоятельно.

5. Ромб, вершины которого лежат на серединах базового прямоугольника.

6. Равнобедренный треугольник, основание треугольника совпадает с нижней базового прямоугольника, а противоположная основанию вершина лежит на середине верхней стороны базового прямоугольника.

7. Прямоугольный треугольник, катеты которого совпадают со сторонами базового прямоугольника.

8. Сектор в 180 градусов. Для построения сектора, не используется понятие базового прямоугольника.

9. Равнобокая трапеция. Основания трапеции должны лежать на сторонах базового прямоугольника. 

 

 Варианты индивидуальных заданий

1. Первый вариант иерархии классов. 1, 2 варианты фигур.

2. Второй вариант иерархии классов, 1, 7 варианты фигур.

3. Первый вариант иерархии классов. 1, 3 варианты фигур.

4. Второй вариант иерархии классов, 1, 4 варианты фигур.

5. Первый вариант иерархии классов. 1, 6 варианты фигур.

6. Второй вариант иерархии классов, 1, 8 варианты фигур.

7. Первый вариант иерархии классов, 1, 9 варианты фигур.

8. Второй вариант иерархии классов, 1, 5 варианты фигур.

9. Первый вариант иерархии классов, 2, 3 варианты фигур.

10. Второй вариант иерархии классов, 2, 4 варианты фигур.

11. Первый вариант иерархии классов. 2, 5 варианты фигур.

12. Второй вариант иерархии классов, 2, 6 варианты фигур.

13. Первый вариант иерархии классов. 2, 7 варианты фигур.

14. Второй вариант иерархии классов, 2, 9 варианты фигур.

15. Первый вариант иерархии классов. 3, 8 варианты фигур.

16. Второй вариант иерархии классов, 6, 2 варианты фигур.

17. Первый вариант иерархии классов, 6, 4 варианты фигур.

18. Второй вариант иерархии классов, 6, 5 варианты фигур.

19. Первый вариант иерархии классов, 6, 7 варианты фигур.

20. Второй вариант иерархии классов, 6, 8 варианты фигур.

21. Первый вариант иерархии классов. 6, 9 варианты фигур.

22. Второй вариант иерархии классов, 7, 4 варианты фигур.

23. Первый вариант иерархии классов. 7, 5 варианты фигур.

24. Второй вариант иерархии классов, 7, 8 варианты фигур.

25. Первый вариант иерархии классов. 7, 9 варианты фигур.

Вопросы

1. Какой класс называется абстрактным?

2. Какие члены может содержать абстрактный класс?

3. Что такой тип называется интерфейсом?

4. Какие члены может содержать интерфейс?

5. Может ли интерфейс содержать поле?

6. Что такое свойство?

 

 

Лабораторная работа №7
Списки

Цель работы – научится работать со списками, используя библиотечные классы.

Справочный материал.

Описание списков

 

Список — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором некоторое значение может встречаться более одного раза. Значения, входящие в список называются элементами списка; если значение встречается несколько раз, каждое вхождение считается отдельным элементом. Список можно считать компьютерной реализацией математического понятия конечной последовательности.

В программе, списки могут быть реализованы с помощью массивов; но эта реализация не является оптимальной, поскольку вставка или удаление элемента из середины списка весьма трудоёмкие операции.

Чаще всего списки реализуются в виде отдельно расположенных элементов, в которых хранятся не только значения, но и ссылки на соседние элементы. Если список односвязный, то в первом элементе хранится ссылка на второй элемент, во втором - на третий и т.д. Если список односвязный кольцевой, то в последнем элементе хранится ссылка на первый элемент, в не кольцевом списке такой ссылки нет.

Если список двусвязный, то в каждом элементе храниться две ссылки: на соседа с большим номером и на соседа меньшим номером. Двусвязные списки так же бывают кольцевыми и не кольцевыми. Во втором случае в первом элементе есть ссылка на второй, а в последнем – на первый.

Список является чрезвычайно гибкой структурой т.к. его легко сделать большим или меньшим. Списки можно объединить или разорвать на меньшие списки. Элементы списка доступны для вставки, удлинения и просмотра.

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

 

Класс ArrayList и обобщающий класс List<T>

 

Т.к. списки широко используются при написании программ, то практически библиотеки всех языков программирования содержат их реализацию. Язык С# не является исключением. Пространства имен System Collektions и System.Collections.Generic содержат классы, предназначенные для работы со списками.

Рассмотрим сначала класс ArrayList из пространства имён System. Collektions, его можно использовать для создания любого вида списка.

Команда L = newArrayList (); создает пустой список с именем L.

Элементами этого списка являются объекты типа о bject. Поскольку все типы объявляются производными от класса о bject, то элементом списка может быть объект любого класса или структурного типа.

Метод Add позволяет добавлять элемент в конец списка

L. Add (3);

Данная команда добавит число 3 в список L.

L. Add (4);

Теперь список содержит два элемента <3,4>. Нумерация элементов списка начинается с 0.

Метод Insert (),позволяет вставить элемент в произвольное место списка. Его первый параметр – это номер позиции, в которую вставляется элемент, а второй параметр – сам элемент. Если указывается номер невозможной позиции, то формируется исключение.

 По команде L. Insert (1,5); число 5 будет помещено в позицию под номером один нашего списка. Список примет вид <3,5,4>.

Методы Remove At, Remove предназначены для удаления элементов из списка, первый удаляет элемент по номеру, второй – по значению. Для удаления нулевого элемента можно использовать команду

  L. Remove At (0);

 Если задать номер несуществующего элемента, то будет сгенерировано исключение.

 Метод Remove удаляет элемент по значению, точнее, его первое вхождение. Если удаляемого элемента в списке нет, то ничего не происходит.

Доступ к элементу в классе ArrayList реализован по номеру, поэтому его можно считать динамическим массивом.

int i = (int) L [0];

Переменная i получит значение 5. Преобразование типов при этом необходимо, поскольку элементы списка L имеют тип object.

 Команда L [0]=8; изменит значение элемента под номером 0, если задать номер несуществующего элемента, то будет сгенерировано исключение.

Свойство для чтения Count возвращает число элементов в списке.

Класс ArryList содержит много других членов, которые позволяют упростить работу со списками. Например, метод Sort сортирует список по возрастанию в тех случаях, когда это возможно, т.е. в тех случаях, когда типы элементов списка реализуют интерфейс IComparable.

Методы Contains и IndexOf позволяют выяснить содержится ли объект в списке, причём первый метод возвращает значение булева типа (true, false), а второй – номер первого вхождения элемента в список, если элемент есть, или «-1» в противном случае.

   Метод AddRange позволяет добавить к списку список элементов.

  L. AddRange (L);

   Данная команда удлинит список вдвое.

   Класс ArrayList в силу своей универсальности имеет недостатки. Например, в список чисел L, кто-то может добавить объект типа Button.

Если нам надо построить строго типизированный список, лучше использовать обобщенный класс List<T> из пространства имен System.Collections.Generic, который обеспечивает такие же функциональные возможности, как и необобщенный класс ArrayList, но при этом задает тип элементов, в момент создания списка.

List< int > L1=new List<int>();

List< Button > L2=new List< Button >();

L 1 - это список чисел, L 2 – список кнопок.

Работая со строго типизированным списком, нам уже не надо выполнять преобразования типов при обращении к элементам. Например, строка

int i= L[0]; не вызовет проблем, если элемент списка №0 существует.

 

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

Стек

Стек – это специальный тип списка, в котором все вставки и удаления выполняются на


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.182 с.