• Nie Znaleziono Wyników

Laboratorium z PO - Zestaw 09-WPF

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium z PO - Zestaw 09-WPF"

Copied!
5
0
0

Pełen tekst

(1)

Laboratorium z przedmiotu Programowanie

Laboratorium z przedmiotu Programowanie

obiektowe

obiektowe

- zestaw 09

-

zestaw 09

Cel zajęć. Celem zajęć jest zapoznanie się z metodami pozwalającymi na zapis stanu

obiektu do pliku i jego odczyt w języku C#.

Wprowadzenie teoretyczne. Rozważana w ramach niniejszych zajęć tematyka jest

ważna, gdyż umożliwia na odtworzenie stanu obiektu np. w przypadku ponownego uruchomienia uprzednio zakończonej aplikacji. Aby ze zrozumieniem zrealizować zadania, przewidziane do wykonania w ramach zajęć laboratoryjnych, należy znać znaczenie takich zagadnień jak serializacja do pliku XML.

1. Serializacja – proces konwertowania obiektu lub kolekcji obiektów na format

nadający się do przesyłania za pośrednictwem sieci w formie strumienia lub do zapisania w pamięci, pliku czy bazie danych. Odwrotnym procesem jest deserializacja.

2. W technologii .NET zaimplementowano obsługę trzech głównych rodzajów tego procesu:

a. Serializację binarną – obiekty są serializowane do postaci strumienia binarnego b. Serializację protokołu SOAP – obiekty są serializowane do postaci kodu XML zgodnego z protokołem SOAP

c. Serializację do formatu XML – obiekty są serializowane do postaci XML

3. Serializacja obiektu do pliku XML – wymagania, informacje:

a. Klasa serializowanego obiektu musi zawierać publiczny konstruktor domyślny. b. Serializacji podlegają jedynie publiczne pola i właściwości (jeśli pole jest prywatne lub chronione, w celu serializacji jego wartości, należy zaimplementować odpowiednią właściwość dostępową).

c. Właściwości tylko do odczytu nie są serializowane.

d. Serializacji mogą ulegać obiekty standardowych klas kolekcji (np. „List<T>”).

Zadanie 1. Proszę zrealizować aplikację okienkową zgodnie z instrukcją z poprzednich

(2)

Zadanie 2. Proszę dodać buton „SaveToFile”. Ma ono powodować utworzenie pliku

tekstowego „data.txt” w głównym katalogu programu. W pliku tym mają być zapisane parametry studentów wprowadzonych do programu. Struktura pliku powinna wyglądać następująco: [[Student]] [FirstName] Jan [SurName] Kowalski [StudentNo] 10334 [Faculty] WIMiI [[]] [[Student]] [FirstName] Jan [SurName] Kowalski [StudentNo] 10334 [Faculty] WIMiI [[]] I tak dalej…

(3)

Podpowiedzi:

Należy dołączyć przestrzeń nazw System.IO (poprzez słowo „using”, na początku pliku).

• Zapis wiersza do pliku można zrealizować w następujący sposób:

Zadanie 3. Proszę o dodanie przycisku „LoadFromFile”. Ma ono powodować odczytanie

z pliku tekstowego „data.txt”, danych studentów i wprowadzenie ich do programu. .

Podpowiedź:

Odczyt wszystkich wierszy z pliku (po kolei) można zrealizować w następujący sposób:

Zadanie 4. Proszę dodać wersję zapisu/odczytu opierającą się o dynamiczną serializację

obiektów wykorzystującą refleksję. System.Reflection dostarcza mechanizmów pozwalających dynamicznie już z poziomu uruchomionego programu odnosić się do kodu aplikacji, np. odczytywać nazwy pól, właściwości, metod oraz klas. Dodatkowo pozwala również dynamicznie tworzyć nowe obiekty oraz je modyfikować na podstawie nazw class, atrybutów itp.

Poniższy przykład przyjmuje dowolny obiekt. Dynamicznie pobiera jego typ (GetType()), odczytuje nazwę klasy (t.FullName), następnie pobiera listę właściwości klasy (t.GetProperties()), na koniec wypisuje nazwy i wartości (toString()) pobranych właściwości. Ten fragment kodu zserializuje właściwości dowolnej klasy.

(4)

Poniższy przykład utworzy dynamicznie obiekt (Activator.CreateInstance(String)) i zainicjuje go danymi z pliku (tob.GetProperty(String), property.SetValue(String)). Obiekt musi spełniać jedynie warunek, że musi dziedziczyć po T (Type.IsAssignableFrom(Type)) może natomiast mieć inny typ określony w pliku.

Wywołanie: Load<Student>(sr);, Load<Car>(sr);

9. Proszę dodać button „SaveToXml”, którego akcja utworzy plik XML „data.xml” w

głównym katalogu programu, do którego zapisane zostaną dane wprowadzone do programu.

Podpowiedzi:

Należy dołączyć przestrzeń nazw System.Xml.Serialization. Należy poddać serializacji kolekcję typu List<Samochod>. Przykładowa serializacja obiektu typu Budynek:

10. Proszę dodać button „LoadFromXml”, którego akcja zdeserializuje dane z pliku XML

(5)

Podpowiedź:

Przykładowa deserializacja obiektu typu Budynek:

Zadanie do domu

1. Proszę o modyfikację powyższego zadania, która ma polegać na określeniu przez

użytkownika ścieżki zapisywanego/odczytywanego pliku txt i xml. W tym celu proszę o wykorzystanie kontrolek typu OpenFileDialog, SaveFileDialog.

2. Proszę o obsługę sytuacji wyjątkowych, które mogą pojawić się podczas odczytu pliku

txt i xml, gdy jego struktura będzie nieprawidłowa. Komunikat o błędzie ma zostać wyświetlony za pomocą klasy MessageBox.

3. Po poprawnie wykonanym zapisie/odczycie plików, proszę o wyświetlenie

odpowiedniego komunikatu za pomocą klasy MessageBox.

4. Stwórz klasę StreamEnumerable<T>, która przyjmuje w konstruktorze obiekt

StreamReader. Zaimplementuj w nim interfejs IEnumerable (instrukcja 4). Metoda MoveNext() Enueratora ma odczytywać z pliku pojedynczy obiekt klasy T. Można

wykorzystać metodę T Load<T>(StreamReader sr) z obecnej instrukcji. Poprawna implementacja pozwoli wykonywać zapytania linq (Where(), Single()) bezpośrednio na piliku bez wczytywania całej zawartości do pamięci.

Cytaty

Powiązane dokumenty

Dla każdego dokumentu można ale nie trzeba podawać jego DTD; wte- dy proces zwany parsingiem bez walidacji weryfikuje pewne ogólne reguły budowy dokumentu sprowadzające się do

Ponadto, identyfikacja była przeprowadzana dla nieliniowego modelu Tanh, a także struktury modeli tłumików występujących w części sterowania (model Tanh) i w symulatorze

Uzyskanie takiego rozwiązania jest szczególnie cenne w przypadku wojskowych materiałów wybuchowych, od których wymaga się generowania z jednostki objętości dużej

Wykazał także różnice we właściwościach polimerów zawierających grupę azydową i nitrową, a także podjął próbę uzależnienia właściwości wybuchowych od

The structure of the molecule was identified by: spectroscopic methods (FTIR), elemental analysis, NMR analysis, gas chromatography, differential scanning

Właściwości związków zostały oznaczone za pomocą: metod spektroskopowych (FTIR), analizy elementarnej, analizy widm protonowych NMR, oznaczenia masy cząsteczkowej z

Opracowane w niej rozszerzenie algorytm u IWO okazuje się być efektywnym narzędziem nie tylko w optym alizacji kolejności złączeń tabel w bazach danych, ale

Jednym z istotnych kierunków rozwoju tego oprogramowania są optymalizacje realizacji zapytań, dzięki którym możliwe jest, często znaczne, zredukowanie rozmiaru