Serializacja
klasy CObject, CArchive
|
|
[początek strony]
[początek strony]
-
-
Obiekty klasy CArchive mogą
być archiwami wykorzystywanymi w mechaniźmie
serializacji
-
Schemat tworzenie archiwum przy użyciu
architektury dokument/widok i
standardowej obsługi polecenia
"Save As"
-
automatycznie zostanie pobrana
od użytkownika nazwa docelowego pliku
-
zostanie utworzony i otwarty
obiekt klasy CFile odpowiadający
temu plikowi
-
zostanie utworzony obiekt klasy
CArchive wskazujący na ten obiekt CFile
-
tryb archiwum zostanie ustawiony
na zapis
-
dla aktywnego dokumentu
zostanie wywołana metoda CDocument::Serialize
- jest to wirtualna funkcja, w której powinien się
znaleźć kod odczytu i zapisu danych dokumentu do
archiwum
-
Schemat tworzenia archiwum w
pozostałych przypadkach:
-
Dwie metody odczytu i zapisu do
archiwum
-
operatory << (zapis) i
>> (odczyt)
- operator >> tworzy obiekt na podstawie informacji
zawartej w CRuntimeClass zapisanej w archiwum
-
metoda CObject::Serialize
- powinna być używana gdy znany jest dokładny
typ obieku
- oraz pamięć dla obiektu jest przydzielona
-
nie można mieszać
tych dwóch metod, obiekt zapisany przy pomocy >>
powinien zostać wczytany korzystając z << i
tak samo z CObject::Serialize
[początek strony]
-
-
Klasa CObject jest bazową
klasą dla obiektów, które są serializowalne
-
Zwiększanie funkcjonalności
klas dziedziczących z CObject:
-
możliwość
uzyskania informacji o typie obiektu podczas wykonywania kodu (run-time
class information)
- konieczne jest dodanie makra DECLARE_DYNAMIC do
definicji klasy i IMPLEMENT_DYNAMIC do pliku zawierającego
implementację
- sprawdzenie typu obiektu jest możliwe przy pomocy
metody CObject::IsKindOf
-
dynamiczne tworzenie, czyli
tworzenie obiektu określonej klasy podczas wykonywnaia
kodu
- makro DECLARE_DYNCREATE w definicji, IMPLEMENT_DYNCREATE
w pliku z implementacją
- mechanizm ten jest wykorzystywany przede wszystkim w
serializacji
- musi być zdefiniowany bezparametrowy konstruktor
- zastowanie dynamicznego tworzenia daje możliwość
uzykania informacji o typie obiektu podczas wykonywania kodu
-
serializacja
- makro DECLARE_SERIAL w definicji, IMPLEMENT_SERIAL
w pliku z implementacją
- musi być zdefiniowany bezparametrowy konstruktor
- zastosowanie serializacji daje możliwość
dynamicznego tworzenia
-
Dodatkowe możliwości
klasy CObject podczas debugowania:
-
wirtualna metoda CObject::AssertValid
wykorzystywana do sprawdzenia poprawności stanu wewnętrznego
obiektu
- przed przeprowadzeniem operacji na obiekcie można
najpierw sprawdzić jego stan, czyli wszystkie jego dane są
poprawne
- standardowo ta metoda jest pusta
-
wirtualna metoda CObject::Dump
wykorzystywana do wypisania danych obiektu na wyjściu
diagnostycznym
[początek strony]
[początek strony]
|