Composition Over Inheritance, czyli Kompozycja ponad dziedziczeniem

przez Karol Bocian | 1 marca, 2020

Composition Over Inheritance, czyli Kompozycja ponad dziedziczeniem

Zasada mówi, że lepiej korzystać jest z kompozycji (klasa A używa klasy B) zamiast dziedziczenia po klasie. Stosując dziedziczenie, należy pamiętać, aby nie złamać Zasady podstawienia Liskov.

Zasada nie mówi, że mamy całkowicie zrezygnować z dziedziczenia.

Przykład:

Mamy Pracownika i Kierownika.

Dziedziczenie: Obaj mają imię i nazwisko. Mogą oni dziedziczyć po klasie Pracownik.

Kompozycja: Obaj mają wyliczaną pensję. Tutaj lepiej jest wstrzyknąć w Pracownika i Kierownika klasę, która odpowiada za wyliczenie ich pensji.

Zalety

  • Mniejsza zależność między klasami.
  • Rozbicie klas na mniejsze (rozbicie odpowiedzialności na różne klasy).
  • Łatwiej zachować zgodność z zasadami SOLID.
  • Łatwiejsze testowanie kodu.

Wady

  • Czasem lepiej zastosować dziedziczenie.

Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

[catlist name=”projekt-poznaj-zasady-solid-i-oop” pagination=yes orderby=date order=asc author=no numberposts=100]

Źródła

Obraz główny

Materiały

Zostań Drapieżnikiem — R. Mazur, M. Osman

przez Karol Bocian | 3 lipca, 2020

Przeczytałem ostatnio kolejną książkę. W tym wpisie dzielę się informacjami, które w niej znalazłem oraz które wdrożyłem w swoim życiu. Staram się z każdej książki wdrażać minimum jedną rzecz.

Zostań Drapieżnikiem

Ta książka jest tak przepełniona wiedzą i tezami, z którymi się zgadzam, że nie mogłem zdecydować się, co wybrać, więc wybrałem wiele wątków i tematów.

Wdrożyłem:

  1. Przed rozpoczęciem projektu lub zadania, zadaję sobie pytanie: PO CO to robię? Dodałem to pytanie m.in. do arkusza wykorzystywanego w zarządzania moimi mini projektami.
  2. Nie być negatywnym, tylko czasem zamknąć się, aby miło spędzić czas. Nie każda rozmowa musi kończyć się kłótnią.
  3. Życie to gra. Codziennie wygrywam dzień, bo uczę się wygrywania. Codziennie osiągam cele, bo uczę się osiągania. 
  4. Stawiam hipotezy i sprawdzam je.
  5. Staram się płacić sobie za efekty, a nie za pracę.

Książkę możesz kupić tutaj:

Notatki:

Nauka

Podczas uczenia się, znajduj odpowiedzi na pytania:

  • Jaki to ma związek ze mną?
  • Jak mogę wprowadzić to od razu w życie?
  • Czy to uczenie się, to narzędzie, czy cel sam w sobie?

Słuchanie, czytanie i uczenie się to prokrastynacja. Przygotowanie do działania to prokrastynacja. Prokrastynacja przesuwa na później moment próby, sprawdzenia i wykazania się. Jest wynikiem strachu przed porażką. Obranie dobrego kierunku jest sposobem na walkę z prokrastynacją, ponieważ osiąganie celów, które nie mają sensu, jest bez sensu! Wybierając aktywność, pamiętaj, aby nie tracić pieniędzy, czasu, energii i nie marnować potencjału.

Trening zwyciężania

Zmieniaj się z dnia na dzień. Stabilność nie istnieje, bo zmienia się świat cały czas (Ty też się starzejesz, więc też się zmieniasz). Rozwijaj się i pracuj (nad sobą, projektem) krok po kroku. Znajduj elementy, które zmieniły się i które osiągnąłeś – szukaj dowodów swojego postępu. Trenuj się w ciężkiej pracy i regularnym posuwaniu się naprzód. Rób to mądrze i sprytnie, nie działaj tylko dla samego działania. 

Życie to trening: trenujesz przegrywanie, to przegrywasz, trenujesz odkładanie na później, to odkładasz, trenujesz szukania wymówek, to stajesz się mistrzem w szukaniu wymówek, trenujesz dyscyplinę i wygrywanie, to … Im częściej pokonujesz opór, tym on staje się słabszy, a Ty silniejszy. Należy codziennie wygrywać, być nieustępliwym i zdystansowanym. Odpuszczaj w walkach bez znaczenia, ale bądź nieustępliwych w ważnych bitwach.

Motywacja

Motywacja to stan emocjonalny, bardzo chwiejny, niezarządzalny, zmienny. Nie warto na nim polegać. Lepiej nauczyć się czerpania przyjemności z pracy, nauczyć się robić coś na siłę albo sposobem. 

Motywuje nas strach oraz pragnienie. Często robimy coś, co musimy, a nie coś, co powinniśmy. Możemy to wykorzystać, tworząc motywatory oparte na strachu, przymusie, uznaniu, wyrzutach sumienia oraz ludziach. Na przykład, możemy publicznie założyć się z kimś, że jeżeli czegoś nie zrobimy, to stracimy coś ważnego, w tym również szacunek i uznanie innych (bo okazaliśmy się kimś, kto nie był w stanie tego zrobić). 

Biznesowa gra

Życie i biznes można traktować jak eksperyment: stawiać hipotezę i testować ją (np. sposobem X sprzedam w tym miesiącu 5 odkurzaczy). W takim kontekście nie ma porażki, lecz nauka, że dana hipoteza nie jest prawdziwa. 

Nie powtarzaj tylko drogi innych do osiągniętego sukcesu, ale również unikaj elementów, które doprowadziły pozostałych do sukcesu (usuwanie negatywności).

Szukaj utalentowanych ludzi i otaczaj się takimi. Nie czuj się od nich gorszy, tylko razem budujcie wartość (Ty też masz jakieś talenty). Buduj zespół i wspólnie osiągajcie cele.

Nasze życie i przyszłość zależy od naszej interpretacji otaczającego nas świata.

Największa przegrana to brak walki – udpuszczenie na samym starcie.

Świetny sprzedawca potrafi słuchać i rozpoznawać potrzeby. Jest jak lekarz: diagnozuje problem, sprawdza jego konsekwencje, uzmysławia je pacjentowi, leczy. Podczas słuchania pamiętaj, że to, co sobie myślisz, jest czymś innym, niż to, co myśli rozmówca.

Książkę możesz kupić tutaj:

Wszystkie posty związane z książkowymi wdrożeniami:

    Źródła

    Obraz główny

    Materiały

    • Zostań Drapieżnikiem — R. Mazur, M. Osman

    Linki oznaczone (*) są linkami afiliacyjnymi. Jeżeli uważasz, że czerpiesz korzyści z mojej pracy, to kup coś korzystając z powyższego linku. Sprawi to, że dostanę prowizję z afiliacji.

    SLAP — Single Level of Abstraction Principle, czyli Pojedynczy poziom abstrakcji

    przez Karol Bocian | 1 marca, 2020

    Zasada pojedynczego poziomu abstrakcji

    Wszystkie linie kodu w metodzie powinny mieć ten sam poziom abstrakcji. Nie można mieszać niskopoziomowych i wysokopoziomowych detali w jednej metodzie.

    Zalety

    • Większa czytelność kodu.
    • Łatwiejsze zrozumienie kodu.

    Wady

    • Większa liczba metod i klas.

    Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

      Źródła

      Obraz główny

      Materiały

      DRY — Don’t repeat yourself, czyli Nie powtarzaj się

      przez Karol Bocian | 25 lutego, 2020

      DRY zaleca nie powtarzać tego samego rozwiązania.

      Dotyczy to powtarzania tego kodu, sposobu rozwiązania, czynności.

      Powtarzające działania można automatyzować, powtarzający się kod można wydzielać i odwoływać się, powtarzające wzorce można uogólniać.

      Zaletą stosowania zasady DRY jest unikanie błędów i oszczędność czasu:

      • Błąd w skopiowanym w wielu miejscach fragmencie kodu trzeba poprawić wszędzie.
      • Podczas manualnego wykonywania zadania łatwo o pomyłkę. Automatyczny skrypt nie pomyli się przy kolejnych wykonaniach i wykona pracę za nas.

      Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

        Źródła

        Obraz główny

        Materiały

        Lod — Law of Demeter, czyli Prawo Demeter

        przez Karol Bocian | 29 lutego, 2020

        Prawo Demeter (Zasada minimalnej wiedzy / Reguła ograniczenia interakcji)

        Rozmawiaj tylko z bliskimi przyjaciółmi.

        Należy unikać wywołań typu: Name = School.GetWorkers().GetPersonData().GetName(). Metoda jakiegokolwiek obiektu może wywoływać metody:

        • Swojego obiektu.
        • Argumentów swoich metod.
        • Obiektów, które sam tworzy.
        • Pól swojego obiektu.

        Zalety

        • Mniejsza zależność między klasami i modułami.
        • Łatwiejsze utrzymanie kodu.
        • Brak konieczności znania szczegółów wywoływanych obiektów.

        Wady

        • Klasy muszą mieć więcej metod.

        Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

          Źródła

          Obraz główny

          Materiały

          Anki – sposób na zapamiętanie na całe życie

          przez Karol Bocian | 1 maja, 2020

          Słyszałeś kiedyś o Anki? Jest to aplikacja wykorzystująca:

          • Fiszki (kartę, na której awersie wpisane jest hasło, słowo, nazwa zasady, a na rewersie wyjaśnienie, definicja, pojęcie, zasada).
          • Mechanizm przypominania oparty o krzywą zapominania – po nauczeniu się nowych fiszek, program sprawdza co jakiś czas, czy nadal pamiętamy dane zagadnienie. Jeżeli pamiętamy, to program zapyta na znowu o to, ale za dużo dłuższy czas. Jeżeli nie pamiętamy, to program uzna, że nie pamiętamy pojęcia i zapyta nas o to niebawem.

          Ja używam wersji webowej anki: https://ankiweb.net/. Dodaję do swojej tablicy wiedzę, którą regularnie zdobywam. Codziennie staram się zrobić jedną sesję przypominania (maksymalnie 100 fiszek dziennie).

          Z całego serca polecam Ci, abyś też skorzystał z tej metody:

          • Gromadź całą wiedzę, której się uczysz, w jednym miejscu.
          • Regularnie powtarzaj całą zdobywaną wiedzę (najlepiej wykorzystując mechanizm oparty o krzywą zapominania).

          Wszystkie posty związane z narzędziami:

            Źródła

            Obraz główny

            KISS — Keep it simple, stupid, czyli Bez udziwnień zapisu, idioto (BUZI)

            przez Karol Bocian | 24 lutego, 2020

            Reguła KISS zaleca tworzenie rozwiązania w sposób jak najprostszy.

            Należy utrzymać elegancką, przejrzystą strukturę niezawierającą udziwnień, niepotrzebnych elementów oraz unikać przerostu formy nad treścią.

            Jej stosowanie ma na celu: ułatwienie zrozumienia rozwiązania, jego późniejszego utrzymania i rozwoju, np. programu komputerowego.

            W Polsce stosowany jest akronim BUZI (odzwierciedla angielskie słówko kiss) – Bez Udziwnień Zapisu, Idioto.

             

            Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

              Źródła

              Obraz główny

              Materiały

              Filmiki? No nie wiem

              przez Karol Bocian | 21 lutego, 2020

              Cześć!

              Zastanawiałem się ostatnio, czy zacząć nagrywać filmiki.

              Co o tym myślisz? Czy chciałbyś słuchać, co u mnie słychać i jak podążam moją życiową drogą? Chcesz oglądać, czego ostatnio się nauczyłem oraz jak wpływa to na moje życie? Chcesz poznać moje cele, marzenia i spojrzenie na świat?

              Chcesz wiedzieć, co mówię na tym filmie? Daj mi znać! Jestem bardzo ciekawy Twojej opinii 🙂

              Napisz w komentarzu swoje zdanie!

               

               

               

              OOP — Object Oriented Programming, czyli programowanie obiektowe — Modelowanie dziedziny

              przez Karol Bocian | 17 marca, 2020

              Programowanie obiektowe warto jest rozpocząć od przeanalizowania problemu i zaprojektowania rozwiązania. Bardzo pomocnym krokiem (szczególnie w utrzymaniu wysokiej jakości oprogramowania) jest modelowanie dziedziny.

              Pojęcia:

              Programowanie obiektowe — technika tworzenia programów komputerowych wykorzystująca klasy i obiekty, które komunikują się ze sobą i nawzajem wywołują swoje metody.

              Obiekty — elementy oprogramowania łączące stan (dane) i zachowania (metody).

              Analiza — badanie problemu.

              Analiza obiektowa — badanie i klasyfikacja obiektów pojęciowych w problemie.

              Projektowanie — tworzenie koncepcyjnego rozwiązania.

              Projektowanie obiektowe — tworzenie koncepcyjnego rozwiązania bazującego na obiektach, ich odpowiedzialnościach, komunikacji między nimi, relacjach i zależnościach.

              Wzorce projektowe — powszechne rozwiązania typowych problemów.

              Model dziedziny — odzwierciedlenie części świata rzeczywistego oraz ich zależności.

              Sprzężenie — miara jak bardzo obiekty zależą od siebie nawzajem.

              Spójność — miara jak bardzo metody danej klasy powiązane są ze sobą funkcjonalnie.

              Obiektowe modelowanie dziedziny zawiera:

              • Klasy pojęciowe — obiekt występujący w modelowanej dziedzinie. Mogą odpowiadać rzeczownikom z opisu świata. Podczas modelowania należy myśleć o rzeczywistym świecie, a nie artefaktach programowych (np. bazie danych).
              • Powiązania — są to zależności między klasami. Mogą odpowiadać czasownikom z opisu świata. Zależności między klasami określają zdania, np. Jan (klasa Osoba) mieszka pod adresem (klasa Adres).
              • Liczebność — atrybut powiązania. Określa liczbę egzemplarzy klasy A powiązanej z jednym egzemplarzem klasy B.
              • Atrybuty- opisy egzemplarzy klas pojęciowych. Problemy:
                • Atrybut (pole klasy) może być inną klasą (np. w Osobie możemy dać pola Ulica, Nr domu, a możemy dać klasę Adres, które będą zwierały te pola) lub atrybutem innej klasy (np. numer jest atrybutem Miejsca, a nie Biletu).
                • Atrybuty są wartościami typów podstawowych (w innym przypadku są to klasy pojęciowe).

              Porządek obiektowego modelowania dziedziny:

              1. Klasyfikacja obiektów.
              2. Rozważanie związków między klasami.
              3. Klasyfikacja atrybutów klas.

              Warto dbać o wysoką spójność klas oraz nie należy bać się tworzenia klas pomocniczych.

              Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                Źródła

                Obraz główny

                Materiały

                Zawartosc skladajaca sie z internetowego edytora HTML. Wpisz kod licencji, aby zatrzymac dodawanie podobnych reklam do edytowanych dokumentów.

                OOP — Myślenie obiektowe

                przez Karol Bocian | 1 marca, 2020

                Porady:

                • Poznaj zasady SOLID i staraj się jak najbardziej przestrzegać.
                • Myśl o klasie jak o fizycznym obiekcie: co on może zrobić, kto może coś robić z jego danymi, czego robić on nie powinien.
                • Zastanawiaj się, jak obiekty mogą się ze sobą komunikować.
                • Opieraj zależności między obiektami na abstrakcji.
                • Pamiętaj, że klasy powinny być hermetyczne.
                • Klasy i metody nie powinny robić zbyt wiele — duże klasy i metody trudno jest zrozumieć i testować.
                • Klasa sama powinna manipulować swoimi danymi. Nie powinniśmy zwracać danych innej klasie, aby ona je podmieniła.
                • Wyciągaj wspólne części kodu do klas wyspecjalizowanych. Zmniejsza to możliwość wystąpienia błędu w przyszłości oraz pozwala ponownie wykorzystać kod.
                • Pisz ładny, czytelny i czysty kod. Im mniej zagnieżdżeń w kodzie, tym lepiej.
                • Nie nadużywaj dziedziczenia. Zazwyczaj lepszym rozwiązaniem jest kompozycja.

                Sposób na poprawienie wiedzy, jak lepiej programować obiektowo:

                Książka do przeczytania: Myślenie obiektowe w programowaniu — Matt Weiffeld.

                Sposób na ćwiczenie:

                Zamiana programu napisanego w paradygmacie strukturalnym na obiektowy.

                Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                  Źródła

                  Obraz główny

                  Materiały

                  OOP — Object Oriented Programming, czyli programowanie obiektowe

                  przez Karol Bocian | 18 lutego, 2020

                  Programowanie obiektowe

                  Sposób tworzenia oprogramowania wykorzystujący obiekty — elementy scalające dane i funkcje. Program składa się z obiektów komunikujących się ze sobą i realizujących różne zadania. Jest to naturalny dla człowieka sposób modelowania rzeczywistości. Zaletą programowania obiektowego jest łatwość pisania oprogramowania, modyfikowania, utrzymywania, rozwijania oraz ponownego używania już raz napisanego kodu.

                  Cechy programowana obiektowego

                  Klasy

                  Klasy to szablony obiektów. Zawierają dane (charakterystyki) oraz procedury (metody — działania do wykonywania). Na przykład: klasą jest Koło, który zawiera pole: promień oraz metodę PodajPolePowierzchni (wraz z implementacją obliczania pola).

                  Obiekty

                  Obiekty to konkretne instancje klas. Na przykład: obiektem będzie użycie klasy Koło o promieniu 3 cm.

                  Podstawowe założenia programowania obiektowego

                  Hermetyzacja

                  Hermetyzacja polega na ukryciu szczegółów implementacji. Obiekty przedstawiają publiczny interfejs, który mogą wywoływać inne obiekty. Obiekt może zmieniać tylko swój stan. Nikt inny nie może tego robić.

                  Dziedziczenie

                  Mechanizm dający możliwość tworzenia wyspecjalizowanych obiektów na podstawie obiektów ogólniejszych. Pozwala to współdzielić funkcjonalności. Obiekt wyspecjalizowany może wykorzystywać część definicji obiektu ogólniejszego i rozszerzać go lub zmieniać.

                  Polimorfizm

                  Mechanizm umożliwiający traktowanie różnych obiektów w jeden sposób dziedziczących tę samą klasę.

                  Abstrakcja

                  Obiekty są modelami abstrakcyjnych bytów, które wykonują powierzone im zadania bez zdradzania, jak te działania są realizowane. Przedstawiają one uproszczenie danego zagadnienia.

                  Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                    Źródła

                    Obraz główny

                    Materiały

                    Ćwiczenia z SOLID — Kata

                    przez Karol Bocian | 15 lutego, 2020

                    Dzisiaj będę ćwiczył zasady SOLID poprzez robienie Kata. Wybrałem bardzo popularną formę kata: Kalkulator napisów. Czym jest kata?

                    Kata

                    Kata to podstawowy ruch. Jest to japońskie słowo, które oznacza konkretne sekwencje ruchów (walki). Ich regularne powtarzanie pozwala ćwiczyć się do perfekcji w danej technice. W programowaniu pod hasłem Kata określa się zbiór konkretnych czynności stosowanych do ćwiczenia się w programowaniu. Jedno kata polega na zaprogramowaniu i rozwiązaniu danego problemu, np. ćwicząc przy tym TDD. Sekwencja wygląda następująco:

                    1. Czytamy polecenie (wymaganie biznesowe).
                    2. Piszemy test, który ma sprawdzić nasz kod, czy wykonał dobrze polecenie (Testowanie poprawności rozwiązania).
                    3. Piszemy kod, spełnia nasze testy (rozwiązanie).
                    4. Poprawiamy nasz kod (refaktoryzacja).

                    SOLID — przypomnienie

                    Przypomnijmy sobie jeszcze raz wszystkie zasady SOLID. Następnie przedstawię Ci sposoby, jak ćwiczyć zasady SOLID.

                    Single responsibility principle — Zasada jednej odpowiedzialności

                    Każda klasa powinna mieć tylko jedną odpowiedzialność (czyli tylko jeden powód do modyfikacji klasy) – jeden cel istnienia.

                    Open/closed principle — Zasada otwarte-zamknięte

                    Wszystkie klasy powinny być otwarte na rozszerzenia, ale zamknięte na modyfikacje.

                    Liskov substitution principle — Zasada podstawienia Liskov

                    Oprogramowanie powinno dobrze działać, gdy w miejsce klasy bazowej podstawimy jej którąkolwiek klasę potomną.

                    Interface segregation principle — Zasada segregacji interfejsów

                    Wiele dedykowanych i małych interfejsów jest lepsze niż jeden ogólny.

                    Dependency inversion principle — Zasada odwróconej zależności

                    Wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych, lecz zależność powinna wynikać z abstrakcji.

                    Ćwiczenia

                    W dzisiejszym ćwiczeniach wykorzystam to kata: https://osherove.com/tdd-kata-1/. Ćwiczenia wykonywałem w VisualStudio 2019, a testy jednostkowe pisałem używając biblioteki Microsoft.VisualStudio.TestTools.UnitTesting oraz uruchamiałem je skrótem: Ctrl+ R, A.

                    Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                      Źródła

                      Obraz główny

                      Materiały

                      Podsumowanie połowy projektu: Poznaj zasady SOLID i OOP

                      przez Karol Bocian | 13 stycznia, 2024

                      Za mną pierwsza połowa mojego 30-dniowego mini projektu: Poznaj Zasady SOLID i OOP. Idzie dobrze, wszystkie zadania, które miałem do dzisiaj zrobić, zostały wykonane. Jednego dnia nie udało mi się popracować nad tym projektem, ale na szczęście kolejnego dnia mogłem to nadrobić.

                      W ramach tego projektu:

                      1. Odświeżyłem sobie zasady SOLID.
                      2. Przećwiczyłem zasady SOLID w praktyce (programując).
                      3. Napisałem posty z zadami solid, moimi praktycznymi przykładami (kilka również przetłumaczyłem na angielski).
                      4. Zrobiłem kurs e-mailowy: Poznaj zasady SOLID i OOP i sukcesywnie dodaję do niego kolejne lekcje.

                      Tutaj możesz zapisać się na kurs:

                      Przede mną jeszcze trochę pracy związanej z tym projektem: przede wszystkim odświeżenie zasad OOP. Stan projektu wygląda następująco (poprawiłem Excela, w którym zarządzam takim projektem, jeżeli będziecie chcieli, podzielę się nim z Wami). Zrobiłem 41 zadań i zostało mi jeszcze 45 zadań do zrobienia.

                      Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                        Źródła

                        Obraz główny

                        Ćwiczenia z SOLID

                        przez Karol Bocian | 13 lutego, 2020

                        ćwiczenia SOLID

                        SOLID

                        Zasady SOLID są podstawowymi dobrymi praktykami w programowaniu obiektowym. Warto jest nie tylko znać zasady SOLID, ale również je ćwiczyć. Przypomnijmy sobie jeszcze raz wszystkie zasady SOLID. Następnie przedstawię Ci sposoby, jak ćwiczyć zasady SOLID.

                        Single responsibility principle – Zasada jednej odpowiedzialności

                        Każda klasa powinna mieć tylko jedną odpowiedzialność (czyli tylko jeden powód do modyfikacji klasy) – jeden cel istnienia.

                        Open/closed principle – Zasada otwarte-zamknięte

                        Wszystkie klasy powinny być otwarte na rozszerzenia, ale zamknięte na modyfikacje.

                        Liskov substitution principle – Zasada podstawienia Liskov

                        Oprogramowanie powinno dobrze działać, gdy w miejsce klasy bazowej podstawimy jej którąkolwiek klasę potomną.

                        Interface segregation principle – Zasada segregacji interfejsów

                        Wiele dedykowanych i małych interfejsów jest lepsze niż jeden ogólny.

                        Dependency inversion principle – Zasada odwróconej zależności

                        Wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych, lecz zależność powinna wynikać z abstrakcji.

                        Ćwiczenia zasady SOLID

                        1. Programuj zwracając uwagę na zasady
                        2. Czytaj zasady
                        3. Czytaj kod innych osób w kontekście zasad
                        4. Obserwuj, jak zmienia się Twoje oprogramowanie i czy zasady SOLID ułatwiłyby jego rozwój czy odwrotnie.
                        5. Czytaj kod napisany w celu zaprezentowania zasad.
                        6. Dawaj swój kod do review (sprawdzenia) innej osobie i poproś, aby wzięła pod uwagę zasady.

                        Odwiedź strony z ćwiczeniami zasad SOLID

                        Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                          Źródła

                          Obraz główny

                          Materiały

                          CI jak Ćwiczenia Dependency Inversion Principle, czyli Zasada odwrócenia zależności

                          przez Karol Bocian | 12 lutego, 2020

                          Dependency inversion principle — Zasada odwróconej zależności

                          Wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych, lecz zależność powinna wynikać z abstrakcji.

                          Jak wykorzystywać w praktyce DIP?

                          Twórzmy dużo abstrakcyjnych bytów. Każda klasa niech implementuje interfejs lub dziedziczy po klasie abstrakcyjnej. Tworząc oprogramowanie, możemy najpierw stworzyć tylko interfejsy, a dopiero później je zaimplementować.

                          Pomocne w spełnieniu tej zasady jest przestrzeganie tych reguł:

                          • Każda zmienna w klasie jest referencja do abstrakcji.
                          • Wszystkie klasy dziedziczą po abstrakcji.
                          • Żadna klasy potomna nie przesłania metod z klasy bazowej.
                          • Ustawianie zmiennych realizowane jest przez wzorzec fabryki lub wstrzykiwania zależności.

                          Przykład

                          Poniżej mamy klasę pokazującą raport. Dane do raportu brane są za bazy danych. Implementacja wygląda następująco:

                          class Program
                             {
                                 static void Main(string[] args)
                                 {
                           
                                     var reportImporter = new ReportDatabaseImporter();
                                     var reportPresenter = new ReportPresenter(reportImporter);
                                     reportPresenter.ShowReport();
                                 }
                             }
                           
                             internal class ReportPresenter
                             {
                           
                                 private readonly ReportDatabaseImporter importer;
                           
                           
                                 public ReportPresenter(ReportDatabaseImporter importer)
                                 {
                                     this.importer = importer;
                                 }
                           
                                 public void ShowReport()
                                 {
                                     Console.WriteLine(importer.GetReportData());
                                 }
                             }
                           
                           
                           
                             internal class ReportDatabaseImporter
                           
                             {
                                 public string GetReportData()
                           
                                 {
                                     return "Report from Database";
                                 }
                             }

                          Po jakimś czasie dostaliśmy prośbę o wyświetlanie danych również z pliku Excel w taki sam sposób. Niestety, nie jesteśmy w stanie zrobić tego łatwo. Musimy zmienić klasę prezentującą raport. Takie rozwiązanie pozwala nam dodawać łatwiej kolejne źródła raportu:

                          using System;
                           
                          namespace SRP.Bad
                          {
                              class Program
                              {
                                  static void Main(string[] args)
                                  {
                                      var reportImporter = new ReportDatabaseImporter();
                                      var reportPresenter = new ReportPresenter(reportImporter);
                                      reportPresenter.ShowReport();
                           
                           
                           
                                      var reportImporter2 = new ReportExcelImporter();
                                      var reportPresenter2 = new ReportPresenter(reportImporter2);
                                      reportPresenter2.ShowReport();
                                  }
                              }
                           
                              internal class ReportPresenter : IReportPresenter
                              {
                                  private readonly IReportImporter importer;
                           
                                  public ReportPresenter(IReportImporter importer)
                                  {
                                      this.importer = importer;
                                  }
                                  public void ShowReport()
                                  {
                                      var reportData = importer.GetReportData();
                                      Console.WriteLine(reportData.GetContent());
                                  }
                              }
                           
                              internal class ReportDatabaseImporter : IReportImporter
                              {
                                  public IReportData GetReportData()
                                  {
                                      return new ReportData("Report from Database");
                                  }
                              }
                              internal class ReportExcelImporter : IReportImporter
                              {
                                  public IReportData GetReportData()
                                  {
                                      return new ReportData("Report from Excel");
                                  }
                              }
                              internal class ReportData : IReportData
                              {
                                  private readonly string content;
                           
                                  public ReportData(string content)
                                  {
                                      this.content = content;
                                  }
                                  public string GetContent()
                                  {
                                      return content;
                                  }
                              }
                              internal interface IReportData
                              {
                                  string GetContent();
                              }
                              internal interface IReportImporter
                              {
                                  IReportData GetReportData();
                              }
                           
                              internal interface IReportPresenter
                              {
                                  void ShowReport();
                              }
                          }
                          

                          Mamy tutaj dużą liczbę interfejsów. Ułatwiają one jednak rozwój aplikacji oraz testowanie. W testach będziemy mogli pod interfejs podstawić mocka.

                          Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                            Źródła

                            Obraz główny

                            Materiały

                            CI jak Ćwiczenia Interface segregation principle, czyli Zasady segregacji interfejsów

                            przez Karol Bocian | 11 lutego, 2020

                            Interface segregation principle – Zasada segregacji interfejsów

                            Wiele dedykowanych i małych interfejsów jest lepsze niż jeden ogólny.

                            Jak wykorzystywać w praktyce ISP?

                            Należy rozdzielać interfejsy na mniejsze i przyłożyć się do projektowania abstrakcyjnych elementów w aplikacji. Za granicę podziału najlepiej wybierać jest miejsce, które pozwala wydzielić obszary zgodne z zasadą pojedynczej odpowiedzialności. Każdy obszar powinien mieć jeden powód do zmiany. Powinien zmniejszać zależności i zwiększać spójność. Interfejsy powinny zawierać taki zbiór metod, aby klasy je implementujące nie musiały implementować metod, których nie chcą implementować.

                            Przykład

                            class Program
                              {
                                  static void Main(string[] args)
                                  {
                                      IDataImporter reportImporter = new ReportImporter();
                                      Console.WriteLine(reportImporter.GetDataFromPdf());
                                      Console.WriteLine(reportImporter.GetDataFromExcel());
                             
                                      IDataImporter pictureImporter = new TableImporter();
                                      Console.WriteLine(pictureImporter.GetDataFromPdf());
                                      Console.WriteLine(pictureImporter.GetDataFromExcel());
                                  }
                              }
                             
                              internal class TableImporter : IDataImporter
                              {
                                  public string GetDataFromExcel()
                                  {
                                      return "Table from Excel";
                                  }
                             
                                  public string GetDataFromPdf()
                                  {
                                      //We do not return a table from pdf file
                                      return string.Empty;
                                  }
                              }
                             
                              internal class ReportImporter : IDataImporter
                              {
                                  public string GetDataFromExcel()
                                  {
                                      return "Report from Excel";
                                  }
                             
                                  public string GetDataFromPdf()
                                  {
                                      return "Report from Pdf";
                                  }
                              }
                             
                              internal interface IDataImporter
                              {
                                  string GetDataFromExcel();
                                  string GetDataFromPdf();
                              }

                            Klasa TableImporter implementuje metodę, z której w ogóle nie korzysta. Lepiej jest oddzielić interfejs DataImporter na mniejsze interfejsy. Wtedy wszystkie klasy będą implementowały tylko to, co chcą.

                            class Program
                            {
                                static void Main(string[] args)
                                {
                                    var reportImporter = new ReportImporter();
                                    Console.WriteLine(reportImporter.GetDataFromPdf());
                                    Console.WriteLine(reportImporter.GetDataFromExcel());
                             
                                    IExcelParser pictureImporter = new TableImporter();
                                    Console.WriteLine(pictureImporter.GetDataFromExcel());
                                }
                            }
                             
                            internal class TableImporter : IExcelParser
                            {
                                public string GetDataFromExcel()
                                {
                                    return "Table from Excel";
                                }
                            }
                             
                            internal class ReportImporter : IExcelParser, IPdfParser
                            {
                                public string GetDataFromExcel()
                                {
                                    return "Report from Excel";
                                }
                             
                                public string GetDataFromPdf()
                                {
                                    return "Report from Pdf";
                                }
                            }
                            internal interface IExcelParser
                            {
                                string GetDataFromExcel();
                            }
                            internal interface IPdfParser
                            {
                                string GetDataFromPdf();
                            }

                            Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                              Źródła

                              Obraz główny

                              Materiały

                              CL jak Ćwiczenia Liskov Substitution Principle, czyli zasada podstawień Barbary Liskov

                              przez Karol Bocian | 10 lutego, 2020

                              Liskov substitution principle – Zasada podstawienia Liskov

                              Oprogramowanie powinno dobrze działać, gdy w miejsce klasy bazowej podstawimy jej którąkolwiek klasę potomną.

                              Jak wykorzystywać w praktyce LSP?

                              Należy dobrze zastanowić się przed skorzystaniem z dziedziczenia. Zazwyczaj lepszą opcją jest użycie kompozycji. Warto jest również zrobić proste eksperymenty: próbować podstawić w klasach korzystających z naszego drzewa klas, wszystkie klasy potomne oraz klasę bazową i zobaczyć, czy nadal program zachowuje się odpowiednio, czy może jednak oczekuje tylko jednego konkretnego rodzaju klasy.

                              Przykład

                              Rozważmy takie zadanie:

                              Mamy napisać aplikację, który wyświetla obraz z kamery video. Do naszej aplikacji możemy podłączyć wiele kamer. Nie wszystkie z nich potrafimy obsłużyć. Na szczęście wiemy to już na początku. Tworzymy klasę bazową Camera oraz klasy dziedziczące po kamerze, w tym również klasę dla kamery nieobsługiwanej.

                              class Program
                                 {
                                     static void Main(string[] args)
                                     {
                                         var cameras = new List<Camera>();
                                         var cameraNC1 = new CameraNC1("Front camera");
                                         cameras.Add(cameraNC1);
                                         var cameraShower = new CameraShower(cameraNC1);
                                         cameraShower.Show();
                               
                               
                                         var cameraNC2 = new CameraNC2("Back camera");
                                         cameras.Add(cameraNC2);
                                         cameraShower = new CameraShower(cameraNC2);
                                         cameraShower.Show();
                               
                                         var unsupportedCamera = new UnsupportedCamera(null);
                                         cameras.Add(unsupportedCamera);
                                         cameraShower = new CameraShower(unsupportedCamera);
                                         cameraShower.Show();
                                     }
                                 }
                               
                                 internal class CameraShower
                                 {
                                     private Camera camera;
                               
                                     public CameraShower(Camera camera)
                                     {
                                         this.camera = camera;
                                     }
                               
                                     internal void Show()
                                     {
                                         if (!(camera is UnsupportedCamera))
                                             Console.WriteLine($"Camera name: {camera.GetName()}");
                                     }
                                 }
                               
                                 internal class CameraNC2 : Camera
                                 {
                                     public CameraNC2(string name) : base(name)
                                     {
                                     }
                                 }
                                 internal class CameraNC1 : Camera
                                 {
                                     public CameraNC1(string name) : base(name)
                                     {
                                     }
                               
                                 }
                                 internal class UnsupportedCamera : Camera
                                 {
                                     public UnsupportedCamera(string name) : base(name)
                                     {
                                     }
                               
                                     internal override string GetName()
                                     {
                                         throw new Exception("This camera does not have name. It is not supported.");
                                     }
                                 }
                               
                                 internal abstract class Camera
                                 {
                                     protected readonly string name;
                               
                                     public Camera(string name)
                                     {
                                         this.name = name;
                                     }
                                     internal virtual string GetName()
                                     {
                                         return name;
                                     }
                                 }

                              Wszystko pięknie działa. Ale musieliśmy kamerę niewspieraną specjalnie obsłużyć. Jeżeli byśmy tego nie zrobili, dostalibyśmy wyjątek. Możemy trochę inaczej zaimplementować metodę GetName w klasie dla kamery niewspieranej:

                              class Program
                              {
                                  static void Main(string[] args)
                                  {
                                      var cameras = new List<Camera>();
                                      var cameraNC1 = new CameraNC1("Front camera");
                                      cameras.Add(cameraNC1);
                                      var cameraShower = new CameraShower(cameraNC1);
                                      cameraShower.Show();
                               
                               
                                      var cameraNC2 = new CameraNC2("Back camera");
                                      cameras.Add(cameraNC2);
                                      cameraShower = new CameraShower(cameraNC2);
                                      cameraShower.Show();
                               
                                      var unsupportedCamera = new UnsupportedCamera();
                                      cameras.Add(unsupportedCamera);
                                      cameraShower = new CameraShower(unsupportedCamera);
                                      cameraShower.Show();
                                  }
                              }
                               
                              internal class CameraShower
                              {
                                  private Camera camera;
                               
                                  public CameraShower(Camera camera)
                                  {
                                      this.camera = camera;
                                  }
                               
                                  internal void Show()
                                  {
                                      Console.WriteLine($"Camera name: {camera.GetName()}");
                                  }
                              }
                               
                              internal class CameraNC2 : Camera
                              {
                                  public CameraNC2(string name) : base(name)
                                  {
                                  }
                              }
                              internal class CameraNC1 : Camera
                              {
                                  public CameraNC1(string name) : base(name)
                                  {
                                  }
                               
                              }
                              internal class UnsupportedCamera : Camera
                              {
                                  public UnsupportedCamera() : base("Unknown - this camera is not supported")
                                  {
                                  }
                              }
                               
                              internal abstract class Camera
                              {
                                  protected readonly string name;
                               
                                  public Camera(string name)
                                  {
                                      this.name = name;
                                  }
                                  internal virtual string GetName()
                                  {
                                      return name;
                                  }
                              }

                              Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                Źródła

                                Obraz główny

                                Materiały

                                CO jak Ćwiczenia Open/closed principle, czyli Zasada otwarte-zamknięte

                                przez Karol Bocian | 10 lutego, 2020

                                Open/closed principle – Zasada otwarte-zamknięte

                                Wszystkie klasy powinny być otwarte na rozszerzenia, ale zamknięte na modyfikacje.

                                Jak wykorzystywać w praktyce OCP?

                                Warto jest stosować interfejsy oraz operować na abstrakcji, a nie uzależniać się od szczegółów implementacyjnych.

                                Trudności związane z OCP

                                Ciężko jest czasami zdecydować, co jest szczegółem implementacyjnym oraz w którą stronę będzie rozszerzała się nasza aplikacja.

                                Przykład

                                Ćwiczenia tej metody wykonałem na bardzo prostym przykładzie. Mamy kalkulator, który ma za zadanie obliczyć powierzchnię figur. W pierwszej wersji używa on switcha, do rozpoznania, jaka jest to klasa.

                                class AreaCalculator
                                 {
                                     private readonly List<object> figures;
                                     public AreaCalculator(List<object> figures)
                                     {
                                         this.figures = figures;
                                     }
                                     public double Calculate()
                                     {
                                         double area = 0;
                                         foreach (var figure in figures)
                                         {
                                             switch (figure)
                                             {
                                                 case Square square:
                                                     area += square.GetWidth() * square.GetWidth();
                                                     break;
                                                 case Rectangle rectangle:
                                                     area += rectangle.GetWidth() * rectangle.Getheight();
                                                     break;
                                                 case Circle circle:
                                                     area += Math.PI * Math.Pow(circle.GetRadius(), 2);
                                                     break;
                                                 default:
                                                     area += area;
                                                     break;
                                             }
                                         }
                                         return area;
                                     }
                                 }
                                 
                                 class Square
                                 {
                                     private readonly double width;
                                     public Square(double width)
                                     {
                                         this.width = width;
                                     }
                                     internal double GetWidth()
                                     {
                                         return width;
                                     }
                                 }
                                 class Rectangle
                                 {
                                     private readonly double width;
                                     private readonly double height;
                                 
                                     public Rectangle(double width, double height)
                                     {
                                         this.width = width;
                                         this.height = height;
                                     }
                                     internal double GetWidth()
                                     {
                                         return width;
                                     }
                                     internal double Getheight()
                                     {
                                         return height;
                                     }
                                 }
                                 class Circle
                                 {
                                     private readonly double radius;
                                     public Circle(double radius)
                                     {
                                         this.radius = radius;
                                     }
                                     internal double GetRadius()
                                     {
                                         return radius;
                                     }
                                 }
                                 class Program
                                 {
                                     static void Main(string[] args)
                                     {
                                         List<object> figures = new List<object>()
                                         {
                                             new Square(5),
                                 
                                         };
                                         AreaCalculator areaCalculator = new AreaCalculator(figures);
                                 
                                         Debug.Assert(areaCalculator.Calculate() == 25);
                                 
                                         List<object> figures2 = new List<object>()
                                         {
                                             new Square(5),
                                             new Rectangle(5,3),
                                 
                                         };
                                         Debug.Assert(new AreaCalculator(figures2).Calculate() == (25 + 15));
                                         List<object> figures3 = new List<object>()
                                         {
                                             new Square(5),
                                             new Rectangle(5,3),
                                             new Circle(5),
                                 
                                         };
                                         Debug.Assert(new AreaCalculator(figures3).Calculate() 
                                           == (25 + 15 + Math.PI * 25));
                                     }
                                 }

                                W drugim przypadku klasy figur implementują interfejs, który ma metodę do liczenia pola powierzchni klasy. Każda klasa sama implementuję liczenie swojego pola powierzchni. Kalkulator jedynie sumuje pola powierzchni.

                                class AreaCalculator
                                   {
                                       private readonly IEnumerable<IFigureAreaCalculator> figures;
                                       public AreaCalculator(IEnumerable<IFigureAreaCalculator> figures)
                                       {
                                           this.figures = figures;
                                       }
                                 
                                       public double Calculate()
                                       {
                                           return figures.Sum(x => x.GetArea());
                                       }
                                   }
                                   interface IFigureAreaCalculator
                                   {
                                       double GetArea();
                                   }
                                   class Square : IFigureAreaCalculator
                                   {
                                       private readonly double width;
                                       public Square(double width)
                                       {
                                           this.width = width;
                                       }
                                 
                                       public double GetArea()
                                       {
                                           return width * width;
                                       }
                                 
                                       internal double GetWidth()
                                       {
                                           return width;
                                       }
                                   }
                                   class Rectangle : IFigureAreaCalculator
                                   {
                                       private readonly double width;
                                       private readonly double height;
                                 
                                       public Rectangle(double width, double height)
                                       {
                                           this.width = width;
                                           this.height = height;
                                       }
                                       internal double GetWidth()
                                       {
                                           return width;
                                       }
                                       internal double Getheight()
                                       {
                                           return height;
                                       }
                                 
                                       public double GetArea()
                                       {
                                           return width * height;
                                       }
                                   }
                                   class Circle : IFigureAreaCalculator
                                   {
                                       private readonly double radius;
                                       public Circle(double radius)
                                       {
                                           this.radius = radius;
                                       }
                                 
                                       public double GetArea()
                                       {
                                           return Math.PI * Math.Pow(radius, 2);
                                       }
                                 
                                       internal double GetRadius()
                                       {
                                           return radius;
                                       }
                                   }
                                   class Program
                                   {
                                       static void Main(string[] args)
                                       {
                                           var figures = new List<IFigureAreaCalculator>()
                                           {
                                               new Square(5),
                                 
                                           };
                                           AreaCalculator areaCalculator = new AreaCalculator(figures);
                                 
                                           Debug.Assert(areaCalculator.Calculate() == 25);
                                 
                                           var figures2 = new List<IFigureAreaCalculator>()
                                           {
                                               new Square(5),
                                               new Rectangle(5,3),
                                 
                                           };
                                           Debug.Assert(new AreaCalculator(figures2).Calculate() == (25 + 15));
                                 
                                           var figures3 = new List<IFigureAreaCalculator>()
                                           {
                                               new Square(5),
                                               new Rectangle(5,3),
                                               new Circle(5),
                                 
                                           };
                                           Debug.Assert(new AreaCalculator(figures3).Calculate() == (25 + 15 + Math.PI * 25));
                                       }
                                   }

                                Dodanie nowej figury nie będzie wymagało zmiany w klasie AreaCalculator.

                                Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                  Źródła

                                  Obraz główny

                                  Materiały

                                  CS jak Ćwiczenia Single responsibility principle, czyli zasada jednej odpowiedzialności

                                  przez Karol Bocian | 4 marca, 2020

                                  Single responsibility principle — Zasada jednej odpowiedzialności

                                  Każda klasa powinna mieć tylko jedną odpowiedzialność (czyli tylko jeden powód do modyfikacji klasy) – jeden cel istnienia.

                                  Jak wykorzystywać w praktyce SRP?

                                  Łącz w jedno kod, który ma ten sam jeden powód do zmiany. Rozdzielaj od siebie kod, który ma wiele powodów do zmiany.

                                  Trudności związane z SRP

                                  Z zasadą jednej odpowiedzialności związane są pewne trudności:

                                  • Nie jest zdefiniowane, czym jest zmiana.
                                  • Nie jest zdefiniowane, czym jest odpowiedzialność.
                                  • Wymaga przewidywania przyszłości.

                                  Zasadę pojedynczej odpowiedzialności można przedefiniować.

                                  Klasa, funkcja, metoda itp. powinna odpowiadać za pojedynczą logikę biznesową na jednym poziomie abstrakcji. (http://adam.wroclaw.pl/2014/12/zasada-pojedynczej-odpowiedzialnosci/)

                                  Klasy powinny być organizowane tak, aby minimalizować złożoność. Powinny:

                                  • Być na tyle małe, aby zmniejszać zależności.
                                  • Być na tyle duże, aby maksymalizować spójność.

                                  Domyślnie powinno się wybierać grupowanie funkcjonalności na rzecz rozdzielania kodu. (https://sklivvz.com/posts/i-dont-love-the-single-responsibility-principle)

                                  Przykład

                                  Klasa książka ma dwie odpowiedzialności:

                                  1. Posiadanie informacji o sobie.
                                  2. Drukowanie siebie.
                                  
                                     class Book
                                      {
                                          private string title;
                                          private string content;
                                          public Book(string title, string content)
                                          {
                                              this.title = title;
                                              this.content = content;
                                          }
                                  
                                  
                                  
                                          public void PrintBook()
                                          {
                                              Console.WriteLine(title);
                                              Console.WriteLine(content);
                                          }
                                      }
                                  
                                      class Program
                                      {
                                          static void Main(string[] args)
                                          {
                                              Book book = new Book("Interesting title", "Nice content");
                                              book.PrintBook();
                                          }
                                      }
                                  

                                  W ramach refaktoryzacji wydzieliłem odpowiedzialność związaną z książką do oddzielnej klasy.

                                  
                                  class Book
                                      {
                                          private string title;
                                          private string content;
                                  
                                          public Book(string title, string content)
                                          {
                                              this.title = title;
                                              this.content = content;
                                          }
                                  
                                          public string GetBookToPrint()
                                          {
                                              return $"{title}{Environment.NewLine}{content}";
                                          }
                                      }
                                  
                                  
                                      interface IPrinter
                                      {
                                          void Print(string content);
                                      }
                                  
                                      class BookPrinter : IPrinter
                                      {
                                          public void Print(string content)
                                          {
                                              Console.WriteLine(content);
                                          }
                                      }
                                  
                                      class Program
                                      {
                                          static void Main(string[] args)
                                          {
                                              IPrinter printer = new BookPrinter();
                                              Book book = new Book("Interesting title", "Nice content");
                                              var bookToPrint = book.GetBookToPrint();
                                              printer.Print(bookToPrint);
                                          }
                                      }
                                  

                                      }

                                  Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                    Źródła

                                    Obraz główny

                                    Materiały

                                    D jak Dependency Inversion Principle, czyli Zasada odwrócenia zależności

                                    przez Karol Bocian | 24 lutego, 2020

                                    Dependency inversion principle — Zasada odwrócenia zależności

                                    Wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych i detali, lecz zależność powinna wynikać z abstrakcji.

                                    Wszystkie wysokopoziomowe moduły powinny być związane z niskopoziomowymi za pomocą abstrakcji. Abstrakcje nie powinny zależeć od detali, lecz to detale powinny być zależne od abstrakcji.

                                    Pomocne w spełnieniu tej zasady jest przestrzeganie tych reguł:

                                    • Każda zmienna w klasie jest referencja do abstrakcji.
                                    • Wszystkie klasy dziedziczą po abstrakcji.
                                    • Żadna klasy potomna nie przesłania metod z klasy bazowej.
                                    • Ustawianie zmiennych realizowane jest przez wzorzec fabryki lub wstrzykiwania zależności.

                                    Regułę tę można stosować do metod, funkcji, klas, modułów oraz pakietów.

                                    Zalety

                                    • Łatwiejsze wymienianie komponentów.
                                    • Łatwiejsze wprowadzanie zmian w oprogramowaniu.
                                    • Łatwiejsze ponowne wykorzystywanie komponentów.
                                    • Łatwiejsze testowanie.

                                    Wady

                                    • Konieczność korzystania z interfejsów i klas abstrakcyjnych.
                                    • Pracochłonność w tworzeniu stabilnych abstrakcji.
                                    • Konieczność korzystania z fabryk lub wstrzykiwania zależności.

                                    Przykład

                                    • Klasa generująca raport (wysoki poziom) korzysta klasy logującej informacje o wyjątkach w aplikacji (niski poziom). Musi przekazać m.in. ścieżkę do folderu z logami. Zmiana klasy logującej do pliku na klasę logującą do bazy danych wymusi zmianę w klasie generującej raport, bo trzeba będzie przekazać inne dane do konstruktora klasy logującej.
                                    • Klasa Kopiarka wykorzystująca klasę Czytnika i klasę Zapisywacza. Jeżeli mamy użyte klasy, a będziemy chcieli zmienić sposób zapisywania (z drukowania na drukarce, w generowanie pdfa), to będziemy musieli zmienić również klasę Kopiarka albo stworzyć nową klasę KopiarkaPdf. Gdyby klasa Kopiarka miała referencje do interfejsów IZapisywacz, to wystarczyłoby wstrzyknąć w nią odpowiednią implementację IZapisywacza, aby osiągnąć nasz cel.

                                    Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                      Źródła

                                      Obraz główny

                                      Materiały

                                      I jak Interface segregation principle, czyli Zasada segregacji interfejsów

                                      przez Karol Bocian | 11 lutego, 2020

                                      Interface segregation principle — Zasada segregacji interfejsów

                                      Wiele dedykowanych i małych interfejsów jest lepsze niż jeden ogólny.

                                      Celem zasady segregacji interfejsów jest wyzbycie się z oprogramowania interfejsów, które odpowiadają za robienie wielu rzeczy. Źle zaprojektowane interfejsy mają tendencje do rozrastania się do zbyt wielkich rozmiarów, stają się one przez to  niespójne. Klasy, które je implementują, muszą implementować metody, których nie powinny. Zależne są one od metod, których nie używają.

                                      Regułę tę można stosować do metod, funkcji, klas, modułów oraz pakietów.

                                      Zalety

                                      • Łatwiejsze zapewnienie Zasady podstawienia Liskov oraz Zasady pojedynczej odpowiedzialności.
                                      • Łatwiejsze utrzymanie kodu.
                                      • Większa czytelność kodu.
                                      • Łatwiejsze zmienianie kodu.
                                      • Brak konieczności implementacji niepotrzebnych metod w klasach, które nie powinny ich mieć.
                                      • Brak interfejsów-bogów.
                                      • Mniejsza zależność kodu od innego kodu.

                                      Wady

                                      • Duża liczba interfejsów.
                                      • Większa pracochłonność podczas tworzenia oprogramowania.

                                      Przykład

                                      • Interfejs Zwierzę ma metodę Biegnij. Ten interfejs implementuje klasa Pies i Ryba. W klasie Ryba metoda Biegnij jest zbędna.
                                      • Interfejs File ma dwie metody: Zapisz i Czytaj. Klasa PlikTylkoDoOdczytu implementuje ten interfejs i w metodzie Zapisz nie zapisuje nic do pliku, ponieważ nie może — jest to przecież plik tylko do odczytu.

                                      Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                        Źródła

                                        Obraz główny

                                        Materiały

                                        L jak Liskov Substitution Principle, czyli zasada podstawień Barbary Liskov

                                        przez Karol Bocian | 19 stycznia, 2021

                                        Liskov Substitution Principle — zasada podstawień Barbary Liskov

                                        Oprogramowanie powinno dobrze działać, gdy w miejsce klasy bazowej podstawimy jej którąkolwiek klasę potomną. Wymagana jest pełna zgodność interfejsu oraz metod. Projektując hierarchię klas, należy zrobić to tak, aby każda klasa pochodna mogła wykorzystywać wszystkie metody klasy bazowej bez konieczności ich przesłaniania. Metody klas pochodnych powinny najwyżej rozszerzać działanie metod z klasy bazowej (wywołując je w swojej implementacji). Dziedziczenie należy wykonać tak, aby klasa pochodna wykorzystała wszystkie metody implementowanej klasy bazowej.

                                        Regułę tę można stosować do metod, funkcji, klas, modułów oraz pakietów.

                                        Zalety

                                        • Czytelniejszy i łatwiejszy w utrzymaniu kod.
                                        • Możliwość podstawienia dowolnej klasy pochodnej w miejsce klasy bazowej bez obaw, że program źle zadziała.
                                        • Mniej zależności w kodzie — obsługiwanie kolekcji obiektów danego typu bazowego nie wymaga sprawdzania, czy dany typ jest specjalnym typem i należy potraktować go inaczej.

                                        Wady

                                        • Konieczność lepszego przemyślenia struktury klas i ich dziedziczenia.

                                        Przykład

                                        • Kwadrat dziedziczący z klasy Prostokąt — metoda liczenia pola powierzchni jest nadpisana w kwadracie. Zasada Liskov jest złamana.
                                        • Ryba dziedzicząca po klasie Zwierzę, gdzie Klasa Zwierzę ma metodę Biegnij. Ryba oczywiście nie biega. Zasada Liskov jest złamana.
                                        • Klasa PlikTylkoDoOdczytu i PlikDoZapisuIOdczytu, dziedzicząca po klasie Plik. Klasa Plik ma metody Czytaj i Zapisuj. W klasie PlikTylkoDoOdczytu metoda Zapisuj nie będzie robiła tego, czego od niej oczekujemy, ponieważ nie można zapisać nic do pliku tylko do odczytu.

                                        Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                          Źródła

                                          Obraz główny

                                          Materiały

                                          My robimy to inaczej! Opowieść o tym, jak organizacje powstają i upadają, by móc odrodzić się na nowo – J. Kotter, H. Rathgeber

                                          przez Karol Bocian | 3 lipca, 2020

                                          Przeczytałem ostatnio kolejną książkę. W tym wpisie dzielę się informacjami, które w niej znalazłem oraz które wdrożyłem w swoim życiu. Staram się z każdej książki wdrażać minimum jedną rzecz.

                                          Wdrożyłem:

                                          Staram się patrzeć na problemy, jak na wyzwania, okazje i szanse.

                                          Książkę możesz kupić tutaj:

                                          Notatki:

                                          Proces tworzenia organizacji łączącej zwinność oraz zarządzanie

                                          1. Twórz poczucie pilności.
                                          2. Buduj koalicję pilotującą.
                                          3. Kształtuj wizję strategiczną i inicjatywy.
                                          4. Werbuj armię wolontariuszy.
                                          5. Umożliwiaj działanie poprzez usuwanie przeszkód.
                                          6. Generuj krótkoterminowe zwycięstwa.
                                          7. Podtrzymuj przyspieszanie.
                                          8. Wprowadzaj zmianę.

                                          Pozostałe myśli:

                                          • Wszystkie poziomy organizacji muszą być otwarte na zmianę, innowację i usprawnienia.
                                          • Procedury i rutyna zmniejszają chaos i pośpiech.
                                          • Problem nazywaj szansą, okazją lub wyzwaniem.
                                          • Przydzielaj odpowiedzialności i decyzyjność za sprecyzowane obszary zespołom z naturalnym liderem, który ma ostateczne słowo.
                                          • Proces znajdowania najlepszego rozwiązania: zbierz pomysły, odsiej najlepsze, przedyskutuj ich wady i zalety, zminimalizuj ich wady i wzmocnij zalety, wybierz jeden i wdróż go.
                                          • Zespoły powinny być przyjazne i wspierające. Powinny wspólnie walczyć z przeciwnościami, a nie z sobą samym.
                                          • Zrób coś dobrego dla innych, możliwe, że oni się odwdzięczą, a z pewnością, będzie im żyło się lepiej.
                                          • Korzystaj z PDCA — Plan, Do, Check, Act (wymyśl, zrób, sprawdź, wdróż).
                                          • Zarządzanie pozwala rzetelnie i dobrze wykonywać pracę. Przywództwo pozwala dodać energii i przezwyciężyć problem.
                                          • Twórz organizacje, które mają zrównoważone przywództwo i zarządzanie, a przez to są: innowacyjne, łatwo adaptujące się, zwinne, energiczne oraz dobrze zorganizowane i rzetelne.

                                          Książkę możesz kupić tutaj:

                                          Wszystkie posty związane z książkowymi wdrożeniami:

                                            Źródła

                                            Obraz główny

                                            Materiały

                                            • My robimy to inaczej! Opowieść o tym, jak organizacje powstają i upadają, by móc odrodzić się na nowo – J. Kotter, H. Rathgeber

                                            Linki oznaczone (*) są linkami afiliacyjnymi. Jeżeli uważasz, że czerpiesz korzyści z mojej pracy, to kup coś korzystając z powyższego linku. Sprawi to, że dostanę prowizję z afiliacji.

                                            O jak Open-closed principle, czyli zasada otwarte/zamknięte

                                            przez Karol Bocian | 7 lutego, 2020

                                            Open-closed principle — Zasada otwarte/zamknięte

                                            Każdy składnik oprogramowania powinien być otwarty na rozszerzenia i zamknięty na modyfikacje.

                                            Dotyka ona dwóch zagadnień:

                                            1. Zagadnienie otwarte — Składniki powinny być stworzone w sposób umożliwiający łatwe rozszerzenie ich zachowania. Zmiana ich zachowania nie wymaga zmiany istniejącego kodu, lecz dopisanie nowego.
                                            2. Zagadnienie zamknięte — Modyfikacja zachowania nie powinna wiązać się ze zmianą już istniejącego kodu.

                                            Regułę tę można stosować do metod, funkcji, klas, modułów oraz pakietów. Do jej stosowania wykorzystuje się zasadę Pojedynczej odpowiedzialności oraz regułę odwróconych zależności.

                                            Zalety

                                            • Większa elastyczność.
                                            • Ponowne wykorzystywanie kodu.
                                            • Łatwiejsze utrzymanie oprogramowania.
                                            • Łatwiejsza rozbudowa systemu.
                                            • Zapewnianie wstecznej kompatybilności.

                                            Wady

                                            • Duża trudność i pracochłonność podczas tworzenia oprogramowania.

                                            Przykład

                                            • Kalkulator liczący powierzchnię figur iteruje po liście obiektów implementujących interfejs IFigure, zamiast korzystania z switcha rozróżniającego po typie każdą klasę.
                                            • Generatory raportów generujący raport implementujący interfejs IReportGenerator, którego można wstrzykiwać w klientów w zależności, jaki raport chcą (Pdf, Html).

                                            Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                              Źródła

                                              Obraz główny

                                              Materiały

                                              S jak Single responsibility principle, czyli zasada jednej odpowiedzialności

                                              przez Karol Bocian | 7 lutego, 2020

                                              Single responsibility principle — Zasada jednej odpowiedzialności

                                              Każda klasa powinna mieć tylko jeden powód do zmiany.

                                              Zgodnie z tą zasadą, każda klasa powinna:

                                              • Tylko jeden cel istnienia.
                                              • Tylko jedną odpowiedzialność.
                                              • Tylko jedno zadanie do wykonania.
                                              • Tylko jeden powód do modyfikacji.

                                              Regułę tę można stosować do metod, funkcji, klas, modułów oraz pakietów.

                                              Zalety

                                              • Czytelniejszy kod.
                                              • Łatwiejsze do zrozumienia.
                                              • Brak klas-bogów — klas, które robią wszystko (albo bardzo dużo) i są zmieniane przy prawie każdej zmianie w oprogramowaniu.
                                              • Łatwiejsze modyfikowanie i utrzymywanie oprogramowania.
                                              • Mała zmiana oprogramowania dotyka tylko jednej klasy.
                                              • Modyfikacja dotyka tylko obszaru, który chcemy zmienić. Nie dotyka innych obszarów.
                                              • Mniejsza podatność na błędy.

                                              Wady

                                              • Dużo klas.

                                              Przykład

                                              1. Walidator adresu e-mail w oddzielnej klasie, a nie w klasie z danymi użytkownika.
                                              2. Walidator numeru telefonu w oddzielnej klasie, a nie w klasie z danymi użytkownika.
                                              3. Klasa zapisująca dane w bazie danych w oddzielnej klasie, a nie w klasie z tymi danymi.
                                              4. Klasa przechowująca adres oddzielona od klasy z firmą, pracownikiem, klientem.

                                              Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                                Źródła

                                                Obraz główny

                                                Materiały

                                                SOLID

                                                przez Karol Bocian | 7 lutego, 2020

                                                SOLID

                                                SOLID jest podstawowym pojęciem w programowaniu obiektowym. Został przedstawiony przez Roberta C. Martina, który zebrał 5 zasad w skrót SOLID. Jest to akronim 5 zasad dobrego programowania obiektowego:

                                                • Single responsibility principle – Zasada jednej odpowiedzialności.
                                                • Open/closed principle – Zasada otwarte-zamknięte.
                                                • Liskov substitution principle – Zasada podstawienia Liskov.
                                                • Interface segregation principle – Zasada segregacji interfejsów.
                                                • Dependency inversion principle – Zasada odwróconej zależności.

                                                Single responsibility principle – Zasada jednej odpowiedzialności

                                                Każda klasa powinna mieć tylko jedną odpowiedzialność (czyli tylko jeden powód do modyfikacji klasy) – jeden cel istnienia.

                                                Open/closed principle – Zasada otwarte-zamknięte

                                                Wszystkie klasy powinny być otwarte na rozszerzenia, ale zamknięte na modyfikacje.

                                                Liskov substitution principle – Zasada podstawienia Liskov

                                                Oprogramowanie powinno dobrze działać, gdy w miejsce klasy bazowej podstawimy jej którąkolwiek klasę potomną.

                                                Interface segregation principle – Zasada segregacji interfejsów

                                                Wiele dedykowanych i małych interfejsów jest lepsze niż jeden ogólny.

                                                Dependency inversion principle – Zasada odwróconej zależności

                                                Wysokopoziomowe moduły nie powinny zależeć od modułów niskopoziomowych, lecz zależność powinna wynikać z abstrakcji.

                                                Zalety

                                                • Większa czytelność kodu.
                                                • Wyższa jakość kodu.
                                                • Tańsze utrzymywanie.
                                                • Mniej błędów podczas rozwoju.
                                                • Łatwiejsze testowanie.
                                                • Łatwiejsze rozwijanie kodu.
                                                • Brak klas-bogów.

                                                Wady

                                                • Większa pracochłonność podczas tworzenia kodu.

                                                Podsumowanie

                                                Stosuj zasady SOLID wszędzie tam, gdzie możesz. Są to najlepsze praktyki, jakie możesz wykorzystać. W wyjątkowych sytuacjach pozwalaj sobie na odejście od tych reguł, na rzecz szybszego napisania aplikacji. Postaraj się, łamiąc zasady SOLID, napisać i tak w miarę dobry kod.

                                                Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                                  Źródła

                                                  Obraz główny

                                                  Materiały

                                                  Początek mini projektu: Poznaj zasady SOLID i OOP

                                                  przez Karol Bocian | 13 stycznia, 2024

                                                  Część!

                                                  Cele i ramy czasowe

                                                  Rozpoczynam dziś nowy mini projekt. Codziennie przez najbliższy miesiąc będę poświęcał na ten projekt 1 godzinę. Jego celem jest poprawienie swojej znajomości zasad SOLID i OOP, czyli podstaw związanych z dobrym programowaniem w jakimkolwiek języku obiektowym.

                                                  Dlaczego 1 miesiąc? Dlaczego 1 godzina dziennie?

                                                  Słyszałem, że wystarczy przez 3 miesiące poświęcać danej tematyce 20 minut dziennie, czyli poświęcić 90 * 20 min. = 1800 minut, czyli 30 godzin, aby zostać zaawansowanym amatorem. Ja wolałem przeznaczyć po jednej godzinie w jednym miesiącu, aby rozwinąć swoje umiejętności. Luty ma w tym roku 29 dni. Chcę mieć jeden wolny dzień w tym miesiącu od nauki, więc ten projekt będzie trwał 28 dni.

                                                  Zadania — priorytety

                                                  Wypisałem zadania, które mam wykonać w ramach tego projektu oraz przydzieliłem im priorytety. Skorzystałem z metody MoSCoW (opisanej m.in. tutaj: https://kierownikprojektu.com/2016/09/05/jak-okreslic-co-jest-wazne-moscow/). Won’ty (Would have) potraktowałem jako coś, co byłoby fajnie zrobić, jeżeli wszystko inne zostanie zrobione, a zostanie mi jeszcze na to czas.

                                                  Musty

                                                  Moimi najważniejszymi zadaniami jest nauczenie się zasad SOLID i OOP, przećwiczenie ich (programując) oraz opublikowanie tych postów.

                                                  Shouldy

                                                  Jeżeli będę miał odpowiednio dużo czasu, to zrobię kurs mailowy: Poznaj Zasady SOLID i OOP.

                                                  Couldy

                                                  W ramach tego priorytetu zaplanowałem poznanie innych pojęć: DRY, KISS,OOP, LoD, SLAP, Composition Over Inheritance, Encapsulate What Changes.

                                                  Won’ty (Would have)

                                                  Jeżeli niespodziewanie zostanie mi jeszcze trochę czasu, to… nie planowałem żadnych zadań o tym priorytecie.

                                                  W skrócie

                                                  Mój projekt rozpisałem w niezawodnym Excelu i wygląda następująco:

                                                  Do usłyszenia!

                                                  Źródła

                                                  Obraz główny

                                                  Obrazy

                                                  • praca własna

                                                  Materiały

                                                  Wszystkie posty związane z mini projektem: Poznaj zasady SOLID i OOP:

                                                    Mini kurs: Nauka nowoczesnego uczenia się – Zapisz się!

                                                    przez Karol Bocian | 13 stycznia, 2024

                                                    Cześć, zapraszam Cię do zapisania się na mini kurs Nauki nowoczesnego uczenia się. W grudniu 2019 roku zdecydowałem się, że chcę poprawić swoje umiejętności uczenia się. Wziąłem więc książki do ręki i codziennie przez 30 dni pracowałem z nimi.

                                                    W ramach mojej nauki napisałem posty na blogu oraz przygotowałem kilka testów, które pomagają zapamiętać zdobywaną wiedzę. Wszystkie te testy i posty zebrałem w jednym miejscu. W prezentowanym Tobie mini kursie Nauki nowoczesnego uczenia się.

                                                    Obrazek nagłówka

                                                    Podsumowanie projektu: Nauka nowoczesnego uczenia się

                                                    przez Karol Bocian | 7 lutego, 2020

                                                    Dzisiaj zakończyłem mój pierwszy mini projekt. Pora zatem na podsumowanie.

                                                    Cel projektu

                                                    Poprawienie umiejętności uczenia się — cel został osiągnięty. Świadczą o tym zaliczone testy:

                                                    Poznałem kilka technik, zwiększyłem moją świadomość w tym obszarze, znalazłem trochę materiałów, które kiedyś wykorzystam, aby pogłębić moją wiedzę w tej dziedzinie (np. https://www.coursera.org/learn/learning-how-to-learn).

                                                    Trójkąt projektu

                                                    Projekt składa się z trzech elementów (wg teorii trójką projektu): czas, pieniądze i zakres. Omawiam je poniżej.

                                                    Budżet

                                                    Budżet projektu był 0 zł (oprócz kosztu prądu) i taki udało się zachować. Materiały, z których skorzystałem, były darmowe lub pożyczone.

                                                    Planowałem wykorzystać 30 godzin mojego czasu wolnego. Niestety, przekroczyłem ten termin. Zgłębienie niektórych obszarów wymagało więcej czasu (najdłużej zeszło mi się z postem: https://karolbocian.pl/blog/2019/12/14/metanauka-proces-dsss/). Czasochłonne było również tworzenie platformy do dzielenia się z Wami wiedzą, m.in. robienie testów (znalezienie wtyczki, poznanie jej, etc.). Nie policzyłem, ile dokładnie czasu poświęciłem na ten projekt, szacuję, że jest to około 40 godzin.

                                                    Czas

                                                    Projekt realizowałem przez 30 dni. Niestety, nie robiłem go przez 30 z rzędu. Wynika to ze złego planowania. Nie wziąłem pod uwagę: świat, przygotowań do świąt, urlopu.

                                                    Zakres

                                                    Stan zadań wygląda następująco:

                                                    MOSCOW

                                                    L. zadań

                                                    L. zrobionych zadań

                                                    L. zadań do zrobienia

                                                    Must

                                                    54

                                                    54

                                                    0

                                                    Should

                                                    17

                                                    17

                                                    0

                                                    Could

                                                    59

                                                    47

                                                    12

                                                    Won’t

                                                    3

                                                    0

                                                    3

                                                    Razem

                                                    133

                                                    118

                                                    15

                                                    Zrobiłem wszystkie zadania typu: Must i Should. Nie wykonałem kilku Couldów oraz wszystkich Won’tów. Co to znaczy? To znaczy, że zrobiłem wszystkie najważniejsze rzeczy, a nie zrobiłem mniej ważnych. Nie zrobiłem takich rzeczy jak: testy i powtórki, metody Tima Ferrisa oraz kursu mailowego.

                                                    Ocena

                                                    Jestem zadowolony z tego projektu. Nauczyłem się kilku rzeczy, znalazłem czas na rozwijanie swoich umiejętności. Rozpocząłem również tworzenie platformy i systemu mojego osobistego rozwoju. A jaka jest Wasza ocena tego projektu?

                                                    Najważniejsze osiągnięcia

                                                    Za najważniejsze osiągnięcia związane z tym projektem uważam:

                                                    Przemyślenia

                                                    • Ciężko jest codziennie przez 30 dni pracować nad jednym tematem w ograniczonym czasie 1 godziny. Potrzebne są dni wolne albo dni, gdy nie trzeba się tak spieszyć.
                                                    • Należy planować przerwy — takimi przerwami mogą być posty typu: początek projektu, podsumowanie przebiegu (w połowie projektu) oraz podsumowanie projektu.
                                                    • Na niektóre tematy trzeba poświęcić sporo czasu, jeżeli chce się je dobrze poznać oraz dobrze przekazać.
                                                    • Szablony i automatyzacja znacznie upraszczają pracę. Docenia się je najbardziej, gdy wykonuje się w miarę powtarzalną pracę bardzo często. Bardzo pomocne było dla mnie stworzenie w przeglądarce folderu ze wszystkimi linkami potrzebnymi mi do napisania nowego posta: plan projektu, dysk Google z postami, WordPress, portal z darmowymi zdjęciami, LinkedIn, Facebook.

                                                    Plany na przyszłość

                                                    Przygotowania

                                                    Najbliższe kilkanaście dni chcę poświęcić na poprawienie platformy bloga: poprawienie polityki prywatności, zwiększenie automatyzacji, poprawa zakładek, umożliwienie zapisywania się na newsletter, ułatwienie robienia kursu mailowego.

                                                    Rozwój

                                                    W kolejnych miesiącach będę na przemian rozwijał się w następujących tematach:

                                                    • stawanie się ekspertem w obszarze IT i programowania (w ramach projektu: 4 Tygodniowy Ekspert IT),
                                                    • stawanie się ekspertem w obszarze zarządzania (w ramach projektu: 4 Tygodniowy Ekspert Zarządzania),
                                                    • stawanie się zaawansowanym amatorem w różnych obszarach (nie zawsze amatorem :)) np. szybkie czytanie, sprzedawanie, efektywne komunikowanie (w ramach projektu: 4 Tygodniowy Zaawansowany Amator).

                                                    Koniec

                                                    Projekt zakończony. Pora na głęboki oddech, chwilę wytchnienia, aby jutro wrócić do pracy. Jedyne, czego potrzebuję na przyszłość, to 48-godzinnej doby, albo zmiany priorytetów. 🙂

                                                    Wszystkie posty związane z moim pierwszym mini projektem: Nauka nowoczesnego uczenia się:

                                                      Źródła

                                                      Obrazek nagłówka

                                                      Obrazki

                                                      Feedly

                                                      przez Karol Bocian | 1 maja, 2020

                                                      Feedly to czytnik rss — program umożliwiający śledzenie blogów i czytanie tylko nowych postów. Używam go codziennie.

                                                      Możesz do niego dodać wszystkie blogi, na których chcesz regularnie czytać nowe posty. Robisz to w łatwy sposób:

                                                      1. Dodajesz blogi do śledzenia.
                                                      2. Przeglądasz tylko nowe i jeszcze nieprzeczytane posty (skrót: przycisk j na klawiaturze — następny post, przycisk k — poprzedni post).
                                                      3. Zapisujesz ciekawe posty do przeczytania później (przycisk s) lub otwierasz je w nowej zakładce.

                                                      W ustawieniach Feedly warto ustawić, aby wyświetlały się tylko nieprzeczytane wiadomości. Konto można założyć za pomocą konta Google. Jedno konto można wykorzystywać na wielu urządzeniach, dzięki czemu nie czytamy kilkukrotnie tych samych nagłówków postów. Blogi można grupować w stworzone przez siebie kategorie, aby w innym czasie sprawdzić nowe posty z danej kategorii. Można też zapisywać przeczytane posty, w celu gromadzenia ciekawych materiałów.

                                                      Narzędzie to pozwala być na bieżąco ze wszystkimi interesującymi nas treściami (bez konieczności wchodzenia na wszystkie te blogi), zapisywać ciekawe blogi oraz posty do przeczytania później.

                                                      Adres: https://feedly.com/

                                                      Tutorial video

                                                      Wszystkie posty związane z narzędziami:

                                                        Źródła

                                                        Obraz główny

                                                        Obrazy

                                                        • produkcja własna

                                                        Materiały

                                                        Mapa myśli – powtórka

                                                        przez Karol Bocian | 8 lutego, 2020

                                                        Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                        Przeczytaj jeszcze raz tekst: https://karolbocian.pl/blog/2020/01/04/mapy-mysli/

                                                        Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                        0%
                                                        5
                                                        Utworzono Przez Karol Bocian

                                                        Test - Mapy myśli

                                                        Cześć!
                                                        Podaj proszę swoje imię i e-mail.
                                                        Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                        1 / 4

                                                        Jakie są zalety mapy myśli?

                                                        2 / 4

                                                        Do czego można wykorzystać mapę myśli?

                                                        3 / 4

                                                        Czym jest mapa myśli?

                                                        4 / 4

                                                        Z czego składa się mapa myśli?

                                                        Twój wynik to

                                                        Średni wynik to 40%

                                                        0%

                                                         

                                                        Źródła

                                                        Obrazek nagłówka

                                                        Mapy myśli

                                                        przez Karol Bocian | 7 lutego, 2020

                                                        Co to jest mapa myśli?

                                                        Mapa myśli jest to narzędzie umożliwiające efektywne notowanie. Notatka jest w formie graficznej: na środku jest temat główny, który uszczegóławiany jest w kilku perspektywach za pomocą rysowania od niego gałęzi uszczegóławiających.

                                                        Do czego wykorzystać mapę myśli?

                                                        Mapę myśli wykorzystuje się głównie do notowania i strukturyzowania wiedzy. Pozwala ona poprawić:

                                                        • notowanie,
                                                        • zapamiętywanie,
                                                        • przypominanie,
                                                        • rozumienie (poznawanego materiału),
                                                        • sposób znajdowania rozwiązania problemu.

                                                        Jak wygląda mapa myśli?

                                                        Więcej przykładów: https://www.google.com/search?rlz=1C1GCEA_enPL871PL871&biw=2048&bih=1050&tbm=isch&sa=1&ei=orkQXozMDcTDmwWGgaT4Bw&q=mind+maps

                                                        Jak zrobić mapę myśli?

                                                        • Weź kartkę i kolorowe flamastry i zacznij rysować.
                                                        • Użyj programu na komputerze, np. XMind.

                                                        Z czego składa się mapa myśli?

                                                        • Słów kluczowych.
                                                        • Połączeń (linie).
                                                        • Obrazków i grafik.
                                                        • Kolorów (czcionek, linii, obrazków, grafik).
                                                        • Struktur (grupowań).
                                                        • Relacji.
                                                        • Skojarzeń.

                                                        Na czym skupić się podczas robienia mapy myśli?

                                                        Należy skupić się na znalezieniu odpowiednich słów kluczowych, ułożeniu ich w odpowiedniej hierarchii, wykorzystaniu grafik, kolorów i skojarzeń oraz podkreśleniu najważniejszych elementów.

                                                        Skup się na: przejrzystości i byciu kreatywnym.

                                                        Jakie są zalety mapy myśli?

                                                        • Stymulacja całego mózgu.
                                                        • Wykorzystanie kolorów i obrazów.
                                                        • Graficzna forma zapisu wiedzy.
                                                        • Łatwe przedstawienie zależności.
                                                        • Upraszczanie i minimalizowanie informacji (poprzez słowa kluczowe).
                                                        • Stymulacja wyobraźni.
                                                        • Pobudzają kreatywność.
                                                        • Organizują wiedzę.

                                                        Jakie są wady mapy myśli?

                                                        Wymaga bycia kreatywnym i schludnym oraz zaangażowania się w proces tworzenia mapy myśli.

                                                        Jakie błędy można popełnić robiąc mapę myśli?

                                                        • Za dużo informacji.
                                                        • Używanie zdań i równoważników zamiast słów kluczowych.
                                                        • Nieczytelność.
                                                        • Brak logicznego podziału wiedzy.
                                                        • Zapisanie błędnie informacji (nawet najlepiej zrobiona mapa myśli, która zawiera niepoprawne informacje, jest zła).

                                                        Co dalej?

                                                        Teraz należy wykorzystać wiedzę w praktyce i zacząć robić mapy myśli. Praktyka czyni mistrza 🙂

                                                        Polecam do obejrzenia jeszcze te filmiki:

                                                        Wszystkie posty o mapach myśli:

                                                          Źródła

                                                          Obrazek nagłówka

                                                          • praca własna

                                                          Obrazki

                                                          Metody skutecznego uczenia się – powtórka szczegółowa

                                                          przez Karol Bocian | 8 lutego, 2020

                                                          Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                          Przeczytaj jeszcze raz tekst: Metody skutecznego uczenia się

                                                          Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu (zawiera 10 losowych pytań ze wszystkich pytań o metodach skutecznego uczenia się).

                                                          Ten test jest naprawdę ciężki!!!

                                                          0%
                                                          3
                                                          Utworzono Przez Karol Bocian

                                                          Test - Metody skutecznego uczenia się w szczegółach

                                                          Ten test zawiera 10 losowych pytań ze wszystkich pytań o metodach skutecznego uczenia się. Powodzenia!

                                                          Cześć!
                                                          Podaj proszę swoje imię i e-mail.
                                                          Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                          1 / 10

                                                          Czy powtarzać cały materiał w metodzie Tancerki?

                                                          2 / 10

                                                          W jaki sposób przerabiać materiał metodą Majstersztyku?

                                                          3 / 10

                                                          Jaka muzyka i jakie dźwięki, zgodnie z metodą Zmiany miejsca, są najlepsze do nauki?

                                                          4 / 10

                                                          Jaki rodzaj wiedzy najlepiej jest przyswajać rano?

                                                          5 / 10

                                                          Do czego można zastostować metodę Tancerki?

                                                          6 / 10

                                                          Do czego można stosować metodę Testu zderzeniowego?

                                                          7 / 10

                                                          Na czym polega metoda Walenia?

                                                          8 / 10

                                                          W nauce czego dobrze jest wykorzystać metodę Terminatora?

                                                          9 / 10

                                                          Czy robić przerwę podczas nauki metodą Fiszek?

                                                          10 / 10

                                                          Na czym polega mimowolne uczenie się w metodzie Imersji?

                                                          Twój wynik to

                                                          Średni wynik to 67%

                                                          0%

                                                          Dzień 5 – ostatni – Nauka rysowania map myśli

                                                          przez Karol Bocian | 7 lutego, 2020

                                                          Plan nauki

                                                          Plan dnia (opisany w poście: https://karolbocian.pl/blog/2019/12/30/nowa-umiejetnosc/) został zaktualizowany. Usunąłem naukę właściwą, ponieważ wczoraj obejrzałem cały materiał zaplanowany również na dzisiaj. Czas ten przeznaczę na napisanie postu zbierającego moją wiedzę o mapach myśli, do którego będę mógł wracać co jakiś czas (pojawi się jutro).

                                                          Dzień

                                                          Czas (minuty)

                                                          Temat

                                                          5 (2020-01-04)

                                                          0-5

                                                          Powtórka materiału

                                                           

                                                          5-8

                                                          Plan nauki na dzisiaj

                                                           

                                                          8-29

                                                          Nauka właściwa -> Podsumowanie nauki

                                                           

                                                          29-30

                                                          Przerwa na taniec

                                                           

                                                          30-60

                                                          Podsumowanie nauki

                                                          Do odmierzania czasu kolejnych etapów używam narzędzia: https://www.timeanddate.com/timer/

                                                          Przebieg nauki

                                                          Temat 1 – Powtórka materiału

                                                          Mapy myśli są narzędziem umożliwiającym:

                                                          • robienie dobrych notatek,
                                                          • poprawienie zapamiętywania materiału,
                                                          • poprawienie zrozumienia materiału,
                                                          • rozwiązywanie problemów (np. z wykorzystaniem burzy mózgów).

                                                          Mapy myśli opierają się na graficznej reprezentacji wiedzy. Wykorzystują: relacje, obrazy, kolory, grupowanie, łączenie, podkreślanie, słowa kluczowe, filtrowanie informacji.

                                                          Temat 2 – Podsumowanie nauki

                                                          Przez 5 dni uczyłem się z różnych źródeł o mapach myśli. W zagadnieniu map myśli ważne są dwie rzeczy: teoria i praktyka.

                                                          Wiedza teoretyczna

                                                          1. Jak zrobić mapę myśli.
                                                          2. Z jakich elementów składa się mapa myśli.
                                                          3. Jakich błędów wystrzegać się podczas robienia mapy myśli.
                                                          4. Jakie są wady i zalety mapy myśli.
                                                          5. Do czego można wykorzystać mapę myśli.
                                                          6. Na czym przede wszystkim skupiać się robiąc mapę myśli.

                                                          Zdobytą przeze mnie wiedzę o mapach myśli zamieściłem w tym wpisie: Mapy myśli – https://karolbocian.pl/blog/2020/01/04/mapy-mysli/ (dostępne od jutra).

                                                           Polecam jeszcze te dwa filmiki:

                                                          Praktyka

                                                          Nauczenie się robienia dobrze map myśli wymaga praktyki (podobno trzeba zrobić minimum 30-50 map myśli). Nie da się dowiedzieć z książek, co najlepiej zadziała na nas i które słowa kluczowe są dla nas najlepsze. Trzeba to ćwiczyć: dobór grafik i kolorów, rozmieszczenie elementów, wybór słów kluczowych, tworzenie struktur, relacji i połączeń.

                                                          Podsumowując, jeżeli chcesz zostać mistrzem (albo przynajmniej być coraz lepszym) w robieniu map myśli (albo czegokolwiek innego) regularnie poszerzaj swoją wiedzę teoretyczną oraz bardzo dużo praktykuj!

                                                          Źródła

                                                          Obrazek nagłówka

                                                          Obrazki

                                                          Metoda Nauczyciela – powtórka

                                                          przez Karol Bocian | 8 lutego, 2020

                                                          Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                          Przeczytaj jeszcze raz tekst: Metoda Nauczyciela

                                                          Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                          0%
                                                          2
                                                          Utworzono Przez Karol Bocian

                                                          Test - Metoda Nauczyciela

                                                          Cześć!
                                                          Podaj proszę swoje imię i e-mail.
                                                          Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                          1 / 3

                                                          Kogo można uczyć wykorzystując w metodzie Nauczyciela?

                                                          2 / 3

                                                          Na czym polega metoda Nauczyciela?

                                                          3 / 3

                                                          Co należy robić podczas uczenia się metodą Nauczyciela?

                                                          Twój wynik to

                                                          Średni wynik to 100%

                                                          0%

                                                          Dzień 4 – Nauka rysowania map myśli z Tonym Buzanem

                                                          przez Karol Bocian | 7 lutego, 2020

                                                          Plan nauki

                                                          Plan dnia (opisany w poście: https://karolbocian.pl/blog/2019/12/30/nowa-umiejetnosc/):

                                                          Dzień

                                                          Czas (minuty)

                                                          Temat

                                                          4 (2020-01-03)

                                                          0-5

                                                          Powtórka materiału

                                                           

                                                          5-8

                                                          Plan nauki na dzisiaj

                                                           

                                                          8-29

                                                          Nauka właściwa

                                                           

                                                          29-30

                                                          Przerwa na taniec

                                                           

                                                          30-55

                                                          Nauka właściwa

                                                           

                                                          55-60

                                                          Podsumowanie nauki

                                                          Do odmierzania czasu kolejnych etapów używam narzędzia: https://www.timeanddate.com/timer/

                                                          Przebieg nauki

                                                          Temat 1 – Powtórka materiału

                                                          Mapy myśli są świetnym narzędziem umożliwiającym notowanie. Wykorzystują kolory, obrazy, relacje, połączenia, wyróżnienia, struktury i słowa kluczowe. Pobudzają cały umysł. Robi się je umieszczając w centrum obszaru roboczego temat główny, a potem od niego rysuje się linie, na których końcach są podtematy itd. Do rysowania map myśli można wykorzystać program XMind.

                                                          Temat 2 – Plan nauki na dzisiaj

                                                          Plan tematów do nauki dzisiaj (opisany w poście: https://karolbocian.pl/blog/2019/12/31/dzien-1-nauka-rysowania-map-mysli/)

                                                          Materiał

                                                          Link

                                                          Dzień

                                                          Wariacje

                                                          Film na YouTube o mapach myśli

                                                          https://www.youtube.com/watch?v=0VtFjHXCOKg

                                                          4 (2020-01-03)

                                                          Zmiana bodźca — jeden długi film od tego samego autora

                                                          Temat 3 – Nauka właściwa

                                                          Tony Buzan jest jednym z twórców metody Mapy myśli, dlatego obejrzałem również jego wykład (pierwsze minuty wykładu to budowanie relacji z publicznością, więc lepiej jest zacząć naukę od 11 minuty: https://www.youtube.com/watch?v=0VtFjHXCOKg&feature=youtu.be&t=650, rada druga: można oglądać z przyspieszeniem x2).

                                                          Z wykładu nie nauczyłem się zbyt wiele nowego, moje notatki z wykładu przedstawia poniższa mapa myśli.

                                                          Ciekawa myśl z tego szkolenia: nosić ze sobą kilka kolorowych długopisów i zawsze korzystać z różnych kolorów.

                                                           

                                                          Temat 4 – Podsumowanie nauki

                                                          Mapy myśli są przydatnymi narzędziami. Oprócz nich warto również korzystać z kolorów, obrazów i przedstawiać relacje między różnymi informacjami.

                                                          Źródła

                                                          Obrazek nagłówka

                                                          Obrazki

                                                          Metoda Imersji – powtórka

                                                          przez Karol Bocian | 8 lutego, 2020

                                                          Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                          Przeczytaj jeszcze raz tekst: Metoda Imersji

                                                          Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                          /2
                                                          4
                                                          Utworzono Przez Karol Bocian

                                                          Test - Metoda Imersji

                                                          Cześć!
                                                          Podaj proszę swoje imię i e-mail.
                                                          Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                          1 / 2

                                                          Na czym polega mimowolne uczenie się w metodzie Imersji?

                                                          2 / 2

                                                          Na czym polega metoda Imersji?

                                                          Twój wynik to

                                                          Średni wynik to 50%

                                                          0%

                                                          Dzień 3 – Nauka rysowania map myśli

                                                          przez Karol Bocian | 7 lutego, 2020

                                                          Plan nauki

                                                          Plan dnia (opisany w poście: https://karolbocian.pl/blog/2019/12/30/nowa-umiejetnosc/):

                                                          Dzień

                                                          Czas (minuty)

                                                          Temat

                                                          3 (2020-01-02)

                                                          0-5

                                                          Powtórka materiału

                                                           

                                                          5-8

                                                          Plan nauki na dzisiaj

                                                           

                                                          8-29

                                                          Nauka właściwa

                                                           

                                                          29-30

                                                          Przerwa na taniec

                                                           

                                                          30-55

                                                          Nauka właściwa

                                                           

                                                          55-60

                                                          Podsumowanie nauki

                                                          Do odmierzania czasu kolejnych etapów używam narzędzia: https://www.timeanddate.com/timer/

                                                          Przebieg nauki

                                                          Temat 1 – Powtórka materiału

                                                          Mapy myśli służą do robienia kreatywnych notatek. Ich przewagą nad zwykłymi notatkami jest pobudzanie całego mózgu (słowa kluczowe, kolory, obrazy, relacje) oraz uszczegóławianie tematu. Program XMind pozwala w łatwy sposób robić mapy myśli. Umożliwia: grupowanie węzłów, tworzenie relacji, ukrywanie szczegółów, robienie różnych struktur, np. organizacji.

                                                          Temat 2 – Plan nauki na dzisiaj

                                                          Plan tematów do nauki dzisiaj (opisany w poście: https://karolbocian.pl/blog/2019/12/31/dzien-1-nauka-rysowania-map-mysli/)

                                                          Materiał

                                                          Link

                                                          Dzień

                                                          Wariacje

                                                          Filmy na YouTube o mapach myśli

                                                          1. https://www.youtube.com/watch?v=7ignqjhLF3s
                                                          2. https://www.youtube.com/watch?v=8BgkWIEeX-M
                                                          3. https://www.youtube.com/watch?v=kECHj8g6_fU
                                                          4. https://www.youtube.com/watch?v=ONzWAq0NVfE
                                                          5. https://www.youtube.com/watch?v=3RPR7hwQwZw
                                                          6. https://www.youtube.com/watch?v=l60G4yuikK0
                                                          7. https://www.youtube.com/watch?v=ZpvruFwRQR0
                                                          8. https://www.youtube.com/watch?v=fYNTaKyaGHc

                                                          3 (2020-01-02)

                                                          Zmiana bodźca — praca na kartce w innym pomieszczeniu (metoda Zmiany miejsca). Obejrzę wiele filmików różnych autorów (Metoda Króla boksu).

                                                          Temat 3 – Nauka właściwa

                                                          Obejrzałem wszystkie filmiki z mojego planu. Polecam szczególnie te:

                                                          Podczas oglądania filmików, robiłem notatkę w formie mapy myśli:

                                                          Temat 4 – Podsumowanie nauki

                                                          Mapy myśli są dobrym narzędziem do notowania informacji oraz przeprowadzania burz mózgu (do znalezienia rozwiązania problemu). Wykorzystują obie półkule mózgu poprzez łączenie: słów kluczowych, skojarzeń, obrazów, kolorów, relacji, przedstawienia graficznego.

                                                          Źródła

                                                          Obrazek nagłówka

                                                          Obrazki

                                                          Metody skutecznego uczenia się – powtórka

                                                          przez Karol Bocian | 8 lutego, 2020

                                                          Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                          Przeczytaj jeszcze raz tekst: Metody skutecznego uczenia się

                                                          Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                          0%
                                                          3
                                                          Utworzono Przez Karol Bocian

                                                          Test - Metody skutecznego uczenia się

                                                          Cześć!
                                                          Podaj proszę swoje imię i e-mail.
                                                          Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                          1 / 13

                                                          Na czym polega metoda Pałacu pamięci?

                                                          2 / 13

                                                          Na czym polega metoda Króla boksu?

                                                          3 / 13

                                                          Na czym polega metoda Imersji?

                                                          4 / 13

                                                          Na czym polega metoda Ciekawskiego dziecka?

                                                          5 / 13

                                                          Na czym polega metoda Testu zderzeniowego?

                                                          6 / 13

                                                          Na czym polega metoda Zmiany miejsca?

                                                          7 / 13

                                                          Na czym polega metoda Fiszek?

                                                          8 / 13

                                                          Na czym polega metoda Majstersztyku?

                                                          9 / 13

                                                          Na czym polega metoda Papugi?

                                                          10 / 13

                                                          Na czym polega metoda Nauczyciela?

                                                          11 / 13

                                                          Na czym polega metoda Tancerki?

                                                          12 / 13

                                                          Na czym polega metoda Terminatora?

                                                          13 / 13

                                                          Na czym polega metoda Walenia?

                                                          Twój wynik to

                                                          Średni wynik to 43%

                                                          0%

                                                          Dzień 2- Nauka obsługi programu XMind

                                                          przez Karol Bocian | 7 lutego, 2020

                                                          Plan nauki

                                                          Plan dnia (opisany w poście: https://karolbocian.pl/blog/2019/12/30/nowa-umiejetnosc/):

                                                          Dzień

                                                          Czas (minuty)

                                                          Temat

                                                          2 (2020-01-01)

                                                          0-5

                                                          Powtórka materiału

                                                           

                                                          5-8

                                                          Plan nauki na dzisiaj

                                                           

                                                          8-29

                                                          Nauka właściwa

                                                           

                                                          29-30

                                                          Przerwa na taniec

                                                           

                                                          30-55

                                                          Nauka właściwa

                                                           

                                                          55-60

                                                          Podsumowanie nauki

                                                          Do odmierzania czasu kolejnych etapów używam narzędzia: https://www.timeanddate.com/timer/

                                                          Przebieg nauki

                                                          Temat 1 – Powtórka materiału

                                                          Mapa myśli to narzędzie służące do notowania oraz gromadzenia wiedzy i haseł. Korzysta z mechanizmów pobudzających cały mózg: hasła kluczowe, słowa, obraz, kolory. Polega na przedstawieniu wiedzy w formie graficznej: w centralnym punkcie obszaru roboczego znajduje się temat główny, a z niego, jak drzewa wyrastają uszczegółowienia tego tematu, które następnie są coraz bardziej uszczegóławiane (tak jak drzewo ma pień, wielkie gałęzie i coraz mniejsze gałęzie).

                                                          Temat 2 – Plan nauki na dzisiaj

                                                          Plan tematów do nauki dzisiaj (opisany w poście: https://karolbocian.pl/blog/2019/12/31/dzien-1-nauka-rysowania-map-mysli/)

                                                          Materiał

                                                          Link

                                                          Dzień

                                                          Wariacje

                                                          Obsługa programu XMind

                                                          https://www.youtube.com/watch?v=MsOS5HZ0qxU&list=PLrjRjw_oPGjTbUhApw5lr5D2sQwMdtpwZ

                                                          2 (2020-01-01)

                                                          Zmiana bodźca (film zamiast tekstu)

                                                          Temat 3 – Nauka właściwa

                                                          Podczas nauki oglądałem: https://www.youtube.com/watch?v=MsOS5HZ0qxU&list=PLrjRjw_oPGjTbUhApw5lr5D2sQwMdtpwZ z przyspieszeniem 1.5. Miałem obok otwarty program XMind, zatrzymywałem filmik i rysowałem w XMind.

                                                          Polskie znaki

                                                          XMind nie obsługuje poprawnie wszystkich polskich znaków (ma do niektórych kombinacji Alt + literka przypięty jakiś skrót). Można to łatwo naprawić, wystarczy:

                                                          1. Wejść w Edit -> Preferences
                                                          2. Wybrać zakładkę Keys
                                                          3. Posortować tabelę po polu Bindings
                                                          4. Znaleźć skróty wykorzystujące Alt i literkę i wybrać dla nich Unbing Command
                                                          5. Zrobione

                                                          Skróty

                                                          Przydatne skróty w XMind:

                                                          • Tab -> nowa podgałąź.
                                                          • Enter -> nowa gałąź.
                                                          • Strzałki -> poruszanie po węzłach.
                                                          • Ctrl + H -> dodanie linku do węzła.
                                                          • Ctrl + I -> dodanie obrazka do węzła.
                                                          • F2 -> Edycja zaznaczonego węzła.
                                                          • F3 -> dodanie podpisu do węzła.
                                                          • F4 -> dodanie notatki do węzła.

                                                          Łączenie i grupowanie

                                                          Można łączyć i grupować elementy na sposoby:

                                                          Summary (skrót: Ctrl + ]):

                                                          1. Zaznaczenie kilku elementów.
                                                          2. Wybranie Insert -> Summary.
                                                          3. Wpisanie podsumowania.

                                                          Boundary (skrót: Ctrl + B):

                                                          1. Zaznaczenie kilku elementów.
                                                          2. Wybranie Insert -> Boundary.
                                                          3. Wpisanie podsumowania.

                                                          Relationship (skrót: Ctrl + L):

                                                          1. Zaznaczenie jednego elementu
                                                          2. Wybranie Insert -> Relationship.
                                                          3. Zaznaczenie innego elementu.
                                                          4. Manipulowanie linią, aby zmienić jej kształt.
                                                          5. Podpisanie linijki.

                                                          Podwidoki i ukrywanie

                                                          W XMind można zaznaczyć element, wybrać View -> Drill down (skrót: F6) i wtedy zobaczymy tylko drzewo, gdzie korzeniem będzie wybrany element (Shift F6 cofa nas do poprzedniego widoku). Można tak ukryć część rzeczy, jeżeli dodamy w podwidoku luźne elementy.

                                                          Autozapisywanie

                                                          1. Wybierz Edit -> Preferences -> General
                                                          2. Zaznacz w sekcji Save and Backup checkboxa obok: Autmatically save all opened workboks every …

                                                          Numerowanie

                                                          Elementy i w gałęziach mogą być numerowane.

                                                          Temat 4 – Podsumowanie nauki

                                                          Polecam przejście tego szybkiego kursu: https://www.youtube.com/watch?v=MsOS5HZ0qxU&list=PLrjRjw_oPGjTbUhApw5lr5D2sQwMdtpwZ, ponieważ odkryłem ciekawe rzeczy:

                                                          • skróty klawiaturowe,
                                                          • dodawanie summary, boundary, relacji,
                                                          • ukrywanie,
                                                          • dodawanie podpisu i notatki do węzła.

                                                          Źródła

                                                          Obrazek nagłówka

                                                          Obrazki

                                                          Dzień 1 – Nauka rysowania map myśli

                                                          przez Karol Bocian | 7 lutego, 2020

                                                          Plan nauki

                                                          Plan dnia (opisany w poście: https://karolbocian.pl/blog/2019/12/30/nowa-umiejetnosc/):

                                                          Dzień

                                                          Czas (minuty)

                                                          Temat

                                                          1 (2019-12-31)

                                                          0-29

                                                          Zebranie materiałów i rozłożenie ich w czasie

                                                           

                                                          29-30

                                                          Przerwa na taniec

                                                           

                                                          30-55

                                                          Nauka właściwa

                                                           

                                                          55-60

                                                          Podsumowanie nauki

                                                          Do odmierzania czasu kolejnych etapów używam narzędzia: https://www.timeanddate.com/timer/ – ja ustawiłem sobie dźwięk budzika – ustawienie podstawowe to brak dźwięku.

                                                          Przebieg nauki

                                                          Temat 1 – Zebranie materiałów i rozłożenie ich w czasie

                                                          Poniżej zamieszczam materiały oraz plan ich przyswajania. Podczas nauki będę robił mapę myśli o tym, czym jest mapa myśli, jej zaletach i wadach (Metoda Terminatora) oraz będę pisał post o mapach myśli (Metoda Walenia + Metoda Nauczyciela). Do robienia map myśli będę używał programu: XMind –  https://xmind.softonic.pl/. Przebieg mojej nauki będę opisywał w postach takich jak ten. Na koniec zbiorę informacje z nich w jeden post (Metoda Majstersztyku).

                                                          Materiał

                                                          Link

                                                          Dzień

                                                          Wariacje

                                                          Darmowy e-book: kurs tworzenia map myśli

                                                          https://www.zlotemysli.pl/prod/6620/kurs-tworzenia-map-mysli-marcin-kijak.html#product-info

                                                          1 (2019-12-31)

                                                           

                                                          Obsługa programu XMind

                                                          https://www.youtube.com/watch?v=MsOS5HZ0qxU&list=PLrjRjw_oPGjTbUhApw5lr5D2sQwMdtpwZ

                                                          2 (2020-01-01)

                                                           Zmiana bodźca (film zamiast tekstu)

                                                          Filmy na YouTube o mapach myśli

                                                          1. https://www.youtube.com/watch?v=7ignqjhLF3s
                                                          2. https://www.youtube.com/watch?v=8BgkWIEeX-M
                                                          3. https://www.youtube.com/watch?v=kECHj8g6_fU
                                                          4. https://www.youtube.com/watch?v=ONzWAq0NVfE
                                                          5. https://www.youtube.com/watch?v=3RPR7hwQwZw
                                                          6. https://www.youtube.com/watch?v=l60G4yuikK0
                                                          7. https://www.youtube.com/watch?v=ZpvruFwRQR0
                                                          8. https://www.youtube.com/watch?v=fYNTaKyaGHc

                                                          3 (2020-01-02)

                                                          Zmiana bodźca — praca na kartce w innym pomieszczeniu (metoda Zmiany miejsca). Obejrzę wiele filmików różnych autorów (Metoda Króla boksu).

                                                          Film na youtube o mapach myśli

                                                          https://www.youtube.com/watch?v=0VtFjHXCOKg

                                                          4 (2020-01-03)

                                                          Zmiana bodźca — jeden długi film od tego samego autora

                                                          Film na youtube o mapach myśli

                                                          https://www.youtube.com/watch?v=0VtFjHXCOKg

                                                          5 (2020-01-04)

                                                          Temat 2 – Przerwa na taniec

                                                          Temat 3 – Nauka właściwa

                                                          Moja mapa myśli

                                                          Źródła obrazów w mapie myśli:

                                                          Temat 4 – Podsumowanie nauki

                                                          Mapa myśli to narzędzie umożliwiające notowanie, w którym wykorzystuje się obie półkule mózgu, przez co zapamiętywanie (i przypominanie sobie) materiału z pomocą mapy myśli jest efektywniejsze. Mapa myśli wykorzystuje grafiki, obrazy, skojarzenia, kolory, wyobraźnię, graficzne połączenia i słowa kluczowe. Można ją wykorzystywać m.in. do: planowania (np. prezentacji, wycieczki), wyrzucania myśli z głowy, generowania pomysłów, notowania.

                                                          Ciężko jest przerobić cały materiał w tak krótkim czasie. Przydają się znajomość skrótów klawiaturowych: w systemie Windows, przeglądarce oraz XMind.

                                                          Źródła

                                                          Obrazek nagłówka

                                                          Obrazki

                                                          Mapy myśli, czyli nowa umiejetność

                                                          przez Karol Bocian | 7 lutego, 2020

                                                          Hej, pisałem, że chcę przetestować zdobywane umiejętności szybkiego uczenia się w praktyce. Wybrałem do tego celu naukę jazdy na rolkach, ale…

                                                          Jazda na rolkach

                                                          Muszę się przyznać, że już kiedyś próbowałem nauczyć się jeździć na rolkach, więc mam rolki :) Niestety, nie szło mi to najlepiej\, jednak pragnienie jeżdżenia jest we mnie tak duże, że powróciłem do tego tematu. Zabrałem się do tego tematu następująco:

                                                          Niestety, okazało się, że garaż jest za mały, abym mógł rozwinąć skrzydła, a z przyswojonych lekcji nauczyłem się, że jazda po wilgotnej nawierzchni jest bardzo niebezpieczna. Wobec powyższego nauka jazdy na rolkach została przełożona na cieplejsze miesiące 🙂

                                                          Inna umiejętność

                                                          Zdecydowałem, że nauczę się zatem czegoś innego. Zebrałem Wasze komentarze dotyczące umiejętności do nauczenia się w 5 godzin. Za wszystkie komentarze bardzo dziękuję! Zaproponowaliście w nich:

                                                          • Pływanie
                                                          • Jazda na rolkach
                                                          • Granie na instrumencie
                                                          • Gotowanie
                                                          • Rysowanie
                                                          • Tańczenie
                                                          • Granie na konsolecie DJ i zgrywanie utworów na słuch
                                                          • Jazda na nartach
                                                          • Jazda na łyżwach
                                                          • Robienie wzorków na kawie
                                                          • Składanie origami
                                                          • Rozwiązywanie sudoku w mniej niż 5 minut
                                                          • Tworzenie grafik w programie xyz

                                                          Z tego wszystkiego najbardziej podoba mi się pomysł (oprócz jazdy na rolkach i gotowania wątróbki z sercami) nauki rysowania. Trochę go sprecyzuję i rozwinę, aby był dla mnie jak b najbardziej atrakcyjny. Poświęcę 5 godzin na naukę rysowania map myśli. Co o tym myślicie?

                                                          Rysowanie map myśli

                                                          Podczas nauki skorzystam z poznanych technik:

                                                          Dzień

                                                          Czas (minuty)

                                                          Temat

                                                          1 (2019-12-31)

                                                          0-29

                                                          Zebranie materiałów i rozłożenie ich w czasie

                                                          29-30

                                                          Przerwa na taniec

                                                          30-55

                                                          Nauka właściwa

                                                          55-60

                                                          Podsumowanie nauki

                                                          2 (2020-01-01)

                                                          0-5

                                                          Powtórka materiału

                                                          5-8

                                                          Plan nauki na dzisiaj

                                                          8-29

                                                          Nauka właściwa

                                                          29-30

                                                          Przerwa na taniec

                                                          30-55

                                                          Nauka właściwa

                                                          55-60

                                                          Podsumowanie nauki

                                                          3 (2020-01-02)

                                                          0-5

                                                          Powtórka materiału

                                                          5-8

                                                          Plan nauki na dzisiaj

                                                          8-29

                                                          Nauka właściwa

                                                          29-30

                                                          Przerwa na taniec

                                                          30-55

                                                          Nauka właściwa

                                                          55-60

                                                          Podsumowanie nauki

                                                          4 (2020-01-03)

                                                          0-5

                                                          Powtórka materiału

                                                          5-8

                                                          Plan nauki na dzisiaj

                                                          8-29

                                                          Nauka właściwa

                                                          29-30

                                                          Przerwa na taniec

                                                          30-55

                                                          Nauka właściwa

                                                          55-60

                                                          Podsumowanie nauki

                                                          5 (2020-01-04)

                                                          0-5

                                                          Powtórka materiału

                                                          5-8

                                                          Plan nauki na dzisiaj

                                                          8-29

                                                          Nauka właściwa

                                                          29-30

                                                          Przerwa na taniec

                                                          30-60

                                                          Podsumowanie nauki

                                                          A już jutro: czas start!

                                                          Źródła

                                                          Obraz główny

                                                          Obrazy

                                                          Metoda Pałacu pamięci – powtórka

                                                          przez Karol Bocian | 8 lutego, 2020

                                                          Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                          Przeczytaj jeszcze raz tekst: Metoda Pałacu pamięci

                                                          Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                          /3
                                                          9
                                                          Utworzono Przez Karol Bocian

                                                          Test - Metoda Pałacu pamięci

                                                          Cześć!
                                                          Podaj proszę swoje imię i e-mail.
                                                          Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                          1 / 3

                                                          Jakie powinny być skojarzenia w metodzie Pałacu pamięci?

                                                          2 / 3

                                                          Czy metoda Pałacu pamięci ma wady?

                                                          3 / 3

                                                          Na czym polega metoda Pałacu pamięci?

                                                          Twój wynik to

                                                          Średni wynik to 44%

                                                          0%

                                                          Notepad++

                                                          przez Karol Bocian | 1 maja, 2020

                                                          Notepad++

                                                          Notepad++ jest zaawansowanym i darmowym notatnikiem. Instaluję go na każdym komputerze, którego używam. Umożliwia otworzenie wielu plików jednocześnie, formatowanie kodu, łatwe wyszukiwanie i zamienianie w wielu plikach, spisywanie notatek bez zapisywania pliku na dysk.

                                                           

                                                          Rozszerzenia — wtyczki

                                                          Jego funkcjonalność można rozszerzać poprzez zainstalowanie pluginów. Dostępnych jest bardzo dużo darmowych wtyczek. Ja używam następujących:

                                                          Wszystkie posty związane z narzędziami:

                                                            Źródła

                                                            Obraz główny:

                                                            Obrazy:

                                                            Materiały:

                                                            Metoda Walenia – powtórka

                                                            przez Karol Bocian | 8 lutego, 2020

                                                            Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                            Przeczytaj jeszcze raz tekst: Metoda Walenia

                                                            Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                            0%
                                                            3
                                                            Utworzono Przez Karol Bocian

                                                            Test - Metoda Walenia

                                                            Cześć!
                                                            Podaj proszę swoje imię i e-mail.
                                                            Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                            1 / 3

                                                            Na czym polega metoda Walenia?

                                                            2 / 3

                                                            Z jakich elementów składa się kartka w metodzie Cornella (można ją wykorzystać w metodzie Walenia)?

                                                            3 / 3

                                                            Z czego skorzystać w dobrej notatce w metodzie Walenia?

                                                            Twój wynik to

                                                            Średni wynik to 66%

                                                            0%

                                                            Metoda Króla boksu – powtórka

                                                            przez Karol Bocian | 8 lutego, 2020

                                                            Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                            Przeczytaj jeszcze raz tekst: Metoda Króla boksu

                                                            Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                            /2
                                                            5
                                                            Utworzono Przez Karol Bocian

                                                            Test - Metoda Króla boksu

                                                            Cześć!
                                                            Podaj proszę swoje imię i e-mail.
                                                            Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                            1 / 2

                                                            Na czym polega metoda Króla boksu?

                                                            2 / 2

                                                            Na czym polega przeplatanie materiału w metodzie Króla boksu?

                                                            Twój wynik to

                                                            Średni wynik to 90%

                                                            0%

                                                            Metoda Majstersztyku – powtórka

                                                            przez Karol Bocian | 8 lutego, 2020

                                                            Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                            Przeczytaj jeszcze raz tekst: Metoda Majstersztyku

                                                            Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                            0%
                                                            4
                                                            Utworzono Przez Karol Bocian

                                                            Test - Metoda Majstersztyku

                                                            Cześć!
                                                            Podaj proszę swoje imię i e-mail.
                                                            Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                            1 / 3

                                                            W jaki sposób przerabiać materiał metodą Majstersztyku?

                                                            2 / 3

                                                            Jaki powinien być poziom notatek w metodzie Majstersztyku?

                                                            3 / 3

                                                            Na czym polega metoda Majstersztyku?

                                                            Twój wynik to

                                                            Średni wynik to 50%

                                                            0%

                                                            Chocolatey, czyli prosta instalacja programów na Twoim komputerze

                                                            przez Karol Bocian | 16 maja, 2024

                                                            czekolada

                                                            Instalacja programów na Twoim komputerze

                                                            Zakup nowego komputera, sformatowanie dysku albo wdrożenie nowej osoby do zespołu wiąże się z zainstalowaniem nowego oprogramowania. Kilka lat temu znalazłem narzędzie, które pozwala mi pobrać z internetu jeden instalator zawierający wiele aplikacji. Niedawno znalazłem jeszcze lepsze narzędzie. Jest to Chocolatey.

                                                            Instalowanie nowego oprogramowania składa się z następującymi krokami:

                                                            • Znalezienie i ściągnięcie instalatora.
                                                            • Zainstalowanie programu (przeklikanie się przez wszystkie ekrany).
                                                            • Wybranie odpowiednich opcji i uniknięcie zainstalowania niepotrzebnych programów i wtyczek.
                                                            • Zaakceptowanie regulaminów.
                                                            • Skonfigurowanie aplikacji.

                                                            Jak ułatwić sobie przechodzenie tych kroków i sprawić, abyśmy w łatwy sposób mieli na swoim komputerze wszystkie potrzebne aplikacje? Spróbujmy rozwiązać ten problem.

                                                            Problem

                                                            Jak szybko zainstalować zestaw aplikacji? Jak ławo je później aktualizować?

                                                            Rozwiązanie

                                                            W poście https://jaroslawstadnicki.pl/2019/04/14/czekoladka-zamiast-pudelka/ poznałem narzędzie Chocolatey i skonfigurowałem pod siebie.
                                                            Chocolatey to system podobny do paczek nugetowych. Instalujemy go (tutaj jest opis jak to zrobić: https://chocolatey.org/install albo tutaj https://chocolatey.org/docs/installation), a następnie w konsoli wpisujemy aplikację, którą chcemy pobrać (tutaj jest opis instalacji: https://chocolatey.org/docs/commands-install). Listę dostępnych aplikacji znajdziecie tutaj: https://chocolatey.org/packages. Niektóre aplikacje mają parametryzowany instalator. Warto się z nim zapoznać.

                                                            Początek

                                                            Moje rozwiązanie

                                                            Instalacja

                                                            W celu zainstalowania programów tworzę plik z rozszerzeniem .bat, w którym zapisuje komendy do zainstalowania Chocolatey i mojego zestawu aplikacji:

                                                            set -x
                                                            set -c
                                                            set -o xtrace

                                                            REM show info: -v –trace
                                                            @”%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe” -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command “iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))” && SET “PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin”

                                                            choco install notepadplusplus -y
                                                            choco install chrome-remote-desktop-chrome -y
                                                            choco install adobereader –params=”‘/NoUpdates:0′” -y
                                                            choco install flashplayerplugin -y
                                                            choco install flashplayeractivex -y
                                                            choco install firefox -y
                                                            choco install 7zip.install -y
                                                            choco install git.install -y
                                                            choco install putty.install -y
                                                            choco install skype -y
                                                            choco install dropbox -y
                                                            choco install google-backup-and-sync -y
                                                            choco install onedrive -y
                                                            choco install onenote -y
                                                            choco install sourcetree -y
                                                            choco install dotnetcore -y
                                                            choco install visualstudio2019community –params=”–no-includeRecommended –quiet –locale en-US” -y
                                                            choco install visualstudio2019-workload-netcoretools -y
                                                            choco install dotnetcore-sdk -y
                                                            choco install xmind -y
                                                            choco install activepresenter -y
                                                            choco install f.lux -y
                                                            choco install audacity -y
                                                            choco install anki -y
                                                            choco install freevideoeditor -y
                                                            choco install autohotkey -y
                                                            choco install screentogif -y
                                                            choco install pdf24 -y
                                                            choco install ffmpeg -y
                                                            choco install fiddler -y
                                                            choco install brave -y
                                                            choco install postman -y
                                                            choco install ditto -y

                                                             

                                                            Plik ten uruchamiam z konsoli uruchomionej jako administrator. Niestety, nadal muszę skonfigurować samodzielnie wszystkie aplikacje.

                                                            Aktualizacja

                                                            Aktualizacja

                                                            Co jakiś czas aktualizuję swoje aplikacje. Stworzyłem plik z rozszerzeniem .bat o zawartości:

                                                            REM show info: -v –trace
                                                            REM upgrade all:
                                                            choco upgrade chocolatey -y
                                                            choco upgrade all -y

                                                            Uruchamiam go co jakiś czas przez kliknięcie go prawym przyciskiem myszy i wybranie: Run as administrator.

                                                            Koniec

                                                            Na koniec

                                                            Ten post będzie służył mi jako poradnik do instalowania u siebie aplikacji w przyszłości. Będę więc aktualizował go o nowe aplikacje. Mam nadzieję, że Tobie również Chocolatey przypadnie do gustu.

                                                            Wszystkie posty związane z narzędziami:

                                                              Źródła

                                                              Obraz główny:

                                                              • https://www.pexels.com/photo/chocolate-beside-raspberry-918328/

                                                              Obrazy:

                                                              • https://www.pexels.com/photo/code-coding-computer-data-574071/
                                                              • https://www.pexels.com/photo/brown-and-white-track-field-163444/
                                                              • https://www.pexels.com/photo/man-running-on-black-asphalt-road-1555354/

                                                              Materiały:

                                                              • https://chocolatey.org/
                                                              • https://chocolatey.org/packages
                                                              • https://jaroslawstadnicki.pl/2019/04/14/czekoladka-zamiast-pudelka/

                                                              Metoda Papugi – powtórka

                                                              przez Karol Bocian | 8 lutego, 2020

                                                              Podczas nauki bardzo ważne jest, aby przypominać sobie poznaną wiedzę. Zapraszam Cię do powtórki materiału.

                                                              Przeczytaj jeszcze raz tekst: Metoda Papugi

                                                              Następnie wykorzystaj Metodę Testu zderzeniowego i podejdź do testu:

                                                              0%
                                                              7
                                                              Utworzono Przez Karol Bocian

                                                              Test - Metoda Papugi

                                                              Cześć!
                                                              Podaj proszę swoje imię i e-mail.
                                                              Jeżeli nie chcesz tego robić, możesz zrobić test jako nieznajomy. Kliknij po prostu strzałkę dalej 🙂

                                                              1 / 2

                                                              Na czym polega metoda Papugi?

                                                              2 / 2

                                                              Jaki sposób robienia powtórek zaleca metoda Papugi?

                                                              Twój wynik to

                                                              Średni wynik to 43%

                                                              0%