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