Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control/Dependency Injection Wiktor Zychla 2018
|
|
- Antonina Witek
- 6 lat temu
- Przeglądów:
Transkrypt
1 Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control/Dependency Injection Wiktor Zychla Inversion of Control vs Dependency Injection Inversion of Control (Dependency Inversion) = zestaw technik pozwalających tworzyć struktury klas o luźniejszym powiązaniu. Trzy kluczowe skojarzenia: 1. Późne wiązanie możliwość modyfikacji kodu bez rekompilacji, wyłącznie przez rekonfigurację, programming against interfaces (DIP) 2. Ułatwienie tworzenia testów jednostkowych zastąpienie podsystemów przez ich stuby/fake i 3. Uniwersalna fabryka tworzenie instancji dowolnych typów według zadanych wcześniej reguł Dependency Injection = konkretny sposób realizacji IoC w językach obiektowych Inversion = ogólna zasada Injection = jej implementacja 2 więc przypomnijmy Dependency Inversion Principle Zalety: 1. Rozszerzalność (OCP) teoretycznie możliwe rozszerzenia o konteksty nie znane w czasie planowania 2. Równoległa implementacja dobrze zdefiniowany kontrakt zależności pozwala rozwijać oba podsystemy niezależnie 3. Konserwowalność (maintainability) dobrze zdefiniowana odpowiedzialność to zawsze lepsza architektura i zwykle łatwiejsza konserwacja 4. Łatwość testowania - obie klasy mogą być testowane niezależnie; ta z wstrzykiwaną zależnością może być testowana przez wstrzyknięcie stuba/fake a 5. Późne wiązanie możliwość określenia konkretnej implementacji nawet bez rekompilacji
2 3 Twarde zależności vs miękkie zależności Jeszcze inne spojrzenie na modularność: 1. Sztywna zależność (stable dependency) klasyczna modularność; zależne moduły już istnieją, są stabilne, znane i przewidywalne (np. biblioteka standardowa) 2. Miękka zależność (volatile dependency) modularność dla której zachodzi któryś z powodów wprowadzenia spoiny: a. Konkretne środowisko może być konfigurowane dopiero w miejscu wdrożenia (późne wiązanie) b. Moduły powinny być rozwijane równolegle 3. Spoina (seam) miejsce, w którym decydujemy się na zależność od interfejsu zamiast od konkretnej klasy Uwaga. O ile zastosowanie technik DI pozwala na wprowadzenie miękkich zależności w miejscach spoin, o tyle zwykle zależności do samych ram (frameworków) DI mają charakter sztywny. Innymi słowy, nie projektuje się aplikacji w taki sposób, żeby móc miękko przekonfigurowywać je na różne implementacje ram DI. Zobaczymy jednak wzorzec Local Factory, który w praktyce na tyle izoluje użycie ramy DI w aplikacji, że jej wymiana na inny nie stanowi większego problemu. 4 Kluczowe podwzorce Dependency Injection (na przykładzie kontenera Unity) Uwaga. O ramie (frameworku) DI mówimy żargonowo kontener DI (rzadziej Kernel DI). Kontener Unity ( to jedna z wielu implementacji ramy Dependency Injection dla.net. Inne implementacje: dla.net NInject, Castle Windsor dla Java CDI, Spring DI
3 4.1 Składanie obiektów (Composition) 1. Kontener/kernel obiekt usługowy którego zadaniem jest tworzenie instancji i rozwiązywanie zależności (ang. dependency resolving). To jest ta uniwersalna fabryka. 2. Rozwiązywanie zależności sztywnych (opisanych konkretnym typem) class Program static void Main(string[] args) var foo = container.resolve<foo>(); Console.WriteLine( foo.gettype() ); Console.ReadLine(); public class Foo 3. Rozwiazywanie zależności miękkich (opisanych mapowaniem abstrakcji na implementację) class Program static void Main(string[] args) container.registertype<ifoo, Foo>(); var foo = container.resolve<ifoo>(); Console.WriteLine( foo.gettype() ); Console.ReadLine();
4 public interface IFoo public class Foo : IFoo 4. Rozwiązywanie instancji class Program static void Main(string[] args) container.registerinstance<ifoo>( new Foo() ); var foo = container.resolve<ifoo>(); Console.WriteLine( foo.gettype() ); Console.ReadLine(); public interface IFoo public class Foo : IFoo 5. Rozwiązywanie grafu zależności - a co jeśli w grafie występują cykle? 6. Wstrzykiwanie przez konstruktor najdłuższy lub wskazany ([InjectionConstructor]). Zależność jest zawsze dostępna, bo nie da się wykonstruować obiektu nie rozwiązując jego zależności (ang. satisfy its dependencies).. Wstrzykiwanie przez konstruktor jest z tego powodu rekomendowane.
5 class Program static void Main(string[] args) container.registertype<ifoo, Foo>(); container.registertype<ibar, Bar>(); var foo = container.resolve<ifoo>(); Console.WriteLine(foo.GetType()); Console.ReadLine(); public interface IFoo public class Foo : IFoo public Foo( IBar bar ) public interface IBar public class Bar : IBar
6 7. Wstrzykiwanie przez metodę atrybut [InjectionMethod] zapewnienie że w różnych kontekstach (metodach) wstrzykiwane mogą być inne zależności (różne metody mogą mieć różne zależności) 8. Wstrzykiwanie przez właściwości ([Dependency]) zapewnienie że domyślna zależność jest dostępna, ale może być zmodyfikowana (bo klient wartość właściwości może zawsze zmienić) 9. Budowanie obiektu wyprodukowanego na zewnątrz (ang build-up) class Program static void Main(string[] args) container.registertype<ibar, Bar>(); var foo = new Foo(); container.buildup(foo); Console.WriteLine(foo.Bar.GetType()); Console.ReadLine(); public interface IFoo public class Foo : IFoo [Dependency] public IBar Bar get; set; public interface IBar public class Bar : IBar
7 10. Rejestracja metody fabrykującej (Injection Factory) zapewnienie możliwości tworzenia zależności przez dowolną metodę fabrykującą. To najogólniejszy, najbardziej uniwersalny sposób określania zależności i nadaje się do najbardziej złożonych scenariuszy. Przykład: należy wykonstruować obiekt z rozwiązanymi zależnościami, a następnie zwrócić proxy do niego. class Program static void Main(string[] args) container.registertype<ibar, Bar>(); container.registertype<ifoo>( new InjectionFactory(c => var b = c.resolve<ibar>(); var f = new Foo(); f.bar = b; return f; )); var foo = container.resolve<ifoo>(); Console.WriteLine(foo.GetType()); Console.WriteLine(foo.Bar.GetType()); Console.ReadLine(); public interface IFoo IBar Bar get; set; public class Foo : IFoo [Dependency] public IBar Bar get; set; public interface IBar public class Bar : IBar
8 4.2 Zarządzanie czasem życia obiektów (Lifecycle Management) 1. Transient ulotne 2. ContainerControlled singletony 3. Hierarchical singletony, ale inne w dziedziczonych kontenerach 4. PerThread inny obiekt per wątek 5. PerHttpContext inny obiekt per żądanie HTTP do serwera aplikacyjnego 6. Custom 4.3 Konfiguracja kontenera (Configuration) Zwyczajowo kontenery dostarczają trzech sposobów konfiguracji: Konfiguracja deklaratywna mapowania typów opisane są w pliku konfiguracyjnym, zwykle w formacie XML. Rekonfiguracja polega na modyfikacji pliku XML w miejscu osadzenia aplikacji. To bardzo praktyczna możliwość, ponieważ tę sama aplikację można różnie skonfigurować w różnych miejscach wdrożenia, bez potrzeby rekompilacji. Przykładowy app.config <?xml version="1.0" encoding="utf-8"?>
9 <configuration> <configsections> <section name="unity" type="microsoft.practices.unity.configuration.unityconfigurationsection, Microsoft.Practices.Unity.Configuration"/> </configsections> <unity configsource="configuration\unity.config"/> <startup> <supportedruntime version="v4.0" sku=".netframework,version=v4.5.2" /> </startup> </configuration> Przykładowy unity.config <?xml version="1.0" encoding="utf-8"?> <unity xmlns=" <alias alias="ifoo" type="consoleapp.ifoo, ConsoleApp"/> <alias alias="foo" type="consoleapp.foo, ConsoleApp"/> <container> <register type="ifoo" mapto="foo" /> </container> </unity> Ładowanie konfiguracji deklaratywnej container.loadconfiguration(); Konfiguracja imperatywna mapowanie odbywa się w kodzie, w miejscu zwanym Composition Root (o tym dalej) Autokonfiguracja wariant konfiguracji imperatywnej, który polega na wskazaniu zestawu (assembly) / pakietu (package), a kontener automatycznie rejestruje napotkane interfejsy na ich napotkane implementacje. 4.4 Przechwytywanie żądań (Proxy)
10 Typowe zagadnienia przekrojowe (cross-cutting concerns): 1. Audytowanie 2. Logowanie 3. Monitorowanie wydajności 4. Bezpieczeństwo 5. Cache owanie 6. Obsługa błędów Frameworki DI często pozwalają obsłużyć tak zdefiniowane AOP dzięki temu że zamiast obiektu mogą zwracać proxy do niego. Przykład w Unity: 1. InterfaceInterceptor tworzy proxy przez delegowanie, pozwala przechwycić tylko metody interfejsu 2. VirtualMethodInterceptor tworzy proxy przez dziedziczenie, pozwala przechwycić tylko metody wirtualne using System; using System.Collections.Generic; using Unity; using Unity.Interception.ContainerIntegration; using Unity.Interception.InterceptionBehaviors; using Unity.Interception.Interceptors.InstanceInterceptors.InterfaceInterception; using Unity.Interception.PolicyInjection.Pipeline; class Program static void Main(string[] args) container.addnewextension<interception>(); // zarejestrowanie typu z interceptorem container.registertype<icalc, CalcImpl>( new Interceptor<InterfaceInterceptor>(), new InterceptionBehavior<LogInterceptionBehavior>()); // klient konstruuje instancję zwyczajnie // klient nie wie że dostaje proxy var calc = container.resolve<icalc>();
11 Console.WriteLine(calc.GetType()); calc.sum(5, 6); Console.ReadLine(); public interface ICalc int Sum(int p, int q); public class CalcImpl : ICalc public int Sum(int p, int q) return p + q; /// <summary> /// Interceptor, element programowania aspektowego /// Przechwytuje wywołania metod z docelowego obiektu /// </summary> public class LogInterceptionBehavior : IInterceptionBehavior #region IInterceptionBehavior Members public IEnumerable<Type> GetRequiredInterfaces() return Type.EmptyTypes; public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehavi ordelegate getnext) Console.WriteLine("wywołanie metody 0", input.methodbase.name); foreach (object param in input.arguments) Console.WriteLine("parametr 0", param); var ret = getnext().invoke(input, getnext); Console.WriteLine("wynik = 0", ret.returnvalue); return ret; public bool WillExecute get return true; #endregion
12 5 ServiceLocator vs Composition Root+Factory/Resolver Jak w roz udowa ej, wielo odułowej aplika ji radzić sobie z rozwiązywaniem zależności do usług? Że y rozwiązać zależ ość potrze y jest ko te er. I y i słowy, w kodzie, w iejs u w który potrze uje y i sta ji usługi, potrze y jest ko te er. Najgorsze rozwiąza ie przekazywać ko te er jako para etr do klas/ etod. Tro hę lepsze rozwiąza ie Service Locator. Service Locator = schowanie singletona kontenera DI za fasadą, pozwalającą z dowolnego miejsca aplikacji na rozwiązanie zależności do usługi. Pozwala znacznie zredukować jawne zależności miedzy klasami. Service Locator nie musi być przekazywany jako zależność, o jako si gleto, oże yć osiągal y z dowol ego miejsca. Użycie: // konfiguracja fasady na kontener var locator = new UnityServiceLocator(container); ServiceLocator.SetLocatorProvider(() => locator); //... w dowolnym miejscu kodu: var foo = ServiceLocator.Current.GetInstance<IFoo>(); Uwaga! Service Locator uważa się za antywzorzec z uwagi na dwa niepożądane zjawiska: 1. Service Locator powoduje owszem zredukowanie zależności między klasami, ale kosztem wprowadzenia zależności do podsystemu DI. To bardzo nieeleganckie. Zastosowanie DI powinno być przezroczyste dla kodu struktura klas powinna być taka sama bez względu na to czy wspomagamy się ramą DI czy nie. 2. Zależności rozwiązywane przez SL są niejawne rozwiązywanie pojawia się w implementacji. Na poziomie struktury (metadanych) nie ma jawnej informacji że klasa A zależy od B A sobie samo wykonstruuje B za pomocą SL kiedy jest mu to potrzebne. Problem w tym, że ponieważ tej zależności nie widać na poziomie struktury, może być trudna do wychwycenia i przez to powodować błędy w czasie wykonania programu (wtedy, gdy zapomni się zarejestrować implementację B w kontenerze). Alternatywą dla SL jest Compositon Root + Local Factory (Dependency Resolver) Composition Root = fragment kodu wykonywany zwykle na starcie aplikacji, odpowiedzialny za zdefiniowanie wszystkich zależności. W idealnej rzeczywistości, tylko w Composition Root pojawia się zależność do DI, a cała reszta aplikacji jest jej pozbawiona. W praktyce w aplikacji typu desktop, CR jest funkcja wywoływaną z Main lub jej okolic, w aplikacji typu web to funkcja wywoływana w potoku z handlera zdarzenia Application_Start lub
13 jego okolic. W stosie aplikacyjnym jest to warstwa najwyższa. Każde inne miejsce na konfigurację grafu zależności to już potknięcie projektowe. Sam CR jest zbyt słaby żeby rozwiązać problem rozwiązywania zależności. Naiwne zastosowanie spowodowałoby konieczność wytworzenia wszystkich instancji obiektów ze wstrzykiwanymi zależnościami już na starcie aplikacji. To oczywiście niemożliwe. W praktyce CR należy wesprzeć lokalną fabryką fabryką z miękką zależnością do implementacji dostawcy obiektów. Taką fabrykę nazywa się Local Factory (lub Dependency Resolver). Różnica między LF a SL jest taka, że LF jest częścią klas domeny, w której występują zależności, natomiast SL jest częścią obcego świata, zewnętrzną zależnością. Local Factory (Dependency Resolver) = fabryka odpowiedzialna za tworzenie instancji jednej lub wielu klas której funkcja fabrykująca nie ma gotowej implementacji. Zamiast tego, konkretna implementacja jest wstrzykiwana do fabryki z poziomu Compositon Root. Z kolei fabryka jest jedynym legalnym z punktu widzenia API danego podsystemu sposobem wytwarzania instancji obiektów tej jednej lub kilku klas. Obrazowo można powiedzieć, że w stosie aplikacyjnym cała logika od miejsca określenia fabryki w górę korzysta z tej fabryki do tworzenia instancji, ale konkretna implementacja jest wstrzyknięta do fabryki z samego wierzchu stosu aplikacyjnego, z poziomu CR. Na Local Factory można patrzeć jak na lokalnego Service Locatora, który tym się różni od swojego dużego brata że rozwiązuje problem lokalnie, na potrzeby jednej/kilku klas z jakiegoś konkretnego podsystemu i jest częścią dziedziny (API) tego podsystemu, a nie częścią obcego API, wymuszającego zewnętrzne zależności (jak SL). W prawdziwej aplikacji takich Local Factories jest więc wiele występują one wszędzie tam, gdzie pojawiają się miękkie zależności w ramach podsystemów. Dzięki LF możliwe jest zbudowanie zbioru klas zadanej domeny, który to zbiór jako zestaw (assembly) / pakiet (package) nie ma żadnych zewnętrznych zależności (w szczególności zależności do ramy DI). Z kolei zależności do ramy DI pojawiają się wyłącznie w CR Możliwe jest jednak skonfigurowanie fabryki na dowolnego dostawcę, w tym takiego który nie używa DI tylko konstruuje instancje konkretnych typów (na przykład do testów). Przykład: 6 Literatura uzupełniająca 1. Dhanji R. Prasanna Dependency Injection (2009, Java) 2. Mark Seemann Dependency Injection in.net (2012, C#) (źródło ilustracji i planu prezentacji) 3. Wiktor Zychla DI, Factories and Composition Root Revisited, online:
14
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control Wiktor Zychla 2013
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control Wiktor Zychla 2013 1 Dependency Injection Dependency Injection = zestaw technik pozwalających tworzyć
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control/Dependency Injection Wiktor Zychla 2014
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control/Dependency Injection Wiktor Zychla 2014 1 Inversion of Control vs Dependency Injection Inversion
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control/Dependency Injection Wiktor Zychla 2016
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (2) Wykład 10 Inversion of Control/Dependency Injection Wiktor Zychla 2016 1 Inversion of Control vs Dependency Injection Inversion
Projektowanie 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
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2017
Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2017 Repository dodatkowa warstwa abstrakcji na obiektową warstwę dostępu do danych.
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass
Projektowanie 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.
Instrukcja laboratoryjna nr.2
Języki programowania na platformie.net 2017/18 Instrukcja laboratoryjna nr.2 Kontener Unity Prowadzący: Tomasz Goluch Wersja: 2.0 I. Kontener Unity. Cel: Instalacja i konfiguracja kontenera Unity. Rejestracja
Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1
Szkolenie wycofane z oferty Program szkolenia: Enterprise Java Beans 3.0/3.1 Informacje: Nazwa: Enterprise Java Beans 3.0/3.1 Kod: Java-EE-EJB Kategoria: Java EE Grupa docelowa: developerzy Czas trwania:
Programowanie 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
Dariusz 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
Pico. Wstęp do kontenerów IoC.
Pico Wstęp do kontenerów IoC Michal.Malecki@man.poznan.pl Plan prezentacji Wzorzec Inversion of Control (IoC) Wyszukiwanie zależności (Dependency Injection) PicoContainer Case Study Podsumowanie Inversion
Spring 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
Zaawansowane Aplikacje Internetowe
Spring framework Katedra Mikroelektroniki i Technik Informatycznych Łódź, 26 października 2010 1 Spring Framework Spring Framework Framework dostarczający między innymi: Kontener IoC (Inversion of Control)
Michał Jankowski. Remoting w.net 2.0
Michał Jankowski Remoting w.net 2.0 Co to jest? Remoting jest zbiorem funkcji pozwalającym na komunikacje miedzy aplikacjami zarówno w obrębie jednego komputera jak i poprzez sieć Pozwala na komunikację
Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka
1 Omówienie wzorców wykorzystywanych w Prism 5.0 Dominika Różycka Czym jest wzorzec projektowy? 2 3 Wzorzec projektowy 1. Uniwersalne i sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych
Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2013
Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2013 1 Automated code generation To bardziej technika wspomagająca niż wzorzec, ale wykorzystywana w praktyce
namespace HostedReceiver { public class Receiver: IConfigureThisEndpoint, AsA_Server {
Pobranie i instalacja: - http://www.nservicebus.com/ - download v3.0 now - rozpakować - MSMQ powinno być zainstalowane (Panel Sterowania -> Dodaj/Usuń programy -> Składniki systemu Windows -> Kolejkowanie
Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8
Początki Javy Java została pierwotnie zaprojektowana dla telewizji interaktywnej, ale była to zbyt zaawansowaną technologią dla branży cyfrowej telewizji kablowej. James Gosling, Mike Sheridan i Patrick
Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i
Program szkolenia: Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Produktywne tworzenie aplikacji webowych z
Projektowanie 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
Różne odmiany budowniczego. Po co używać wzorca budowniczy? Kiedy używać budowniczego
Budowniczy to jeden ze wzorców projektowych używanych w programowaniu obiektowym. Zalicza się on do rodziny wzorców konstrukcyjnych. Dzięki użyciu budowniczego oddzielamy proces tworzenia obiektu od jego
Projektowanie 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?
Tomasz Dobek. t.dobek@students.mimuw.edu.pl
Spring Framework Tomasz Dobek t.dobek@students.mimuw.edu.pl Plan prezentacji Spring z lotu ptaka Kontener Spring IoC Spring AOP Menedżer transakcji w Springu Spring DAO Testy integracyjne Podsumowanie
Technologia 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
Java Persistence API - zagadnienia zaawansowane
Program szkolenia: Java Persistence API - zagadnienia zaawansowane Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Java Persistence API - zagadnienia zaawansowane Java-EE-jpa-pro
Kontenery IoC dla Java Guice 3.0
Kontenery IoC dla Java Guice 3.0 20 maja 2014 Kamil Piętak kpietak@agh.edu.pl Agenda Przegląd implementacji kontenerów IoC Guice 3.0 Wprowadzenie pierwsze kroki Definicja zależności Rodzaje wiązań (ang.
Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia
Program szkolenia: Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Testowanie aplikacji mobilnych na
Projektowanie 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
UML 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
Dokumentacja do API Javy.
Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu
Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6
Instrukcja 6 Laboratorium 8 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji
Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016
Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016 1 Wzorce strukturalne 1.1 Facade Motto: uproszczony interfejs dla podsystemu z wieloma interfejsami class SmtpFacade
Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.
Ekspert radzi mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8 Spis treści 1. Zarys rozwiązania...3 1.2 Case study...3 1.3 Wymagania...3 2. Projekt...3
Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne
Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne Informacje ogólne Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Wzorce projektowe i ich implementacja
1 Atrybuty i metody klasowe
1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich
Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski
Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski ASP.NET (2) Contexts and Dependency Injection (CDI) Specyfikacja składowa Java EE 6 dotycząca współpracy warstwy prezentacji z
Podstawy 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
JAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html
Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Dr inż. Zofia Kruczkiewicz wykład 4 Programowanie aplikacji internetowych, wykład 4 1 1. Zadania aplikacji rozproszonych obiektów
Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C
#import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.
Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody
Języki i metody programowania Java. Wykład 2 (część 2)
Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego
RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE
Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems www.cs.agh.edu.pl/~slawek/zrodla_rmi2.zip Kilka pytań Co mamy? rok 2005-ty, gotową wersję 2 programu NoteBoard.
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język
Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7
Instrukcja 7 Laboratoria 9, 10 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie
xmlns:prism=http://www.codeplex.com/prism c. <ContentControl prism:regionmanager.regionname="mainregion" />
1 Tworzenie Shella a. W pierwszej kolejności tworzymy nowy projekt: WPF Application. Name: Shell SolutionName: PrismApp b. Dodajemy bibliotekę PRISM za pomocą NuGet Managera (dla.net Framework 4.5 Prism
Programowanie 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,
PHP 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
Konstruktory. 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
Interfejsy. 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,
Programowanie obiektowe
Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do
Programowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Wzorce 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:
Klasy abstrakcyjne, interfejsy i polimorfizm
Programowanie obiektowe 12 kwietnia 2011 Organizacyjne Klasówka będzie 20 IV 2011. Sale jeszcze są pertraktowane. Materiał do wyjątków włącznie. Można mieć swoje materiały nieelektroniczne. Wywołanie z
Builder (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
Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz
Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania
Wywoływanie metod zdalnych
Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia
Program szkolenia: Architektura aplikacji i systemów - Wzorce architektoniczne dla projektantów
Program szkolenia: Architektura aplikacji i systemów - Wzorce architektoniczne dla Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Architektura aplikacji i systemów - Wzorce architektoniczne
Dzisiejszy 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
Podstawy frameworka Spring
Podstawy frameworka Spring Adresaci szkolenia: Szkolenie przeznaczone jest dla programistów znających język Java, chcących poszerzyć swoje kompetencje w zakresie tworzenia aplikacji.koncepcja szkolenia
Abstract 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
Aplikacje 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
Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Literatura Języki i paradygmaty programowania Wykład 2 1. C. S. Horstman, G. Cornell, core Java 2 Podstawy, Helion 2003
Szablony funkcji i klas (templates)
Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp
Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania
Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania Opis biznesowy świata rzeczywistego Wymagania funkcjonalne i niefunkcjonalne aplikacji Diagram przypadków życia Diagramy klas i sekwencji:
Programowanie 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
Programowanie bez fabryki. Po co używać wzorca fabryki?
Fabryka abstrakcyjna i wszystkie jej odmiany są rodziną konstrukcyjnych wzorców projektowych. Dzięki fabryce otrzymujemy interfejs, służący do generowania różnych obiektów, które go spełniają. Fabryka
METODY PROGRAMOWANIA
METODY PROGRAMOWANIA Odwrócenie sterowania i wstrzykiwanie zależności na przykładzie Spring Framework 13 stycznia 2018 Krzysztof Pawłowski kpawlowski@pjwstk.edu.pl CZYM JEST ODWRÓCENIE STEROWANIA? Odwrócenie
Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych
Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm Programy w Javie składają się z pakietów Pakiety zawierają definicje
Wykł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
Singleton. 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
Enkapsulacja, dziedziczenie, polimorfizm
17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja
Wywoływanie metod zdalnych
Wywoływanie metod zdalnych Podejście obiektowe do budowy systemów rozproszonych Wywoływanie metod zdalnych model systemu obiekt aplikacja kliencka interfejs serwer proxy szkielet sieć Istota podejścia
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ół
Program szkolenia: Symfony, nowoczesny framework PHP
Program szkolenia: Symfony, nowoczesny framework PHP Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Symfony, nowoczesny framework PHP PHP-frameworki PHP developerzy 3 dni 40% wykłady
Projektowanie obiektowe oprogramowania Testowanie oprogramowania Wykład 13 Wiktor Zychla 2014
Projektowanie obiektowe oprogramowania Testowanie oprogramowania Wykład 13 Wiktor Zychla 2014 1 Wprowadzenie State-of-the-art współczesnego warsztatu narzędzi testujących obejmuje nie tylko metodologie
Aplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt
Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce
Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Zwinna współpraca programistów i testerów z wykorzystaniem BDD i. by Example (JBehave/Spock/SpecFlow)
Program szkolenia: Zwinna współpraca programistów i testerów z wykorzystaniem BDD i Spec Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Zwinna współpraca programistów i testerów
Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI
Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI Maciej Zakrzewicz PLOUG mzakrz@cs.put.poznan.pl Plan prezentacji Wprowadzenie do architektury zorientowanej na usługi Charakterystyka technologii
Szkolenie wycofane z oferty
Szkolenie wycofane z oferty Program szkolenia: Java Server Faces 2 Informacje: Nazwa: Java Server Faces 2 Kod: Java-EE-JSF 2 Kategoria: Java EE Grupa docelowa: developerzy Czas trwania: 3 dni Forma: 50%
Programowanie 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
Projektowanie obiektowe. Roman Simiński Polimorfizm
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Polimorfizm Koncepcja polimorfizmu Słowo polimorfizm pochodzi od dwóch greckich słów: poly czyli wiele, morphos czyli
Programowanie w Javie
Programowanie w Javie Andrzej Czajkowski Lista nr 0 Debugger w Javie Celem ćwiczenia jest poznanie podstawowych funkcji narzędzia debugera (odpluskwiacz) w środowisku Eclipse. Po ukończeniu ćwiczenia student
Klasy 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
Wprowadzenie. Spring 2.5. Norbert Potocki. 3 lutego Norbert Potocki Spring 2.5
Wprowadzenie 3 lutego 2009 Wprowadzenie Spring zrąb tworzenia aplikacji JEE (ale nie tylko) w języku Java (ale nie tylko :)) powstał jako alternatywa dla ociężałej technologii EJB 2 i jako alternatywa
Programowanie obiektowe
Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje
Podstawy Języka Java
Podstawy Języka Java Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania, w którym programy definiuje się za pomocą obiektów elementów łączących
Programowanie 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,
Zaawansowane programowanie obiektowe - wykład 5
Zaawansowane programowanie obiektowe - wykład 5 dr Piotr Jastrzębski (czynnościowe) opisują zachowanie obiektów, komunikację pomiędzy nimi i ich odpowiedzialność. Interpreter Iterator (kursor) Łańcuch
Komunikacja i wymiana danych
Budowa i oprogramowanie komputerowych systemów sterowania Wykład 10 Komunikacja i wymiana danych Metody wymiany danych Lokalne Pliki txt, csv, xls, xml Biblioteki LIB / DLL DDE, FastDDE OLE, COM, ActiveX
JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.
JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod
Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)
Analiza i projektowanie obiektowe 2016/2017 Wykład 11: Zaawansowane wzorce projektowe (1) Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Wzorce projektowe
Projektowanie obiektowe oprogramowania Wykład 7 wzorce czynnościowe (2) Wiktor Zychla 2018
Projektowanie obiektowe oprogramowania Wykład 7 wzorce czynnościowe (2) Wiktor Zychla 2018 1 Mediator Motto: Koordynator współpracy ściśle określonej grupy obiektów dzięki niemu one nie odwołują się do