Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code.

Slides:



Advertisements
Similar presentations
Creating Vector Graphics in the Web Learning & Development Telerik Software Academy.
Advertisements

Redundant Array of Independent Disks Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Writing HTML made easier Telerik School Academy HTML, CSS and JavaScript.
Inside Windows Boot Process Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Guidelines to Preparing and Delivering an Elevator Pitch Presentation Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training.
Two basic algorithms for path searching in a graph Telerik Algo Academy Graph Algorithms.
Binary, Decimal and Hexadecimal Numbers Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Eclipse + Android SDK, VS + Windows Phone SDK Telerik Software Academy Hybrid Mobile Applications.
Welcome to the JSON-stores world Learning & Development Telerik Software Academy.
Eclipse + Android SDK, VS + Windows Phone SDK Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Twitter Bootstrap Telerik Software Academy
Things you need to know George Georgiev Technical Trainer GeorgeAtanasov George Atanasov Front-End Developer.
Hamiltonian Cycle Penka Borukova Student at Telerik Academy.
Group Policy Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
SOLID and Other Principles
Reverse polish notation, Operations with big numbers Ivelin Rachev Telerik Corporation “Baba Tonka” High School of Mathematics.
Telerik Software Academy ASP.NET MVC.
Sales Processes, Sales Cycle and the Sales Force Margarita Antonova Volunteer Telerik Academy academy.telerik.com Business System Analyst Telerik.
Design Patterns that ease the design by identifying a simple way to realize relationships between entities. Antony Jekov Telerik Software Academy academy.telerik.com.
Using KendoUI for SPA Applications Learning & Development Telerik School Academy.
The way to create cross-platform apps Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
PEST Analysis, Porter’s 5 Forces and Sustainability Strategies Margarita Antonova Volunteer Telerik Academy academy.telerik.com Business System.
Searching for a Job, Writing CV and Cover Letter, Passing a Job Interview Telerik Academy for Software Engineers October 6 th 2012 – Sofia academy.telerik.com.
Drive Partitioning Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Telerik Software Academy Mobile apps for iPhone & iPad.
Google APIs and Facebook API Ivaylo Kenov Penka Borukova Telerik Corporation Telerik Academy Students.
The magic of virtual machines Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Web development with ExpressJS Learning & Development Telerik School Academy.
Introduction to Design Patterns
Device APIs with Xamarin
Telerik Software Academy Mobile apps for iPhone & iPad.
Academy.telerik.com Class of , Fall 2013.
Telerik Software Academy Databases.
Google APIs and Facebook API Ivaylo Kenov Penka Borukova Telerik Corporation Telerik Academy Students.
Telerik Software Academy ASP.NET Web Forms.
What are WinJS and WinRT, Using the APIs in JavaScript George Georgiev Telerik Software Academy academy.telerik.com Technical Trainer itgeorge.net.
JavaScript Modules and Patterns Telerik Software Academy
The True power of dynamic web pages Learning & Development Team Telerik Software Academy.
Deal with initializing and configuring classes and objects Telerik Software Academy High-Quality Code.
Approximate string matching Evlogi Hristov Telerik Corporation Student at Telerik Academy.
Xamarin with SQLite Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
Ivaylo Kenov Telerik Software Academy Technical Assistant.
Developing "evil" JavaScript applications Learning & Development Telerik School Academy.
The PhoneGap History Doncho Minkov Telerik Software Academy Technical Trainer
Building Rock-Solid Software Svetlin Nakov Telerik Software Academy Manager Technical Training
Adobe® Photoshop® CS6 Essentials
Cultivating Professionals for Your Company The Success Story of Telerik Svetlin Nakov, PhD Manager Technical Training Telerik Corp.
Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
The way of the ViewModel and the Binding Learning & Development Telerik School Academy.
AJAX with ASP.NET MVC Telerik Software Academy
Nencho Nenchev Doroteya Agayna Telerik Software Academy Telerik Support Leads.
Installation, Sample Usage, Strings and OOP Telerik Software Academy Software Quality Assurance.
In JavaScript Learning & Development Telerik Software Academy.
Services in AngularJS Telerik Software Academy
Svetlin Nakov Telerik Software Academy Manager Technical Training
What is Roslyn and how can we use it? Telerik Academy Plus C# 6.0 and Roslyn Seminar.
Splitting JavaScript into Dependent Modules Learning & Development Telerik Software Academy.
Changing the default visualization of views in Xamarin.Forms Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
Telerik Software Academy HTML5.
What to expect from the new IDE Telerik Academy Plus Visual Studio 2015 and ASP.NET 5.
Hristian Hristov Telerik Corporation
I have to use math? I am out of here… Telerik School Academy Unity 2D Game Development.
Monitoring Server Performance Organizing Your Support Model Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Automating Windows Deployment Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Server Roles and Features Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Binary, Decimal and Hexadecimal Numbers Telerik Software Academy C# Fundamentals – Part 2.
Nikolay Kostov Telerik Software Academy academy.telerik.com Team Lead, Senior Developer and Trainer
Adding UI and Audio element Telerik Academy Plus Unity 2D Game Development.
Describe ways to assemble objects to implement a new functionality
Presentation transcript:

Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code

 Describe ways to assemble objects to implement a new functionality  Ease the design by identifying a simple way to realize relationships between entities  These design patterns are all about class and object composition  Structural class-creation patterns use inheritance to compose interfaces  Structural object-patterns define ways to compose objects to obtain new functionality 2

 Façade  Composite  Flyweight  Proxy  Decorator  Adapter  Bridge 3

 An object that provides a simplified interface to a larger body of code, such as class library  Make a software library easier to use, understand and more readable  Reduce dependencies of outside code  Keeps the Principle of least knowledge  Wrap a poorly designed APIs in a better one 5

 Façade pattern used in many Win32 API based classes to hide Win32 complexity  In XmlSerializer (in.NET) and JSON serializer (in JSON.NET) hides a complex task (that includes generating assemblies on the fly!) behind a very easy-to-use class.  WebClient, File are another examples 6

The hard way: popper.On();popper.Pop();amp.On();amp.SetSurroundSound();amp.SetVolume(10);amp.SetDvd(dvd);screen.Down();lights.Dimm(20);projector.On();projector.WideScreenMode();dvd.On();dvd.Play("Dzift"); The facade way: homeTheater.WatchMovie("Dzift"); 7

8

 Composite Pattern allows to combine different types of objects in tree structures  Gives the possibility to treat the same individual objects or groups of objects 10

 Used when  We have different objects and we want to treat them the same way  We want to present hierarchy of objects  Tree-like structures  Examples in.NET Framework  Windows.Forms.Control and its derived classes  System.Web.UI.Control and its derived classes  System.Xml.XmlNode and its derived classes 11

abstract class MailReceiver { public abstract void SendMail(); public abstract void SendMail();} class Address : MailReceiver { public override void SendMail() { /*...*/ } public override void SendMail() { /*...*/ }} class GroupOf Addresses : MailReceiver { private List participants; private List participants; public override void SendMail() { public override void SendMail() { foreach(var p in participants) p.SendMail(); foreach(var p in participants) p.SendMail(); }} 12 static void Main() { var rootGroup = new GroupOf Addresses(); var rootGroup = new GroupOf Addresses(); rootGroup.SendMail(); rootGroup.SendMail();}

13

 Use sharing to support large numbers of fine- grained objects efficiently  Reduce storage costs for large number of objects  Share objects to be used in multiple contexts simultaneously  Retain object oriented granularity and flexibility  Minimizes memory use by sharing as much data as possible with other similar objects  String.Intern returns Flyweight 15

 Each "flyweight" object is divided into 2 pieces:  state-dependent (extrinsic, as parameter)  state-independent (intrinsic, shared by factory) 16

17

 An object representing another object  Provide a surrogate or placeholder for another object to control access to it  Use an extra level of indirection to support distributed, controlled or intelligent access  Add a wrapper and delegation to protect the real component from undue complexity 19 Can be implemented using inheritance

 Remote proxy  Local representative of remote object  Example: WPF (decouple networking details), COM Callable Wrappers  Virtual proxy  Creates expensive object on demand  Examples: placeholder image, Entity Framework, cached repository  Protection proxy  Used to control access to an object, based on some authorization rules 20

21

 Add functionality to existing objects at run-time  Wrapping original component  Alternative to inheritance (class explosion)  Support Open-Closed principle  Flexible design, original object is unaware 23

24

 LargePizzaWithCheeseHamAndPeppers  Create LargePizza, apply HamDecorator, apply CheeseDecorator and apply PeppersDecorator 25

26

 Applicable in legacy systems  Used to add functionality to UI controls  Can be used to extend sealed classes  In.NET: CryptoStream and GZipStream decorates Stream  In WPF Decorator class provides a base class for elements that apply effects onto or around a single child element, such as Border or Viewbox 27

28

a.k.a. Wrapper or Translator

 Converts the given class' interface into another class requested by the client  Wraps an existing class with a new interface  Impedance match an old component to a new system  Allows classes to work together when this is impossible due to incompatible interfaces  In languages with multiple inheritance it is possible to adapt to more than one class (a.k.a. class adapters) 30

 A single Adapter interface may work with many Adaptees  In ADO.NET we have IDataAdapter with OleDbDataAdapter, SqlClientDataAdapter  Each is an adapter for its specific database 31 Client wants to use the adaptee but can’t due to incompatible interfaces

 In the demo, RichCompound implements ICompound and wraps ChemicalDatabank 32

 Used to divide the abstraction and its implementation (they are by default coupled)  That way both can be rewritten independently  Solves problems usually solved by inheritance  From: Abstraction -> Implementation To: Abstraction -> Abstraction -> Implementation  One abstraction uses another abstraction and they can be changed independently 34

 Abstraction and implementation can be extended independently  Creates “Has-A” relationship between Abstraction and Implementor  “Favor composition over inheritance” 35 Has-A

 From coupled:  All menu combinations  To uncoupled:  Burger with addition  Two separate concepts 36 Bridge

37

 Proxy – to lazy-instantiate an object, or hide the fact that you're calling a remote service, or control access to the object (one-to-one interface)  Decorator – to add functionality to an object runtime (not by extending that object's type)  Adapter – to map an abstract interface to another object which has similar functional role, but a different interface (changes interface for the client)  Bridge – define both the abstract interface and the underlying implementation. I.e. you're not adapting to some legacy or third-party code, you're the designer of all the code but you need to be able to swap out different implementations (all changeable) 38

форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране

 C# Telerik Academy  csharpfundamentals.telerik.com csharpfundamentals.telerik.com  Telerik Software Academy  academy.telerik.com academy.telerik.com  Telerik Facebook  facebook.com/TelerikAcademy facebook.com/TelerikAcademy  Telerik Software Academy Forums  forums.academy.telerik.com forums.academy.telerik.com 40