procedural vs. object-oriented design.. what is design? scientists design experiments that validate...
Post on 27-Dec-2015
215 Views
Preview:
TRANSCRIPT
What is Design?
• Scientists design experiments that validate or invalidate theory.
• Engineers design solutions to problems.• design is a plan.• A plan never survives the first encounter
with the enemy.
Design is:
• An iterative process (many plans).
• Converging process (the design improves).
• Design involves modeling and analysis.
• Design requires a good problem statement.
What is Procedural Design?
• The creation of plans.
• Listing out conditional actions.
• Sketching out multiple blueprints.
• Deriving several levels of detail for a software project.
Procedural Design is:
• All of these things, and MORE!– Start with Problem statement– This drives the process.
• step-wise refinement of the problem
more and more detail is used to define a solution.
Getting more detail for the problem. Refining the problem specification.
Procedures follow from the spec.
• Procedures are actions that are taken given some situation on some data or device.
• Recipes are procedural elements that give direction.
• Cooking run the recipe procedure using ingredients and cooking utensils.
Cooking ideas
• Recipe is an algorithm...
• Ingredients are data structures.
• Utensils are like the subroutines
What is Object Oriented Design?
• Uses procedural design and add encapsulation.
• Encapsulation controls complexity.
• It limits the interface that the outside world sees in the system.
Object Oriented Cooking Design
• Roles are assigned to different Objects in the system.
• The waitron role is to deliver the rolls.
• The waitron role is to take the orders and deliver them to the kitchen.
• The kitchen cooks the meals and tolls the bell!
Service the interrupt
• Waitron services the bell interrupt by getting the meal and taking to the proper table.
• A clear division of labor and assignment of roles, this leads to limit of knowledge about the different implementations of the roles.
Object Oriented Design
• Still needs procedural design
• Now needs an interface between objects with a clearly defined role.
• Enables a reduction of fragility in the system.
• Why?
The interface is the protocol
• Well defined
• Stable
• Public
• It enables reuse of the subsystems.
• Interchangeable parts use the same interface!
Component Software Development
• Software Engineering has been criticized for the lack of software reuse!
• Procedural design had reuse using subroutines and functions.
• Large tool kits were the only means of software reuse.
Interfaces enable Component Connections
• Suppose I had a standard for gun barrels– subcontract the creation– mass produce guns– interchangeable parts.
Frameworks
• Frameworks use standard interfaces to make use of a large set of related classes to solve a problem.
• Example: – public interface Runnable {
• public void run();
– }
If you program to the interface you can:
• Thread t = new Thread(r); //r is runnable
• public interface ImageProcessInterface {– public Image process(Image img);
• }
Functional Design
• f(a,b,c,e,f,g);
• drawString(x,y, “hello world”);
• Function design requires that you know the parameters, their order and their meaning.
• So data structures were created:
• f(ds), drawString(graphicObject);
Functional Design
• Characterized by an input and
• Perhaps some output.
• Use it on data structures.
• A kind of Procedural Design
Object Oriented Design
• Functions and data structures resides in the objects.
• Interfaces are used to communicate outside of the system.
• If the interfaces are made simpler than the system then you have facade design pattern.
Facade Design Pattern
• Object Oriented Design Pattern
• Used to simplify the interface to the system.– Example: bell and order in the restaurant.– Example: gas, brake and steering.– A standard interface to a car -> I know how to
drive all standard cars!
Interfaces are not flexible!
• Both good and bad
• Good because: leads to standards....all AC outlets are the same.
• Bad because: not all interfaces serve all applications.
• A plane is different from a car.
• I need to learn how to fly a plane!
How do I change from one interface to another?
• The Adapter design pattern allows one interface to be changed into another.
• USA uses 120 VAC in two prongs.
• EU uses 220 VAC with different shaped prongs.
• An adapters converts between the two.
What is an Object Oriented Design Pattern?
• A design pattern is a recurring solution to a well understood problem in object oriented design.
• Design patterns have names.
• Design patterns formalize the object oriented designs so that they can be reused.
• They represent the maturation of SWE.
Design Patterns are Good because...
• Nomenclature (i.e., jargon)
• Every mature discipline has a jargon.
• Well understood vocabulary of communication.
• DP’s enable efficient communication about OOD’s.
• They enable reuse of OODs.
Design Patterns change the way we THINK about design.
• Language is a tool.
• DP improve the language tool and this alters how we thing about solving problems.
• There are lots of design patterns!
Singleton Design Pattern
• Pattern to have when you are only having one!
• Singleton design pattern controls the total number of instances in a system.
• Only one instance can be created!
• This instance is unique.
Why do I need singleton design pattern?
• For example: trademark like DocJava
• The PTO makes sure there is no duplication of a trademark. It uniquely identifies a business or product or service.
• Only one trademark can be issued for this purpose.
Programming is different from design!
final class SingletonExample {
private static SingletonExample se = new SingletonExample();
private SingletonExample () {}
public static SingletonExample getExample() {
return se;
}
}
OOD vs Proc Design
• You can’t do singleton DP in– FORTRAN– Pascal– COBOL– VB
You need an OO language for this!
A new era?
• When did OOP start?
• Popularized by Simula (1967).
• Design patterns are newer (1995)!
• The best way to learn design patterns is by using them.
• Just in time design patterns (introduce DP’s as they are needed).
Patterns
• Pattern Concept
• Why use patterns?
• What patterns did we use?
• Flat-files to DBMS transitions
Pattern Concept
–A Design Pattern is solution to a recurrent problem.
• A Design Pattern has:
• Pattern Name – new vocabulary
• A problem that is solved:–Context
–Given
–Constraints
What is a Pattern...
• A solution that is solved:–Context
–Given
–Constraints
• The consequences of use:– trade-offs– costs– comparison to other patterns
Why use Patterns?
• Permit more abstract thinking
• Improved communication
• Greater code reuse
• Improved reliability
• Easier maintenance
What Patterns did we use?
• The Singleton Pattern– Large systems can have multiple instances– Want to make sure that only once instance is made– Want class to be responsible for making a single instance
• Example: The Hub
public class Hub {
private Hub() {}
private static Hub hub = new Hub();
public static Hub getHub() {
return hub;
}
Observer Pattern
• Observer Pattern
• Problem: How do we propagate change events?– used to notify instances about changes– keeps a complex environment consistent– methods called for side effect
• Before:– No clean separation between the GUI and the logic– No indication of the inputs and outputs– No indication of the order in which calls had to be made
• Drawback:– need to centralize the relationships or too many updates
The Mediator Pattern
• The Mediator centralizes the observer pattern– Promotes loose coupling– no explicit referral– Like Ethernet wiring hub
• Elementary API:– addObserver– update– setChanged
Mediator Example
private Materialdb mdb = Materialdb.getMaterialdb();
private static SSFrameData ssFrameData
= SSFrameData.getSSFrameData();
public void wireUpObservers() {
mdb.addObserver(ssFrameData);
ssFrameData.addObserver(ssFrame);
propagateObserverMessages();
}
private void propagateObserverMessages() {
mdb.update();
ssFrameData.notifyObservers();
}
Framework
• Framework is:– set of cooperating classes– reusable design for specific class of software– NOT a design pattern
• Problem: need a specific overall architecture– define responsibilites– segment the programming job– design for specific patterns
• Drawback:– domain specific– not much code reuse for other problems.
Toolkit design pattern
• a collection of classes that provides a library of subroutines– Reusable code– can be used for functional programming
• Can typically characterize a clean compute function:– Input variables– Output variables– Intermediate variables
• Example:– y = Math.sin(x)– diagTenOut =
DiagonalTension.compute(beamWeb);
Polymorphic ToolKit
• A toolkit with polymorphism– Requires general interface– Reuse of implementations
• Good for– integration– plotting– function manipulation
Polymorphic Toolkit
• Example: Curve Plots
public interface Computable {
double compute(double x);
double getMin(); // returns the min value allowed for x
double getMax(); //returns the max value allowed for x
}
Composite Design Pattern
• Composite Design– tree structure– treat objects uniformly– has-a relations
• Problem– a single Frame with flat structure of components
• textfields• labels• buttons
• A Rivet Panel logically groups all GUI element for Rivets– Much easier to interact with, layout and reuse!
Facade Design Pattern
FDP - provides an interface to a subsystem– Need a clean API– Need a new notation for variables
• For example: public double getStringerE() {
return stringerE;
}
public void setStringerE(double d) {
stringerE = d;
setChanged(); // triggers local DBMS
}
The Proxy Pattern
A Proxy is a place holder for another instance
• Problem: Many DBMS calls cause communication
The cached material database is a proxy– IO is threaded– can disk-based database– can change to network based DBMS– a surrogate for the dispatch of SQL commands.
The Remote Proxy Pattern
• RPP - Remote Surrogate– enables distribute computing– used by JINI and Java Spaces
• Can be implemented with – RMI– CORBA– sockets
• Calls non-Java network-based services
Remote Proxy Example
Shell wrappered FORTRAN
URL u = new URL("http://www.computeserver.com/cgi-bin?23.2?22?...");
• very fast on intranetwork
• Can incur network overhead
• A VERY EASY SOLUTION!
The Delegation Pattern
DP-defers the implementationProblem:
– Services are often duplicated– Must make changes in several places
Solution:– Centralize the changes– isolate your code from the implementation
Example:
public Metse1 getMetse1() { // replace with singleton pattern
return dtMetFrame.getMetse1();
}
top related