Deal with initializing and configuring classes and objects 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.
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.
About the Course Telerik Software Academy CSS Styling.
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.
Course Content, Evaluation, Exams Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
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
Reverse polish notation, Operations with big numbers Ivelin Rachev Telerik Corporation “Baba Tonka” High School of Mathematics.
April, Sofia, Telerik Software Academy Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
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.
What it is, and does it work 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.
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.
Approximate string matching Evlogi Hristov Telerik Corporation Student at Telerik Academy.
Xamarin with SQLite Telerik School Academy Xamarin apps for iOS, Android & WinPhone.
Know your Tools! Telerik Software Academy JavaScript Fundamentals.
Describe ways to assemble objects to implement a new functionality Telerik Software Academy High-Quality Code.
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.
Dimo Dimov Support Lead, Kendo UI Telerik Telerik Software Academy
Presentation transcript:

Deal with initializing and configuring classes and objects Telerik Software Academy High-Quality Code

 Deal with object creation mechanisms  Trying to create objects in a manner suitable to the situation  Composed of two dominant ideas  Encapsulating knowledge about which concrete classes the system uses  Hiding how instances of these concrete classes are created and combined 2

 Singleton  Simple Factory  Factory Method  Abstract Factory  Builder  Prototype  Fluent Interface  Lazy initialization  Object Pool 3

 The Singleton class is a class that is supposed to have only one (single) instance  Access window manager / file system / console  Access global application logger / DC / Mapper  Sometimes Singleton is wrongly thought of as a global variable – it is not!  Possible problems:  Lazy loading (created when first needed)  Thread-safe  References: C# in depth, MSDN, SourceMaking C# in depthMSDNSourceMakingC# in depthMSDNSourceMaking 5

6 public class Singleton { private static Singleton instance; private static Singleton instance; // Note: Constructor is 'protected' or 'private' // Note: Constructor is 'protected' or 'private' protected Singleton() { } protected Singleton() { } public static Singleton Instance() { // Can be property public static Singleton Instance() { // Can be property // Use 'Lazy initialization' // Use 'Lazy initialization' if (instance == null) { if (instance == null) { instance = new Singleton(); instance = new Singleton(); } return instance; return instance; } } // This implementation is not thread-safe!

7 public sealed class SingletonThreadSafe { private static volatile SingletonThreadSafe instance; private static volatile SingletonThreadSafe instance; // volatile modifier is used to show that the variable // volatile modifier is used to show that the variable // will be accessed by multiple threads concurrently. // will be accessed by multiple threads concurrently. private static object syncLock = new object(); private static object syncLock = new object(); private SingletonThreadSafe() { } private SingletonThreadSafe() { } public static SingletonThreadSafe Instance { public static SingletonThreadSafe Instance { get { get { if (instance == null) { if (instance == null) { lock (syncLock) { lock (syncLock) { if (instance == null) { if (instance == null) { instance = new SingletonThreadSafe(); instance = new SingletonThreadSafe(); } } } return instance; return instance; } }}

8 public sealed class Singleton { private Singleton() { } private Singleton() { } public static Singleton Instance { public static Singleton Instance { get { get { return Nested.Instance; return Nested.Instance; } } private class Nested { private class Nested { // Explicit static constructor to tell C# compiler // Explicit static constructor to tell C# compiler // not to mark type as beforefieldinit // not to mark type as beforefieldinitbeforefieldinit // which will initialize the fields (Instance) // which will initialize the fields (Instance) // just before their first use (not earlier) // just before their first use (not earlier) static Nested() { } static Nested() { } internal static readonly Singleton Instance = internal static readonly Singleton Instance = new Singleton(); new Singleton(); }}

9 public sealed class Singleton { private static readonly Lazy lazy = private static readonly Lazy lazy = new Lazy ( new Lazy ( () => new Singleton()); () => new Singleton()); public static Singleton Instance { public static Singleton Instance { get { get { return lazy.Value; return lazy.Value; } } private Singleton() private Singleton() { }}

 Default (not thread-safe) implementation should not be used in multi-threaded environments (e.g. ASP.NET)  Singleton introduces tight coupling among collaborating classes  Singletons are difficult to test  Violates SRP by merging 2 responsibilities: managing object lifetime and the type itself  Inversion of control container can be responsible go managing object lifetime 10

Simple Factory, Factory Method and Abstract Factory

 Encapsulates object creation logic  If we are making specific class selection logic changes, we make them in one place  We can hide complex object creation  This is not a real Pattern  This is the preparation for the real Pattern  It is used quite often  Each time we add new type we need to modify the simple factory code 12

13 // Parameter can be string (e.g. from configuration file) public Coffee GetCoffee(CoffeeType coffeeType) { // Can also be implemented using dictionary // Can also be implemented using dictionary switch (coffeeType) switch (coffeeType) { case CoffeeType.Regular: case CoffeeType.Regular: // Can be subtype of Coffee // Can be subtype of Coffee return new Coffee(0, 150); return new Coffee(0, 150); case CoffeeType.Double: case CoffeeType.Double: return new Coffee(0, 200); return new Coffee(0, 200); case CoffeeType.Cappuccino: case CoffeeType.Cappuccino: return new Coffee(100, 100); return new Coffee(100, 100); case CoffeeType.Macchiato: case CoffeeType.Macchiato: return new Coffee(200, 100); return new Coffee(200, 100); default: default: throw new ArgumentException(); throw new ArgumentException(); }}

 Objects are created by separate method(s)  Produces objects as normal factory  Adds an interface to the simple factory  Add new factories and classes without breaking Open/Closed Principle 14

abstract class Document { private List _pages = new List (); private List _pages = new List (); public Document() { this.CreatePages(); } public Document() { this.CreatePages(); } public List Pages { get { return _pages; } } public List Pages { get { return _pages; } } public abstract void CreatePages(); public abstract void CreatePages();} class CV : Document { public override void CreatePages() { public override void CreatePages() { Pages.Add(new SkillsPage(), new BioPage()); //... Pages.Add(new SkillsPage(), new BioPage()); //... }} class Report : Document { public override void CreatePages() { public override void CreatePages() { Pages.Add(new ResultsPage, SummaryPage()); //... Pages.Add(new ResultsPage, SummaryPage()); //... }} 15

16  Inheritance hierarchy gets deeper with coupling between concrete factories and classes

 Abstraction in object creation  Create a family of related objects  The Abstract Factory Pattern defines interface for creating sets of linked objects  Without knowing their concrete classes  Used in systems that are frequently changed  Provides flexible mechanism for replacement of different sets 17

abstract class ContinentFactory { // AbstractFactory public abstract Herbivore CreateHerbivore(); public abstract Herbivore CreateHerbivore(); public abstract Carnivore CreateCarnivore(); public abstract Carnivore CreateCarnivore();} class AfricaFactory : ContinentFactory { public override Herbivore CreateHerbivore() { public override Herbivore CreateHerbivore() { return new Wildebeest(); return new Wildebeest(); } public override Carnivore CreateCarnivore() { public override Carnivore CreateCarnivore() { return new Lion(); // Constructor can be internal return new Lion(); // Constructor can be internal }} class AmericaFactory : ContinentFactory { public override Herbivore CreateHerbivore() { public override Herbivore CreateHerbivore() { return new Bison(); return new Bison(); } public override Carnivore CreateCarnivore() { public override Carnivore CreateCarnivore() { return new Wolf(); return new Wolf(); }} 18

19

 Separates the construction of a complex object (logic) from its representation (data) so that the same construction process can create different representations  Separation of logic (multistep) and data  Encapsulates the way an object is constructed  Solves 3 problems  Too many parameters  Order dependent  Different constructions  Example: Building a XML document  StringBuilder is not using the builder pattern 21

 Builder is used by Director  Builder is implemented by a concrete builder  Product is produced by the concrete builder  The client uses director and concrete builder to produce product 22 DirectorDirector BuilderBuilder Concrete Builder Product (not different type, but different data) Defines the steps Puts the steps in the right order Defines the implementation

 Factory Method  Used when the factory can easily create the entire object within one method call  Common interface to group factories  Abstract Factory  Interface for creating families of related or dependent objects  Builder  When you need a lot of things to build an object  When construction is order-dependent 23

 Factory for cloning new instances from a prototype  Create new objects by copying prototype  Instead of using "new" keyword  ICloneable interface acts as Prototype 25

 Benefits  It eliminates the (potentially expensive) overhead of initializing (construction) an object  Hides the complexities of making new instances from the client  Examples  Copy of web resource (instead of downloading it every time it is needed)  Getting copy of the current state of an object  Hiding constructors and allowing cloning  JavaScript is a prototypical language 26

public abstract class StormtrooperPrototype { public abstract Stormtrooper Clone(); public abstract Stormtrooper Clone();} public class Stormtrooper : StormtrooperPrototype { public override Stormtrooper Clone() public override Stormtrooper Clone() { return this.MemberwiseClone() as Stormtrooper; return this.MemberwiseClone() as Stormtrooper; }} // Or using ICloneable in.NET public class Stormtrooper : ICloneable { public object Clone() public object Clone() { return this.MemberwiseClone(); return this.MemberwiseClone(); }} 27

Fluent Interface, Lazy Initialization, Object Pool 28

 An implementation of an object-oriented API that aims to provide more readable code  Reduce syntactical noise  More clearly express what the code does  Implemented by using method cascading  Real world examples:  iostream library in C++  cout << "text" << 5;  KendoUI Wrappers  LINQ in.NET  Using extension methods 29

 Tactic of delaying the creation of an object, the calculation of a value, or some other expensive process until the first time it is needed  A.k.a. Virtual Proxy or Lazy Load pattern  Real-world examples  In ORMs navigation properties are lazy loaded (called dynamic proxies) (N+1)  When implementing Singleton  IoC containers  In.NET: Lazy (value holder) 30

 Avoid expensive acquisition and release of resources by recycling unused objects  Can offer a significant performance boost  Examples  Unity is moving objects instead of destroying and creating new ones  ADO.NET is using connection pooling because opening connection is expensive 31

32

форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен 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 34