Page 128 - DCAP405_SOFTWARE_ENGINEERING
P. 128

Unit 8: Design Engineering




               Fragility: When you make a change, unexpected parts of the system break.         Notes
               Immobility: It is hard to reuse in another application because it cannot be disentangled
               from the current application.

          Open Close Principle

          Software entities like classes, modules and functions should be open for extension but closed for
          modifications.
          OPC is a generic principle. You can consider it when writing your classes to make sure that when
          you need to extend their behavior you don’t have to change the class but to extend it. The same
          principle can be applied for modules, packages, libraries. If you have a library containing a set
          of classes there are many reasons for which you’ll prefer to extend it without changing the code
          that was already written (backward compatibility, regression testing). This is why we have to
          make sure our modules follow Open Closed Principle.
          When referring to the classes Open Close Principle can be ensured by use of Abstract Classes and
          concrete classes for implementing their behavior. This will enforce having Concrete Classes
          extending Abstract Classes instead of changing them. Some particular cases of this are Template
          Pattern and Strategy Pattern.

          Dependency Inversion Principle

          High-level modules should not depend on low-level modules. Both should depend on
          abstractions.
          Abstractions should not depend on details. Details should depend on abstractions.
          Dependency Inversion Principle states that we should decouple high level modules from low
          level modules, introducing an abstraction layer between the high level classes and low level
          classes. Further more it inverts the dependency: instead of writing our abstractions based on
          details, we should write the details based on abstractions.
          Dependency Inversion or Inversion of Control are better know terms referring to the way in
          which the dependencies are realized. In the classical way when a software module (class,
          framework) need some other module, it initializes and holds a direct reference to it. This will
          make the 2 modules tight coupled. In order to decouple them the first module will provide a
          hook (a property, parameter) and an external module controlling the dependencies will inject
          the reference to the second one.
          By applying the Dependency Inversion the modules can be easily changed by other modules just
          changing the dependency module.



             Did u know? What is Inversion of Control Container?

             Factories and Abstract Factories can be used as dependency frameworks, but there are
             specialized frameworks for that, known as Inversion of Control Container.

          Interface Segregation Principle

          Clients should not be forced to depend upon interfaces that they don’t use.
          This principle teaches us to take care how we write our interfaces. When we write our interfaces
          we should take care to add only methods that should be there. If we add methods that should not




                                           LOVELY PROFESSIONAL UNIVERSITY                                   121
   123   124   125   126   127   128   129   130   131   132   133