Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Poniedziałek, 16 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO



Przykład (buforowany generator o rozkładzie normalnym)

Za przykład praktycznej realizacji wzorca Singleton posłuży buforowany generator liczb o rozkładzie normalnym. Klasa generatora podczas utworzenia jedynego egzemplarza będzie generować odpowiednio długą tablicę (bufor) liczb o zadanym rozkładzie. Późniejsze żądania losowania wartości liczbowej - zamiast wykonywać obliczenia - będą pobierać kolejną wartość z utworzonej tablicy wewnętrznej.

W najprostszym przypadku liczby losowe o rozkładzie normalnym możemy wygenerować za pomocą prostego algorytmu:

  • należy wygenerować i zsumować 12 liczb o rozkładzie równomiernym z zakresu od 0 do 1,
  • od otrzymanej sumy odjąć 6,
  • pomnożyć otrzymaną w poprzednim kroku liczbę przez zadane odchylenie standardowe.

Bardziej wyrafinowaną metodą pozwalającą na tworzenie licz losowych o rozkładzie normalnym jest transformacja Boxa-Mullera.

W ogólnym przypadku klasa generatora liczb o rozkładzie normalnym nie musi być singletonem. Jednak zaimplementowanie jej jako Singleton znacząco zwiększa jej zalety. Najważniejsza zaleta to fakt, iż ciężar obliczeń zostaje przeniesiony na etap inicjalizacji aplikacji (wtedy można wymusić utworzenie jedynego egzemplarz klasy i zapełnienie bufora). Funkcje lub metody, które wymagają wartości losowych nie muszą czekać na jej wyliczenie. Jedyny koszt czasowy to operacja pobrania wartości z tablicy bufora i zwiększenie wskaźnika indeksu na kolejną wartość losową – są to koszty znikome wobec każdorazowego generowania nowej liczby losowej. Oczywiście problem może pojawić się po pobraniu wszystkich elementów z bufora. Wówczas należy wygenerować je ponownie, albo po prostu przetasować istniejący bufor i ustawić wskaźnik indeksu na jego początek (co jest oczywiście dużo szybsze).

Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11