Иллюстрированный самоучитель по Tirbo Pascal



              

Создание коллекций


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

Uses Objects; 

type

PBook = TBook;

TBook = object (TObject)

Autor: PSbring; {Автор}

Title: PString; {Название}

PubHouse: PString; {Издательство}

Year: Word; {Год издания}

Pages: Word; {Количество страниц}

Constructor Init(A,T,PH: String; Y,P: Word);

Destructor Done; Virtual; 

end ;

Мы включили' в объект поля и два основных метода работы с ними: конструктор Init используется для размещения в динамической памяти очередной записи каталога, деструктор Done удаляет записи из кучи. Заметим, что в объекте задаются не сами текстовые строки, а указатели на них (тип PString в Turbo Vision описан как указатель на тип String). Такое размещение данных как правило дает значительную экономию памяти. Например:

Constructor TBook.Init(А,Т,РН: String; Y,P: Word); 

begin

Autor := NewStr(A); 

Title := NewStr(T); 

PubHouse := NewStr(PH); 

Year := Y; 

Pages := P 

end; {TBook.Init}

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

type

TBook = object (TObject)

Autor, Title, PubHouse: String;

.....

end;

Для освобождения динамической памяти в деструкторе Done используется процедура DisposeStr:

Destructor TBook.Done;

begin

DisposeStr(Autor); 

DisposeStr(Title); 

DisposeStr (PubHouse)

end; {TBook.Init}

После того как тем или иным способом определены типы данных, создание коллекции не вызывает проблем. Например:

var

BookList: PCollection; 

begin

BookList := New(PCollection, Init(50,10)); 




Содержание  Назад  Вперед