Rozwiązywanie problemów przekrojowych z użyciem IoC
|
|
- Laura Janicka
- 6 lat temu
- Przeglądów:
Transkrypt
1 Dla zaawansowanych Rozwiązywanie problemów przekrojowych z użyciem IoC Piotr Szarwas Stopień trudności: W każdej aplikacji podzielonej na warstwy występują elementy, których nie można przypisać do żadnej z warstw i które stanowią twardy orzech do zgryzienia nawet dla dużego zespołu programistów. Istnieje jednak w miarę prosty sposób poradzenia sobie z nimi: użycie kontenera IoC... W SIECI XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX XXXXX Każdą aplikację można podzielić na logiczne warstwy. Najczęściej występują trzy warstwy: warstwa danych, logiki biznesowej i prezentacji. Wszystkie spośród nich powinny być nałożone na siebie tak, aby wyższa wiedziała tylko o istnieniu jednej warstwy niższej; wszystko, co znajduje się poniżej, powinno być dla niej niedostępne. Z drugiej strony, warstwa niższa nie wymaga dla swojego działania istnienia żadnej z warstw wyższych. Podział ten ilustrujemy na Rysunku 1. Można jeszcze bardziej dopracować ten schemat mówiąc, że aplikacja powinna posiadać aż pięć warstw: warstwę danych, dostępu do danych, logiki biznesowej/usług, kontrolerów i prezentacji. Ten drugi podział wynika bezpośrednio ze stosowania wzorców programistycznych i architektonicznych. Przykładowo, kontrolery i prezentacja stanowią element wzorca architektonicznego MVC. Pojawienie się warstwy dostępu do danych wynika z zastosowania wzorca DAO, który uniezależnia logikę biznesową od warstwy danych. Dzięki temu można łatwo wymieniać źródło danych. Schemat tego podziału pokazujemy na Rysunku 2. Rozbicie systemu na warstwy zapewnia szereg korzyści: Każdej z warstw można wymienić implementację, nie zmieniając jednocześnie implementacji pozostałych warstw. Jak już wspomnieliśmy, można na przykład wymienić warstwę DAO (dostępu do Co należy wiedzieć... Należy znać zasady programowania obiektowego w PHP5 z wykorzystaniem wzorców projektowych. Co obiecujemy... Pokażemy, jak rozwiązać niektóre spośród problemów przekrojowych (ang. crosscutting concerns). 2
2 Crosscutting concerns Dla zaawansowanych Niestety, praktyka bywa czasem bardziej skomplikowana i nie wszystkie zagadnienia programistyczne możemy umieścić na jednej wybranej warstwie. Te, których nie da się w ten sposób potraktować, nazywamy problemami przekrojowymi (ang. Crosscutting concerns). Najpopularniejsze z nich to: logowanie błędów i debugowanie, bezpieczeństwo i uwierzytelnianie, Rysunek 1. Podział aplikacji na trzy logiczne warstwy. Warstwa wyższa wie tylko o istnieniu warstwy znajdującej się bezpośrednio pod nią. Żadna z warstw niższych nie wie nic o wyższych danych) tak, aby obsługiwała inne źródło danych, nie zmieniając jednocześnie logiki biznesowej. Każda warstwa może być traktowana jako spójna całość. Pozwala to m.in. na tworzenie każdej warstwy przez osobny zespół programistów, który nie musi znać implementacji pozostałych warstw. Jeśli zostanie dobrze zaprojektowana, każda warwstwa(warstwa) może być wykorzystywana wielokrotnie, w różnych projektach lub miejscach tego samego projektu. transakcje. Problem logowania błędów Rozważmy problem logowania błędów. Praktycznie każda aplikacja zawiera elementy kodu odpowiadające za logowanie i debugowanie. Czy jednak możemy je przydzielić do którejś warstwy? Niestety nie. Ich kod jest rozproszony po całej aplikacji i występuje w każdej warstwie. Pamiętajmy, że z punktu widzenia logicznego podziału na warstwy, logowanie błędów nie jest ani częścią logiki biznesowej, ani innej warstwy. Bezpośrednie zakodowanie logiki logowania w każdej z warstw powoduje, że niezależność, przenaszalność i elastyczność tej warstwy drastycznie maleje. W przypadku logowania problem nie jest tak wielki, ale już w sytuacji, Listing 1. Implementacja klasy MailSender służącej do wysyłania maili. Kod klasy pozbawiony jest reguł problemów przekrojowych: logowania i bezpieczeństwa. Reguły te będą implementowane przez odpowiednie dekoratory interface MailSender { public function send($to, $from, $subject, $message); class MailSenderImpl implements MailSender { public function send($to, $from, $subject, $message) { return mail($to,$subject,$message,'from: '.$from); Listing 2. Przykładowa klasa dekorująca dowolną klasę implementującą interface MailSender class MailSenderDecorator implements MailSender { private $mailsender; public function construct(mailsender $mailsender ){ $this->mailsender = $mailsender; public function send($to, $from, $subject, $message) { $result = $this->send($to,$subject,$message,'from: '.$from); Rysunek 2. Podział aplikacji na pięć logicznych warstw. Warstwa wyższa wie tylko o istnieniu warstwy znajdującej się bezpośrednio pod nią. Żadna z warstw niższych nie wie nic o wyższych gdy w aplikacji zaszyjemy reguły bezpieczeństwa, czy też zdefiniujemy miejsca, w których rozpoczynają się i kończą transakcje, cały kod przestaje w zasadzie być przenaszalny i staje się mocno związany z regułami biznesowymi danej aplikacji. Rysunek 3 pokazuje schematycznie nasz problem. Skoro problemy przekrojowe mogę sprawić takie trudności, czy da się je wydzielić do osobnych modułów, które nie będą w ogóle powiązane z żadną z warstw? Okazuje się, że tak. Rozwiązania są dwa. Pierwsze, którym się zajmiemy w tym artykule, będzie polegało na wykorzystaniu wzorca Dekorator i kontenera IoC, który zbudowaliśmy wspólnie w poprzednim artykule. Drugi sposób opiera się na zastosowaniu programowania aspektowego (ang. aspect-oriented programming - AOP). Ten drugi sposób byłby dużo lepszym podejściem; niestety, obecnie dla PHP nie istnieje żaden framework AOP, który w wystarczającym stopniu implementowałby wszystkie założenia programowania aspektowego. Tak jak poprzednio, cały kod zaprezentowany w artykule zostanie umieszczony na stronie Wzorzec Dekorator Zgodnie z definicją GoF (ang. Gang of Four termin, który określa czwórkę pro- 3
3 Dla zaawansowanych Crosscutting concerns gramistów odpowiedzialnych za zapoczątkowanie idei wzorców projektowych zadaniem wzorca Dekorator jest wzbogacanie funkcjonalności obiektów wybranych klas w sposób dynamiczny, bez konieczności modyfikowania oryginalnego kodu. Ponieważ ta definicja może być mało przejrzysta, posłużymy się przykładem. Zbudujemy prostą klasę MailSenderImpl, której zadaniem będzie wysyłanie maili (Listing 1). Wiemy, że klasa ta będzie na tyle uniwersalna, że będziemy chcieli wykorzystać ją w kilku innych, już istniejących projektach. Niestety, każdy z tych projektów ma inne wymagania biznesowe związane z regułami logowania i bezpieczeństwa. Dlatego nie wyposażymy klasy MailSenderImpl w logikę związaną z tymi aspektami, lecz zaimplementujemy tę ostatnią w dekoratorach (Listing 2). Za każdym razem, gdy w którymś z projektów zaistnieje potrzeba wysłania maila, wykorzystamy do tego odpowiedni dekorator, przykładowo: new MailSenderDecorator( new MailSenderImpl()) Listing 3. Implementacja nowej wersji kontenera IoC obsługującej dekorowanie obiektów class IoCContainerWithDecoratorSupport extends DefaultIoCContainter { private $decoratorssupport = array(); public function create($classname) { $classobj = parent::create($classname); if (!$classobj instanceof IoCDecoratorSupport&&!$classObj instanceof IoCDecorator){ foreach( $this->getdecoratorssupport() as $decoratorsupport ) { if ( $decoratorsupport->match($classname,$classobj) ) { $decoratorobj = parent::create( $decoratorsupport-> getdecoratorname() ); $decoratorobj->setobject($classobj); $classobj = $decoratorobj; return $classobj; public function setdecoratorssupport( array $decoratorssupport ) { foreach($decoratorssupport as $decorator) { if (!$decorator instanceof IoCDecoratorSupport ) { throw new Exception('Class '.get_class($decorator). ' does not implement IoCDecoratorSupport interface'); $this->decoratorssupport[] = $decorator; private function getdecoratorssupport(){ return $this->decoratorssupport; Rysunek 3. Problemy przekrojowe znajdują się zawsze z boku każdego podziału na warstwy, a ich kod jest rozproszony pomiędzy tymi ostatnimi Stosując wzorzec Dekorator udało się nam osiągnąć dwie rzeczy. Po pierwsze, uniwersalna klasa MailSender pozostała niezmieniona cała logika związana z wysyłaniem maili jest w jednym miejscu. Po drugie, kod charakterystyczny dla każdej z aplikacji znajduje się w osobnych klasach. Wykorzystując wzorzec Dekorator warto również pamiętać, że jest on bardzo użyteczny, gdy kod źródłowy klas nie jest dostępny: jego użycie stanowi wtedy jedyną możliwość zmiany zachowania obiektu. Wzorzec Dekorator w połączeniu z kontenerem IoC Wróćmy teraz do przedstawionego w poprzednim artykule kontenera IoC. Jak zapewne pamiętamy, kontener IoC to zwyczajnie konfigurowalna fabryka obiektów potrafiąca powołać do życia całe drzewa tych ostatnich. Pokażemy teraz, jak można wykorzystać kontener IoC tak, aby poza tworzeniem obiektów potrafił je także dekorować. Wyobraźmy sobie następujący problem: klient, który zlecił nam projekt, zażyczył sobie, aby każda operacja modyfikacji danych (kto, kiedy i co zmieniał) była logowana. Typowy programista zapewne rozwiązałby ten problem dokonując modyfikacji każdej metody zmieniającej dane. To podejście wydaje się najbardziej oczywiste, ale niestety jest najgorszym z możliwych. Zmodyfikowane zostałyby bowiem wszystkie kluczowe metody aplikacji, co oznacza potrzebę przetestowania całego projektu od nowa. Dodatkowym problemem byłaby konieczność przekazania do każdej z warstw aplikacji informacji o tym, kto aktualnie wykonuje daną metodę. Ponadto, jeżeli modyfikowany kod był wykorzystywany w innych projektach, programista musiałby przestać go współdzielić. Jak 4
4 Crosscutting concerns Dla zaawansowanych Listing 4. Implementacja klasy dopasowującej dekoratory do klas na podstawie nazw klas więc widać, podejście, które wydawało się najbardziej oczywiste, spowodowałoby całą lawinę problemów. My na szczęście będziemy mądrzejsi i do rozwiązania problemu wykorzystamy kontener IoC. Nasze założenie jest następujące: nie możemy dokonać żadnej modyfikacji kodu zapisującego i modyfikującego dane. Dlatego skonstruujemy kon- class ClassNameIoCDecoratorSupport implements IoCDecoratorSupport { private $decoratorname; private $classnametodecorator = array(); public function construct($decoratorname,array $classnametodecorator){ $this->decoratorname = $decoratorname; $this->classnametodecorator = $classnametodecorator; public function match($classname,$classobject) { return (in_array($classname,$this->classnametodecorator))?true:false; public function getdecoratorname() { return obiekt $this->decoratorname; z dekoratorem. W tym celu rozszerzymy klasę DefaultIoCContainer i zmo- dyfikujemy jej metodę create(). W nowej Listing 5. Implementacja klasy dopasowującej wersji dekoratory tej klasy, do jej klas metoda na podstawie create() najpierw wywołuje create() klasy nadrzęd- dowolnego wyrażenia regularnego class RegExpIoCDecoratorSupport implements nej. IoCDecoratorSupport Następnie sprawdza, { czy powołany private $decoratorname; private $pattern; public function construct($decoratorname,$pattern){ $this->decoratorname = $decoratorname; $this->pattern = $pattern; public function match($classname,$classobject) { return (preg_match($this->pattern,get_class($classobject)))?true:false; public function getdecoratorname() { return $this->decoratorname; Listing 6. Implementacja klasy dopasowującej dekoratory do klas na podstawie interfejsu class InterfaceIoCDecoratorSupport implements IoCDecoratorSupport { private $decoratorname; private $interfacename; public function construct( $decoratorname,$interfacename){ $this->decoratorname= $decoratorname; $this->interfacename= $interfacename; public function match($classname, $classobject) { return ($classobject instanceof $this->interfacename)? true:false; public function getdecoratorname(){ return $this->decoratorname; tener, który na podstawie odpowiedniego wzorca składającego się z nazwy klasy oraz implementowanego przez nią interfejsu będzie umiał udekorować tworzony obiekt. Zabierzmy się więc do pracy. Pierwszym krokiem będzie modyfikacja kontenera IoC tak, aby na podstawie zadanego wzorca mógł połączyć dekorowany obiekt nie implementuje jednego z interfejsów klas pomocniczych dekoratorów, aby uniknąć dekoracji tych ostatnich. Następnie kontener sprawdza przy pomocy klas pomocniczych, czy nazwa świeżo powołanej klasy pasuje do wzorca któregoś z dekoratorów. Jeżeli tak, to klasa pomocnicza zwraca nazwę dekoratora. Każda klasa pomocnicza musi implementować interfejs IoCDecoratorSupport, który z kolei składa się z dwóch metod: match() zwraca true, jeżeli wzorzec dekoratora pasuje do wzorca klasy, getdecoratorname() zwraca nazwę dekoratora z pliku konfiguracyjnego IoC. Klasy pomocnicze dostarczane są do kontenera poprzez metodę setdecorators(). Następnie kontener IoC powołuje do życia tenże dekorator i umieszcza w nim dekorowany obiekt. Dekorator musi implementować interfejs IoCDecorator, który posiada jedną metodę setobject(). Zauważmy, że w ten sposób możemy każdą z klas udekorować wieloma dekoratorami. Warto jeszcze zapamiętać, że zgodnie z implementacją naszego kontenera, dekorator nie może być singletonem. To znaczy: dla każdej dekorowanej klasy musi być powoływany do życia nowy dekorator. Na Listingu 3 przedstawiamy kod nowej wersji kontenera, a na Listingach 4, 5 i 6 kilka przykładowych klas pomocniczych implementujących interfejs IoCDecoratorSupport. Pierwsza klasa odnajduje klasy według pełnej nazwy, druga wg wyrażenia regularnego, a trzecia wg konkretnego interfejsu, który implementuje dekorowana klasa. Wróćmy teraz do naszego przykładu. Załóżmy dla uproszczenia, że aplikacja, w której trzeba dokonać zmian, ma trzy klasy modyfikujące dane: UserDAO, Order- DAO oraz ItemDAO. Wszystkie one implementują jeden wspólny interfejs DAO zawierający metody setconnection( find- ById( save( update( delete(). Metoda setconnection() ustawia połączenie do źródła danych, findbyid() zwraca obiekt na podstawie jego id, save() zapisuje obiekt, update() go zmienia, a delete() kasuje. Dane są modyfikowane jedynie przez metody save( update() i delete(). Szczegóły implementacji klas *DAO nie mają znaczenia w naszym przykładzie. Na Listingu 7 prezentujemy przykła- 5
5 Dla zaawansowanych Crosscutting concerns dową konfigurację kontenera bez dekoratorów. Jak widzimy, składa się ona z czterech wpisów, z których jeden dotyczy połączenia z bazą danych, a pozostałe trzy zawierają ustawienia klas DAO. Zmodyfikujemy teraz przykład tak, aby spełniał on wymagania biznesowe naszego klienta. Nic prostszego: zadanie rozpoczynamy od utworzenia klasy DAOLoggerDecorator. Klasa ta implementuje dwa interfejsy: IoCDecorator i DAO (Listing 8). Oczywiście, jej docelowa implementacja powinna zawierać bardziej wyrafinowany kod logujący. Teraz wykorzystując klasę z Listingu 6 modyfikujemy konfigurację kontenera. Nową konfigurację pokazujemy na Listingu 9. Zauważmy, że dodaliśmy tylko dwa wpisy i zgodnie z założeniami, kod klas UserDAO, Order- DAO oraz ItemDAO nie został zmieniony. W przykładzie pominęliśmy problem przekazywania informacji o tym, kto modyfikuje dane. Gdyby kod (zupełnie inny niż w naszym przykładzie) nie miał tak jasno zdefiniowanego interfejsu, jak nasze klasy DAO, do tworzenia dekoratorów moglibyśmy wykorzystać metodę call( której działanie zostało opisane w dokumentacji PHP. W podobny sposób, jak reguły związane z logowaniem, moglibyśmy dodać do aplikacji kod odnoszący się do reguł bezpieczeństwa i praw dostępu użytkow- Listing 7. Plik konfiguracji kontenera IoC dla opisanego w tekście przykładu bez wsparcia dekoratorów $currentdir = dirname( FILE ); $frameworkpath = realpath( $currentdir.'/../../flexi' ); ini_set( 'include_path', ini_get('include_path'). PATH_SEPARATOR.$frameworkPath.'/' ); require_once 'ioc/ioccontainerwithdecoratorsupport. class.php'; require_once 'ioc/mappingbuilderfromarray. class.php'; $iocmap = array( "connection" => array( "classname" => "Connection", "file" => $currentdir."/connection.class.php", "properties" => array( "userdao" => array( "classname" => "UserDAO", "file" => $currentdir."/userdao.class.php", "properties"=>array( "connection"=>"&connection" "orderdao" => array( "classname" => "OrderDAO", "file" => $currentdir."/orderdao.class.php", "properties" => array( "connection"=>"&connection" "itemdao" => array( "classname" => "ItemDAO", "file" => $currentdir."/itemdao.class.php", "properties" => array( "connection"=>"&connection" ); $mappingbuilder = new MappingBuilderFromArray($iocMap); $ioccontainer=new IoCContainerWithDecoratorSupport( $mappingbuilder->getapplicationmap()); $userdao = $ioccontainer->create("userdao"); $orderdao = $ioccontainer->create("orderdao"); $itemdao = $ioccontainer->create("itemdao"); var_dump($userdao); var_dump($orderdao); var_dump($itemdao); Listing 8. Klasa DAOLoggerDecorator jest dekoratorem klas UserDAO, OrderDAO i ItemDAO class DAOLoggerDecorator implements IoCDecorator, DAO { private $dao; public function findbyid($id){ $result = $this->dao->findbyid($id);... public function save($object){ $result = $this->dao->save($object); public function update($object){ $result = $this->dao->update($object);... public function delete($object){ $result = $this->dao->delete($object);... public function setconnection($connection){ $result = $this->dao-> setconnection($connection); public function setobject($object){ if (!$object instanceof DAO ){ throw new Exception('Class '.get_class($object). ' must implement DAO interface'); $this->dao = $object; 6
6 Crosscutting concerns Dla zaawansowanych Listing 9. Nowa wersja pliku konfiguracyjnego kontenera $currentdir = dirname( FILE ); $frameworkpath = realpath( $currentdir.'/../../flexi' ); ini_set( 'include_path', ini_get('include_path').path_separator. $frameworkpath.'/' ); require_once 'ioc/ioccontainerwithdecoratorsupport.class.php'; require_once 'ioc/mappingbuilderfromarray.class.php'; $iocmap = array( "connection" => array( "classname" => "Connection", "file" => $currentdir."/connection.class.php", "properties" => array( "userdao" => array( "classname" => "UserDAO", "file" => $currentdir."/userdao.class.php", "properties" => array("connection"=>"&connection" "orderdao" => array( "classname" => "OrderDAO", "file" => $currentdir."/orderdao.class.php", "properties" => array("connection"=>"&connection" "itemdao" => array( "classname" => "ItemDAO", "file" => $currentdir."/itemdao.class.php", "properties" => array("connection"=>"&connection" "interfaceiocdecoratorsupport" => array( "classname" => "InterfaceIoCDecoratorSupport", "file" => $frameworkpath."/ioc/decorators/interfaceiocdecoratorsupport. class.php", "properties" => array( "constructorparams" => array("daodecorator","dao") "daodecorator" => array( "classname" => "DAOLoggerDecorator", "file" => $currentdir."/daologgerdecorator.class.php", "singleton" => false, "properties" => array( ); $mappingbuilder = new MappingBuilderFromArray( $iocmap ); $ioccontainer = new IoCContainerWithDecoratorSupport( $mappingbuilder->getapplicationmap() ); $ioccontainer->setdecoratorssupport( array( $ioccontainer->create("interfaceiocdecoratorsupport"))); $userdao = $ioccontainer->create("userdao"); $orderdao = $ioccontainer->create("orderdao"); $itemdao = $ioccontainer->create("itemdao"); var_dump($userdao); var_dump($orderdao); var_dump($itemdao); ników. Wyobraźmy sobie, że klient definiuje nowy wymóg: chce, aby modyfikacji danych mogli dokonywać tylko administratorzy aplikacji. Możemy tu zastosować podobne podejście, jak przy logowaniu. Utworzymy więc klasę DAOSecutiryDecorator, która przy wywoływaniu każdej metody save( update() czy delete() będzie sprawdzała, czy wykonujący ją użytkownik ma prawa do jej użycia: jeżeli nie, aplikacja zgłosi wyjątek. Podsumowanie Stosowanie kontenera IoC i wzorca Dekorator nie jest remedium na wszelkie problemy przekrojowe. Aby wprowadzenie do kodu rzeczywistej aplikacji aspektów logowania i bezpieczeństwa było możliwe od samego początku, aplikacja ta musi mieć jasny podział na warstwy. Należy również ją tworzyć zgodnie z dobrymi praktykami programowania obiektowego, w szczególności kładąc nacisk na interfejsy i kompozycję obiektów. Warto też pamiętać, że reguły bezpieczeństwa i logowania nie są jedynymi problemami przekrojowymi: zaliczają się do nich również transakcje, profilowanie, keszowanie (caching) czy walidacja. Na szczęście i te problemy można rozwiązać przy pomocy kontenera IoC i odpowiednich dekoratorów. O autorze Piotr Szarwas ma wieloletnie doświadczenie w programowaniu i tworzeniu aplikacji WWW (PHP, Java). Jest konsultantem w jednej z największych polskich firm IT, a także doktorantem na Wydziale Fizyki Politechniki Warszawskiej. Od dawna pisze artykuły dla PHP Solutions. Kontakt z autorem: piotr.szarwas@gmail.com 7
Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski
Adapter: opis Wzorce Strukturalne Tomasz Borzyszkowski Alternatywna nazwa: Wrapper (opakowanie) Rola obiektu Adapter: pełni wobec Klienta rolę otoczki, która umożliwia przetłumaczenie jego żądań na protokół
Bardziej szczegółowoProjektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Laboratorium 11 - przegląd wybranych wzorców mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 24 maja 2017 1 / 38 mgr inż. Krzysztof Szwarc Programowanie obiektowe Wzorce
Bardziej szczegółowoPHP 5 język obiektowy
PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje
Bardziej szczegółowoWprowadzenie do programowania aplikacji mobilnych
Wprowadzenie do programowania aplikacji mobilnych dr Przemysław Juszczuk dr Przemysław Juszczuk Trochę historii Idea wzorców projektowych wywodzi się jeszcze z wczesnych lat osiemdziesiątych ubiegłego
Bardziej szczegółowoKlasy abstrakcyjne i interfejsy
Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie
Bardziej szczegółowoRysunkowy tutorial Możesz swobodnie dystrybuować ten plik jeśli pozostawisz go w nietkniętym stanie. Możesz także cytować jego fragmenty umieszczając w tekście odnośnik http://mbartyzel.blogspot.com Jak
Bardziej szczegółowoProgramowanie zorientowane obiektowo. Mateusz Kołecki
Programowanie zorientowane obiektowo Mateusz Kołecki Plan MVC Wstęp Separacja odpowiedzialnośći Antyprzykład Dobry przykład Wady/zalety MVC MVC to tylko początek - wzorce projektowe Dlaczego chcemy używać
Bardziej szczegółowoPlik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:
Wzorce projektowe, cz. 2 Strategy Druga część z serii wpisów o wzorcach projektowych. Dziś omówię wzorzec Strategii (Strategy). Wstęp Strategia jest wzorcem projektowym, który definiuje rodzinę wymiennych
Bardziej szczegółowoDzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton
Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu
Bardziej szczegółowoProgramowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
Bardziej szczegółowoObiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody
Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,
Bardziej szczegółowoWprowadzenie do projektu QualitySpy
Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować
Bardziej szczegółowoProjektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016 Repository dodatkowa warstwa abstrakcji na obiektową warstwę dostępu do danych.
Bardziej szczegółowoRozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
Bardziej szczegółowoWzorce projektowe Michał Węgorek
Wzorce projektowe Michał Węgorek Wzorce projektowe Plan prezentacji Co to jest i po co to jest? Podział Najczęściej spotykane wzorce Bibliografia Co to jest i po co to jest? Wzorzec projektowy (ang. Design
Bardziej szczegółowoDekorator: wzorzec projektowy na każdą bolączkę
Techniki Dekorator: wzorzec projektowy na każdą bolączkę Paweł Kozłowski Stopień trudności: Nazwa wzorca projektowego dekorator jest nieco myląca, ponieważ sugeruje, że będziemy coś wzbogacać, dekorować
Bardziej szczegółowoTechnologia Programowania 2016/2017 Wykład 4
Technologia Programowania 2016/2017 Wykład 4 Wzorce projektowe GoF Jakub Lemiesz Wzorce GRASP a wzorce GoF Znamy 9 wzorców GRASP ogólne zasady Na GRASP opierają się klasyczne wzorce GoF Na wzorcach GoF
Bardziej szczegółowoWarstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.
Warstwa integracji wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe. 1. Ukrycie logiki dostępu do danych w osobnej warstwie 2. Oddzielenie mechanizmów trwałości od modelu obiektowego Pięciowarstwowy
Bardziej szczegółowoProxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.
Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły
Bardziej szczegółowo10. Programowanie obiektowe w PHP5
Ogólnie definicja klasy wygląda jak w C++. Oczywiście elementy składowe klasy są zmiennymi PHP, stąd nieśmiertelne $. Warto zauważyć, że mogą one mieć wartość HHH mgr inż. Grzegorz Kraszewski TECHNOLOGIE
Bardziej szczegółowoPrzykładowa implementacja
Wzorce projektowe, cz. 10 Facade Fasada służy do ujednolicenia dostępu do złożonego systemu poprzez udostępnienie uproszczonego i uporządkowanego interfejsu programistycznego. Fasada zwykle implementowana
Bardziej szczegółowoWzorce logiki dziedziny
Wzorce logiki dziedziny 1. Wzorce logiki dziedziny skrypt transakcji (Transaction Script), brama tabeli (Table Data Gateway), model dziedziny (Domain model), strategia (Strategy), moduł tabeli (Table Module),
Bardziej szczegółowoWspółbieżność w środowisku Java
Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych
Bardziej szczegółowoE.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze
Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie
Bardziej szczegółowoAnaliza i projektowanie aplikacji Java
Analiza i projektowanie aplikacji Java Modele analityczne a projektowe Modele analityczne (konceptualne) pokazują dziedzinę problemu. Modele projektowe (fizyczne) pokazują system informatyczny. Utrzymanie
Bardziej szczegółowoProjektowanie obiektowe Wzorce projektowe
Projektowanie obiektowe Wzorce projektowe Gang of Four Kreacyjne wzorce projektowe (wzorce konstrukcyjne) 1 Roadmap Memento Factory Method Abstract Factory Prototype Builder 2 Wzorce konstrukcyjne wzorce
Bardziej szczegółowoWzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Wzorce projektowe Wzorzec projektowy (ang. design pattern) w inżynierii oprogramowania, rozwiązanie często pojawiających się, powtarzalnych problemów projektowych.
Bardziej szczegółowoWstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.
Adrian Skalczuk Szymon Kosarzycki Spis Treści Wstęp [1/2] Wzorce projektowe są nieodłącznym przyjacielem programisty pozwalają pisać czystszy kod, łatwiejszy do zrozumienia przez innych i zapewniają pewien
Bardziej szczegółowoWzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Adapter - strukturalny wzorzec projektowy, którego celem jest umożliwienie współpracy dwóm klasom o niekompatybilnych interfejsach - adapter przekształca interfejs
Bardziej szczegółowoProgramowanie obiektowe
Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.
Bardziej szczegółowoProgramowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki
Programowanie w Sieci Internet Blok 2 - PHP Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki Co dziś będziemy robić Podstawy podstaw, czyli małe wprowadzenie do PHP, Podstawy
Bardziej szczegółowoPHP: bazy danych, SQL, AJAX i JSON
1 PHP: bazy danych, SQL, AJAX i JSON SYSTEMY SIECIOWE Michał Simiński 2 Bazy danych Co to jest MySQL? Jak się połączyć z bazą danych MySQL? Podstawowe operacje na bazie danych Kilka dodatkowych operacji
Bardziej szczegółowoWzorce dystrybucji i wspólbieżności autonomicznej
Wzorce dystrybucji i wspólbieżności autonomicznej 1. Wzorce dystrybucji, fasada zdalna (Remote Facade), obiekt transfery danych (Data Transfer Object), 2. Wzorce współbieżności autonomicznej, blokada optymistyczna
Bardziej szczegółowoLaboratorium z przedmiotu Programowanie obiektowe - zestaw 04
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych
Bardziej szczegółowoMVC w praktyce tworzymy system artykułów. cz. 1
MVC w praktyce tworzymy system artykułów. cz. 1 Tworząc różnego rodzaju aplikacje natrafiamy na poważny problem utrzymania dobrej organizacji kodu przejrzystej oraz łatwej w rozbudowie. Z pomocą przychodzą
Bardziej szczegółowoWzorce projektowe cz. II. Wzorce projektowe cz. II 1/35
Wzorce projektowe cz. II Wzorce projektowe cz. II 1/35 Wzorce projektowe cz. II 2/35 Iterator Przeznaczenie Wzorzec zapewnia sekwencyjny dostęp do elementów obiektu zagregowanego bez ujawniania jego reprezentacji
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w
Bardziej szczegółowoProgramowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 03 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas abstrakcyjnych i interfejsów. Wprowadzenie
Bardziej szczegółowoAplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium
Bardziej szczegółowoPrzygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)
Program szkolenia: Przygotowanie do nowoczesnego programowania po stronie przeglądarki (HTML5, CSS3, JS, wzorce, architektura, narzędzia) Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania:
Bardziej szczegółowoTemat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych
PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W ELBLĄGU INSTYTUT INFORMATYKI STOSOWANEJ Sprawozdanie z Seminarium Dyplomowego Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych
Bardziej szczegółowoGrzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki 2011. Promotor dr inż. Paweł Figat
Grzegorz Ruciński Warszawska Wyższa Szkoła Informatyki 2011 Promotor dr inż. Paweł Figat Cel i hipoteza pracy Wprowadzenie do tematu Przedstawienie porównywanych rozwiązań Przedstawienie zalet i wad porównywanych
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Metody statyczne i klasowe Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 1 / 23 W poprzednich odcinkach... Klasy kategorie obiektów Przynależność
Bardziej szczegółowoTypy, klasy typów, składnie w funkcji
Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas
Bardziej szczegółowoProgramowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,
Bardziej szczegółowoKontrola dostępu w aplikacjach webowych
Bezpieczeństwo RBAC Kontrola dostępu w aplikacjach webowych Tworząc aplikacje webowe, szczególnie te bardziej skomplikowane, realizujące złożoną logikę biznesową, bardzo często spotykamy się z problemem
Bardziej szczegółowoMVVM Light Toolkit. Julita Borkowska
MVVM Light Toolkit Julita Borkowska Czym jest MVVM Light Toolkit? MVVM Light Toolkit został stworzony w 2009 roku przez Laurenta Bugnion. Jest to biblioteka dostarczająca zestaw komponentów pomocnych podczas
Bardziej szczegółowoSpis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4
Spis treści 1 Dekoratory 1.1 Zadanie 1 1.2 Zadanie 2 1.3 Zadanie 3 1.4 Zadanie 4 Dekoratory Dekoratory w Pythonie służą do zastępowania zdefiniowanych przez nas funkcji przez funkcje (lub inne obiekty)
Bardziej szczegółowoAplikacje RMI Lab4
Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Lab4 Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych 1 1. Koncepcja budowy aplikacji RMI (aplikacja rozproszonych
Bardziej szczegółowoPolimorfizm. dr Jarosław Skaruz
Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody
Bardziej szczegółowoProjektowanie obiektowe Wzorce projektowe. Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów)
Projektowanie obiektowe Wzorce projektowe Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów) 1 Roadmap Adapter Bridge Composite Facade 2 Pojęcia obiekt interfejs typ klasa 3 Co to jest delegacja?
Bardziej szczegółowoKonstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.
Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class
Bardziej szczegółowoWebowy generator wykresów wykorzystujący program gnuplot
Uniwersytet Mikołaja Kopernika Wydział Fizyki, Astronomii i Informatyki Stosowanej Marcin Nowak nr albumu: 254118 Praca inżynierska na kierunku informatyka stosowana Webowy generator wykresów wykorzystujący
Bardziej szczegółowoNarzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl
Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z
Bardziej szczegółowoProgramowanie komponentowe 5
Budowa warstwy klienta w architekturze typu klient-serwer zbudowanych z komponentów typu EE - klient desktopowy i internetowy. Zastosowanie komponentów opartych na technologii EJB 3.2. na podstawie https://docs.oracle.com/javaee/7/jeett.pdf
Bardziej szczegółowoDekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).
Dekoratory są w miarę ezoteryczną cechą Pythona w przeciwieństwie do funkcji, klas czy iteratorów nie są powszechną cechą języków programowania. Niemniej, warto je omówić mimo wszystko, gdyż są niezwykle
Bardziej szczegółowoBuilder (budowniczy) Cel: Przykład:
1/8 Builder (budowniczy) Cel: Oddzielenie konstruowania złożonego obiektu od jego reprezentacji, tak aby ten sam proces konstrukcji mógł tworzyć różne reprezentacje. Przykład: 2/8 abstract class TableBuilder
Bardziej szczegółowoSingleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.
1/8 Singleton Cel: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej. Przykład: Niekiedy ważne jest, aby tworzyć tylko jedną instancję jakiejś klasy. Globalne zmienne
Bardziej szczegółowoprogramowanie w oparciu o platformę netbeans w praktyce
programowanie w oparciu o platformę netbeans w praktyce Adam Kędziora. Netbeans innovators grants. Mechanizm lookup jako panorama firm. Węzły w netbeans. Mechanizm lookup jako torba z narzędziami. Dwa
Bardziej szczegółowoInterfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej
Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,
Bardziej szczegółowoProblemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?
Problemy projektowania obiektowego Czy podobne problemy można rozwiązywac w podobny sposób? Czy te problemy można przedstawić w abstrakcyjny sposób, tak aby były pomocne w tworzeniu rozwiązań w różnych
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
Bardziej szczegółowoWykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Bardziej szczegółowoPapyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska
Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Zaawansowane metody programowania Copyright c 2014 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania
Bardziej szczegółowoSpring Framework - wprowadzenie i zagadnienia zaawansowane
Program szkolenia: Spring Framework - wprowadzenie i zagadnienia zaawansowane Informacje ogólne Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Spring Framework - wprowadzenie i zagadnienia
Bardziej szczegółowoWyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.
Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,
Bardziej szczegółowoProjekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView
Projekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView Wykonali: Krzysztof Przybyłek Piotr Misiuda IVFDS Istotę programowania obiektowego
Bardziej szczegółowoWyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w
Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal
Bardziej szczegółowoECDL Podstawy programowania Sylabus - wersja 1.0
ECDL Podstawy programowania Sylabus - wersja 1.0 Przeznaczenie Sylabusa Dokument ten zawiera szczegółowy Sylabus dla modułu Podstawy programowania. Sylabus opisuje, poprzez efekty uczenia się, zakres wiedzy
Bardziej szczegółowoProjektowanie baz danych za pomocą narzędzi CASE
Projektowanie baz danych za pomocą narzędzi CASE Metody tworzenia systemów informatycznych w tym, także rozbudowanych baz danych są komputerowo wspomagane przez narzędzia CASE (ang. Computer Aided Software
Bardziej szczegółowoProjektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass
Bardziej szczegółowoProjektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności
Projektowanie obiektowe Wzorce projektowe Gang of Four Wzorce odpowiedzialności 1 Roadmap Singleton Observer Mediator Proxy Flyweight 2 Wzorce odpowiedzialności Udostępniają techniki centralizacji, delegowania
Bardziej szczegółowoWzorce projektowe i refaktoryzacja
Wzorce projektowe i refaktoryzacja Paweł Kozioł p.koziol@students.mimuw.edu.pl 18.01.2005 Moja praca magisterska Narzędzie dla środowiska Eclipse wspierające stosowanie wzorców projektowych J2EE Prowadzący:
Bardziej szczegółowoProgram szkolenia ABAP dla studentów Wydział Matematyki Stosowanej
Program szkolenia ABAP dla studentów Wydział Matematyki Stosowanej Spis treści Wstęp... 3 Parę słów o FIS-SST... 3 Czym jest SAP... 3 Program szkolenia... 3 Ocena z przedmiotu... 5 Autor Tomasz Łękawa
Bardziej szczegółowoBackend Administratora
Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona
Bardziej szczegółowoWSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy
WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera
Bardziej szczegółowoAbstract Factory (fabryka abstrakcyjna)
1/9 Abstract Factory (fabryka abstrakcyjna) Cel: Zapewnienie interfejsu do tworzenia rodzin powiązanych obiektów bez specyfikacji konkretnej klasy. Przykład: Aplikacja do ustawiania mebli: osobne rodziny
Bardziej szczegółowoPLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),
PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych
Bardziej szczegółowoUniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą
Bardziej szczegółowoBaza danych sql. 1. Wprowadzenie
Baza danych sql 1. Wprowadzenie Do tej pory operowaliście na listach. W tej instrukcji pokazane zostanie jak stworzyć bazę danych. W zadaniu skorzystamy z edytora graficznego struktury bazy danych, który
Bardziej szczegółowoProgramowanie obiektowe - 1.
Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która
Bardziej szczegółowomedia Blitz wydajne sytemy szablonów
Blitz wydajne sytemy szablonów Dlaczego stosować szablony? MVC Kontroler Model Widok Co to jest Blitz? Rozszerzenie PHP stworzone przez Alexey A. Rybak a. Regularnie rozwijany od 2005 roku. Szybki i lekki
Bardziej szczegółowoR o g e r A c c e s s C o n t r o l S y s t e m 5
R o g e r A c c e s s C o n t r o l S y s t e m 5 Nota aplikacyjna nr 003 Wersja dokumentu: Rev. B Uprawnienia Uwaga: Niniejszy dokument dotyczy RACS v5.2 (VISO 1.2.2 lub nowszy) Wprowadzenie W systemie
Bardziej szczegółowoKurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
Bardziej szczegółowoProgramowanie obiektowe
Wykład 12 Marcin Młotkowski 16 maja 2018 Plan wykładu 1 Analiza obiektowa Dziedziczenie Dziedziczenie a składanie 2 Marcin Młotkowski 482 / 537 Dziedziczenie Dziedziczenie a składanie Plan wykładu 1 Analiza
Bardziej szczegółowoProgramowanie Zespołowe
Programowanie Zespołowe Dobre Praktyki dr Rafał Skinderowicz mgr inż. Michał Maliszewski Parafrazując klasyka: Jeśli piszesz w Javie pisz w Javie - Rafał Ciepiela Principal Software Developer Cadence Design
Bardziej szczegółowoProgramowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,
Bardziej szczegółowoUML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.
UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami
Bardziej szczegółowoC++ Przeładowanie operatorów i wzorce w klasach
C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje
Bardziej szczegółowoListy powiązane zorientowane obiektowo
Listy powiązane zorientowane obiektowo Aby zilustrować potęgę polimorfizmu, przeanalizujmy zorientowaną obiektowo listę powiązaną. Jak zapewne wiesz, lista powiązana jest strukturą danych, zaprojektowaną
Bardziej szczegółowoGenerated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only. System Szablonów
System Szablonów System szablonów System szablonów to biblioteka, która pozwala oddzielić warstwę prezentacji od warstwy logicznej. Aplikacja WWW najpierw pobiera wszystkie dane, przetwarza je i umieszcza
Bardziej szczegółowoWspółbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
Bardziej szczegółowo5. Mechanizm szablonów.
5. Mechanizm szablonów. Moduł szablonów daje możliwość definicji dowolnej ilości szablonów strony publicznej serwisu. W połączeniu z modułami Marketing MIX oraz Wzorców Elementów został opracowany tak
Bardziej szczegółowoAutomatyczne generowanie kodu. Marek.Berkan@e-point.pl. 4Developers, 26 marca 2010
4Developers, 26 marca 2010 Zakres wykładu O czym zamierzam opowiedzieć: Przyspieszenie tworzenia aplikacji Ułatwienie utrzymania aplikacji Budowanie kontraktów pomiędzy developerami a innymi uczestnikami
Bardziej szczegółowoPodstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Bardziej szczegółowoProjektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń
Projektowanie obiektowe Wzorce projektowe Gang of Four Wzorce rozszerzeń 1 Roadmap Decorator Iterator Visitor 2 Wzorce rozszerzeń Mają na celu uczynić proces rozszerzania kodu bardziej czytelnym, prostym
Bardziej szczegółowo