Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Design Patterns and the Future of Software Engineering

Design Patterns and the Future of Software Engineering


Ana Schwendler

November 25, 2020

More Decks by Ana Schwendler

Other Decks in Programming


  1. Design Patterns and the Future of Software Engineering Ana Schwendler

  2. Summary

  3. SUMMARY • What are Design Patterns? • Why use it?

    • Future related topics • How can it help shape the future of software engineering? • Patterns and future
  4. What are design patterns?

  5. WHAT ARE DESIGN PATTERNS? • General and reusable solution to

    commonly occurring problems in software design. • Like pre-made blueprints that we can customize to solve a recurring design problem in your code. • They are not algorithms, in the sense that they don’t have a set of steps to follow, but instead design patterns give a general concept on how to solve a problem.
  6. WHAT ARE DESIGN PATTERNS? • There are 3 main classification

    for patterns: ◦ Creational: provide object creation mechanisms looking forward to make them more flexible and reusable. ◦ Structural: explain how bring together objects and classes into larger structures, while increasing its efficiency and flexibility. ◦ Behavioral: deals with effective communication and assignment of responsibilities among objects.
  7. Why use it?

  8. WHY USE IT? • Design patterns are a set of

    tried and tested solutions. Even if you never use all of them, it is still nice to know them because it helps with thinking on your solutions in software in general. • Also, once your team have a good understanding of the patterns, it is easier to communicate efficiently when developing a new feature or refactoring some processes, with everyone understanding the idea behind the concept you’re implementing.
  9. Future Related Topics

  10. FUTURE RELATED TOPICS • CI/CD (Continuous Integration/Continuous Deployment) ◦ This

    concept enable to automate and assemble builds from developing to live easily and in a reliable way. ◦ With that teams can release apps much faster.
  11. FUTURE RELATED TOPICS • Progressive web apps ◦ As the

    world asks for quick and broad response to events, we need ways to make our apps work in any kind of screen, it can be directly from the web site and live on the smartphone’s home screen. ◦ For it we need to find effective ways to guarantee that our project will be reliably available in all kinds of possible views.
  12. FUTURE RELATED TOPICS • Internet of Things ◦ By connecting

    sensors, devices, machines, vehicles, we are having a great impact on our world. ◦ But as it can offer various advantages, we need to keep in mind that for evolving software we need to build reusable software that can be easily handed over when necessary.
  13. How can it help shape the future

  14. HOW CAN IT HELP SHAPE THE FUTURE? • Design patterns

    are beyond programing language, which means that you’re not dependent on any structure to apply those ideas • As mentioned before, one the team has knowledge on patterns, it facilitate conversation on development process. • It helps developers to build reliable and reusable prototypes, once the solutions are tested and help plan the architecture of a solution • Also by building flexible structures we can speed up changes on development.
  15. Patterns

  16. PATTERNS - CREATIONAL • Abstract Factory: Creates an instance of

    several families of classes • Builder: Separates object construction from its representation • Factory Method: Creates an instance of several derived classes • Object Pool: Avoid expensive acquisition and release of resources by recycling objects that are no longer in use • Prototype: A fully initialized instance to be copied or cloned • Singleton: A class of which only a single instance can exist
  17. PATTERNS - STRUCTURAL • Adapter: Match interfaces of different classes

    • Bridge: Separates an object’s interface from its implementation • Composite: A tree structure of simple and composite objects • Decorator: Add responsibilities to objects dynamically • Facade: A single class that represents an entire subsystem • Flyweight: A fine-grained instance used for efficient sharing • Private Class Data: Restricts accessor/mutator access • Proxy: An object representing another object
  18. PATTERNS - BEHAVIORAL • Chain of responsibility: A way of

    passing a request between a chain of objects • Command: Encapsulate a command request as an object • Interpreter: A way to include language elements in a program • Iterator: Sequentially access the elements of a collection • Mediator: Defines simplified communication between classes • Memento: Capture and restore an object's internal state • Null Object: Designed to act as a default value of an object • Observer: A way of notifying change to a number of classes • State: Alter an object's behavior when its state changes • Strategy: Encapsulates an algorithm inside a class • Template method: Defer the exact steps of an algorithm to a subclass • Visitor: Defines a new operation to a class without change
  19. REFERENCES • https://refactoring.guru/ • https://hackernoon.com/top-10-software-development-trends-for-2020-you-ne ed-to-know-as293690 • Gang of four

    book: Design Patterns
  20. THANKS!! Questions?