Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:ztb:2011:projekty:przystanki:start [2011/09/25 12:46]
ztb2011
pl:dydaktyka:ztb:2011:projekty:przystanki:start [2019/06/27 15:50] (aktualna)
Linia 59: Linia 59:
 ===== Data Flow Diagram - poziom zerowy ===== ===== Data Flow Diagram - poziom zerowy =====
  
-{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​dfd0.jpg|}}+{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​dfd01.jpg|}}
  
 ===== Data Flow Diagram - poziom pierwszy ===== ===== Data Flow Diagram - poziom pierwszy =====
  
-{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​dfd1.jpg|}} +{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​dfd11.jpg|}}
- +
-===== Data Flow Diagram - poziom drugi ===== +
- +
-{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​dfd2.jpg|}}+
  
 ====== 1.7 Wybór encji (obiektów) i ich atrybutów ====== ====== 1.7 Wybór encji (obiektów) i ich atrybutów ======
Linia 100: Linia 96:
 ====== 1.9 State Transition Diagram ====== ====== 1.9 State Transition Diagram ======
  
-{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​std.jpg|}}+{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​std2.jpg|}} 
 + 
 +====== 1.9 Wzorce projektowe ====== 
 + 
 +Poniżej opisane zostają wzorce, które zostały użyte ​ projekcie w celu zoptymalizowania jej działania, głównie pod kątem bazy danych i operacji na niej. 
 + 
 +===== 1.9.1 Leniwe inicjowanie ===== 
 + 
 +Wzorzec ten polega jak największym opóźnieniu utworzeniu obiektów aż do momentu zapotrzebowania na dany obiekt. Ma to na celu ograniczenie liczby zapytań kierowanych do bazy danych co powoduje jej odciążenie i zmniejszenie zużycia zasobów co przekłada się na zminimalizowanie zapotrzebowania na energie co w przypadku aplikacji mobilnych jest priorytetową sprawą. 
 +W projekcie potrzebne linie i przystanki tworzone są w 2 przypadkach 
 +  - gdy musimy je wyświetlić na mapie 
 +  - gdy wyszukujemy je za pomocą wyszukiwarki 
 +Zatem żeby odciążyć bazę obiekty opakowujące przystanki i linie są wywoływane tylko wtedy gdy znajdują się one na ekranie mapy bądź zaczynają się na daną literę bądź cyfrę wpisaną w wyszukiwarce. Po zainicjalizowaniu przechowywane są na liście stworzonych obiektów. Gdy zajdzie potrzeba ponownego ich wykorzystania program sprawdzając listę zobaczy, że obiekty były już utworzone i nie wywoła zapytania do bazy co odciąży zasoby i przyspieszy aplikację. 
 + 
 +===== 1.9.2 Mapowanie danych ===== 
 + 
 +Z reguły w przypadku użycia wzorca leniwej inicjalizacji korzysta się również z drugiego wzorca - mapowania danych. Opisuje on tabele zawarte w bazie danych w postaci obiektów języka Java prezentując odpowiednie wiersze w postaci pól. Dodatkowo klasy te zawierają w sobie pomocnicze metody do przeszukiwania bazy z poziomu encji takie jak wyszukiwanie przystanków dla danego rejonu bądź linii na daną literę alfabetu. Przez zastosowanie tego wzorca ułatwiamy programiście dostęp do danych. 
 + 
 +===== 1.9.2 Obiekt zapytania ===== 
 + 
 +Ostatnim użyty przez nas wzorzec naturalnie wypływa z używania technologii androidowych. Ponieważ bazę i zapytania do niej konstruujemy za pomocą DatabaseAdaptera to programista nie jest zmuszony do bezpośredniego wpisywania kwerend SQLowych, a używa funkcji w języku Java, które je obudowują. Przyczynia się to do zwiększenia przejrzystości kodu i łatwiejszego rozszerzania aplikacji.
  
  
Linia 172: Linia 188:
  + PK_KEY_STOPID + "), " + "​FOREIGN KEY(" + FK_KEY_LINEID  + PK_KEY_STOPID + "), " + "​FOREIGN KEY(" + FK_KEY_LINEID
  + ") REFERENCES " + TABLE_LINES + "​("​ + PK_KEY_LINEID + "​)"​ + "​);";​  + ") REFERENCES " + TABLE_LINES + "​("​ + PK_KEY_LINEID + "​)"​ + "​);";​
 +</​code>​
 +
 +W języku SQL kwerendy te wyglądją następująco:​
 +
 +<​code>​
 +CREATE TABLE stops (
 + stop_id INTEGER PRIMARY KEY AUTOINCREMENT, ​
 + localisationX REAL NOT NULL, localisationy REAL NOT NULL, 
 + name TEXT NOT NULL);
 +
 +CREATE TABLE lines (
 + line_id INTEGER PRIMARY KEY AUTOINCREMENT, ​
 + number INTEGER NOT NULL, from INTEGER NOT NULL, 
 + destination INTEGER NOT NULL, 
 + FOREIGN KEY(from) REFERENCES stops(stop_id), ​
 + FOREIGN KEY(destination) REFERENCES stops(stop_id));​
 +
 +CREATE TABLE connections (
 + stop_id INTEGER NOT NULL, 
 + line_id INTEGER NOT NULL, 
 + order_id INTEGER NOT NULL, 
 + day TEXT NOT NULL, hour INTEGER NOT NULL, 
 + minute INTEGER NOT NULL, legend TEXT, 
 + FOREIGN KEY(stop_id) REFERENCES stops(stop_id), ​
 + FOREIGN KEY(line_id) REFERENCES lines(line_id));​
 </​code>​ </​code>​
  
Linia 745: Linia 786:
  }  }
 </​code>​ </​code>​
 +
 +
 +====== 3. Raport końcowy ======
 +
 +====== 3.1 Implementacja bazy danych ======
 +
 +Baza danych aplikacji mobilnej została zaimplementowana z wykorzystaniem motoru bazy SQLite. Elementy tworzące bazę, zostały zaprezentowane w projekcie logicznym.
 +
 +====== 3.2 Interfejsy do obsługi danych ======
 +
 +W aplikacji istnieją następujące przepływy danych przez widoku (aktywności Androida):
 +
 +  - Mapa
 +    - odnalezienie pobliskiego przystanku na mapie (widok mapy)
 +    - wybranie odpowiadającej użytkownikowi linii (widok linii dla danego przystanka)
 +    - sprawdzenie godzin odjazdów danej linii z danego przystanka (widok połączenia)
 +  - Wyszukiwarka przystanków
 +    - wyszukanie przystanku po nazwie (widok wyszukiwarki)
 +    - wybranie odpowiadającej użytkownikowi linii (widok linii dla danego przystanka)
 +    - sprawdzenie godzin odjazdów danej linii z danego przystanka (widok połączenia)
 +  - Wyszukiwarka przystanków
 +    - wyszukanie przystanku po numerze (widok wyszukiwarki)
 +    - wybranie odpowiadającego użytkownikowi przystanku (widok przystanków dla danej linii)
 +    - sprawdzenie godzin odjazdów danej linii z danego przystanka (widok połączenia)
 +
 +Każdorazowo pobierane są odpowiednie dane z bazy (przystanki,​ linie, połączenia) ze zminimalizowanym obciążeniem bazy danych poprzez zastosowanie interfejsu lazy load (dane inicjowane są dopiero gdy są potrzebne i są przechowywane żeby uniknąć niepotrzebnych zapytać do bazy).
 +
 +Widok mapy
 +
 +{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​mapa.jpg|}}
 +
 +Widok linii przy wyszukiwaniu
 +
 +{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​search.jpg|}}
 +
 +Widok linii dla danego przystanka
 +
 +{{:​pl:​dydaktyka:​ztb:​2011:​projekty:​przystanki:​linie.jpg|}}
 +
 +====== 3.3 Dalszy rozwój aplikacji mobilnej ======
 +
 +Aplikacja aktualnie spełnia wszystkie podstawowe założenia,​ które założyliśmy w fazie projektowej. W przyszłości planujemy rozwój:
 +  - wyznaczanie tras dojścia do najbliższych przystanków
 +  - wyświetlanie czasu odjazdów dla aktualnej i zadanej pory
 +  - wyświetlanie tras przejazdu danej linii
 +
 +====== 3.4 Wnioski ======
 +
 +Google dostarczyło nam narzędzie, które jest łatwo przyswajalne i dobrze opisane w dokumentacji wraz z licznymi przykładami użycia. Sprawiło to, że napisanie aplikacji na system Android nie sprawiło zespołowi problemów.
 +SQLite jako baza danych dla aplikacji mobilnych wydaje się odpowiednim wyborem. Nie dostarcza co prawda zbyt wielu funkcjonalności,​ ale jest prosta w obsłudze, a do tego lekka (co powoduje małe zużycie energii co w aplikacjach mobilnych jest kluczowe) i szybka.
 +
 +====== 3.4 Literatura ======
 +
 +  - http://​developer.android.com/​index.html
 +  - http://​www.sqlite.org/​docs.html
pl/dydaktyka/ztb/2011/projekty/przystanki/start.1316947596.txt.gz · ostatnio zmienione: 2019/06/27 15:57 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0