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

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

Жанры

Интернет-журнал "Домашняя лаборатория", 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

{

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

Газлайтер. Том 6

Володин Григорий
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

Идеальный мир для Социопата 2

Сапфир Олег
2. Социопат
Фантастика:
боевая фантастика
рпг
6.11
рейтинг книги
Идеальный мир для Социопата 2

Наследник с Меткой Охотника

Тарс Элиан
1. Десять Принцев Российской Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник с Меткой Охотника

Дело Чести

Щукин Иван
5. Жизни Архимага
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Дело Чести

Снегурка для опера Морозова

Бигси Анна
4. Опасная работа
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Снегурка для опера Морозова

Лишняя дочь

Nata Zzika
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Лишняя дочь

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье

Дядя самых честных правил 7

Горбов Александр Михайлович
7. Дядя самых честных правил
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Дядя самых честных правил 7

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу

Книга пяти колец. Том 2

Зайцев Константин
2. Книга пяти колец
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Книга пяти колец. Том 2

Ваше Сиятельство 5

Моури Эрли
5. Ваше Сиятельство
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Ваше Сиятельство 5

Неудержимый. Книга X

Боярский Андрей
10. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга X

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

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

Счастливый торт Шарлотты

Гринерс Эва
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Счастливый торт Шарлотты