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

Интерфейсы

«Иерархия Вершина прощается с вами!»

Задание: Работаем с до боли знакомой нам иерархией фигур, убрав треугольник. 

( боюсь, утомитесь считать его площадь, задача-то сразу станет повышенной сложности ☺)

Производные классы: Rectangle (квадрат) и Circle (круг) с абстрактный классом Вершина.

Теперь каждая вершина может быть своего цвета и размера и они никаким многоугольником не соединены. Мало того – и цвет, и размер случайны и задаются в момент вызова конструктора случайным образом, но так, чтобы не превысить размеры окна. Появляются и сразу же отображаются на форме по нажатию кнопки «Рисовать».

По нажатию кнопки «Сортировать» вершины должны выстроиться в линию, в зависимости от убывания своей площади.

Т. е. вам придется создать список фигур по нажатию кнопки «Рисовать фигуру на форме», а потом отсортировать объекты по их площадям от самой маленькой до самой большой по нажатии кнопки «Сортировать».

После того, как несколько раз была нажата

кнопка «Рисовать»:

После сортировки:

Как делать:


Используем разработанную иерархию, убрав оттуда все лишнее
Добавляем интерфейс IShape  со свойством вычисления площади и методом рисования. ( интерфейс – сгруппированные общие возможности, кто хочет из классов – тот и реализует. Наши классы хотят, и будут его реализовывать, хоть он и не удался размером – маловат)
Перегружаем метод Show и свойство S во всех классах. Они могут быть и абстрактными, но должны быть обязательно реализованы везде, где заявлено использование этого интерфейса
В абстрактном классе Вершина реализовать метод CompareTo так, чтобы можно было отсортировать объекты по их площадям.

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

А теперь вам надо самим его реализовать.


В классе Form1,как уже привыкли, все созданное обрабатываем в обработчиках. Хотя метод сортировки я писала в классе Вершина и сделала его статическим, передавая ему сразу весь список вершин, чего и вам советую, но не настаиваю.
Кнопка «Стереть» еще бы очень помогла, надоедает все время перезапускать проект заново ☺