1 / 36

OpenQM

OpenQM. Object Oriented Programming. Martin Phillips Ladybridge Systems Ltd. OpenQM. What’s it all about? What is an object? Persistent data Public subroutines and functions Inheritance Destructors and undefined name handlers. OpenQM. What’s It All About?

ciqala
Download Presentation

OpenQM

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OpenQM Object Oriented Programming Martin Phillips Ladybridge Systems Ltd

  2. OpenQM What’s it all about? What is an object? Persistent data Public subroutines and functions Inheritance Destructors and undefined name handlers

  3. OpenQM • What’s It All About? • OO programming does not replace “conventional” methods. • A new addition to the developer’s toolbox. • An integral part of the QMBasic language.

  4. OpenQM • What Is An Object? • Subroutine: • Program operations that work on supplied data. • Object: • Data that has associated program operations.

  5. OpenQM • What Is An Object? • Defined by a CLASS module. • The CLASS module is a container for... • The persistent data definitions. • The program operations that run against this data.

  6. OpenQM • What Is An Object? • An object is a run time instance of the class. • var = OBJECT(“myobj.cls”) • There may be many concurrent instances of the same class each with their own data.

  7. OpenQM • The Objref Operator ( -> ) • References an element of the object. • var->name • var->(expr)

  8. OpenQM • Persistent Data • Class modules may use common blocks but these are shared across all instances of the class. • Class modules also have persistent data that is separate for each instance.

  9. OpenQM • Persistent Data • Private data... • Not visible outside the class module. • Hides internal operation of the object. • PRIVATE A, B, C(2,3)

  10. OpenQM • Persistent Data • Public data... • May be visible to programs using the object. • PUBLIC P, Q, R(2,3) • PUBLIC X READONLY

  11. OpenQM • Persistent Data • Referenced from calling program: • result = var->item • var->item = 12 • var->item(3) = 12

  12. OpenQM • Public Subroutines and Functions • Program operations contained within the class module. • May access or update persistent data. • Public subroutines store values or perform tasks. • Public functions return a result value.

  13. OpenQM • Public Subroutines and Functions • PUBLIC SUBROUTINE name • ... Program operations ... • END • var->name

  14. OpenQM • Public Subroutines and Functions • PUBLIC SUBROUTINE name(a,b) • ... Program operations ... • END • var->name(x,y) • var->name(x) = y

  15. OpenQM • Public Subroutines and Functions • PUBLIC FUNCTION name(a,b) • ... Program operations ... • RETURN value • END • p = var->name(q, r)

  16. OpenQM Public Subroutines and Functions Variable length named argument lists... PUBLIC FUNCTION name(a,b) VAR.ARGS ... Program operations ... RETURN value END

  17. OpenQM Public Subroutines and Functions Variable length unnamed argument lists... PUBLIC FUNCTION name(a, ...) ... Program operations ... RETURN value END

  18. OpenQM • Public Subroutines and Functions • Access arguments by position... • ARG.COUNT() • ARG(n) • SET.ARG n, value

  19. OpenQM • Dual Identity • A name may refer to a public data item when reading and program operations when writing... • ...Or vice versa • Allows easy data validation or event triggers.

  20. OpenQM • Inheritance • One class may want to use the data and public routines of another. • The inherited class remains a “black box” where the outer class cannot see how it works.

  21. OpenQM • Inheritance • Static Inheritance... • CLASS name INHERITS other.class

  22. OpenQM • Inheritance • Dynamic Inheritance... • obj = object(“otherclass”) • INHERIT obj

  23. OpenQM • Inheritance • Dis-inheritance... • DISINHERIT obj

  24. OpenQM • “Automatic” Handlers • CREATE.OBJECT • DESTROY.OBJECT • UNDEFINED (Subroutine / Function)

  25. OpenQM • “Automatic” Handlers • CREATE.OBJECT • Run when the object is instantiated. • Arguments to OBJECT() are passed to this subroutine.

  26. OpenQM • “Automatic” Handlers • DESTROY.OBJECT • Run when the last variable referencing the object is released. • Guaranteed execution, even at program abort.

  27. OpenQM • “Automatic” Handlers • UNDEFINED • Run for references to undefined names. • Both FUNCTION and SUBROUTINE can exist. • Caller’s arguments passed, plus name.

  28. OpenQM • Example Class Module • This example will walk through a directory, returning the name and type of each item.

  29. OpenQM Step 1 – Data Definitions CLASS DIR.CLS $CATALOGUE PRIVATE ENTRIES ;* From DIR() PUBLIC ISDIR READONLY END

  30. OpenQM Step 2 – CREATE.OBJECT PUBLIC SUBROUTINE CREATE.OBJECT(P) ENTRIES = DIR(P) END

  31. OpenQM Step 3 – Retrieve the next item name PUBLIC FUNCTION NEXT NAME = ENTRIES<1,1> ISDIR = (ENTRIES<1,2> = 'D') DEL ENTRIES<1> RETURN NAME END

  32. CLASS DIR.CLS $CATALOGUE PRIVATE ENTRIES ;* From DIR() PUBLIC ISDIR READONLY ;* Is a directory? PUBLIC SUBROUTINE CREATE.OBJECT(PATH) ENTRIES = DIR(PATH) END PUBLIC FUNCTION NEXT NAME = ENTRIES<1,1> ISDIR = (ENTRIES<1,2> = 'D') DEL ENTRIES<1> RETURN NAME END END

  33. OpenQM Using the Class DIR = OBJECT('DIR.CLS', '\TEMP') LOOP NAME = DIR->NEXT UNTIL NAME = '' DISPLAY NAME REPEAT

  34. PROGRAM OBJECT.DEMO GOSUB SCAN(0, '\QMSYS') STOP LOCAL SUBROUTINE SCAN(INDENT, PATH) PRIVATE DIR DIR = OBJECT('DIR.CLS', PATH) LOOP NAME = DIR->NEXT UNTIL NAME = '' CRT SPACE(INDENT) : NAME IF DIR->ISDIR THEN GOSUB SCAN(INDENT + 3, PATH:'\'NAME) END REPEAT RETURN END END

  35. OpenQM QUESTIONS?

  36. OpenQM

More Related