2

Praca magisterska - Pośrednictwo użytkowe systemu MS DOS

Projekt programu sterującego

Prace projektowe nad programem sterującym zostały podjęte gdy już prace projektowe nad klasami typu USERCONTROL i SYSTEMCONTROL były na ukończeniu. Program sterujący jest zdefiniowany jako obiekt. Klasę opisującą tego typu obiekty nazwano Core.


DrawObject

DrawObjectDrawObject
DrawObjectDrawObj
ect

DrawObjectDrawObject

DrawObjectDrawObject

DrawObject

DrawObject



Ilustracja 7.1 Hierarchia dziedziczenia dla obiektu klasy Core


W aplikacji występuje tylko jeden obiekt klasy Core. Z ilustracji powyżej wynika że obiekt ten dziedziczy wielobazowo po klasach Control i SystemControl. Jest to jedyny obiekt pośrednictwa dziedziczący klasę SystemControl.

Wewnątrz tego obiektu następuje tworzenie plików wsadowych, ich wywoływanie i odbiór sygnałów z obiektów wewnętrznych. Obiekt klasy Core wizualizuje na ekranie jedynie obiekty wewnętrzne. Tzn. dwa panele, pasek narzędziowy oraz pośrednictwo tekstowe.

Ognisko wewnątrz obiektu klasy Core jest przydzielane jedynie obiektom klasy Panel. Pasek narzędziowy oraz pośrednictwo tekstowe są zogniskowane permanentnie, co oznacza że prawie zawsze przyjmują i obsługują zdarzenia przychodzące z klawiatury. Obiekty klasy Panel, ToolBar i ShellEdit zostały rozmieszczone na ekranie, zgodnie z projektem ekranu pośrednictwa.

Definicja klasy Core jest najbardziej obszerna. Mimo to, obsługa sygnałów nadchodzących z obiektów jest prosta. Szkielet obsługi sygnałów dla obiektów klasy Control wygląda następująco.


Ciało funkcji konstruktora obiektu Core

R ejestruj( Utwórz_obiekt ( Obiekt_O1 ) );

R ejestruj( Utwórz_obiekt ( Obiekt_O2 ) );


Ciało funkcji ModalAction obiektu Core

l oop {

if ( Odebrano_Sygnał(a) ) funkcja ( obsługa_a );

if ( Odebrano_Sygnał(b) ) funkcja ( obsługa_b );

funkcja ( obsługa_ogniska );

}


Ciało funkcji destruktora jest puste, gdyż usuwaniem obiektów zarejestrowanych, zajmuje się destruktor obiektu Control.

Na identycznej zasadzie są obsługiwane zdarzenia wewnątrz obiektu Box. Taka konstrukcja umożliwia tworzenie obiektów pochodnych klasy Control bardzo szybko, nie wgłębiając się w zasady działania biblioteki i reszty obiektów grupy USERCONTROL.

Instrukcja loop jest makrodefinicją, zadeklarowaną następująco:


# define loop while( GetEvent() )


Funkcja GetEvent jest zadeklarowana w klasie Control. Wywołuje ona na początku wszystkie metody Show obiektów zarejestrowanych, po czym pobiera zdarzenie z kolejki zdarzeń, a następnie wywołuje ich metody Action. Po zakończeniu obsługi metod Action obiektów zarejestrowanych, zmienne stanu są ustalone i wewnątrz ciała pętli loop można przystąpić do ich obsługi.

Obiekty pochodne klasy Control mają do dyspozycji metody pozwalające na kontrolę przepływu ogniska. Dzięki temu można niejako z "góry&qu ot; wymuszać który obiekt ma przyjmować informacje z klawiatury.

Wewnątrz obiektu klasy Core znajdują się metody wizualizujące na ekranie okna dialogowe z zapytaniami. Starano się, aby te metody były możliwie uniwersalne i obsługiwały jak najwięcej sygnałów przychodzących z obiektów.