В зависимости от поставленных задач программист может в своей работе использовать как уже существующие классы потоков, так и разрабатывать свои собственные, если возможности предопределенных классов-потоков в ОО-библиотеке не удовлетворяют заявленным требованиям. При этом в качестве хранилища данных могут выступать файлы и отдельные их части, внешние аппаратные устройства, структурированные области оперативной памяти, сетевые ресурсы и т.д.
В ЛР№3 была реализована ОО-библиотека для обработки списков различных типов. Задача заключается в создании класса-потока, способного хранить свой контент в любом списке из разработанной библиотеки. Для упрощения работы рекомендуется создать и применять для хранения данных в потоке новый тип узла TByteListNode:
... type TByteListNode=class(TBaseListNode) constructor Create(Value:Byte); ... end; TBaseListClass=class of TBaseList; TListStream=class(TStream) private FList:TBaseListClass; public constructor Create(TypeList:TBaseListClass); // создает поток на базе переданного типа списка function SaveToList(List:TBaseList):TBaseList; // если переданный список=nil, то создается копия внутреннего списка, // иначе результирующий список очищается и в него вставляются копии узлов внутреннео списка. // результат функции - заполненный список. procedure LoadFromList(List:TBaseList); // если переданный список содержит многобайтовые элементы, каждый из них должен быть преобразован // при вставке в набор однобайтовых элементов TByteListNode ... end;
Провести комплексную проверку разработанного класса.