Design and Implementation patterns have changed in object-oriented languages such as C# with the introduction of new language features, advances in object-oriented design, and the inclusion of functional language aspects. This session will explore the impact this has on design and implementation patterns and how they can be leveraged to build more elegant systems.
This is Class 2 on a 6 week course I taught on Software Design Patterns.
This course discusses Strategy and Template pattern.
Class based on "Head First Design Patterns."
This is Class 2 on a 6 week course I taught on Software Design Patterns.
This course discusses Strategy and Template pattern.
Class based on "Head First Design Patterns."
Extending Rotor with Structural Reflection to support Reflective Languagesfranciscoortin
Presentation of the results of the project "Extending Rotor with Structural Reflection to support Reflective Languages" at Microsoft Research, Redmond, Washington (USA)
Software development effort reduction with Co-oplbergmans
This talks explains the motivations for the Co-op technology: what are the challenges it addresses, in particular focusing on reducing accidental complexity, where it comes from, and a general vision on how to resolve it. Then we continue to show practical application of Co-op, including experience figures from large-scale application of a previous generation of this technology. Show a little bit about its realization, and conclude with an evaluation of the technology.
Multi-dimensional exploration of API usage - ICPC13 - 21-05-13Coen De Roover
Presented at the 21st IEEE International Conference on Program Comprehension (ICPC 2013), San Francisco (USA). Website of the paper: http://softlang.uni-koblenz.de/explore-API-usage/
Frameworks are general code libraries that developers use to build their software on. Frameworks are usually specific to a domain, like web frameworks or database frameworks. The benefit of frameworks is the productivity that they provide. With the right framework we can avoid writing low-level functionality and instead focus on our domain problems we need to solve. Frameworks are building blocks and should be used as such, if you have a bad framework or need to invest too much into using the framework, the gains are counter productive.
It may be a good strategy to write your own framework, and in the lecture we look at design patterns that are useful in creating frameworks. We will also look at the Spring framework that is a good example of a well design framework.
Cover image by Javier Corbo
http://www.flickr.com/photos/javiercorbo/
A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...Coen De Roover
Presentation at the Postdoctoral symposium of the 2011 International Conference on Software Maintenance, accompanying the paper
http://soft.vub.ac.be/Publications/2011/vub-soft-tr-11-11.pdf
Extending Rotor with Structural Reflection to support Reflective Languagesfranciscoortin
Presentation of the results of the project "Extending Rotor with Structural Reflection to support Reflective Languages" at Microsoft Research, Redmond, Washington (USA)
Software development effort reduction with Co-oplbergmans
This talks explains the motivations for the Co-op technology: what are the challenges it addresses, in particular focusing on reducing accidental complexity, where it comes from, and a general vision on how to resolve it. Then we continue to show practical application of Co-op, including experience figures from large-scale application of a previous generation of this technology. Show a little bit about its realization, and conclude with an evaluation of the technology.
Multi-dimensional exploration of API usage - ICPC13 - 21-05-13Coen De Roover
Presented at the 21st IEEE International Conference on Program Comprehension (ICPC 2013), San Francisco (USA). Website of the paper: http://softlang.uni-koblenz.de/explore-API-usage/
Frameworks are general code libraries that developers use to build their software on. Frameworks are usually specific to a domain, like web frameworks or database frameworks. The benefit of frameworks is the productivity that they provide. With the right framework we can avoid writing low-level functionality and instead focus on our domain problems we need to solve. Frameworks are building blocks and should be used as such, if you have a bad framework or need to invest too much into using the framework, the gains are counter productive.
It may be a good strategy to write your own framework, and in the lecture we look at design patterns that are useful in creating frameworks. We will also look at the Spring framework that is a good example of a well design framework.
Cover image by Javier Corbo
http://www.flickr.com/photos/javiercorbo/
A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...Coen De Roover
Presentation at the Postdoctoral symposium of the 2011 International Conference on Software Maintenance, accompanying the paper
http://soft.vub.ac.be/Publications/2011/vub-soft-tr-11-11.pdf
Design Pattern Mastery - Momentum Dev Con 19 Apr 2018Steven Smith
Design patterns help developers and teams solve problems using proven approaches. In this talk, you'll learn how to solve a series of real world problems by applying patterns. Not only do patterns help individual developers solve particular problems, but they also enable teams to discuss design decisions using a richer, more descriptive language. By the end, you'll have some concrete tools you can apply, and hopefully the desire to master more patterns as you continue to improve!
The first seminar in the mini-seminars periodical sessions I've prepared and lead in my spare time while being employed at Exigen Services. Kudos, guys!
Since these presentations were spare time hobby - I've decided to share them :)
Hopefully someone will find them useful.
The intro is - what designs patters are about, some simple examples and a lots of colorful images.
Patterns (contd)Software Development ProcessDesign patte.docxdanhaley45372
Patterns (contd)
Software Development Process
Design patterns used to handle change
More time extending and changing code than developing it.
The Strategy design pattern handle change by selecting from a family of external algorithms rather than rewrite.
Design point: Make code closed for modification of code, but open for extension
Problem
Computer object created
Description Method returns
Getting a Computer
Problem
Program has to change every time
Customer changes options
Decorator Pattern
Wrapper code used to extend your core code
Extend a class dynamically at runtime
Decorator uses wrapper code to extend core functionality - decorating the code
Decorator Pattern
description() returns “You are getting a computer”
Wrapper description() returns
“You are getting a computer and a disk”
Wrapper description() returns
“You are getting a computer and a disk and a monitor”
Decorator Pattern
Core component: Computer
Variables holding computer objects should also be able to hold objects that wrap computer objects.
Extend the wrapper classes from the Computer class.
Abstract class cannot be instantiated
Ensures all wrappers are consistent
Developers have to provide their own description
Decorator Pattern
Method calls the core computer object’s
description method and adds “and a disk”
Decorator Pattern
Method calls the core computer object’s
description method and adds “and a disk”
Extend the core object by wrapping it in decorator wrappers. Avoids modification of the core code.
Each successive wrapper called the description method of the object it wrapped and added something to it.
Factory Pattern
Based on type, call the
Connection method
Factory Pattern
Create a method that returns the
correct connection type
Factory Pattern
New operator used to create OracleConnection objects.
New operator used to create SqlServerConnection objects, and MySqlConnection objects.
New operator to instantiate many different concrete classes
Code becomes larger and needs to be replicated in many places
Factor that code out into a method.
Code keeps changing
Encapsulate code into a factory object
Goal: Separate out the changeable code and leave the core code closed for modification
Building the Factory
Creating the Factory
FirstFactory class encapsulates the connection object creation
Pass to it the type of connection (“Oracle”, “SQL Server”,)
Use the factory object to create connection objects with a factory method named createConnection
Building the Factory
Create the FirstFactory class.
Save the type of the database, passed to the FirstFactory class’s constructor.
Object-creation code changes
Check which type of object to be created
(OracleConnection, SqlServerConnection,
and then create it.
Factory Class
Create the Abstract Connection Class
Core code should not be modified or has to be modified
as little as possible.
Using the connection object returned by the
new factory object
Use t.
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)Ovidiu Farauanu
Discussing Design Patterns and OOP popularity,
Multithreading and OOP,
Functional Design for Multithreaded programming
and how Multithreading does not mean always concurency but multicore paralelism.
Software Engineering Best Practices @ NylasBen Gotow
Part of an introductory series given to new hires and interns, this talk is a crash course in design patterns and engineering best practices for new-grads with mostly academic computer science experience. Focuses on the things they don't teach you: naming things, working on a team, optimizing for maintainability.
Hidden Gems of the Sitefinity API WebinarChris Eargle
The documented Sitefinity API is comprehensive and covers many development scenarios. As in any API, there is far more under the covers. This webinar will dig deep into unexplored areas of the Sitefinity API to reveal interesting and useful utilities and classes to make your job that much easier.
Note: this is the slide deck for a webinar comprised mostly of demos. I will update this description when the video is available.
Amp Up Your Visual Studio ProductivityChris Eargle
Slide deck for the Amp Up Your Visual Studio Productivity Webinar covering new features in JustCode, JustMock, JustTrace, and JustDecompile for the Q1 2013 release.
Easier with visual studio productivity toolsChris Eargle
Our Visual Studio Productivity Tools have always been about making your job easier, and this release is no exception. Tired of catering to Visual Studio’s multiple personalities between home and office? Take your settings to the cloud with JustCode! Having trouble sifting through tons of data to resolve a performance issue? JustTrace makes it easier with data visualizations and filters! Have a buggy assembly and no source code? Simply open the assembly and fix the problem directly inside JustDecompile!
Re-read that last sentence… fiddling around with a Visual Studio project is not required.
This is but a sample of how we’re making your life easier in Q2 2012. This presentation is not only free, but if time is money, it will pay you dividends.
With JustDecompile, Telerik's free .NET decompiler, you can easily recover lost source code or peer into assemblies to discover the root cause of an external bug. The same engine that powers JustDecompile is also used in Telerik JustCode, a Visual Studio add-in designed to enhance developer productivity. In this webcast, you will learn how to use JustDecompile and JustCode for decompilation scenarios you are likely to encounter in the office.
We have many exciting features to introduce for Just products in 2012 Q1. JustCode gains LINQ conversions, enhancements to the test runner, and support for QUnit and Jasmine. JustTrace makes it easier to find memory hogs with the Largest Memory Retainers view. JustMock gets a codeActivity workflow activity for Team Build. Finally, JustDecompile is officially out of beta!
Deep Dive: MVC Controller ArchitectureChris Eargle
The driving force behind the MVC architecture is the controller. It returns the appropriate view and model for a request, but that is not the end of the story. In ASP.NET MVC, the controller is much more powerful. I will go deep into the infrastructure of the controller. You will discover that there is much more to this powerful framework than is shown in typical examples, and you will be able to use this knowledge for business scenarios that go beyond serving simple web pages.
Monadic Comprehensions and Functional Composition with Query ExpressionsChris Eargle
Build monads using the C# language with a C# style, then use the appropriate methods to ensure the LINQ query syntax works with this functional design pattern. After describing monads, we will cut the middleman and apply the same techniques directly to objects and functions to achieve better results with a declarative syntax.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
"Impact of front-end architecture on development cost", Viktor TurskyiFwdays
I have heard many times that architecture is not important for the front-end. Also, many times I have seen how developers implement features on the front-end just following the standard rules for a framework and think that this is enough to successfully launch the project, and then the project fails. How to prevent this and what approach to choose? I have launched dozens of complex projects and during the talk we will analyze which approaches have worked for me and which have not.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
1. The Evolution of Patterns
Influences and Examples of Emerging Patterns
Chris Eargle
2. Chris Eargle
Telerik Developer Evangelist
INETA Director
Microsoft MVP – Visual C#
MCPD, MCTS, etc
kodefuguru.com
kodefuguru@live.com
3. What is a Pattern?
An element of reusable software
Names, motivates, and explains a general design that
addresses recurring design problems
Describes the problem, the solution, when to apply the
solution, and its consequences
3/17/2012 3
4. Implementation Levels
Invisible Part of the language
Informal Referred to by name, but must be re-
implemented for each use
Formal Implement pattern itself within the
language
10. Fluent Interfaces
Utilizes method chaining
Defined through the return value of a called method
Self referential - the new context is equivalent to the
last context
12. Paradigms
There is a huge ecosystem of programming languages
Most languages fall into categories other than OO
These slowly make their way into modern OO
languages
13. Generic
Algorithms use types to be specified later
Reduces duplication
Pioneered by ADA in 1983
May be harder to understand
14. Terminology
Generics
Ada, Eiffel, Java, C#, F#, and Visual Basic .NET
Parametric Polymorphism
ML, Scala and Haskell
Templates
C++
16. Terminology
first class functions
functions can be passed as arguments
higher-order functions
take one or more functions as input
or outputs a function
combinators
takes one or more functions as input
and outputs a function
17. “a combinator is a function which
builds program fragments from
program fragments…”
John Hughes
18. Terminology
pure functions
no side effects, which means the function called
with the same arguments returns the same result
anonymous functions
a function defined, and possibly called, without
being bound to an identifier.
continuation-passing style
when a function is complete, the computation is
passed to a continuation function
20. Singleton Pattern
Restricts class instantiation to one instance
Useful when only one instance is needed in system
Some consider this an anti-pattern
Not the same as a static class
3/17/2012 20
21. Singleton Diagram
Singleton
Retrieves a single,
<<singleton>> maintained instance
of class.
- Singleton()
S+ Instance
27. Iterator Pattern
iterator an object that provides a standard way to
examine all element of any collection.
Has a uniform interface for traversing many data
structure without exposing their implementations.
Supports concurrent iteration and element removal.
No need to know the internal structure of collection.
30. Command Pattern
used to represent and encapsulate all the information
needed to call a method at a later time
31. Terminology
client
instantiates the command object and provides
the information required to call the method at a
later time.
invoker
decides when the method should be called
receiver
instance of the class that contains the method's
code
36. Factory Method
Method used to create an object
Used when it is more complex to simply instantiate
Don’t confuse this with abstract factory, a generalized
pattern for building a series of factories
Useful in C# to take advantage of generic inference
45. Template Pattern
Defines the program skeleton of an algorithm
Encapsulate what changes and make it abstract
Subclasses implement those steps in the algorithm
47. Function Template
Encapsulate what changes into functions
Allow owner to specify those pieces of the algorithm
Prevents class explosion
3/17/2012 47
49. References
Patterns of Enterprise Functional thinking: Functional
Application Architecture design patterns, Part 1
-Martin Fowler -Neal Ford
Revenge of the Nerds Generalising Monads to Arrows
-Paul Graham -John Hughes
Object World, May 5 1996 Design Patterns: Elements of
-Peter Norvig Reusable Object-Oriented
Software
-GoF
Editor's Notes
These three levels are from Peter Norvig’s articles in Object World.
generic programming is a style of computer programming in which algorithms are written in terms of to-be-specified-later types that are then instantiated when needed for specific types provided as parameters. This approach, pioneered by Ada in 1983, permits writing common functions or types that differ only in the set of types on which they operate when used, thus reducing duplication. The Gang of Four noted that this technique, especially when combined with delegation, is very powerful but that "[dynamic], highly parameterized software is harder to understand than more static software."[1]