You are on page 1of 23

Komunikat:

Jeśli ktoś z was twierdzi, iż jakaś z odpowiedzi powinna wyglądać inaczej i co najważniejsze – wie jak
ją poprawić – to może przesłać to konkretne rozwiązanie na moją skrzynkę. Wszyscy, którzy wzięli
udział w opracowywaniu pytań zostaną o niej poinformowani.

Spis treści
1)Wymień i wyjaśnij znane ci problemy podczas projektowania graficznych interfejsów
użytkownika. .....................................................................................................................3
2)Opisz problem związany z poniższym zrzutem: ...........................................................3
3)Co rozumiesz pod pojęciem „użyteczność” (używalności)?..........................................3
4)Dlaczego występowanie statycznej nawigacji w serwisach internetowych jest takie
ważne?...............................................................................................................................3
5)Kto wykonuje ewaluacje heurystyczną? Dlaczego?......................................................3
6)W którym etapie projektowania interfejsu w metodyce przedstawionej na wykładzie
(UCD) następuje pierwsze określenie punktów styku użytkownika z systemem? ...........4
7)Narysuj prosty przykładowy projekt wizualny na trzech poziomach dla dowolnego
przypadku związanego z wystawianiem faktury dla kontrahenta. (faktura, kontrahent,
pozycja faktury, wystawca)...............................................................................................4
8)Do czego wykorzystuje się projekty abstrakcyjne widoków?........................................4
9)Do czego wykorzystuje się projekty wizualne widoków?.............................................4
10)Czy w projekcie leksykalnym określamy, podział na komponenty z jakich będzie
składał się interfejs? (odpowiedź uzasadnij).....................................................................4
11)Umotywuj stosowanie prototypowania w procesie wytwarzania interfejsow
graficznych........................................................................................................................5
12)Wymien i krotko scharakteryzuj podstawowe narzedzia stosowane w
prototypowaniu .................................................................................................................5
13)Do czego sluza znaczniki w html label, fieldset..........................................................6
14)Przeanalizuj zaprezentowany Interfejs użytkownika, wskaż i uzasadnij błędy
projektowe. – FORMULARZ (Z pracy domowej)............................................................6
15)Jakie opisy należy stosować przy nazywaniu przycisków typu Button?.....................6
16)Przestaw jakich nazw należy używać opisując nazwy aplikacji w Menu głównym
GNOME.............................................................................................................................7
17)Jakie pod względem funkcjonalnym znasz okna dialogowe?......................................7
18)Przedstaw zalecenia dokumentu GNOME Human Interface Guidelines dotyczące
pasków narzędzi................................................................................................................7
19)Kiedy i dlaczego należy stosować nazwę Stop zamiast Anuluj?.................................7
20)Przedstaw cztery filary RAD. ......................................................................................8
21)Na czym polega „timeboxing” w RAD?......................................................................8
22)Co rozumiesz pod pojęciem JAD (Joint Application Design lub Development) w
metodyce RAD?................................................................................................................8
23)Czy Delphi jest narzędziem RAD?..............................................................................8
24)Z jakich elementów składa się standardowy moduł Delphi?.......................................8
25)Przedstaw sposób konwersji klasycznych modułów (unit) z Delhi Pascal do .NET.
Zwróć szczególną uwagę na fragment inicjalizujący moduł: „begin... end.”....................9
26)
Czym różnią się pliki *.dfm od *.nfm w Delphi for .NET?..............................................9
27)2Czy przy zastosowaniu okien dialogowych modalnych działają timery? Odpowiedź
uzasadnij............................................................................................................................9
28)Na czym polega dziedziczenie projektu wizualnego formularza? Opisz znane ci
technologie (1 lub 2)........................................................................................................10
29)
Przedstaw koncencepję zastosowania Microsoft Windows Custom Controls do realizacji
projektów widoków abstrakcyjnych................................................................................10
30)Do czego służy Windows Workflow Foundation w .NET 3.x? Jak ta technologia jest
związana z UML?............................................................................................................11
31)Do czego służy i co to jest XAML?...........................................................................12
32)Czy LINQ to język do odpytywania warstwy prezentacji o stan interfejsu
użytkownika? (odpowiedź uzasadnij)..............................................................................12
33)Czym różni się wzorzec MVC od wzorca architektury warstwowej?.......................12
34)Kiedy zmodyfikowany model MVC można uznać za architekturę warstwową?......13
35)Do czego może służyć wzorzec Modelu Prezentacji?................................................13
36)Przedstaw zalety stosowania techniki „databinding” podczas realizacji interfejsu
użytkownika. Kiedy tą technikę należy stosować?..........................................................13
37)Z jakim wzorcem projektowym związany jest poniższy diagram sekwencji:...........13
38)Na czym polega zastosowanie wzorca Fabryki we wzorcu selektor prezentacji?.....14
39)Kiedy należy stosować wzorzec aplikacji WEB o nazwie „Front Controller”? ......14
40)Przedstaw różnice między wzorcem kontrolera pasywnego i aktywnego w
zastosowaniach dla aplikacji WEB..................................................................................15
1.Bierny Model......................................................................................................15
2.Aktywny Model..................................................................................................16
41)Dlaczego wzorzec „pośredni model prezentacji” pomaga stosować testy
automatyczne?.................................................................................................................16
42)Czy .NET wspomaga realizację wzorca Front Controller? Odpowiedź uzasadnij....16
43)Do czego można wykorzystać wzorzec Łańcuch Filtrów (Chain Filter)?.................17
44) Jakie informacje przesyła się za pomocą komunikatów w interfejsach opartych na
GUI?................................................................................................................................17
45)W jakich bibliotekach występuje pętla obsługi komunikatów? Kiedy
implementujemy ją sami, a kiedy jest zrealizowana przez bibliotekę.
.........................................................................................................................................17
46) W jaki sposób w .NET możemy obsługiwać własne komunikaty? .........................18
47)Do czego służy program Spy++?...............................................................................18
48)Napisz przykład wywołania pętli komunikatów w: Qt, .NET, MFC.........................18
49)Z jakich elementów składa się program graficznych napisany w WinAPI?..............19
50)Jaka jest struktura programu głównego w Delphi? Gdzie jest
uruchamiana pętla obsługi komunikatów?......................................................................19
51)Do czego służy biblioteka GLUT?.............................................................................20
52)Czy MFC zastępowało Win 32 API? Odpowiedź uzasadnij......................................20
53)Dlaczego powstało MFC?..........................................................................................20
54)Do czego w MFC służą metody z przedrostkiem Afx...?...........................................20
55)Jakie informacje przechowuje delegacja w .NET?....................................................21
56)Zadeklaruj przykładową delegację oraz jej wywołanie.
.........................................................................................................................................21
57)Do czego zostało wprowadzone w .NET słowo kluczowe „event”? Podaj przykład.
.........................................................................................................................................21
58)Jak można obsłużyć komunikaty w .NET przy wykorzystaniu interfejsu
IFilterMessage oraz przesłonięciu procedury WndProc?
.........................................................................................................................................22
1)Wymień i wyjaśnij znane ci problemy podczas projektowania
graficznych interfejsów użytkownika.

- Podczas projektowania serwisów internetowych bardzo istotne jest zaprojektowanie odpowiedniego układu
graficznego (w tym rozlokowania poszczególnych elementów, kolorystyki)
- Projektując aplikację typu desktop należy zwrócić szczególną uwagę na zalecenia projektowy odnośnie
platformy docelowej, np. położenie przycisków w oknach dialogowych, słownictwo itp.
- Należy korzystać z powszechnie znanych zaleceń projektowych takich jak skróty klawiszowe
- Tworząc formularze na strony internetowe należy pamiętać o odpowiednim rozlokowaniu i doborze kontrolek
- Należy unikać komunikatów błędów, w których użyte są sformułowania spoza dziedziny użytkownika lub
takich, które zawierają informacje czysto techniczne (np. numer błędów)

2)Opisz problem związany z poniższym zrzutem:

Problemem związanym z poniższym zrzutem jest niemożność określenia faktycznej ilości miejsca przeznaczonej
do wykorzystania. Etykieta podaje jedynie względny, procentowy stopień wykorzystania pojemności dysku, bez
ukazania jego całkowitego rozmiaru. Fakt ten wywołuje niepewności użytkownika i zmusza go do obliczenia
w/w wielkości we własnym zakresie.

3)Co rozumiesz pod pojęciem „użyteczność” (używalności)?

Użyteczność odpowiada jak wydajnie użytkownicy umieją


wykorzystać funkcjonalność systemu.
1. Nauka obsługi: czy łatwo się jej nauczyć?
2. Ergonomia: po nauczeniu się, czy szybko się używa?
3. „Pamiętalność”: czy łatwo przypominamy sobie to czego się nauczyliśmy?
4. Błędy: czy błędów użytkownika jest niewiele i są odwracalne?
5. Satysfakcja: czy systemu używa się z przyjemnością?

4)Dlaczego występowanie statycznej nawigacji w serwisach


internetowych jest takie ważne?

Dlatego, że przeglądając strony internetowe często ogarnia nas zagubienie a statyczna nawigacja zapewnia nam
swego rodzaju bezpieczeństwo, jakiś stały punkt odniesienia, do którego w każdej chwili możemy wrócić.
Ponadto, nawigacja informuje nas gdzie jesteśmy w strukturze serwisu, umożliwia odnajdywanie dokumentów w
serwisie oraz mówi o tym co w danym miejscu się znajduje.

5)Kto wykonuje ewaluacje heurystyczną? Dlaczego?

Ewaluacje heurystyczną wykonuje ekspert, ponieważ posiada on wiedzę heurystyczną opartą na z góry
przyjętych założeniach, niezależnych od doświadczenia lecz opartych na rozumowaniu.
6)W którym etapie projektowania interfejsu w metodyce
przedstawionej na wykładzie (UCD) następuje pierwsze określenie
punktów styku użytkownika z systemem?

W metodyce UCD (User Centered Design) pierwsze określenie styku użytkownika z systemem następuje na
etapie tworzenia projektu funkcjonalnego. Jednym z jego podetapów polega na określeniu przepływu zadań,
czyli na sprecyzowaniu interakcji użytkownika z systemem.

7)Narysuj prosty przykładowy projekt wizualny na trzech poziomach


dla dowolnego przypadku związanego z wystawianiem faktury dla
kontrahenta. (faktura, kontrahent, pozycja faktury, wystawca).

8)Do czego wykorzystuje się projekty abstrakcyjne widoków?


Widoki abstrakcyjne wiążą się z projektem funkcjonalnym. Zawierają informacje, jakie musi widzieć
użytkownik, aby ukończyć konkretne zadanie oraz jaka musi być udostępniona funkcjonalność. Należy pamiętać
o tym, że użytkownik operuje na widokach, nie na obiektach. Widoki abstrakcyjne stanowią niezależną od
implementacji reprezentację tego, z jakimi obiektami powiązane są widoki i w jakich relacjach. Widoki
abstrakcyjne są związane z konkretnymi przypadkami użycia.
(wyk2.pdf, slajdy 21-22)

9)Do czego wykorzystuje się projekty wizualne widoków?


Projekty wizualne definiują układ obiektów w widokach. Muszą one być zgodne z widokami abstrakcyjnymi
(projektowanymi we wcześniejszej fazie) i nie wprowadzać wobec nich żadnych rozszerzeń. Obiekty i stany
obiektów, wyodrębnione w fazie abstrakcyjnej, powinny być czytelne dla użytkownika (cel: użyteczność).
Każdy obiekt musi być identyfikowalny w całym systemie.
W projekcie wizualnym można wyodrębnić 3 poziomy:
1) Poszczególne obiekty
2) Widoki prezentacji (układy, interakcje)
3) Całkowity odbiór użytkownika (weryfikacja zgodności i czytelności, prototypowanie, testy zespołowe)

Całkowity odbiór aplikacji przez użytkownika musi uwzględniać odpowiednie diagramy sekwencji i zgodność
ze scenariuszami przypadków użycia. Jest on realizowany za pomocą scenopisów (np. „storyboards”), które są
dokumentami tekstowymi albo prezentacjami i definiują kolejność widoków. Przy niektórych projektach tworzy
się prototypy z możliwie wysokim poziomem interakcji.
(wyk2.pdf, slajdy 28-42)

10)Czy w projekcie leksykalnym określamy, podział na komponenty


z jakich będzie składał się interfejs? (odpowiedź uzasadnij)
Odpowiedź brzmi: tak. Projekt leksykalny określa w jaki sposób i z jakimi rzeczywistymi prymitywami
sprzętowymi połączone są elementy syntaktyczne. Przykładem podziału jest np. przydzielanie gotowych
kontrolek do określonych zadań.
(wyk2.pdf, slajdy 5, 43)
11)Umotywuj stosowanie prototypowania w procesie wytwarzania
interfejsow graficznych

Srodek do analizy, testowania pewnych koncepcji przed zainwestowaniem w nie kapitału.

Cel: Oszczędzić czas i pieniądze

Prototyp stanowi tylko fasadę rzeczywistego systemu


Ale można na niej wykonać właściwe testy użyteczności.

Główne motywy tworzenia prototypu GUI:


- potwierdzenie różnych koncepcji, specyficznych cech systemu
- zbadanie projektu (również przy pomocy testów na różnym poziomie)
- zbadanie aspektów technicznych (weryfikacja możliwości realizacji
- projektów wizualnych przez warstwę prezentacji systemu przy
wykorzystaniu dostępnych technologii)

12)Wymien i krotko scharakteryzuj podstawowe narzedzia


stosowane w prototypowaniu ...
„Low fidelity” (mało wierne) – papierowe szkice

Wykorzystanie języków skryptowych


html, Python, Ruby itp...

Wykorzystanie specjalistycznych narzędzi do prototypowania GUI:


- Cleverlance Petra
- Axure RP Pro
- GUI Design Studio
-Mockup Screens

Wykorzystanie narzędzi do budowania GUI – środowiska zintegrowane.


Qt Designer, Visual Basic (lub teraz MS.Visual Studio), Netbeans, Delphi,
PowerBuilder, Glade i wiele innych.
Mockup Screens
- Skoncentrowane na prototypowaniu (czyli wygodne w użyciu)
- Zorganizowane zarządzanie ekranami, widokami (jak w narzędziu CASE)
- Możliwość generowania notatek, uwag do konkretnych elementów widoku
- Możliwość prezentacji przykładowych danych
- Możliwość tworzenia gotowych prezentacji jako scenopisów do scenariuszy przypadków użycia

Petra

Proste narzędzie CASE umożliwiające zarządzanie prototypem.


- Tworzenie szablonów stron i widoków
- Zarządzanie nawigacją miedzy stronami
- Eksport do interaktywnego prototypu

13)Do czego sluza znaczniki w html label, fieldset


label – etykieta dla pola formularza po kliknieciu ktorej uaktywni sie pole formularza
fieldset – pozwala na grupowanie z soba elementow.
14)Przeanalizuj zaprezentowany Interfejs użytkownika, wskaż i
uzasadnij błędy projektowe. – FORMULARZ (Z pracy domowej)

o Napis Obowiązkowe: zamienić na symbol * przy opisie dotyczącym


pola.
o Pogrupować tematycznie elementy formularza. Należy użyć do tego
ramek (np. Parametry wycieczki (dojazd,pobyt), Koszty, Informacje o
zamawiającym).
o Obok pól edycyjnych wymagających odpowiedniego formatu wpisać
przykład lub wymusić maskę (do drugiego trzeba zaimplementować w
JavaScript).
o Listę wyboru (SELECT) zastąpić kilkoma checkboxami. (Trudne CTRL)
o Checkboxy powinny być po lewej stronie opisu tak jak w standardzie.
o Pola RADIOBUTTON najlepiej zamknąć w ramce.
o Dodać numery kroków w jakich człowiek powinien wprowadzać dane.
o Zaprezentować graficznie Podsumowanie cen posiłków w innej formie.
Takiej, która nie będzie sugerowała użytkownikowi, że może coś w tym
polu wpisać.
o Wyraźniejsze przyciski ‘Wyślij’ i ‘Anuluj’
o Ilość osób: Liczba osób.
o Liczba osób zamienić na: Dorośli, Dzieci, Seniorzy, Niemowlęta.

15)Jakie opisy należy stosować przy nazywaniu przycisków typu


Button?

Odp. brzmi: Czasowniki w formie rozkazującej, np. Zapisz, Wyślij, Edytuj itp.
16)Przestaw jakich nazw należy używać opisując nazwy aplikacji w
Menu głównym GNOME.

oprócz nazwy 'marketingowej' dołącz


człon związany z funkcjonalnością
● Epiphany zastąp Epiphany Web Browser

– Usuń niepotrzebne człony:


● GNOME Image Viewer zastąp Image Viewer
● GTK Blog Editor zastąp Blog Editor

17)Jakie pod względem funkcjonalnym znasz okna dialogowe?

Okna podstawowe
Okna pomocnicze
Ostrzeżenia
Okna postępu
Asystenci (kreatory)

18)Przedstaw zalecenia dokumentu GNOME Human Interface


Guidelines dotyczące pasków narzędzi.

Generalnie nie używać pionowych pasków narzędzi

Kontrola wyświetlania i wyglądu


– Umożliw dostosowanie wyglądu
– Ukrywanie bezpośrednio w menu Widok (View) jeśli do 3
– Ukrywanie w podmenu Widok-Paski narzędzi jeśli więcej niz 3
– Opisy i podpowiedzi
● Dla odpowiedników w menu zastosuj to samo nazewnictwo
● Nie udostępniaj skrótów klawiszowych (ten samo kontekst co
menu)
● Pamiętaj o „znaczących” podpowiedziach

19)Kiedy i dlaczego należy stosować nazwę Stop zamiast Anuluj?


Stop zamiast Anuluj stosujemy gdy nie da się cofnąć wszystkich dokonanych zmian (zrobić rollback).

20)Przedstaw cztery filary RAD.


Cztery filary RAD (Rapid Application Development):
● Ludzie
● Narzędzia
● Metodyka
● Zarządzanie

21)Na czym polega „timeboxing” w RAD?


Timeboxing w RAD:
● Technika zarządzania polegająca na zezygnowanieu z częściowej funkcjonalności projektu w
celu dotrzymania ustalonych terminów

22)Co rozumiesz pod pojęciem JAD (Joint Application Design lub


Development) w metodyce RAD?
● Zaangażowanie klienta lub użytkownika w proces tworzenia oprogramowania, poprzez
wprowadzenie warsztatów współprojektowania zwanych sesjami JAD.

23)Czy Delphi jest narzędziem RAD?


● Tak, bo spełnia wymagania stawiane narzędziom RAD
Delphi to środowisko programistyczne udostępniające:
– Graficzny interfejs użytkownika
– Język Object Pascal
– Skalowalny interfejs do baz danych
– Bezpośredni dostęp do interfejsu API Windows
– Warstwę sieciowa (DCOM, MIDAS, CORBA, Internet)
– Zintegrowany debugger
– Biblioteki komponentów
– Możliwość tworzenia własnych zestawów narzędzi (nie we wszystkich wersjach)
– Organizację projektów

24)Z jakich elementów składa się standardowy moduł Delphi?

Standardowo moduł Delphi zawiera:


● moduł – nazwa „przestrzenii nazw”
● interfejs widoczny dla pozostałych modułów
• dołączone moduły
• deklaracje typó zdefiniowanych w module
• zmienne globalne dla całej aplikacji
● prywatą przestrzeń widoczną wyłącznie dla obiektów modułu
25)Przedstaw sposób konwersji klasycznych modułów (unit) z Delhi
Pascal do .NET. Zwróć szczególną uwagę na fragment inicjalizujący
moduł: „begin... end.”

26)
Czym różnią się pliki *.dfm od *.nfm w Delphi for .NET?

Komponenty umieszczane na formularzu moga miec rózne własciwosci. Te dane musza byc
gdzies przechowywane. W VCL.NET miejscem, gdzie zapisywane sa te informacje, jest plik
*.nfm (w poprzednich wersjach Delphi plik miał rozszerzenie *.dfm), którego zawartosc została
przedstawiona na listingu 4.3

Praktycznie nigdy nie zachodzi potrzeba, aby recznie edytowac ten plik. To zadanie nalezy juz do
Delphi, które dokonuje zapisu i odczytu danych własnie z tego pliku. Pliki *.nfm zawieraja informacje
na temat formularza, jego własciwosci, komponentów oraz właściwości komponentów.
W pliku zródłowym formularza znajduje sie dyrektywa każącą kompilatorowi dołączyć do
projektu plik *.nfm:

Jest to specjalna instrukcja — na pierwszy rzut oka wyglądająca jak komentarz, jednak jest
informacja dla kompilatora o włączeniu do projektu wszystkich plików z rozszerzeniem *.nfm.

27)2Czy przy zastosowaniu okien dialogowych modalnych działają


timery? Odpowiedź uzasadnij.

Okna modalne i nie modalne mogą służyć jako przykład kontroli przepływu informacji
synchroniczny i asynchroniczny. (Delphi)

Modalne (przepływ synchroniczny)


– kontrola wraca do kodu dopiero po zamnięciu okna modalnego.
– do pozostałych okien programu wstrzymane są komunikaty myszki i
klawiatury (ale dochodzą komunikaty zegara!)

Nie modalne (przepływ asynchroniczny)


– kontrola programu wraca natychmiast do następnej linii kodu
– musimy sprawdzać kiedy użytkownik zamknął okno, aby otrzymać
ostateczny stan

28)Na czym polega dziedziczenie projektu wizualnego formularza?


Opisz znane ci technologie (1 lub 2).

Następnie Projektujemy okno postępu


o Nazwa formularza: Name = frmKrokPostep
o Będziemy się do niego odwoływać z poprzedniego kroku.
o ProgressBar1: TProgressBar
o Timer1: TTimer (do symulacji)
Uzupełniamy kod frmKrokPostep

Poprawiamy metodę obsługującą przycisk Dalej z poprzedniego kroku aby


pokazała nasz formularz postępu

Należy jeszcze w kilku miejscach dołączyć inne moduły ('unit')

29)
Przedstaw koncencepję zastosowania Microsoft Windows Custom
Controls do realizacji projektów widoków abstrakcyjnych.

Na początku zdefiniujemy widoki abstrakcyjne na poziomie obiektów.


– Staramy się przewidzieć jakie widoki danych obiektów będą nam potrzebne.
Na przykładzie

Widoki: Telefonistki
Widoki abstrakcyjne: Zlecenie
Widoki abstrakcyjne: Lokalizacja
Np.:

Definiujemy co musi znajdować się na poszczególnych ekranach


(najlepiej związanych z przypadkami użycia, czyli najkorzystniej z
scenariuszami)
Szablony – prezentujemy jak będzie rozmieszczona strona( system – layout ), w poszczególnych stanach ( np.
szablon telefonistki strona powitalna ) ( np. Edycja zlecenia przez Telefonistkę )
30)Do czego służy Windows Workflow Foundation w .NET 3.x? Jak
ta technologia jest związana z UML?
SLAJD str 7,14 z wyk6b

Organizacje coraz częściej funkcjonują zgodnie z pewna koncepcją procesów biznesowych. Niektóre elementy
procesów są automatyzowane. Zasadne zatem jest tworzenie kodu który
umożliwia planowanie kroków poszczególnych procesów (suport for workflow based applications)

Jedna technologia workflow na Windows


– Ale – rozszerzalna
Framework zarówno do budowy systemowych (automatycznych)
przepływów jak i tych sterowanych przez człowieka (wybór; UI itp.)
Nie jest to serwer - framework, API, DLL
– Serwer można zbudować
– Przykład: SharePoint 3.0
W środku:
– „Tylko” maszyna stanu
+ sekwencje
– +Designer
● Lub XAML
– +Usługi (services)

31)Do czego służy i co to jest XAML?

Język opisu interfejsu oparty na XMLu, wykorzystany w technologii WPF (cześć Frameworka .NET 3.0).
Daje projektantom interfejsu więcej możliwości niż GDI (m.in. obiekty 3d, obroty i skalowanie kontrolek,
użycie animacji i wideo), oddziela pracę programisty i projektanta.
32)Czy LINQ to język do odpytywania warstwy prezentacji o stan
interfejsu użytkownika? (odpowiedź uzasadnij)

Nie, LINQ (Language Integrated Query) ujednolica dostęp do danych nieobiektowych (np. bazy danych, danych
w XML) (definiuje standardowe operatory kwerend) i automatyzuje zamianę ich na obiekty.

33)Czym różni się wzorzec MVC od wzorca architektury


warstwowej?

Architektura warstwowa to taka, w której kolejne warstwy aplikacji kontaktują się między sobą, lecz nie mogą
kontaktować się z pominięciem warstw sąsiednich. W MVC kontroler kontaktuje się zarówno z warstwą danych
(Modelem) jak z warstwą widoku. Warstwa widoku w modelu warstwowym dane otrzymywałaby od kontrolera,
natomiast w MVC pobiera je bezpośrednio od Modelu, co jest sprzeczne z zasadami architektury warstwowej.

34)Kiedy zmodyfikowany model MVC można uznać za architekturę


warstwową?

Odp. Jak w pyt 33.


Gdy widok nie kontaktuje się bezpośrednio z modelem, ale otrzymuje dane od kontrolera.

35)Do czego może służyć wzorzec Modelu Prezentacji?

• Do reprezentacji stanu i zachowania prezentacji niezależnie od kontrolek GUI używanych na ekranie

• Stan ekranu nie znajduje się w kontrolkach lecz w modelu

• Model prezentacji może odwoływać się do wielu obiektów dziedziny aplikacji – nie jest zatem fasadą
obiektów dziedziny

• Model prezentacji można uznać za pewną ‘abstrakcję’ niezależną od platformy GUI

Schematy:
36)Przedstaw zalety stosowania techniki „databinding” podczas
realizacji interfejsu użytkownika. Kiedy tą technikę należy
stosować?

• Zapewnia synchronizacje między tym co jest wyświetlane, a tym co znajduje się w recordset’cie

• Każda zmiana na ekranie automatycznie się propaguje do recordsetu i odwrotnie

• Należy stosować wtedy, gdy chcemy aby zmiany natychmiast się propagowały i kiedy wystarcza nam
funkcjonalność zawarta w bibliotece (bo databinding często zawarty jest w dostarczonych bibliotekach)

37)Z jakim wzorcem projektowym związany jest poniższy diagram


sekwencji:

Jest to pośredni model prezentacji – tworzony jest model dla widoku, czyli obiekt tłumaczący wartości z
dziedziny aplikacji na dziedzinę interfejsu użytkownika. Model prezentacji przechowuje i udostępnia konkretne
informacje związane bezpośrednio z interfejsem użytkownika – np. kolor.
38)Na czym polega zastosowanie wzorca Fabryki we wzorcu
selektor prezentacji?

Na tym, że tworzymy osobą klasę, która na podstawie obiektu dziedziny decyduje w którym oknie go
wyświetlić. FormularzGłowny pyta się w jakim oknie wyświetlić dany obiekt.

39)Kiedy należy stosować wzorzec aplikacji WEB o nazwie „Front


Controller”?

Dla skomplikowanej aplikacji Web aby osiągnąć wysoki wskaźnik ponownego użycia kodu oraz elastyczności
przy jak najmniejszym duplikowaniu kodu.

Gdy wspólna funkcjonalność jest dzielona przez wiele widoków.


- Potrzebna jest centralizacja tej logiki aby uniknąć powtarzania się kodu.

Gdy zbiór widoków wykorzystuje te same dane.


- Najkorzystniejszym rozwiązaniem jest scentralizowane pobieranie danych. Czyli unikamy powtarzania się
kodu odpowiedzialnego za pobieranie danych w poszczególnych widokach.

Gdy potrzebne automatyczne testowanie.


- Testować chcemy nie tylko model, ale także kontroler.
40)Przedstaw różnice między wzorcem kontrolera pasywnego i
aktywnego w zastosowaniach dla aplikacji WEB.

1. Bierny Model
W trybie biernym(pasywnym), obiekty używane w modelu, nie zostały zaprojektowane do używania ich w trójce
MVC. Kontroler jest odpowiedzialny za sygnalizacje widokowi, gdy wykonuje on operacje na modelu, które
wymagają zaktualizowania danych w widoku.
Bierny model jest powszechnie wykorzystywany w WEB MVC. Surowe żądanie/odpowiedz z cyklu HTTP nie
wymaga aktywnego modelu. Interfejs użytkownika zostaje za każdym razem zbudowany na nowo, po mino
zmian tylko w obrębie modelu ( w aplikacji PHP nie mamy "trwałej" sesji i za każdym odwołaniem cały
interfejs użytkownika, jest budowany na nowo - w przeciwieństwie do aplikacji, np.: systemowych, gdzie to
zainicjowany szkielet jest wykorzystywany ciągle). Doskonale to widać w PHP gdzie żaden stan nie jest
zachowywany pomiędzy żądaniami klienta (budowa od nowa całego interfejsu).
2. Aktywny Model
W aktywnym Modelu, klasy modelu posiadają mechanizm zawiadomień, zwykle stosuje się w tym celu wzorzec
Obserwator. Dzięki takiemu rozwiązaniu, niepowiązany widok jak i komponenty kontrolera zostają
poinformowane o zmianach zachodzących w modelu. Ponieważ te komponenty rejestrują siebie w modelu, a
model nie ma pojęcia o specyfikacji widoku i kontrolera, to nie niszczy niezależności modelu.
Mechanizm zawiadomień dostarcza natychmiastowego uaktualnienia informacji, czyli cechy charakterystycznej
dla aplikacji MVC z GUI.

41)Dlaczego wzorzec „pośredni model prezentacji” pomaga


stosować testy automatyczne?

Model ten reprezentuje stan i zachowanie prezentacji niezależnie od kontrolek GUI użytych w interfejsie. Odkąd
klasy pośredniego modelu prezentacji są w pełni oddzielone od widoku, logika, którą zawierają jest znacznie
łatwiejsza do przepytania. To sprawia że testowanie jest łatwiejsze.

42)Czy .NET wspomaga realizację wzorca Front Controller?


Odpowiedź uzasadnij.

W .Net implementacja jest skomplikowana ze względu na wbudowany i ściśle zintegrowany ze środowiskiem


wzorzec Page Controllera.

– Potrzebna jest budowa całego silnika Front Controllera.


– Należy stosować tylko i wyłącznie dla faktycznie rozbudowanych systemów.
– trudne testowanie w oddzieleniu od serwera aplikacji

43)Do czego można wykorzystać wzorzec Łańcuch Filtrów (Chain


Filter)?

Łańcuch filtrów może być wykorzystany, jeśli chcemy poddać obiekt (lub kilka obiektów) łatwo
rozszerzalnemu zestawowi testów. Mogą one dotyczyć walidacji, filtracji, wykonania określonych
funkcji przed startem aplikacji.

Pomysł łańcucha filtrów polega na stworzeniu kontenera (łańcucha), który przechowuje zestaw filtrów.
Poszczególne filtry jest wywoływane są kolei. Do wywołania przekazywana jest także referencja do
łańcucha, aby można było wykonać następny filtr. Do wszystkiego co wykonuje dany filtr na obiekcie
powinny mieć dostęp kolejne filtry.

44) Jakie informacje przesyła się za pomocą komunikatów w


interfejsach opartych na GUI?

Informacje przesyłane za pomocą komunikatów to np.

Uruchomienie: exec, click, start,


Uzyskanie kontroli (focus, onEnter itp.)
Interakcja z klawiaturą i myszką
Komunikacja między kontrolkami na ekranie
Wystąpienie błędu
Zmiana wartości (przez użytkownika)
Komunikaty o tworzeniu kontrolki, usuwaniu, pokazywaniu, chowaniu
Zmiana rozmiaru, uaktualnienie widoku
Stoper (Timer)
Komunikaty systemu operacyjnego
Pojawienie się nowego urządzenia, itp...

45)W jakich bibliotekach występuje pętla obsługi komunikatów?


Kiedy implementujemy ją sami, a kiedy jest zrealizowana przez
bibliotekę.

Pętla obsługi komunikatów występuje we wszystkich bibliotekach GUI np. .net, mfc. Qt, VCL.
Wydaje mi się, że pętla jest realizowana przez biblioteki zorientowane obiektowo np. SWING w Javie.
Pętlę, a w zasadzie funkcję obsługującą komunikaty implementujemy np. w. VCL (delphi),

W Win32 API sami musimy napisać pętle obsługi komunikatów np.


GUIMessage * msg;
while (( msg = waitForNextMessage() ) != null) {
DispatchMessage( ApplicationHandle, msg );
if (msg == GUIQuitMessage) {
PostQuitMessage( ApplicationHandle, msg );
break;
}
}

46) W jaki sposób w .NET możemy obsługiwać własne komunikaty?

W .NET są co najmniej 2 metody własnej obsługi komunikatów:


a. Wykorzystanie interfejsu IMessageFilter.
Metoda oficjalnie promowana przez Microsoft.
Tworzymy klasę Filter w której przesłaniamy metodę PreFilterMessage.
using System;
using System.Windows.Forms;
public class MyFilter: ImessageFilter
{
public bool PreFilterMessage(ref Message aMessage)
{
if (aMessage.Msg==WM_AMESSAGE)
{
//obsługa
}
return false;
}
}
Następnie rejestrujemy go w aplikacji
MyFilter fFilter = new MyFilter();
Application.AddMessageFilter(fFilter);

b. Przesłonięcie w klasie dziedziczącej z Control lub NativeWindow metody WinProc. W


przypadku dziedziczenia z Control rozszerzymy funkcjonalność jakiejś specyficznej kontrolki.

47)Do czego służy program Spy++?


Udziela wyczerpujących informacji o wszystkich aktualnie działających procesach, wątkach, otwartych w nich
oknach i elementach kontrolnych. Dzięki niemu możemy monitorować komunikaty i sprawdzać kiedy w jakiej
kolejności są wywoływane.

48)Napisz przykład wywołania pętli komunikatów w: Qt, .NET, MFC.

.NET
public static int Main()
{
Application.Run(new MyWindow() );
return 0;
}
Qt
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MojDialog * dialog = new MojDialog;
dialog->show();
return app.exec();
}
Delphi
begin
Application.Initialize;
Application.CreateForm(MyWindow, w);
Application.Run;
end.
MFC ( chyba to to)
class MyApp :public CWinApp
{
MFC_ MyWindow *wnd;
public:
BOOL InitInstance()
{
wnd = new MFC_ MyWindow ();
m_pMainWnd = wnd;
m_pMainWnd->ShowWindow(1);
return 1;
}
};

49)Z jakich elementów składa się program graficznych napisany w


WinAPI?

Podstawą programu napisanego w WinAPI jest funkcja startowa WinMain (odpowiednik main w zwykłym
programie C/C++). Na poczaątku funkcji znajduje się kod tworzący okno programu i jakiś inny kod
inicjalizacyjny, a następnie pojawia się pętla komunikatów. Jest to pętla nieskończona, w której mamy
wywołania dwóch funkcji, GetMessage lub PeekMessage aby odczytać komunikat przesłany dla naszej aplikacji
i DispatchMessage aby przesłać komunikat do funkcji obsługi komunikatów. Funkcję obsługi komunikatów
musimy napisać sami, składa się ona z instrukcji switch(message) i w zależności jaki komunikat dostanie
wykonuje odpowiednie zadania np na komunikat WM_DESTROY powinna zakończyć program. Jeśli mamy
formę z przyciskami i innymi kontrolkami, to razem z kodem gdzieś jest plik opisujący położenia tych kontrolek
i plik resources.h, gdzie są zdefiniowane stałe przez które możemy się odwoływać do tych kontrolek. Kodu
funkcji nie wklejam, jest w pdfie wyk 9 postać funkcji winmain naogół wygląda tak: int WINAPI
WinMain(HINSTANCE inst, HINSTANCE prevInst, LPSTR cmd, int mode) a obsługi komunikatów:
LRESULT CALLBACK nazwaDowolna(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam).
Jeśli mamy kilka okien to każde musi mieć funkcję obsługi komunikatów, można to być jedna dla wszystkich,
lub dla każdego inna ( drugie podejście jest chyba lepsze)

50)Jaka jest struktura programu głównego w Delphi? Gdzie jest


uruchamiana pętla obsługi komunikatów?

Struktura programu opiera się na VCL (Visual Component Library) - konkurencyjną dla MFC
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Petla komunikatów uruchomiana jest w procedurze Application.Run.


51)Do czego służy biblioteka GLUT?

Biblioteka GLUT (ang. OpenGL Utility Toolkit) to wieloplatformowe API


obsługujące interfejs użytkownika (okna, myszka, klawiatura) przygotowane do współpracy z OpenGL. Została
ona stworzona do robienia małych i średnich programów wykorzystujących OpenGL. Ze względu na
popularność wiele nowszych bibliotek ma emulację poleceń z GLUT jak i też większość tutoriali OpenGL
wykorzystuje GLUT jako podstawę programistyczną.

Oto niektóre funkcje biblioteki GLUT:

* definicja i zarządzanie oknami


* monitorowanie myszy i klawiatury
* rysowanie niektórych podstawowych brył geometrycznych (sześcianów, kuli oraz imbryczków Utah)
* niektóre ograniczone funkcje przy tworzeniu wyskakujących okienek (ang. pop-up).

52)Czy MFC zastępowało Win 32 API? Odpowiedź uzasadnij.

Patrząc od strony programisty tak, lecz tak na prawdę było to uwspólnienie (wrapper) wywołań niezależnie czy
był to WIN16 API, czy też WIN32 API. Dodatkowo MFC przynosiło ze sobą wiele przydatnych klas i struktur ,
dzięki czemu można było szybciej tworzyć programy w C i c++.

53)Dlaczego powstało MFC?

Były jakby 3 powody.

1. Zapewnić te same biblioteki dla programów 16 i 32 bitowych (przez chwilę także DOSowych)

2. Nowy kompilator Microsoftu obsługiwał C i C++ (wcześniej tylko C). Chodziło o zapewnienie
wspólnego dostępu zarówno dla C jak C++ do bibliotek, które zapewniały dostęp do takich funkcji jak:
obsługa wyjątków , dostęp do nowych typów danych (np od daty) , itd.

3. Borland rok wcześniej w 1991 w zrobił konkurencyjną bibliotekę Object Windows Library (OWL), która
spełniała 2 powyższe punkty , w dodatku w pełni obiektowy sposób.

54)Do czego w MFC służą metody z przedrostkiem Afx...?

Początkowo MFC miało się nazywać Application Framework Extensions (AFX) , stąd najstarsze funkcje mają
przedrostek afx. Są to funkcje nieodpowiadające za komunikację z API windowsa czyli w zasadzie z elementami
GUI. Czyli np. obsługa okien programów , MessageBoxów itp.

55)Jakie informacje przechowuje delegacja w .NET?

przekopiowane ze slajdu bo nie ma co wymyślać.


Specjalna „struktura”, typ, w rzeczywistości w CIL klasa, która potrafi przechowywać wskaźnik (referencję) do
metody statycznej lub obiektu, która ma zostać uruchomiona w momencie
uruchomienia delegacji. W rzeczywistości delegacja w naturalny sposób potrafi przechowywać listę metod,
które mają zostać uruchomione.
? Delegacja w ukryty sposób przechowuje informacje o:
– nazwie wywoływanej metody
– typie wywoływanego obiektu
– argumentach wywoływanej metody
– argumentach zwracanych przez wywoływaną metodę
? Delegacja przechowuje powyższe informacje w sposób ukryty, co oznacza, że nie jest to widoczne
bezpośrednio dla programisty. Co więcej, programista zazwyczaj nie używa właściwości delegacji
związanych z tym, że jest ona klasą. Jedną z ważniejszych cech delegacji jest to, że aby można jej było użyć
trzeba ją utworzyć za pomocą operatora new , podobnie jak inne normalne klasy.

56)Zadeklaruj przykładową delegację oraz jej wywołanie.

public delegate int PassExam(string[] questions);


private PassExam passExamListener;

metoda obslugi:

private int PassExamHandler(string[] questions)


{
//zrob cos
return 5;
}

np. w konstruktorze klasy:

this.passExamListener = new PassExam(PassExamHandler);

a wywoładnie gdziekolwiek:

string[] questions = new string[2];

this.passExamListener(questions);

57)Do czego zostało wprowadzone w .NET słowo kluczowe


„event”? Podaj przykład.

ze slajdu:

Słowo kluczowe event zostało wprowadzone do .NET aby zmniejszyć ilość tworzonego kodu i zautomatyzować
procedury rejestracji i wyrejestrowania delegacji z danych klas. Kompilator,
gdy napotka słowo event automatycznie dodaje odpowiednie metody, które są ukryte przed programistą.

przykład(np w poprzednim pytaniu)

public delegate int PassExam(string[] questions);


private event PassExam sprawdzPunkty;

metoda obslugi identyczna:

private int PassExamHandler(string[] questions)


{
//zrob cos
return 5;
}

gdzies, np w konstruktorze:
this.sprawdzPunkty += new PassExam(PassExamHandler);

a wywołanie np.

if(questions[next]==null)
this.sprawdzPunty(questions);

58)Jak można obsłużyć komunikaty w .NET przy wykorzystaniu


interfejsu IFilterMessage oraz przesłonięciu procedury WndProc?

ze slajdow:

using System.Windows.Forms;
public class MyFilter: IMessageFilter
{
public bool PreFilterMessage(ref Message aMessage)
{
if (aMessage.Msg==WM_AMESSAGE)
{
//WM_AMESSAGE Dispatched
//Let’s do something here
//...
}
// This can be either true of false
// false enables the message to propagate to all other
// listeners
return false;
}
}

ale to nie zadziala niestety ;) bo jeszcze klasie MyFilter nalezaloby dodac:

Application.AddMessageFilter( this );

a zeby zdjac filtr:

Application.RemoveMessageFilter( this );

drugi sposób to przeciążenie metody:

protected override void WndProc(ref Message aMessage)


{
if (aMessage.Msg==WM_AMESSAGE)
{
//WM_AMESSAGE Dispatched
//Let’s do something here
//...
}
}

Ciekawostką jest że np. skanery też komunikują się z Windowsem za pomocą komunikatów, np. po
zeskanowaniu pojawia sie TWMSG_XFERREADY, żeby napisać obsługę skanera z poziomu .net bez używania
zewnętrznych bibliotek należy min. przechwycić komunikaty skanera w jeden z podanych wyżej sposobów.

You might also like