Wzorzec projektowy Singleton C++ / Qt

Zastosowanie

Kreacyjny wzorzec projektowy, charakteryzujący się jedną instancją danego obiektu oraz globalnym dostępem do funkcji getInstance(), dzięki czemu możemy uzyskać do niego dostęp praktycznie z każdego miejsca. Inną cechą charakterystyczną jest Lazy loading, czyli alokacja pamięci dla singletona występuje dopiero przy jego pierwszym wywołaniu (odwołaniu się do niego za pomocą funkcji getInstance()).

Singleton

Własności singletona

ZALETY

  • jest tworzony przy pierwszym wywołaniu,
  • jest niszczony po zakończeniu działania programu,
  • po utworzeniu istnieje tylko i wyłącznie jego jedna instancja,
  • programista nie uczestniczy w procesie wywołania konstruktora, który zwykle jest prywatny lub zabezpieczony (protected), po to aby nie tworzyć więcej instancji obiektu singletona.

WADY

  • Rozhermetyzowanie klas poprzez globalny dostęp,
  • Trudniejsza analiza aplikacji podczas testów,
  • Może powodować problemy podczas wykorzystania go w wielowątkowych procesach.
#include <QDebug>
#include <QString>

class Ustawienia
{
public:
    static Ustawienia & getSingleton()
    {
        static Ustawienia singleton; // lazy Loading
        return singleton;
    }

    void setStyle(const QString style)
    {
        this->style = style;
    }
    QString getStyle(){return style;}

private:
    QString style;
    Ustawienia(): style("Unknown"){}
    ~Ustawienia(){}

};

class Klient
{
public:
    Klient( )
    {
    Ustawienia::getSingleton().setStyle("Blue");
    }

    void whiteStyle()
    {
        Ustawienia::getSingleton().setStyle("White");
    }
};

void funkcjaGlobalStyle()
{
    qDebug() << Ustawienia::getSingleton().getStyle();
}

int main()
{
    funkcjaGlobalStyle();

    Klient klient;
    funkcjaGlobalStyle();

    klient.whiteStyle();
    funkcjaGlobalStyle();

    Ustawienia::getSingleton().setStyle("Red");
    funkcjaGlobalStyle();

    return 0;
}

Rezultat

"Unknown"
"Blue"
"White"
"Red"

Recenzja książki „Myślenie obiektowe w programowaniu”

Myslenie obiektowe

Książka dobra dla początkującego programisty ze względu na poruszenie jedynie podstaw tematu. Generalnie po przeczytaniu tej pozycji nie miałem wrażenia, że dowiedziałem się czegoś nowego. Co więcej, jest ona w całości opatrzona nudnymi przykładami w C#.

Tytuł książki dokładnie wyczerpuje jej treść – opisano w niej przykłady, jak programować w prosty sposób, by nie wpaść w tarapaty i ułatwić sobie pracę z kodem.

Książka zawiera dokładny opis, w jakich miejsach umieszczać metody i poszczególne pola, jak tworzyć metody dostępowe i jak budować przejrzyste interfejsy. Poruszono również takie zagadnienia, jak: elementy dziedziczenia, funkcji wirtualnych.

ZALETY

Pozytywnym spostrzeżeniem po przeczytaniu tej pozycji jest utwierdzenie się w przekonaniu, iż dziedziczenie składowych obiektów jest w programowaniu nadużywane, a fascynacja nim prowadzi do bardzo skomplikowanego kodu.

REKOMENDACJA

Książkę polecam początkującym programistom C#, którzy chcieliby nauczyć się podstaw myślenia obiektowego.

OCENA

Książkę oceniam: 5/10.

Kilka tygodni po jej przeczytaniu niewiele z niej pamiętam. Choć dałem autorowi szansę do końca i dotrwałem do ostatniej kartki, to jednak była to dość nudna lektura.

 

Recenzja książki „Wzorce projektowe – elementy oprogramowania obiektowego wielokrotnego użytku”

Wzorce-Projektowe

O książce „Wzorce projektowe – elementy oprogramowania obiektowego wielokrotnego użytku” można powiedzieć, że powinna być wpisana w kanon każdego dobrego programisty. Pozycja ta jest cytowana przez wiele innych źródeł, a sami autorzy są nazywani „bandą czterech”. Jako pierwsi zapisali oni wszystkie dobre metody programowania w jednej książce, co przyniosło im znaczny rozgłos.

Książka zawiera szczegółowe omówienie wzorców projektowych podzielonych na trzy grupy:  wzorce konstrukcyjne, strukturalne i operacyjne.

Ocena

Książkę oceniam 8/10.

Uzasadnienie

Dlaczego wystawiam książce „tylko” 8/10? Jest napisana ciężkim, technicznym językiem. Pomimo, że niektóre opisywane metody różnią się znacznie stopniem trudności, to cała książka utrzymana jest w podobnym stylu. Poza tym wykorzystywany przez autorów kod jest trudny do zrozumienia dla początkujących programistów, a niekiedy odbiega od dobrej notacji (np. metody rozpoczynają się wielkimi literami). Pomimo tego pozycja stanowi fachową literaturę.

Rekomendacja

Książkę poleciłbym co najmniej średnio zaawansowanym programistom.

Recenzja książki „C++ i Qt – wprowadzenie do wzorców projektowych”

Qt wprowadzenie do wzorców projektowych

Książkę można byłoby zawrzeć w jednym zdaniu – jest to zdecydowanie najlepsza pozycja o Qt, którą czytałem. Choć zdjęcie wygląda, jakbym ją wypożyczył z biblioteki, gdzie była czytana co najmniej przez kilkadziesiąt osób, to jednak muszę przyznać, że jest to książka którą czytałem sam wielokrotnie, a jej wygląd wynika z wysokiej jakości treści i przykładów dobrych praktyk, do których wracałem.

„C++ i Qt wprowadzenie do wzorców projektowych” zawiera kompleksowe omówienie zasad tworzenia wysokiej jakości oprogramowania. Wyjaśnione są w niej najważniejsze wzorce projektowe, widgety, sposoby ich konstruowania, pokazany na przykładach język modelowania UML. Autorzy rekomendują też w większości narzędzia typu open source i podają wiele przykładów praktycznych.

ZALETY

Po przeczytaniu książki można wielokrotnie do niej wracać, ponieważ jest w niej tak dużo rozwiązań i solidnych przykładów, że mogłaby się  ona z powodzeniem nazywać biblią programisty.

REKOMENDACJA

Lekturę polecam osobom, które miały już styczność z programowaniem. Raczej co najmniej śrenio zaawansowanym programistom. Książkę mogę zarekomendować wszystkim, chcącym stać się lepszymi programistami C++/Qt.

OCENA

Bez zastanowienia: 10/10.

&nb

Recenzja książki „Myśl jak programista”

Mysl Jak Programista

Książka ukazuje obrazowo, jak alokowana jest pamięć na stercie i stosie. Wskazuje również zalety programowania rekurencyjnego, jednak zarazem zawiera zbyt wiele powtórzeń. Autor położył nacisk na rozwiązywanie problemów w schematyczny sposób oraz przedstawił kłopotliwe sytuacje, w jakich może znaleźć się programista.

Książka nie jest raczej skierowana do zaawansowanych programistów. Autor porusza podstawowe zagadnienia dotyczące zarządzania pamięcią. Jednak należy przyznać, że jest to dość istotna kwestia podczas pierwszych lekcji związanych z programowaniem. Dodatkowo autor przedstawia obrazowo takie zagadnienia, jak tablice, listy, klasy oraz sortowanie.

REKOMENDACJA

Książkę poleciłbym raczej początkującym programistom C++.

OCENA

Książkę oceniam: 5/10.