Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №9
Шрифт:

/// </summary>

public void start

{

cursor = first; index = 1;

}//start

/// <summary>

/// finish: require: true;

/// ensure: сделать активным последний элемент;

/// </summary>

public void finish

{

cursor = last; index = count;

}//finish

/// <summary>

/// go_prev: require: not (index = 1);

/// ensure: сделать активным предыдущий элемент;

/// </summary>

public void go_prev

{

cursor = cursor.Prev; index-;

}// go_prev

/// <summary>

/// go_next: require: not (index = count);

/// ensure:

сделать активным последующий элемент

/// </summary>

public void go_next

{

cursor = cursor.Next; index++;

}// go_next

/// <summary>

/// go_i(i): require: (i in [1, count]);

/// ensure: сделать активным элемент с индексом

/// </summary>

/// <param name="i" x/param>

public void go_i(int i)

{

if(i >index)

while (i>index)

{

cursor = cursor.Next; index++;

}

else if(i<index)

while (i<index)

{

cursor = cursor.Prev; index-;

}

}// go_i

/// операции поиска:

/// <summary>

/// search_prev(elem): require: not (index = 1);

/// ensure: сделать активным первый элемент elem слева от курсора;

/// </summary>

/// <param name="elem">искомый элемент</param>

public virtual void search_prev(Figure elem)

{

bool found = false;

while (!found && (index!=1))

{

cursor = cursor.Prev; index-;

found = (elem == item);

}

search_res = found;

}// search_prev

/// <summary>

/// успех или неуспех поиска сохранять в булевской

/// переменной search_res

/// search_next: require: not (index = count);

/// ensure: сделать активным первый элемент elem справа от курсора;

/// успех или неуспех поиска сохранять в булевской

/// переменной search_res

/// </summary>

/// <param name="elem"></param>

public virtual void search_next(Figure elem)

{

bool found = false;

while (!found && (index!=count))

{

cursor = cursor.Next; index++;

found = (elem == item);

}

search_res = found;

}//search_next

}

}

Заметьте, класс подробно документирован. Для методов класса указываются предусловия

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

Классы элементов списка

Рассмотрим классы, описывающие элементы списков — элементы с одним и с двумя указателями:

using System;

namespace Shapes

{

/// <summary>

/// Класс 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

/// </summary>

public class Linkable

{

public Linkable

{

item =null; next = null;

}

/// <summary>

/// закрытые атрибуты класса

/// </summary>

Figure item;

Linkable next;

/// <summary>

/// процедуры свойства для доступа к полям класса

/// </summary>

public Figure Item {

get {

return(item);

}

set {

item = value;

}

}

public Linkable Next {

get {

return(next);

}

set {

next = value;

}

}

}//class Linkable

/// <summary>

/// Класс TwoLinkable задает элементы с двумя ссылками

/// </summary>

public class TwoLinkable

{

public TwoLinkable

{

prev = next = null;

}

/// <summary>

/// закрытые атрибуты класса

/// </summary>

TwoLinkable prev, next;

Figure item;

/// <summary>

/// процедуры свойства для доступа к полям класса

/// </summary>

public Figure Item

{

get

{

return(item);

}

set

{

item = value;

}

}

public TwoLinkable Next

{

Поделиться:
Популярные книги

Страж Кодекса. Книга II

Романов Илья Николаевич
2. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга II

Возвышение Меркурия. Книга 5

Кронос Александр
5. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 5

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

Идеальный мир для Лекаря 28

Сапфир Олег
28. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 28

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Кротовский, сколько можно?

Парсиев Дмитрий
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, сколько можно?

Третий. Том 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 4

Умеющая искать

Русакова Татьяна
1. Избранница эльты
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Умеющая искать

Невеста

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
эро литература
8.54
рейтинг книги
Невеста

Хроники странного королевства. Возвращение (Дилогия)

Панкеева Оксана Петровна
Хроники странного королевства
Фантастика:
фэнтези
9.30
рейтинг книги
Хроники странного королевства. Возвращение (Дилогия)

Законы Рода. Том 4

Flow Ascold
4. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 4

Мымра!

Фад Диана
1. Мымрики
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Мымра!

Случайная жена для лорда Дракона

Волконская Оксана
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Случайная жена для лорда Дракона

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия