Archiwa tagu: programowanie

Composition Over Inheritance, czyli Kompozycja ponad dziedziczeniem

przez | 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… Czytaj dalej »

Lod — Law of Demeter, czyli Prawo Demeter

przez | 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ą… Czytaj dalej »

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

przez | 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… Czytaj dalej »

OOP — Myślenie obiektowe

przez | 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… Czytaj dalej »

OOP — Object Oriented Programming, czyli programowanie obiektowe

przez | 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… Czytaj dalej »

Ćwiczenia z SOLID — Kata

przez | 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… Czytaj dalej »

Podsumowanie połowy projektu: Poznaj zasady SOLID i OOP

przez | 14 lutego, 2020

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: Odświeżyłem sobie zasady SOLID. Przećwiczyłem zasady SOLID w praktyce (programując). Napisałem posty z zadami solid, moimi praktycznymi przykładami (kilka również przetłumaczyłem na angielski).… Czytaj dalej »

Ćwiczenia z SOLID

przez | 13 lutego, 2020

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… Czytaj dalej »

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

przez | 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ą… Czytaj dalej »

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

przez | 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ć… Czytaj dalej »

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

przez | 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… Czytaj dalej »

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

przez | 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… Czytaj dalej »

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

przez | 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… Czytaj dalej »

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

przez | 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… Czytaj dalej »