Since 1995, we’ve been building innovative custom solutions specifically designed to meet the unique needs of America’s most recognized companies. If you.

Slides:



Advertisements
Similar presentations
Understand and appreciate Object Oriented Programming (OOP) Objects are self-contained modules or subroutines that contain data as well as the functions.
Advertisements

Design Principles & Patterns
St Louis Day of.NET 2011 Refactoring to a SOLID Foundation Steve Bohlen Senior Software Engineer SpringSource/VMware Blog:
General OO Concepts and Principles CSE301 University of Sunderland Harry R. Erwin, PhD.
Lecture 9 Improving Software Design CSC301-Winter 2011 – University of Toronto – Department of Computer Science Hesam C. Esfahani
SOLID Object Oriented Design Craig Berntson
1 Software Maintenance and Evolution CSSE 575: Session 6, Part 1 The “SEAM” Model Steve Chenoweth Office Phone: (812) Cell: (937)
Developed by Reneta Barneva, SUNY Fredonia Component Level Design.
Systems Design. Analysis involves understanding and documenting user requirements in a clear and unambiguous way. It focuses on the business side and.
OBJECT ORIENTED PROGRAMMING IN C++ LECTURE
Test-Driven Development “Test first, develop later!” –OCUnit.
CSc 335: Three More OO Design Principles
Chapter 7 Designing Classes. Class Design When we are developing a piece of software, we want to design the software We don’t want to just sit down and.
Practical Object-Oriented Design with UML 2e Slide 1/1 ©The McGraw-Hill Companies, 2004 PRACTICAL OBJECT-ORIENTED DESIGN WITH UML 2e Chapter 2: Modelling.
CLASS DESIGN PRINCIPLES Lecture 2. The quality of the architecture What is a good design? It is the design that at least does not have signs of “bad”.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Chapter 12 Object-Oriented.
GENERAL CONCEPTS OF OOPS INTRODUCTION With rapidly changing world and highly competitive and versatile nature of industry, the operations are becoming.
Lecture 8 Inheritance Richard Gesick. 2 OBJECTIVES How inheritance promotes software reusability. The concepts of base classes and derived classes. To.
1 OO Design Novosoft, 2001 by V. Mukhortov. 2 OO Design Goals  Flexibility Changes must be localized  Maintainability Modules requiring changes can.
Company Confidential – Do Not Duplicate 2 Copyright 2008 McLane Advanced Technologies, LLC S.O.L.I.D. Software Development Achieving Object Oriented Principles,
OODP Prudent OO Design. OODP-2 The Pillars of the Paradigm Abstraction Encapsulation Hierarchy –Association, Aggregation –Inheritance Polymorphism.
CSC 395 – Software Engineering Lecture 12: Reusability –or– Programming was Bjarne Again.
© 2004 Capgemini - All rights reserved SOLID - OO DESIGN PRINCIPLES Andreas Enbohm, Capgemini.
CSE 301 Exam Revision Lecture
Introduction to SOLID Principles. Background Dependency Inversion Principle Single Responsibility Principle Open/Closed Principle Liskov Substitution.
CSSE 374: More GRASP’ing for Object Responsibilities
S.O.L.I.D. Software Development 12 January 2010 (Martin Verboon, Patrick Kalkman, Stan Verdiesen)
SWE © Solomon Seifu ELABORATION. SWE © Solomon Seifu Lesson 12-5 Software Engineering Design Goals.
Design Principles iwongu at gmail dot com.
 What is SOLID  The S in SOLID  The O in SOLID  The L in SOLID  The I in SOLID  The D in SOLID  Questions.
1 Single Responsibility Principle Open Closed Principle Liskov Substitution Principle Law of Demeter CSC 335: Object-Oriented Programming and Design.
Incremental Design Why incremental design? Goal of incremental design Tools for incremental design  UML diagrams  Design principles  Design patterns.
Elements of OO Abstraction Encapsulation Modularity Hierarchy: Inheritance & Aggregation 4 major/essential elements3 minor/helpful elements Typing Concurrency.
Introducing Allors Applications, Tools & Platform.
1 CSCD 326 Data Structures I Software Design. 2 The Software Life Cycle 1. Specification 2. Design 3. Risk Analysis 4. Verification 5. Coding 6. Testing.
Introduction to c++ programming - object oriented programming concepts - Structured Vs OOP. Classes and objects - class definition - Objects - class scope.
Software Design Patterns Curtsy: Fahad Hassan (TxLabs)
High Cohesion Low Coupling Old Standards for Object Oriented Programming.
Five design principles
Evaluating an Object-Oriented Design ©SoftMoore ConsultingSlide 1.
SEG 4110 – Advanced Software Design and Reengineering Topic T Introduction to Refactoring.
Principles of Object Oriented Design
Refactoring Agile Development Project. Lecture roadmap Refactoring Some issues to address when coding.
SOLID Design Principles
Session 33 More on SOLID Steve Chenoweth Office: Moench Room F220 Phone: (812) Chandan Rupakheti Office: Moench.
Dependency Inversion By Steve Faurie. Dependency Inversion Described in Agile Principles, Patterns and Practices in C# by Robert C. Martin.
Microsoft Advertising 16:9 Template Light Use the slides below to start the design of your presentation. Additional slides layouts (title slides, tile.
CSCE 240 – Intro to Software Engineering Lecture 3.
Beginning Software Craftsmanship Brendan Enrick Steve Smith
14 Jul 2005CSE403, Summer'05, Lecture 09 Lecture 09: Fundamental Principles and Best Practices for Software Design Valentin Razmov.
Mantas Radzevičius ifm-2/2
Course information Old exam Resit Report Result and walkthrough
Software Architecture & Difference from Design
Low Budget Productions, LLC
CMPE 135: Object-Oriented Analysis and Design October 24 Class Meeting
Adaptive Code Umamaheswaran Senior Software Engineer
Lecture 22 Inheritance Richard Gesick.
lecture 08, OO Design Principle
11/29/2018 © 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks.
Object-Oriented Design
Software Design Lecture : 14.
15 letters that will change your code
CMPE 135 Object-Oriented Analysis and Design March 21 Class Meeting
A (partial) blueprint for dealing with change
Principles of Object-Oriented Design
European conference.
Object Oriented Design & Analysis
Dependency Inversion principle
Some principles for object oriented design
Chapter 10 – Component-Level Design
Presentation transcript:

Since 1995, we’ve been building innovative custom solutions specifically designed to meet the unique needs of America’s most recognized companies. If you have a critical project that needs to be done right the first time, you can rely on us. We customize solutions that make your software perform to its fullest potential to meet your specific business objectives. We are the ONLY service provider who absolutely guarantee to deliver innovative, custom solutions that guarantee your satisfaction and success. Our Distributed Delivery allows us to best meet your unique needs and save you money. We’re experts who offer you unsurpassed technological knowledge and experience. Everything we do is focused specifically on you, your unique needs, your success and your complete satisfaction at all times. Who We Are

My Website My vCard This Presentation

SDC - Software Development Community CNUG - Chicago.Net User Group APPSIG - Architecture Patterns and Practices Special Interest Group SDC, CNUG, and APSIG *** Disclaimer *** The opinions expressed in this presentation do not necessarily reflect any group I am affiliated with, my employer Magenic, or even me.

Innovation, Creativity, Real Solutions, and Tangible Results 1.Code quality is paramount! What the client can’t see will make or break their investment eventually 2.Develop in a way the team can maintain Understand where your team is at and where they are headed 3.Knowledge exchange There is no time to waste thinking you have nothing to learn 4.Refactor early and often The earlier problems are detected and eliminated the less they cost 5.Never spend time on a work around, that you could spend on a fix Deadlines are not really met if you have built in depth 6.Question everything Do not waist time writing code you know is wrong because you are afraid to ask

S.O.L.I.D Principles of Software Development

The S.O.L.I.D Principles of Software Development SOLID was introduced by Robert C. Martin in the an article called the “Principles of Object Oriented Design” in the early 2000s Agile Software Development You Aren’t Gonna Need It (YAGNI) Keep It Simple, Stupid (KISS) Vertical Slice Big Ball of Mud

SRP the “S” in S.O.L.I.D

Single Responsibility Principle (SRP) “There should never be more than one reason for a class to change.” Each responsibility should be a separate class, because each responsibility is an axis of change. A class should have one, and only one, reason to change. If a change to the business rules causes a class to change, then a change to the database schema, GUI, report format, or any other segment of the system should not force that class to change. Axis of Change Separation of Concern Test-Driven Development (TDD) Logical Separation of Namespaces And Assemblies. Robots on an assembly line are streamlined for the individual tasks they preform. This makes maintaining, upgrading, and replacing them easier and less expensive.

Single Responsibility Principle (SRP)

Static Helper Classes and Extension Methods As Helper As Extension

OCP the “O” in S.O.L.I.D

Open/Closed Principle (OCP) « software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.” Meyer's Open/Closed Principle – Implementation of a class should only be modified to correct errors. – Changes or new features require that a different class be created (Interfaces) Polymorphic Open/Closed Principle – All member variables should be private. – Global variables should be avoided. Objects should be design in such a way that it is easy to extend them without modifying them. You can easily change the lens of most SLR cameras without having to saw off the old lens and weld on a new one. You can add filters to most SLR camera lens by just screwing them on. Objects should be design in such a way that it is easy to extend them without modifying them. You can easily change the lens of most SLR cameras without having to saw off the old lens and weld on a new one. You can add filters to most SLR camera lens by just screwing them on. -Bertrand Meyer

Change Happens “All systems change during their life cycles. This must be borne in mind when developing systems expected to last longer than the first version.” - Ivar Jacobson

All member variables should be private Instead of Public Fields Use Properties or Properties with Private Backing Fields

Method parameters should be interfaces not specific classes Using interfaces for parameters, properties, and variables whenever possible helps keep them “ Open” to extension and also helps keep the classes “Closed” to modification because the abstraction.

LSP the “L” in S.O.L.I.D

Liskov Substitution Principle (LSP) “Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program” “Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.” Polymorphism Test-Driven Development (TDD) Avoid Run-Time Type Information (RTTI) As you extend objects the original functionality of the elements that makeup the object should not change. Any Base 10 calculator should produce a result of “4” when you press “2+2=“ regardless of the age or sophistication of the device. The original functionality of objects should preserved as you build on them. As you extend objects the original functionality of the elements that makeup the object should not change. Any Base 10 calculator should produce a result of “4” when you press “2+2=“ regardless of the age or sophistication of the device. The original functionality of objects should preserved as you build on them.

Avoid Run-Time Type Information (RTTI) Sometimes using RTTI is unavoidable

Objects should be replaceable with subtypes When overriding a class you must be carful that the way you extend it does not cause it to no longer work in place of the class it inherited from

ISP the “I” in S.O.L.I.D

Interface Segregation Principle (ISP) “Many client specific interfaces are better than one general purpose interface” “Clients should not be forced to depend upon interfaces that they do not use.” Design by contract (DbC) / Design to Interfaces Test-Driven Development (TDD) It is difficult to use a device that produces “HDMI Audio/Video” with a “Digital Optical” sound player.

Abstract classes using interfaces Steve Rowe

Many specific interfaces are better one general

Clients should not depend upon interfaces that they do not use Each interface should specifically describe only what is needed and nothing more.

DIP the “D” in S.O.L.I.D

Dependency Inversion Principle (DIP) “High level modules should not depend upon low level modules. both should depend upon abstractions.” “Abstractions should not depend upon details. Details should depend upon abstractions.” Loose Coupling Dependency Injection / Inversion of Control Screwdriver bits do not care what brand or type of Slotted Screwdriver they are used with.

Dependency Injection / Inversion of Control

High & low level modules should depend upon abstractions No reference or dependency to a specific Data access technology should ever exist outside of the Data Access Assembly this includes ADO.net, LinqToSql, EF4, Nhibernate….. Only Interfaces and POCO (Plain Old Clr Objects) should be referenced between assemblies and primarily they should reference an interface.

S.O.L.I.D Principles of Software Development

The first sprint that involves actual programming should be a single vertical slice that demonstrates scope and strategy of the entire application from top to bottom.

Highly Recommended Books Professional ASP.NET Design Patterns Elements of Reusable Object-Oriented Software UML for Java(TM) Programmers Agile Principles, Patterns, and Practices in C#

Thought Leadership