Singleton

Singleton jest wzorcem stosowanym w przypadku gdy chcemy zapewnić że w obrębie jednej maszyny wirtualnej javy będzie tylko jedna instancja danej klasy.   Schemat   Założenia Klasa która ma być singletonem musi posiadać prywatne, statyczne pole instance typu naszego singletona Musi posiadać publiczną, statyczną metodę getInstance zwracającą obiekt singletona Musi posiadać prywatny konstruktor Schemat działania […]

Obserwator

Wzorzec obserwator to bardzo popularny wzorzec wykorzystywany przede wszystkim w sytuacji gdy mamy do czynienia z relacją „jeden do wielu”, gdzie wiele obiektów musi być informowanych o zmianie stanu obiektu głównego.   Schemat     Założenia Obiekt obserwowany musi implementować interfejs Observable a wraz z nim jego metody. Obiekty obserwujące muszą implementować interface Observer i […]

SOLID w telegraficznym skrócie

Single responsibility principle Zasada mówiąca o tym by dana klasa realizowała wyłącznie jedno zadanie. Open/close principle Zasada mówiąca o tym by twój kod był otwarty na rozszerzenia ale zamknięty na modyfikację. Liskov substitution principle Twój ko powinien poprawnie współpracować z klasą i wszystkimi klasami po niej dziedziczącymi. A jeśli klasa implementuje pewien interfejs to wszystkie […]

Wyjątki

Wyjątki to sytuacje powodujące błędy w programie często prowadzące do jego zamknięcia. Przykładowo jeśli za pomocą obiektu typu Scanner i metody nextInt() spróbujemy do zmiennej typu int przypisać liczbę zmiennoprzecinkową lub znak. Na szczęście w javie jest kilka sposób na obsługę takich wyjątkowych sytuacji dzięki czemu próba przypisania liczby zmiennoprzecinkowej do zmiennej typu int nie musi […]

Konstrukcja super w konstruktorach i metodach

Konstruktor Jak wiadomo konstruktory w javie nie są dziedziczone. Istnieje jednak sposób na wywołanie konstruktora klasy dziedziczonej w klasie dziedziczącej. Służy do tego konstrukcja super(). Jeżeli w klasie bazowej zdefiniujemy własny konstruktor (domyślny nie zostanie wtedy utworzony przez kompilator) to w klasie która dziedziczy naszą klasę bazową, a dokładnie w jej konstruktorze, a jeszcze dokładniej […]

Kolekcje

Kolekcje Wprowadzone w javie od wersji 1.2 struktury danych pomagające rozwiązać problem np. z implementacją „rozszerzalnej tablicy”. Podstawowe kolekcje w javie to: listy (list) zbiory (set) mapy (map) kolejki (queue) Poszczególnym typom powyższych kolekcji odpowiadają interfejsy List, Set oraz Map. Wszystkie one od javy 1.5 są generyczne(możemy określić jaki typ obiektów mogą przechowywać) oraz nie […]

Kompozycja

Kompozycja – alternatywa dla klasycznego dziedziczenia. Dzięki takiemu podejściu nasz kod jest bardziej elastyczny. Uzyskujemy ją poprzez definiowanie w nowej klasie pól, które są obiektami istniejących klas. By jeszcze lepiej wykorzystać jej zalety możemy tworzyć klasy na bazie interfejsów. Jeśli we wdrożeniu nie odpowiada nam określona implementacja, to po prostu tworzymy własną, która implementuje metody wcześniej […]

Podstawowe założenia OOP (Object Oriented Programming)

Paradygmat programowania obiektowego polega na możliwie jak najdokładniejszym odzwierciedleniu otaczającego nas świata w kodzie za pomocą min. obiektów i ich metod. Podstawowe założenia: Abstrakcja – Ograniczamy cechy obiektu ze świata rzeczywistego do cech istotnych z punktu widzenia programisty. Ma to za zadanie uprościć rozwiązanie problemui zwiększyć jego ogólność. Warto przeczytać: interfejsy. Hermetyzacja (inaczej enkapsulacja) – Ukrywanie […]

Klasy anonimowe

Klasy anonimowe są spotykane dużo częściej niż klasy wewnętrzne (i ich pochodne). Nie posiadają one swojej nazwy, mogą się one odwoływać do pół klasy opakowującej, a także do zmiennych lokalnych w metodach o ile zmienne te są finalne lub efektywnie finalne. Mają dokładnie jedną instancję(pomijamy mechanizm refleksji). Klasy anonimowe mają jeszcze jedną unikalną właściwość – […]

Klasy wewnętrzne i wewnętrzne lokalne i zagnieżdżone

Klasy wewnętrzne w przeciwieństwie do „zwykłych” klas javy mogą być prywatne i niewodoczne dla użytkownika(modyfikator dostępu private), protected ale również final, abstractczy public. Wykorzystywane są głównie wtedy, gdy chcemy w niej mieć dostęp do klasy otaczającej bez konieczności tworzenia i przekazywania jej instancji lub gdy chcemy ją wykorzystać tylko w celach pomocniczych i nie ma […]