Мегаобучалка Главная | О нас | Обратная связь


Преобразование в последовательную форму



2019-07-03 262 Обсуждений (0)
Преобразование в последовательную форму 0.00 из 5.00 0 оценок




Многие приложения сохраняют объекты и восстанавливают их позднее. Например, приложение может сохранять копию своих объектов в текстовом файле. При следующем запуске программы, она считывает это файл и загружает объекты.

Объект может содержать процедуры, которые считывают и записывают его в файл. Общий подход может заключаться в том, чтобы создать процедуры, которые сохраняют и восстанавливают данные объекта, используя строку. Поскольку запись данных объекта в одной строке преобразует объект в последовательность символов, этот процесс иногда называется преобразованием в последовательную форму (serialization).

Преобразование объекта в строку обеспечивает большую гибкость основной программы. При этом она может сохранять и считывать объекты, используя текстовые файлы, базу данных или область памяти. Она может переслать представленный таким образом объект по сети или сделать его доступным на Web‑странице. Программа или элемент ActiveX на другом конце может использовать преобразование объекта в строку для воссоздания объекта. Программа также может дополнительно обработать строку, например, зашифровать ее после преобразования объекта в строку и расшифровать перед обратным преобразованием.

Один из подходов к преобразованию объекта в последовательную форму заключается в том, чтобы объект записал все свои данные в строку заданного формата. Например, предположим, что класс Rectangle (Прямоугольник) имеет свойства X1, Y1, X2 и Y2. Следующий код демонстрирует, как класс может определять процедуры свойства Serialization:

 

Property Get Serialization() As String

Serialization = _

   Format$(X1) & ";" & Format$(Y1) & ";" & _

   Format$(X2) & ";" & Format$(Y2) & ";"

End Property

 

Property Let Serialization(txt As String)

Dim pos1 As Integer

Dim pos2 As Integer

 

pos1 = InStr(txt, ";")

X1 = CSng(Left$(txt, pos1 - 1))

pos2 = InStr(pos1 + 1, txt, ";")

Y1 = CSng(Mid$(txt, pos1 + 1, pos2 – pos1 - 1))

pos1 = InStr(pos2 + 1, txt, ";")

X2 = CSng(Mid$(txt, pos2 + 1, pos1 - pos2 - 1))

pos2 = InStr(pos1 + 1, txt, ";")

Y2 = CSng(Mid$(txt, pos1 + 1, pos2 – pos1 - 1))

End Property

 

Этот метод довольно простой, но не очень гибкий. По мере развития программы, изменения в структуре объектов могут заставить вас перетранслировать все сохраненные ранее преобразованные в последовательную форму объекты. Если они находятся в файлах или базах данных, для загрузки старых данных и записи их в новом формате может потребоваться написание программ‑конверторов.

Более гибкий подход заключается в том, чтобы сохранять вместе со значениями элементов данных объекта их имена. Когда объект считывает данные, преобразованные в последовательную форму, он использует имена элементов для определения значений, который необходимо установить. Если позднее в определение элемента будут добавлены какие‑либо элементы, или удалены из него, то не придется преобразовывать старые данные. Если новый объект загрузит старые данные, то он просто проигнорирует не поддерживаемые более значения.

Определяя значения данных по умолчанию, иногда можно уменьшить размер преобразованных в последовательную форму объектов. Процедура get свойства Serialization сохраняет только значения, которые отличаются от значений по умолчанию. Перед тем, как процедура let свойства начнет выполнение преобразования в последовательную форму, она инициализирует все элементы объекта значениями по умолчанию. Значения, не равные значениям по умолчанию, обновляются по мере обработки данных процедурой.

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

Следующий код демонстрирует процедуры свойства Serialization объекта ShapePicture. Объект ShapePicture сохраняет имя типа для каждого из типов объектов, а затем в скобках — представление объекта в последовательной форме.

 

Property Get Serialization() As String

Dim txt As String

Dim i As Integer

 

For i = 1 To LastCmd

   txt = txt & _

      TypeName(CmdObjects(i)) & "(" & _

      CmdObjects(i).Serialization & ")"

Next I

Serialization = txt

End Property

 

 

==========369

 

Процедура let свойства Serialization использует подпрограмму GetSerialization для чтения имени объекта и списка данных в скобках. Например, если объект ShapePicture содержит команду рисования прямоугольника, то его представление в последовательной форме будет включать строку “RectangleCMD”, за которой будут следовать данные, представленные в последовательной форме.

Процедура использует подпрограмму CommandFactory для создания объекта соответствующего типа, а затем заставляет новый объект преобразовать себя из последовательной формы представления.

 

Property Let Serialization(txt As String) Dim pos As Integer Dim token_name As String Dim token_value As String Dim and As Object

' Start a new picture.

NewPicture

' Read values until there are no more.

GetSerialization txt, pos, token_name, token_value Do While token_name <> ""

' Make the object and make it unserialize itself.

Set and = ConiniandFactory(token_name)

If Not (and Is Nothing) Then _

and.Serialization = token_value

GetSerialization txt, pos, token_name, tokerL-value Loop

LastCmd = CmdObjects.Count End Property

 



2019-07-03 262 Обсуждений (0)
Преобразование в последовательную форму 0.00 из 5.00 0 оценок









Обсуждение в статье: Преобразование в последовательную форму

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (262)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)