Заметьте, класс подробно документирован. Для методов класса указываются предусловия и постусловия. Обратите внимание, в соответствии с принципами контрактного программирования клиент класса, прежде чем вызвать метод, должен проверить выполнимость предусловия, что повышает корректность работы системы в целом. Именно так и будет реализован вызов этих методов в классе формы, где осуществляется работа со списком.
Классы элементов списка
Рассмотрим классы, описывающие элементы списков — элементы с одним и с двумя указателями:
using System;
namespace Shapes
{
///
/// Класс Linkable(T)задает элементы списка, включающие:
/// информационное поле типа Т — item
/// ссылку на элемент типа Linkable — next
/// Функции:
/// конструктор new: —> Linkable
/// запросы:
/// Get_Item: Linkable —> T
/// Get_Next: Linkable —> Linkable
/// процедуры:
/// Set_Item: Linkable*T —> Linkable
/// Set_Next: Linkable*Linkable —> Linkable
/// Роль типа T играет Figure
///
public class Linkable
{
public Linkable ()
{
item =null; next = null;
}
///
/// закрытые атрибуты класса
///
Figure item;
Linkable next;
///
/// процедуры свойства для доступа к полям класса
///
public Figure Item {
get {
return(item);
}
set {
item = value;
}
}
public Linkable Next {
get {
return(next);
}
set {
next = value;
}
}
}//class Linkable
///
/// Класс TwoLinkable задает элементы с двумя ссылками
///
public class TwoLinkable
{
public TwoLinkable()
{
prev = next = null;
}
///
/// закрытые атрибуты класса
///
TwoLinkable prev, next;
Figure item;
///
/// процедуры свойства для доступа к полям класса
///
public Figure Item
{
get
{
return(item);
}
set
{
item = value;
}
}
public TwoLinkable Next
{
get
{
return(next);
}
set
{
next = value;
}
}
public TwoLinkable Prev
{
get
{
return(prev);
}
set
{
prev = value;
}
}
}//class TwoLinkable
}
Организация интерфейса
Создадим теперь интерфейс, позволяющий конечному пользователю работать с объектами наших классов. Как всегда, интерфейс создавался вручную в режиме проектирования. На форме я создал меню с большим числом команд и инструментальную панель с 18 кнопками, команды которых повторяли основную команду меню. Описывать процесс создания интерфейса не буду — он подробно рассмотрен в предыдущей главе. Поскольку вся работа по созданию интерфейса транслируется в программный код формы, то просто приведу этот достаточно длинный текст почти без всяких купюр: