Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision | |||
aktywny_obiekt [2008/04/15 20:41] krogala |
aktywny_obiekt [2008/04/15 20:43] krogala |
||
---|---|---|---|
Linia 2: | Linia 2: | ||
autor: Krzysztof Rogala | autor: Krzysztof Rogala | ||
- | ==== Problem ==== | + | ===== Problem ===== |
Wyobraźmy sobie bazę danych (już istniejącą). Jedni użytkownicy mogą czytać z niej dane, a innni je zmieniać. Ci pierwsi (dalej: czytelnicy) są niezadowoleni, ponieważ czasem z bazy odczytują nieaktualne lub bezsensowne dane. Ci drudzy (dalej: pisarze) także są niezadowoleni, ponieważ podczas oczekiwania na wprowadzenie poprawek do bazy, nic nie mogą robić. Rozwiązaniem tego problemu jest synchronizacja dostępu. Nie może być tak, że jednocześnie ktoś pisze do bazy i z niej czyta. Preferowani w takiej sytuacji będą pisarze. Ponadto założyłem | Wyobraźmy sobie bazę danych (już istniejącą). Jedni użytkownicy mogą czytać z niej dane, a innni je zmieniać. Ci pierwsi (dalej: czytelnicy) są niezadowoleni, ponieważ czasem z bazy odczytują nieaktualne lub bezsensowne dane. Ci drudzy (dalej: pisarze) także są niezadowoleni, ponieważ podczas oczekiwania na wprowadzenie poprawek do bazy, nic nie mogą robić. Rozwiązaniem tego problemu jest synchronizacja dostępu. Nie może być tak, że jednocześnie ktoś pisze do bazy i z niej czyta. Preferowani w takiej sytuacji będą pisarze. Ponadto założyłem | ||
także, że na raz tylko jeden czytelnik korzysta z bazy. Co więcej, wprowadzamy rozdzielenie wywołania metody i jej wykonania, co pozwala pisarzom natychmiast przejść do innych zadań. | także, że na raz tylko jeden czytelnik korzysta z bazy. Co więcej, wprowadzamy rozdzielenie wywołania metody i jej wykonania, co pozwala pisarzom natychmiast przejść do innych zadań. | ||
+ | |||
+ | ==== include'y i stałe globalne ==== | ||
<code cpp> | <code cpp> | ||
#include <queue> | #include <queue> | ||
Linia 21: | Linia 23: | ||
</code> | </code> | ||
---- | ---- | ||
- | ==== Budowa "aktywnego obiektu" ==== | + | ===== Budowa "aktywnego obiektu" ===== |
Wzorzec "aktywny obiekt" wykorzystuje następujące klasy: | Wzorzec "aktywny obiekt" wykorzystuje następujące klasy: | ||
**Proxy** - klasa widoczna dla programisty, która zawiera interfejs obiektu | **Proxy** - klasa widoczna dla programisty, która zawiera interfejs obiektu |