Przejdź do głównej zawartości

Posty

Wyświetlanie postów z listopad, 2018

[OOP] Ma czym polega wzorzec projektowy Kompozyt?

Wzorzec projektowy Kompozyt pozwala nam na używanie w jednolity sposób zarówno pojedynczych obiektów, jak i całych ich grup . Kompozyt należy  do strukturalnych wzorców projektowych. Więcej o rodzajach wzorców można poczytać tutaj [under construction]. Rozważmy program, którego zadaniem jest rysowanie na ekranie obiektów. Możemy zdecydować, czy narysuje się kwadrat, kółko, albo też obrazek w dowolnym formacie. Chcemy też by użytkownik miał możliwość narysowania całej grupy obiektów - utworzonej przez niego kompozycji kwadratów, kółek itp. Zacznijmy pisać program. Chcemy, żeby każdy obiekt, który może zostać narysowany na ekranie, implementował interfejs IDrawable . Utwórzmy ten interfejs oraz kilka klas go implementujących. interface IDrawable { void Draw (); } class Circle : IDrawable { public void Draw () { Console.WriteLine( "Rysuję kółko" ); } } class Square : IDrawab...

[OOP] Ma czym polega wzorzec projektowy Most?

Most jest wzorcem projektowym, który pozwala nam uprościć hierarchię klas odseparowując od siebie pewne aspekty tych klas. By to lepiej zrozumieć rozważmy prosty przykład: chcemy napisać program zajmujący się pojazdami - wstępnie samochodami i motorami. Piszemy prostą hierarchię klas. class Vehicle { } class Car : Vehicle { } class Motorcycle : Vehicle { } Na razie wszystko jest w porządku, a hierarchia wygląda tak: Z czasem jednak pojawia się potrzeba reprezentowania w programie samochodów i motorów elektrycznych. Nasza hierarchia klas bardzo się rozrasta: class Vehicle { } class Car : Vehicle { } class ElectricCar : Car { } class CombustionCar : Car { } class Motorcycle : Vehicle { } class ElectricMotorcycle : Motorcycle { } class CombustionMotorcycle : Motorcycle { } Diag...

[OOP] Na czym polega wzorzec projektowy Adapter?

Wzorzec projektowy adapter umożliwia współpracę klasom o niekompatybilnych interfejsach. Jest to strukturalny wzorzec projektowy. Więcej o typach wzorców można poczytać tutaj [under construction]. Adapter czasem nazywany jest wrapperem . Rozważmy problem gniazdek elektrycznych. W różnych częściach świata używane są rożne ich rodzaje. Polskiej wtyczki nie możemy używać w Stanach Zjednoczonch - nie będzie pasowała do gniazdka. Nie oznacza to, że w Stanach nie możemy używać polskich sprzętów. Wystarczy, że kupimy przejściówkę - czyli właśnie adapter. Stanowi on łącznik między niekompatybilnymi interfejsami - polską wtyczką i amerykańskim gniazdkiem. Adaptery programistyczne działają na tej samej zasadzie. Przyjrzyjmy się kilku przykładom. Przykład 1. Wyobraźmy sobie, że piszemy aplikację dla policji. Policjanci prowadząc sprawy przestępstw zbierają od świadków i z monitoringu dane samochodów, których użyli przestępcy. Jeśli uda się odczytać rejestrację, to znalezienie właścic...

[OOP] Na czym polega wzorzec projektowy Prototyp?

Prototyp to wzorzec projektowy, który pozwala na tworzenie obiektów danej klasy w oparciu o już istniejący obiekt. Rozważmy następujący przykład: mamy aplikację służącą do tworzenia arkuszy kalkulacyjnych - coś jak Excel lub Arkusze Google. Arkusz składa się z rzędów i kolumn komórek. Pierwotnie wszystkie komórki są białe i piszemy w nich podstawową czcionką. Chcemy jednak, by użytkownik miał możliwość zdefiniowania własnego typu komórki - przykładowo może stworzyć styl komórki "z ostrzeżeniem", która będzie miała czerwone tło i pogrubioną czcionkę, lub styl "wartość poprawna", który będzie miał zielone tło, zielony kolor czcionki i brak pogrubienia. Raz utworzony styl może zastosować do dowolnie wybranych komórek. Jako że użytkownik sam tworzy nowe style - dynamicznie , w czasie działania programu - nie możemy zastosować dziedziczenia (np. utworzenie klasy KomórkaOstrzegawcza dziedziczącej z klasy Komórka). Musimy wziąć pod uwagę ważną rzecz: to że użytkowni...

[OOP] Na czym polegają wzorce Metoda Wytwórcza i Fabryka Abstrakcyjna?

W tym poście przyjrzymy się parze wzorców projektowych związanych z tworzeniem obiektów :  Metodzie Wytwórczej (ang. Factory Method ) i Fabryce Abstrakcyjnej (ang. Abstract Factory ). Ten post nie będzie o wzorcu projektowym Fabryka. Dlaczego? Ponieważ  na oryginalnej liście dwudziestu trzech wzorców opublikowanych przez  Gang of Four  w książce " Design Patterns: Elements of Reusable Object-Oriented Software " znalazły się wzorce Fabryka Abstrakcyjna oraz Metoda Wytwórcza.  Wzorca nazwanego "Fabryka" tam nie znajdziemy.  Nie zmienia to oczywiście faktu, że wielu programistów używa w codziennej pracy nazwy "Fabryka". Zazwyczaj mają wtedy na myśli klasę, która posiada w sobie Metodę Wytwórczą, lub klasę będącą implementacją Fabryki Abstrakcyjnej. Ogólnie rzecz biorąc, w języku potocznym Fabryką nazywamy każdą klasę, której zadaniem jest  całościowe  tworzenie nowych obiektów. Piszę "całościowe", gdyż tym właśnie Fabryki różnią się od Builder...