END METHOD. - Progress Community

Download Report

Transcript END METHOD. - Progress Community

Leveraging Design Patterns in ABL Applications

Phillip Magnay

Technical Architect

Goals of this Session

What are the take-aways?

 Many common design problems already have tried and proven solutions    Some wheels have already been invented Design patterns exist in the public domain Design patterns can be readily implemented in OpenEdge ® ABL © 2007 Progress Software Corporation 2 Leveraging Design Patterns in ABL Applications

Agenda

What we’re going to cover…

       What are Design Patterns?

Origins & Background Benefits Design Pattern Classifications Documenting Design Patterns Implementing Design Patterns in ABL Limitations of Design Patterns © 2007 Progress Software Corporation 3 Leveraging Design Patterns in ABL Applications

What are Design Patterns?

   Repeatable solution to a software

design

problem Design “template” Relationships & interactions between classes and/or objects   Situation dependent, must be adapted Not all patterns are “design” patterns • • Architectural pattern Code pattern © 2007 Progress Software Corporation 4 Leveraging Design Patterns in ABL Applications

Origins & Background

  Patterns in architecture during the ’70s Programming patterns in the ’80s   Object Orientation in the ’90s Gang of Four (Gof) in 1994 •

Design Patterns: Elements of Reusable Object-Oriented Software

  Pattern Languages Pattern Repositories © 2007 Progress Software Corporation 5 Leveraging Design Patterns in ABL Applications

Benefits

     Accelerates the development process Tested & proven approaches Familiar to developers Provides a lexicon, facilitates communication Basis for standards and documentation © 2007 Progress Software Corporation 6 Leveraging Design Patterns in ABL Applications

Design Pattern Classifications

   Creational Patterns Structural Patterns Behavioral Patterns    Fundamental Patterns Meta- Patterns Architectural Patterns 7 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Gang of Four Patterns

• • • • • 

Creational Patterns

Structural Patterns

Behavioral Patterns

Abstract Factory Builder Factory Method Prototype Singleton • • • • • • • Adapter Bridge Composite Decorator Façade Flyweight Proxy • • • • • • • • • • • Chain of responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template method Visitor © 2007 Progress Software Corporation 8 Leveraging Design Patterns in ABL Applications

Design Pattern Documentation

        Pattern Name Classification Also Known As (AKA) Motivation Applicability Structure Participants Collaboration      Consequences Implementation Sample Code Known Uses Related Patterns © 2007 Progress Software Corporation 9 Leveraging Design Patterns in ABL Applications

Implementing Design Patterns in ABL

     Factory Method State Decorator Observer Command © 2007 Progress Software Corporation 10 Leveraging Design Patterns in ABL Applications

Factory Method Pattern

Name: Classification: Motivation: Applicability: Participants: Factory Method Creational Need to define a standard interface to create objects, but allow sub-classes decide which class to instantiate.

A class cannot anticipate the class of objects it must create.

Product, ConcreteProduct, Creator, ConcreteCreator © 2007 Progress Software Corporation 11 Leveraging Design Patterns in ABL Applications

Factory Method Pattern Structure

12 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Factory Method Pattern Example

13 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Factory Method Pattern Example

CLASS Account: METHOD PUBLIC VOID Deposit (INPUT amt AS DECIMAL): /* code */ END METHOD.

METHOD PUBLIC VOID Withdraw (INPUT amt AS DECIMAL): /* code */ END METHOD.

METHOD PUBLIC VOID PayInterest (INPUT rate AS DECIMAL): /* code */ END METHOD.

END CLASS.

14 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Factory Method Pattern Example

CLASS PersonalAccount INHERITS Account: METHOD PUBLIC OVERRIDE VOID Withdraw (INPUT amt AS DECIMAL): /* code */ END METHOD.

METHOD PUBLIC OVERRIDE VOID PayInterest (INPUT rate AS DECIMAL): /* code */ END METHOD.

END CLASS.

15 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Factory Method Pattern Example

CLASS BusinessAccount INHERITS Account: METHOD PUBLIC OVERRIDE VOID Deposit (INPUT amt AS DECIMAL): /* code */ END METHOD.

METHOD PUBLIC OVERRIDE VOID PayInterest (INPUT rate AS DECIMAL): /* code */ END METHOD.

END CLASS.

16 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Factory Method Pattern Example

CLASS BankBranch: METHOD PUBLIC Account CreateAccount(): /* code */ END METHOD.

END CLASS.

17 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Factory Method Pattern Example

CLASS RetailBranch INHERITS BankBranch: METHOD PUBLIC OVERRIDE Account CreateAccount(): DEF VAR rAccount AS CLASS PersonalAccount NO-UNDO.

rAccount = NEW PersonalAccount().

RETURN rAccount.

END METHOD.

END CLASS.

© 2007 Progress Software Corporation 18 Leveraging Design Patterns in ABL Applications

Factory Method Pattern Example

CLASS CommercialBranch INHERITS BankBranch: METHOD PUBLIC OVERRIDE Account CreateAccount(): DEF VAR rAccount AS CLASS BusinessAccount NO-UNDO.

rAccount = NEW BusinessAccount(). RETURN rAccount.

END METHOD.

END CLASS.

© 2007 Progress Software Corporation 19 Leveraging Design Patterns in ABL Applications

Factory Method Pattern Example

Main: DO: DEF VAR rBranch AS CLASS BankBranch NO-UNDO. DEF VAR rAccount AS CLASS Account NO-UNDO.

rBranch = NEW RetailBranch().

rAccount = rBranch:CreateAccount().

rAccount:deposit(1000.00).

rAccount:withdraw(500.00).

rAccount:payInterest(5.25).

rBranch = NEW CommercialBranch().

rAccount = rBranch:CreateAccount().

rAccount:deposit(1000.00).

rAccount:withdraw(500.00).

rAccount:payInterest(5.25).

END.

© 2007 Progress Software Corporation 20 Leveraging Design Patterns in ABL Applications

State Pattern

Name: Classification: Motivation: Applicability: Participants: State Behavioral Allow an object to alter its behavior at run time when its internal state changes.

An object must change it behavior at run-time depending on its internal state.

Context, State, ConcreteState subclasses © 2007 Progress Software Corporation 21 Leveraging Design Patterns in ABL Applications

State Pattern Structure

22 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

State Pattern Example

23 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

State Pattern Example

CLASS Account: DEF PRIVATE VAR rState AS CLASS AccountState NO-UNDO.

DEF PUBLIC VAR balance AS DECIMAL NO-UNDO.

CONSTRUCTOR PUBLIC Account (): checkState().

END CONSTRUCTOR.

METHOD PUBLIC VOID Deposit(INPUT amt as DECIMAL): rState:Deposit(amt).

checkState().

END METHOD.

METHOD PUBLIC VOID Withdraw(INPUT amt AS DECIMAL): rState:Withdraw(amt).

checkState().

END METHOD.

METHOD PUBLIC VOID CalcInterest(): rState:CalcInterest().

checkState().

END METHOD.

© 2007 Progress Software Corporation 24 Leveraging Design Patterns in ABL Applications

State Pattern Example

25 Leveraging Design Patterns in ABL Applications

… METHOD PRIVATE VOID checkState(): IF balance < 0 THEN DO: DO: IF rState <> ? THEN END.

END.

ELSE DELETE OBJECT rState.

rState = NEW OverdrawnState(THIS-OBJECT).

ELSE IF balance >= 0 AND balance < 1000 THEN IF rState <> ? THEN DELETE OBJECT rState.

rState = NEW NonInterestState(THIS-OBJECT). DO: IF rState <> ? THEN DELETE OBJECT rState.

rState = NEW InterestState(THIS-OBJECT). END. END METHOD.

END CLASS.

© 2007 Progress Software Corporation

State Pattern Example

CLASS AccountState: DEF PROTECTED VAR rAccount AS CLASS Account NO-UNDO.

CONSTRUCTOR PUBLIC AccountState (INPUT acc AS CLASS Account): rAccount = acc.

END CONSTRUCTOR.

METHOD PUBLIC VOID Deposit (INPUT amt AS DECIMAL): rAccount:balance = rAccount:balance + amt.

END METHOD.

METHOD PUBLIC VOID Withdraw (INPUT amt AS DECIMAL): rAccount:balance = rAccount:balance - amt.

END METHOD.

METHOD PUBLIC VOID CalcInterest(): /* To be overridden */ END METHOD.

END CLASS.

26 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

State Pattern Example

CLASS NonInterestState INHERITS AccountState: CONSTRUCTOR PUBLIC NonInterestState (INPUT acc AS CLASS Account): SUPER(acc).

END CONSTRUCTOR.

METHOD PUBLIC OVERRIDE VOID CalcInterest(): /* do nothing, no interest */ END METHOD.

END CLASS.

© 2007 Progress Software Corporation 27 Leveraging Design Patterns in ABL Applications

State Pattern Example

CLASS InterestState INHERITS AccountState: CONSTRUCTOR PUBLIC InterestState (INPUT acc AS CLASS Account): SUPER(acc).

END CONSTRUCTOR.

METHOD PUBLIC OVERRIDE VOID CalcInterest(): rAccount:balance = rAccount:balance + (rAccount:balance * 0.0325). END METHOD.

END CLASS.

© 2007 Progress Software Corporation 28 Leveraging Design Patterns in ABL Applications

State Pattern Example

CLASS OverdrawnState INHERITS AccountState: CONSTRUCTOR PUBLIC OverdrawnState (INPUT acc AS CLASS Account): SUPER(acc).

END CONSTRUCTOR.

METHOD PUBLIC OVERRIDE VOID Withdraw (INPUT amt AS DECIMAL): /* overdrawn, do not change balance */ END METHOD.

METHOD PUBLIC OVERRIDE VOID CalcInterest(): rAccount:balance = rAccount:balance – (rAccount:balance * 0.1325).

END METHOD.

END CLASS.

29 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

State Pattern Example

Main: DO: DEF VAR rAccount AS CLASS Account NO-UNDO.

rAccount = NEW Account().

rAccount:CalcInterest().

rAccount:Deposit(500.00).

rAccount:CalcInterest().

rAccount:Deposit(600.00).

rAccount:CalcInterest().

rAccount:Withdraw(200.00).

rAccount:CalcInterest().

rAccount:Withdraw(1000.00).

rAccount:CalcInterest().

END.

© 2007 Progress Software Corporation 30 Leveraging Design Patterns in ABL Applications

Decorator Pattern

Name: Classification: Motivation: Applicability: Participants: Decorator Structural Attach additional functionality to an object dynamically When extension is required without impacting other classes and subclassing is difficult.

Component, ConcreteComponent, Decorator,ConcreteDecorator © 2007 Progress Software Corporation 31 Leveraging Design Patterns in ABL Applications

Decorator Pattern Structure

32 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Decorator Pattern Example

33 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Decorator Pattern Example

CLASS Account: DEF PROTECTED PROPERTY balance AS DECIMAL NO-UNDO GET. SET.

CONSTRUCTOR PUBLIC Account(): balance = 0.

END CONSTRUCTOR.

METHOD PUBLIC VOID Withdraw (INPUT amt AS DECIMAL): /* to be overridden */ END METHOD.

END CLASS.

© 2007 Progress Software Corporation 34 Leveraging Design Patterns in ABL Applications

Decorator Pattern Example

CLASS CheckingAccount INHERITS Account: METHOD PUBLIC OVERRIDE VOID Withdraw (INPUT amt AS DECIMAL ): balance = balance - amt.

END METHOD.

END CLASS.

© 2007 Progress Software Corporation 35 Leveraging Design Patterns in ABL Applications

Decorator Pattern Example

CLASS AccountDecorator INHERITS Account: DEF PROTECTED VAR rAccount AS CLASS Account NO-UNDO.

CONSTRUCTOR PUBLIC AccountDecorator (INPUT acc AS CLASS Account): rAccount = acc.

END CONSTRUCTOR.

METHOD PUBLIC OVERRIDE VOID Withdraw (INPUT amt AS DECIMAL): rAccount:Withdraw(amt).

END METHOD.

END CLASS.

36 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Decorator Pattern Example

CLASS AuditedAccount INHERITS AccountDecorator: CONSTRUCTOR PUBLIC AuditedAccount (INPUT acc AS Account): SUPER(acc).

END CONSTRUCTOR.

METHOD PUBLIC OVERRIDE VOID Withdraw (INPUT amt AS DECIMAL): SUPER:Withdraw(amt).

AuditWithdrawal(amt).

END METHOD.

METHOD PRIVATE VOID AuditWithdrawal (INPUT amt AS DECIMAL): /* some auditing code */ END METHOD.

END CLASS.

37 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Decorator Pattern Example

Main: DO: DEF VAR rAccount AS CLASS Account NO-UNDO.

DEF VAR rAuditedAccount AS CLASS AuditedAccount NO-UNDO. rAccount = NEW Account().

rAccount:Withdraw(1000.00).

rAuditedAccount = NEW AuditedAccount(rAccount).

rAuditedAccount:Withdraw(1000.00).

END.

© 2007 Progress Software Corporation 38 Leveraging Design Patterns in ABL Applications

Observer Pattern

Name: Classification: Motivation: Applicability: Participants: Observer Behavioral Establish a one-to-many relationship between objects so that a state change in one object notifies all related objects.

When a state change in one object requires subsequent state changes in several others without knowing the details of the other objects and while avoiding tight-coupling.

Subject, Observer, ConcreteSubject, ConcreteObserver 39 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Observer Pattern Structure

40 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Observer Pattern Example

41 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Observer Pattern Example

42 Leveraging Design Patterns in ABL Applications

CLASS Subject: DEF PROTECTED TEMP-TABLE ttObserver NO-UNDO FIELD observer AS CLASS PROGRESS.Lang.Object.

METHOD PUBLIC VOID Attach (INPUT observer AS CLASS Observer): IF NOT CAN-FIND(ttObserver WHERE ttObserver.observer = observer) THEN DO: CREATE ttObserver.

ttObserver.observer = observer.

END.

END METHOD.

METHOD PUBLIC VOID Detach (INPUT observer AS CLASS Observer): FIND FIRST ttObserver WHERE END METHOD.

ttObserver.observer = observer NO-ERROR.

IF AVAILABLE ttObserver THEN DELETE ttObserver.

© 2007 Progress Software Corporation

Observer Pattern Example

… METHOD PUBLIC VOID Notify(): DEFINE VAR rObserver AS CLASS Observer NO-UNDO.

FOR EACH ttObserver: rObserver = CAST(ttObserver.observer, END.

END METHOD.

Observer).

rObserver:Action(THIS-OBJECT).

END CLASS.

© 2007 Progress Software Corporation 43 Leveraging Design Patterns in ABL Applications

Observer Pattern Example

CLASS Stock INHERITS Subject: DEF PUBLIC PROPERTY symbol AS CHAR NO-UNDO GET. SET.

DEF PUBLIC PROPERTY price AS DECIMAL NO-UNDO GET . SET (INPUT piPrice AS DECIMAL): price = piPrice.

Notify(). END SET.

CONSTRUCTOR PUBLIC Stock (INPUT newSymbol AS CHAR, INPUT newPrice AS DEC): SUPER ().

symbol = newSymbol.

price = newprice.

END CONSTRUCTOR.

END CLASS.

© 2007 Progress Software Corporation 44 Leveraging Design Patterns in ABL Applications

Observer Pattern Example

CLASS Observer: METHOD PUBLIC VOID Action (INPUT subject AS CLASS Subject): /* to be overridden */ END METHOD.

END CLASS.

45 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Observer Pattern Example

CLASS Investor INHERITS Observer: DEF PRIVATE PROPERTY name AS CHAR NO-UNDO GET. SET.

CONSTRUCTOR PUBLIC Investor (INPUT newName AS CHAR): name = newName.

END CONSTRUCTOR.

METHOD PUBLIC OVERRIDE VOID Action (INPUT subject AS Subject): DEF VAR rStock AS CLASS Stock NO-UNDO.

rStock = CAST (subject,Stock).

MESSAGE NAME rStock:price VIEW-AS ALERT-BOX. END METHOD.

END CLASS.

46 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Observer Pattern Example

Main: DO: DEF VAR rStock AS CLASS Stock NO-UNDO.

DEF VAR rInvestor1 AS CLASS Investor NO-UNDO. DEF VAR rInvestor2 AS CLASS Investor NO-UNDO.

rInvestor1 = NEW Investor("J Johnson").

rInvestor2 = NEW Investor("B Blogs").

rStock = NEW Stock("PRGS", 33.00).

rStock:Attach(rInvestor1).

rStock:Attach(rInvestor2).

rStock:price = 34.00.

rStock:price = 35.00.

rStock:DETACH(rInvestor2).

rStock:price = 36.00.

rStock:Detach(rInvestor1).

rStock:price = 29.00.

47

END.

Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Command Pattern

Name: Classification: Motivation: Applicability: Participants: Command Behavioral Encapsulate a request as an object enabling the queuing and logging of requests and the un-doing and re-doing of operations.

When support for undo and redo is required.

Command, ConcreteCommand, Client, Invoker, Receiver © 2007 Progress Software Corporation 48 Leveraging Design Patterns in ABL Applications

Command Pattern Structure

49 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Command Pattern Example

50 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Command Pattern Example

CLASS Account: DEF VAR rCalculator AS CLASS AccountCalculator NO-UNDO.

DEF PROTECTED TEMP-TABLE ttCommand NO-UNDO FIELD commandNum AS INT FIELD command AS CLASS PROGRESS.Lang.Object

INDEX num commandNum.

DEF PRIVATE VAR curr AS INT INIT 0 NO-UNDO.

CONSTRUCTOR PUBLIC Account(): rCalculator = NEW AccountCalculator().

END CONSTRUCTOR.

© 2007 Progress Software Corporation 51 Leveraging Design Patterns in ABL Applications

Command Pattern Example

… … METHOD PUBLIC VOID CalcBalance (INPUT operator AS CHA, INPUT operand AS DECIMAL): DEF VAR rCommand AS CLASS COMMAND NO-UNDO.

rCommand = NEW AccountCommand(rCalculator,operator,operand).

rCommand:EXECUTE().

CREATE ttCommand.

curr = curr + 1.

ttCommand.commandNum = curr.

ttCommand.command = rCommand.

END.

© 2007 Progress Software Corporation 52 Leveraging Design Patterns in ABL Applications

Command Pattern Example

… METHOD PUBLIC VOID CommandRedo(INPUT levels AS INT): DEF VAR l AS INT NO-UNDO.

DEF VAR lastNum AS INT NO-UNDO.

DEF VAR rCommand AS CLASS COMMAND NO-UNDO.

FIND LAST ttCommand NO-ERROR.

IF AVAILABLE ttCommand THEN lastNum = ttCommand.commandNum.

DO l = 1 TO levels: IF curr > lastNum THEN DO: curr = lastNum.

LEAVE.

END.

ELSE …

© 2007 Progress Software Corporation 53 Leveraging Design Patterns in ABL Applications

Command Pattern Example

… DO: FIND FIRST ttCommand WHERE ttCommand.commandNum = curr NO-ERROR.

IF AVAILABLE ttCommand THEN DO: rCommand = CAST (ttCommand.command, Command).

rCommand:Execute().

curr = curr + 1.

END.

END.

END. END METHOD.

END CLASS.

© 2007 Progress Software Corporation 54 Leveraging Design Patterns in ABL Applications

Command Pattern Example

CLASS AccountCalculator: DEFINE PRIVATE VAR curr AS DECIMAL INIT 0 NO-UNDO.

METHOD PUBLIC VOID Operation (INPUT operator AS CHA, INPUT operand AS DECIMAL): CASE operator: WHEN '+' THEN curr = curr + operand.

WHEN '-' THEN curr = curr - operand.

WHEN '*' THEN curr = curr * operand.

WHEN '/' THEN curr = curr / operand.

END CASE.

MESSAGE curr operator operand VIEW-AS ALERT-BOX. END.

END CLASS.

© 2007 Progress Software Corporation 55 Leveraging Design Patterns in ABL Applications

Command Pattern Example

CLASS Command: METHOD PUBLIC VOID EXECUTE (): /* to be overridden */ END METHOD.

METHOD PUBLIC VOID UnExecute (): /* to be overridden */ END METHOD.

END CLASS.

56 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Command Pattern Example

CLASS AccountCommand INHERITS Command: DEF PUBLIC VAR accountCalculator AS CLASS AccountCalculator NO-UNDO.

DEF PUBLIC PROPERTY operator AS CHAR NO-UNDO GET . SET .

DEF PUBLIC PROPERTY operand AS DECIMAL NO-UNDO GET . SET .

CONSTRUCTOR PUBLIC AccountCommand (INPUT calc AS CLASS AccountCalculator, INPUT opor AS CHAR, INPUT opand AS DECIMAL ): accountCalculator = calc.

operator = opor.

operand = opand.

END CONSTRUCTOR.

METHOD PUBLIC OVERRIDE VOID EXECUTE(): accountCalculator:Operation (operator,operand).

END METHOD.

57 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Command Pattern Example

… METHOD PUBLIC OVERRIDE VOID UnExecute(): DEF VAR undoOperator AS CHAR NO-UNDO.

undoOperator = GetUndo(operator). accountCalculator:Operation (undoOperator,operand).

END METHOD.

METHOD PRIVATE CHAR GetUndo (INPUT operator AS char): DEF VAR undoOperator AS CHAR NO-UNDO.

CASE operator: WHEN '+' THEN undoOperator = '-'.

WHEN '-' THEN undoOperator = '+'.

WHEN '*' THEN undoOperator = '/'.

WHEN '/' THEN undoOperator = '*'.

OTHERWISE undoOperator = ' '.

END CASE. RETURN undoOperator.

END METHOD.

58

END CLASS.

Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Command Pattern Example

Main: DO: DEF VAR rAccount AS CLASS Account NO-UNDO.

rAccount = NEW Account().

rAccount:CalcBalance("+", 100.00).

rAccount:CalcBalance("-", 50.00).

rAccount:CalcBalance("*", 1.0525).

rAccount:CalcBalance("/", 2).

rAccount:CommandUndo(3).

rAccount:CommandRedo(2).

END.

59 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Sources of Design Patterns

       Gang of Four (GoF) Core J2EE Pattern-Oriented Software Architecture (POSA) Patterns of Enterprise Application Architecture (Fowler) Microsoft Solution Patterns Enterprise Integration Patterns (Hohpe & Woolf) Microsoft Integration Patterns © 2007 Progress Software Corporation 60 Leveraging Design Patterns in ABL Applications

Other Relevant Design Patterns

 • • • Enterprise Application Patterns • • Data Mapper Unit of Work Lazy Load Foreign Key Mapping Inheritance Mappers 61 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Limitations of Design Patterns

      Not a panacea Not directly reuse-able unlike components Just another set of abstractions Very dependent upon situation & context Don’t always apply to real-world situations More readily implemented in some programming languages and not others © 2007 Progress Software Corporation 62 Leveraging Design Patterns in ABL Applications

In Summary

  Some wheels have already been invented  Many common design problems already have tried and proven solutions Design patterns exist in the public domain  Design patterns can be readily implemented in OpenEdge ABL 63 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

For More Information, go to…

 PSDN • Implementing the OpenEdge Reference Architecture with Classes • http://www.psdn.com/library/kbcategory.jspa?catego

ryID=1212  Progress eLearning Community • What's New OE 10.1 Object Oriented Programming  Documentation • 10.1B Object-oriented Programming manual • 10.1B New and Revised Features manual © 2007 Progress Software Corporation 64 Leveraging Design Patterns in ABL Applications

Relevant Exchange 2007Sessions

 DEV-6: Getting Started with Object-Oriented Programming  DEV-12: Object-Oriented Programming in OpenEdge ABL  DEV-20: Using Classes & Procedures in OpenEdge 10.1B

 ARCH-7: A Class-Based Implementation of the OERA © 2007 Progress Software Corporation 65 Leveraging Design Patterns in ABL Applications

Questions?

66 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

Thank you for your time

67 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation

68 Leveraging Design Patterns in ABL Applications © 2007 Progress Software Corporation