Software Design Lecture : 11.

Slides:



Advertisements
Similar presentations
Object Oriented Programming
Advertisements

Final and Abstract Classes
Understand and appreciate Object Oriented Programming (OOP) Objects are self-contained modules or subroutines that contain data as well as the functions.
Ch:8 Design Concepts S.W Design should have following quality attribute: Functionality Usability Reliability Performance Supportability (extensibility,
Object Oriented Programming in Java. Object Oriented Programming Concepts in Java Object oriented Programming is a paradigm or organizing principle for.
Module 8 “Polymorphism and Inheritance”. Outline Understanding Inheritance Inheritance Diagrams Constructors in Derived Classes Type Compatibility Polymorphism.
Inheritance Inheritance Reserved word protected Reserved word super
Classes and Object- Oriented... tMyn1 Classes and Object-Oriented Programming The essence of object-oriented programming is that you write programs in.
Inheritance and object compatibility Object type compatibility An instance of a subclass can be used instead of an instance of the superclass, but not.
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 8.1 – 8.5.
Data Abstraction and Object- Oriented Programming CS351 – Programming Paradigms.
C++ fundamentals.
Introduction To System Analysis and design
Programming Languages and Paradigms Object-Oriented Programming.
REFACTORING Lecture 4. Definition Refactoring is a process of changing the internal structure of the program, not affecting its external behavior and.
CSM-Java Programming-I Spring,2005 Objects and Classes Overview Lesson - 1.
An Object-Oriented Approach to Programming Logic and Design
Introduction to Object Oriented Programming. Object Oriented Programming Technique used to develop programs revolving around the real world entities In.
Coupling and Cohesion Pfleeger, S., Software Engineering Theory and Practice. Prentice Hall, 2001.
CS 325: Software Engineering March 17, 2015 Applying Patterns (Part A) The Façade Pattern The Adapter Pattern Interfaces & Implementations The Strategy.
Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Edition Chapter 13 Introduction to Classes.
Cohesion and Coupling CS 4311
Inheritance CSI 1101 Nour El Kadri. OOP  We have seen that object-oriented programming (OOP) helps organizing and maintaining large software systems.
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 9.1 – 9.4.
Inheritance and Class Hierarchies Chapter 3. Chapter 3: Inheritance and Class Hierarchies2 Chapter Objectives To understand inheritance and how it facilitates.
Author: DoanNX Time: 45’.  OOP concepts  OOP in Java.
OOPS CONCEPT.  OOPS  Benefits of OOPs  OOPs Principles  Class  Object Objectives.
COMPUTER SCIENCE & TECHNOLOGY DEGREE PROGRAMME FACULTY OF SCIENCE & TECHNOLOGY UNIVERSITY OF UVA WELLASSA ‏ Properties of Object Oriented Programming.
Coupling and Cohesion Schach, S, R. Object-Oriented and Classical Software Engineering. McGraw-Hill, 2002.
Coupling and Cohesion Pfleeger, S., Software Engineering Theory and Practice. Prentice Hall, 2001.
Java Programming: Guided Learning with Early Objects Chapter 9 Inheritance and Polymorphism.
Further Modularization, Cohesion, and Coupling. Simple Program Design, Fourth Edition Chapter 9 2 Objectives In this chapter you will be able to: Further.
Computer Programming II Lecture 5. Introduction to Object Oriented Programming (OOP) - There are two common programming methods : procedural programming.
Modern Programming Tools And Techniques-I
7. Modular and structured design
Data Abstraction: The Walls
Object-Oriented Programming Concepts
Coupling and Cohesion Rajni Bhalla.
INTRODUCTION TO OBJECT-ORIENTED PROGRAMMING
Inheritance ITI1121 Nour El Kadri.
Objects First with Java A Practical Introduction using BlueJ
University of Central Florida COP 3330 Object Oriented Programming
Introduction to Design Patterns
Final and Abstract Classes
Inheritance and Polymorphism
The Object-Oriented Thought Process Chapter 1
Polymorphism.
Part 3 Design What does design mean in different fields?
Week 4 Object-Oriented Programming (1): Inheritance
PRINCIPALES OF OBJECT ORIENTED PROGRAMMING
TIM 58 Chapter 8: Class and Method Design
Object Oriented Analysis and Design
CSC 205 – Java Programming II
Inheritance Basics Programming with Inheritance
MSIS 670 Object-Oriented Software Engineering
Week 6 Object-Oriented Programming (2): Polymorphism
Programming paradigms
Computer Programming with JAVA
Software Design Lecture : 9.
Software Design Lecture : 12.
Software Design Lecture : 14.
Software Design Lecture : 10
9: POLYMORPHISM Programming Technique II (SCSJ1023) Jumail Bin Taliba
Polymorphism Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition, by Kernighan.
Communication between modules, cohesion and coupling
Object-Oriented PHP (1)
Final and Abstract Classes
Cohesion and Coupling.
C++ Object Oriented 1.
Programming in C# CHAPTER 5 & 6
Presentation transcript:

Software Design Lecture : 11

Software Design Components Principle Criteria(this lecture) Techniques (this lecture)

Range of Cohesion High Cohesion Coincidental Low Functional Sequential Communicational Procedural Temporal Logical Coincidental Low

Sequential Cohesion The output of one component is the input to another. Occurs naturally in functional programming languages Good situation

Example Retrieve customer Data Retrieve customer order Generate invoice Get and edit input data.

Functional Cohesion – Highly cohesive Definition: Every essential element to a single computation is contained in the component. A functionally cohesive module performs one and only one problem related task. Ideal situation.

Examples Calculate Net Pay A complex module with numerous sub modules may still be functionally cohesive if all of its subordinate modules are only performed to carry out the task of the parent module. For example, Calculate Net Pay is functionally cohesive although it contains many different functions (e.g., calculate taxable deductions, calculate tax, calculate CPP deduction).

Scale of Cohesion Vs Maintainability

General Rule of Cohesion A module will be cohesive if most of the methods defined in a class use most of the data members most of the time. If we find different subsets of data within the same module being manipulated by separate groups of functions then the module is not cohesive and should be broken down as shown below.

Extensibility Extendibility is the ease of adapting software products to changes of specification.

Extensibility For small programs change is usually not a difficult issue; but as software grows bigger, it becomes harder and harder to adapt. A large software system often looks to its maintainers as a giant house of cards in which pulling out any one element might cause the whole structure to collapse

Extensibility We need extendibility because at the basis of all software lies some human phenomenon and hence indecisiveness

Principles for achieving Extensibility Design simplicity: a simple architecture will always be easier to adapt to changes than a complex one Decentralization: the more autonomous the modules, the higher the likelihood that a simple change will affect just one module, or a small number of modules, rather than triggering off a chain reaction of changes over the whole system.

Problem Statement In the electric subsystem of the house where there are electric wires and appliances running. Each appliance is having it’s own functionality and working. Each appliance is having it’s own clear boundary into which it works. Task is to identify level of coupling and cohesion in the scenario. Write a scenario which should reverse the solution

Solution to example The given scenario is having no interdependency and each appliance is encapsulated within its own boundary so the system is having low or no coupling but high level of cohesion. Hint for Task ii: “Central”

Open / Close Principle Bertrand Meyer: “Software entities like classes, modules and functions should be closed but open for extension. Closed The source code of the module inviolate; no one is allowed to make changes to the code the module can be used without risk

Open / Close Principle Open The module is open for extension according to new requirements the module can be extended to behave in new and different ways.

Open / Closed Principle A module that is open for extension is a module whose behavior can be altered to suit new requirements. A module that is closed for modification is a module whose source code is frozen and cannot be changed

The “Open/Closed principle” – Usage in an object oriented paradigm The Open/Closed principle can be applied in object oriented paradigms with the help of inheritance and polymorphism: The interface of the module becomes an abstract class A If needed new Subclasses of A can be derived; these subclasses may extend A

What is Class Basic implementation unit in OOP. It encapsulate data members and methods. Classes have objects or classes are assessed via their objects. Data members are accessed through getters and setters methods.

public class test { int a ; float b; public class() {} void seta(int a) this.a=a; } int geta () return this.a;

Abstract Classes Abstract class is a class that can not be instantiated, it exists extensively for inheritance and it must be inherited. There are scenarios in which it is useful to define classes that is not intended to instantiate; because such classes normally are used as base-classes in inheritance hierarchies

Inheritance It implies the functionality of data sharing between super and sub class. All the data members and methods of super class are available for use in sub class but not vice-versa. Subclass extends the functionality of super class to use the base class methods.

Example of Abstract class and Inheritance In an object-oriented drawing application, you can draw circles, rectangles, lines, Bezier curves, and many other graphic objects. These objects all have certain states (for example: position, orientation, line color, fill color) and behaviors (for example: moveTo, rotate, resize, draw) in common.

abstract class GraphicObject { int x, y; void moveTo(int newX, int newY) { ... } abstract void draw(); abstract void resize(); }

class Circle extends GraphicObject { void draw() { ... } void resize() }

Polymorphism In the context of object-oriented programming, is the ability to create a variable, a function, or an object that has more than one form. Polymorphism is the ability to process objects differently depending on their data types. Polymorphism is the ability to redefine methods for derived classes.

Types of Polymorphism Compile time Polymorphism Compile time Polymorphism also known as method overloading Method overloading means having two or more methods with the same name but with different signatures

Example of Compile Time Polymorphism

Runtime Polymorphism Run time Polymorphism also known as method overriding Method overriding means having two or more methods with the same name , same signature but with different implementation

Example of Run-time Polymorphism

Example We have to design a banking system in which there are several clients who are availing the facility of maintaining the account in the bank. As an international norm bank is offering multiple type of accounts to it’s customers like savings, current etc. Each account is having a facility of deposit and withdrawal attached with it for it’s client.

Example Task to do: We have to design the system in such a way that should accommodate the addition of new account types i-e profit and loss account etc without change in the design of the system

Another Example You are going to design a library application where a particular request for issuance of book is passed through a issueValidator to approve the issue request. The issuanceValidator looks to see if the balance of book is above certain values and then approves the request. Given this problem, one of the developer comes up with the following classes. The libraryrequestHandler can assess a issue request. This class holds the balance of remaining books and period of hold of books for a particular student account.

Code in Java

public class libraryRequestHandler { private int balance; private int period; public libraryRequestHandler(int balance, int period) { this.balance = balance; this.period = period; } public void approverequest(issuanceValidator validator) { if(validator.isValid(balance)) System.out.println(“Request approved..."); else System.out.println("Sorry more books are in balance..."); }}

PersonalLoanValidator Class public class issuanceValidator { public issueanceValidator() { } public boolean isValid(int balance) { if(balance>5) return true; else return false;

Task To Do In future the bank should be able to handle business type of accounts also. Identify the violation of open/close principle in classes defined. Reverse Engineered it and generate the class design of the code and create a solution with no violation of open/close principle