Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

152
Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20

Transcript of Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Page 1: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Object Oriented Programming in APL

A New Direction

Dan Baronet2008

V1.20

Page 2: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 2

Object Orientation

Dyalog V11 was released in 2006.One of the major features was:

Page 3: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 3

This presentation is based on two things:

1.Why should I know about Object Orientation programming?

2.How do I use it in APL?

Page 4: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 5

Reasons: why do this?

Because Object Orientation is a Valuable Tool of Thought!

To be able to Share Tools and Components more Easily

To help us Manage Complexity in all Project Phases

To use .Net more easily

Page 5: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 7

Another tool

Object Orientation is another tool for programmers. Users won’t see any difference.

It is a way for programmers to simplify their lives by supplying each other with already made objects (almost) ready to use.

Page 6: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 9

The evolution of data

1. Elementary data elements (like int) and arrays of them (all the same)

2. Structures (like {i: int; d: date}), many elementary elements or structures (recursive)

3. Namespaces (structures whose elements are referred to by name). They include code.

4. Classes (namespaces with initializers & cleaners)

Page 7: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 11

The evolution of dataIn traditional (procedural) systems,

data is separated from code:

data

code

Page 8: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 12

The evolution of dataThis is the same in traditional APL

systems, data is separated from code:data

code

Page 9: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 13

The evolution of dataIn OO systems, data is more tightly

coupled with code:

privatecode

data

Page 10: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 14

The evolution of dataSame thing in OO APL systems:

privatecode

data

Page 11: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 15

The Object Oriented paradigm

Page 12: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 16

OO fundamental concepts

The Object Oriented paradigm is based on:

1.Classes & Interfaces2.Instances 3.Members4.Message passing5.Inheritance6.Encapsulation7.Polymorphism

Page 13: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 17

OO fundamental concepts

1. Classes

A class defines the abstract characteristics of some object, akin to a blueprint.

It describes a collection of members (data and code)

Classes can be nested

Page 14: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 18

OO fundamental concepts

Classes

ex: House blueprint

Page 15: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 19

OO fundamental concepts

ClassesA class can implement one or more

interfaces.An interface describes what it should do.The class describes how it should be done.If a class implements an interface it should

do it completely, no partial implementation is allowed.

Page 16: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 20

OO fundamental concepts

InterfacesAn interface describes how to

communicate with an object.Ex: electrical system & electrical

outlets

Page 17: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 21

Interfaces - exampleThe following maneuvering interface

describes what HAS to be done with a machine:

Method Steer (direction); // where to go

Method Accellerate (power); // go faster

Method SlowDown (strength); // go slower

It does NOT specify HOW it should be done.

Page 18: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 22

Interfaces - exampleThis car object implements maneuvering:

Class car : maneuvering;Method SteeringWheel: implements maneuvering.Steer (turn); ...Method GasPedal: implements maneuvering.Accellerate (push); ...Method BreakPedal: implements maneuvering.SlowDown (hit);

Page 19: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 23

Interfaces - exampleThis plane object implements maneuvering:

Class plane : maneuvering;Method Yoke: implements maneuvering.Steer (move); ...Method Handle: implements maneuvering.Accellerate (pp); ...Method Flaps: implements maneuvering.SlowDown (degree);

Page 20: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 24

OO fundamental concepts

2. InstancesThose are tangible objects created

from a specific class.Upon creation any specific action is

carried out by the constructor (code) of the class if some sort of initialization is required.

Upon destruction, the destructor is responsible for cleaning up.

Page 21: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 25

OO fundamental concepts

2. InstancesNew House (Blue):

After the creation of the new House the Constructor paints it in blue

Page 22: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 26

OO fundamental concepts

3. MembersThis is the code and the data of a class.The code is divided into Methods

(functions) and data is divided into Fields (variables).

There are also Properties which are Fields implemented via functions to read/set them.

Page 23: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 27

OO fundamental concepts

MembersThese can reside inside the class if shared

or in the instance.Ex: the .Net class DateTime has a member

Now that does not require an instance to be called. e.g.DateTime.Now straight from the class⍝

2007/10/21 9:12:04

Page 24: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 28

OO fundamental concepts

Shared vs Instance

S1 S2 S3I1 I2 I3 I4

Shared membersremain in the class

S1 S2 S3I1 I2 I3 I4

S1 S2 S3I1 I2 I3 I4

S1 S2 S3I1 I2 I3 I4

Instance members are created in theinstance

Page 25: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 29

OO fundamental conceptsMembers: MethodsThose can either reside in the class

(shared method) or in the instance (instance method).

There are also abstract methods (e.g. in interfaces) with no code, only calling syntax.

Constructors and destructors are methods.

Page 26: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 30

OO fundamental conceptsMembers: FieldsThose can either reside in the class

(shared field) or in the instance (instance field).

They can also be read only.

Page 27: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 31

OO fundamental conceptsMembers: PropertiesThose are Fields implemented by

accessing methods, i.e. PropX←value ⍝ is implemented by

SET value

They can either reside in the class (shared property) or in the instance (instance property).

Page 28: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 32

OO fundamental concepts

4. Message passingThis is the (usually asynchronous)

sending (often by copy) of a data item to a communication endpoint (process, thread, socket, etc.).

In procedural languages like Dyalog, it corresponds to a call made to a routine.

Page 29: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 33

OO fundamental concepts

5. InheritanceThis is a way to avoid rewriting code by

writing general classes and classes that derive from them and inherit their members.

This helps achieve reusability, a cornerstone of OO by avoiding to rewrite code and use what already exists.

Page 30: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 34

OO fundamental concepts

Inheritance

We say that a (derived) class is based on another one.

All classes (but one) are derived from another one or by System.Object (the default)

Page 31: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 35

OO fundamental concepts

Inheritance: Based classes (reusability)

A class can be based on another based class. See class Collie based on Dog based on Animal

Animal

Dog: Animal

Rex (Collie)Fish: Animal

Fido (Collie)

Great Dane: Dog

Collie: Dog

Instances

Classes

Page 32: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 36

OO fundamental concepts

Inheritance: multiple inheritance

A class can be based on several other classes Here class Mule is made out of 2 different classes.

Horse

Donkey

Mule

Page 33: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 37

OO fundamental concepts

Inheritance: simulate multiple inheritance

A class can implement several interfaces. Here class Penguin implements 2 different behaviours (interfaces):

Fish(swim,eggs)

Bird(fly,eggs,sing)

Penguin:-Swims -Flies not-1 egg/yr-Croaks

Page 34: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 38

OO fundamental concepts

InheritanceWhen an instance is created from a class

based on another one it inherits all its members automatically.

Members can be redefined but subroutines must be specifically set to override base class subroutines.

Page 35: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 39

OO fundamental concepts

Inheritance: a derived class inherits all the base members

C1memberAmemberB

C2: C1

memberCmemberD

Page 36: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 40

OO fundamental concepts

Inheritance: a derived class inherits all the base members

C1memberAmemberBmemberC

C2: C1

memberCmemberD

Page 37: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 41

OO fundamental concepts

Inheritance

Initialization is performed by the constructor.

If a class is derived, the base class' constructor will also be called if there is one.

Page 38: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 42

OO fundamental concepts

InheritanceSome classes may be sealed to prevent

other classes from inheriting them.

Page 39: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 43

Override concept

// M1 calls A’s M2:(NEW A).M1

I am A

// M1 calls B’s M2:(NEW B).M1

I am B

M1

M2 M2‘I am A’

M1

M2 M2‘I am B’

Class A Class B

Page 40: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 44

Based classes

// M1 calls A’s M2:(NEW A).M1

I am A

// M1 calls A’s M2:(NEW B).M1

I am A

M1

M2 M2‘I am A’

There is no M1 in Bso A’s (on which B is based) M1 is used

M2‘I am B’

Class A Class B: A

Page 41: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 45

Based classes

M1

M2 M2‘I am A’

There is no M1 in Bso A’s (on which B is based) M1 is used

M2: Override‘I am B’

Class A Class B: A

// M1 calls A’s M2:(NEW A).M1

I am A

// M1 calls A’s M2:(NEW B).M1

I am A

A:M2 does not allow to be overridden

Page 42: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 46

M2: Override‘I am B’

Based classes

M1

M2:Overridable

M2‘I am A’

Class A Class B: A

There is no M1 in Bso A’s (on which B is based) M1 is used

// M1 calls A’s M2:(NEW A).M1

I am A

// M1 calls B’s M2:(NEW B).M1

I am B

A:M2 does allow to be overridden AND B wants to override it

Page 43: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 47

OO fundamental concepts6. Encapsulation• Hides the underlying functionality.• It conceals the exact details of how a

particular class works from objects (external or internal) that use its code.

• This allows to modify the internal implementation of a class without requiring changes to its services (i.e. methods).

Page 44: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 48

Example: a carConsider a car: the functionality is hidden, it

is encapsulated, you don’t see all the wiring inside, you’re only given specific controls to manipulate the car.

Page 45: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 49

Encapsulation (access)To allow access to a member there

are various level definitions.

For example, to expose a member you must use some syntax that will declare it public.

By default, private is the norm.

Page 46: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 50

OO fundamental concepts

Encapsulation: privateA private member cannot be seen from

anywhere. Methods can only access it from inside the class.

Nested or derived objects can't see it either.

M is onlyseen in thewhite area

sub1

sub2

Page 47: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 51

OO fundamental concepts

Encapsulation: protectedA protected member can only be seen

from within the instance of from nested or derived objects.

M is onlyseen in thewhite area

sub1

sub2

Page 48: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 52

OO fundamental concepts

Encapsulation: publicA public member can be seen from

anywhere. All Methods can access it from anywhere whether it is public shared or public instance.

M is seenin all thepale area

sub1

sub2

Page 49: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 53

OO fundamental concepts

Encapsulation: friendA class declared friend can see the

offerer’s private and public members.

Private Bpv

Public Bpu

Friend A

Class A Class B

Private ApvPublic Apu

Here A sees B’s membersas its own members

Page 50: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 54

OO fundamental concepts

7. PolymorphismIt is behavior that allows a single definition

to be used with different types of data.This is a way to call various sections of

code using the same name.Typed languages can tell the difference by

looking at the “signature” of the functions (their number of arguments and their types)

Page 51: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 55

OO fundamental conceptsPolymorphism example

Foo (integer arg){// fn called with// an integer argPrint 42 //“Int arg”}

Foo (string arg){// fn called with// a string argPrint “String arg”}

Same function name, different code

Page 52: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 56

OO fundamental concepts

PolymorphismA program that accepts multiple definitionsis said to be overloaded.

Basic language example: + is used to add and catenate

Print 2+24

Print ‘aaa’+’bbb’aaabbb

Page 53: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 57

OO fundamental concepts

More concepts

There are many more concepts.Those presented here are the most common ones.

For example, Casting is not an OO concept but it is often used.

Page 54: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 58

OO Concepts Summary• OO is based on +-7 key concepts• Classes are blueprints• Instances are objects created from

classes• They contain members (data & code)• Their access is restricted• The relation between classes is based

on inheritance and/or specific access

Page 55: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 59

End of OO basics

QUESTIONS

?

Page 56: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 60

Page 57: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 61

Implementation• Dyalog follows C# rules closely• The extensions to the language

have been made in following with the :Keywords scheme introduced in the 90s (All new keywords start with ‘:’ )

• Some new system functions have been added and

• Some new system commands

Page 58: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 62

ImplementationLet’s see how Dyalog APL does this:

1.Classes and interfaces2.Instances 3.Members4.Message passing5.Inheritance6.Encapsulation7.Polymorphism

Page 59: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 63

Implementation: classesA class can be defined using the )EDitor

as in )ED ○ MyClass

Upon exiting, MyClass will be defined in the current namespace (e.g. #)

Page 60: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 64

Implementation: classesIn the workspace MyClass appears

as a namespace:⎕NC ‘MyClass’

9)CLASSES

MyClass

Page 61: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 65

Implementation: membersThe members in a class are:• Field: same as a variable• Method: same as a function• Property: looks and feels like a variable

but implemented as a (pair of) functions

All can be either public or private (the default)

Page 62: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 66

Implementation: members

The class to the right shows a few fields (vars) and their access.

The access is the same for methods (fns) and properties.

Page 63: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 67

Implementation: membersThe class to the

right shows a few methods (fns) and their access.

<mon1> is also used as a constructor. It MUST be public.

Page 64: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 68

Implementation: membersThe class to the

right shows 2 properties and their access.

The 1st one is private and readonly (it has no set fn)

The 2nd one is public read/write

Page 65: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 69

Classes are like blueprints: they define how things should be.

⎕NEW is a new system function that creates an object using a class as an instance.

Whatever is in the class will appear in the instance as a copy, not a reference

Implementation: instances

Page 66: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 70

⎕NEW accepts a one or two elements argument.

The 1st one is the class (not in quotes)The 2nd, if present, is what to

start/initialize the instance with. It can only be supplied if the class allows it.

Implementation: NEW⎕

Page 67: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 71

Example:myInstance← ⎕NEW MyClass

The display form includes [brackets] by defaultmyInstance

#.[MyClass]It is another type of namespace⎕NC ‘myInstance’

9

Implementation: NEW⎕

Page 68: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 72

⎕DF allows to change the default Display Form of a namespace.

Example:⎕←obj←⎕NEW MyClass

#.[MyClass]obj.⎕DF ‘OO class’

objOO class

Implementation: DF⎕

Page 69: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 73

Classes may require something to initialize the instance. Ex:)ED ○ Animal

Implementation: constructors

Here an animal mustbe have at least twocharacteristics:1.# of legs2. the sounds it makes

Page 70: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 74

Several instances can be made up of the same Animal class:

Implementation: constructors

After running thisfunction in a cleanspace we have:

)obsfish monkey snake tiger Animal

⎕NC ‘animals’ this is a variable holding 4 instances⍝2

animals.Nlegs how many legs for each animal?⍝4 0 0 2

Page 71: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 75

Implementation: message passing

In APL this merely consists in calling the methods directly either from the instance or from the class if shared, e.g.

Myclass.sharedFn argsor

myInstance.Fn args args if required⍝

Page 72: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 76

Implementation: inheritanceInheritance: Based classes

A class can be based on another based class. See class Collie based on Dog based on Animal

Animal

Dog: Animal

Rex (Collie)Fish: Animal

Fido (Collie)

Collie: Dog

Instances

Classes

Great Dane: Dog

Page 73: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 77

Example: a bird’s generic description is ‘plain Bird’

Birdy← NEW Bird⎕

Birdy.Desc

plain Bird

Implementation: inheritance

Bird Birdy (Bird)

When Birdy is created, Bird’s constructor is called

Page 74: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 78

If a base class has a constructor it must be called.

Base constructors are called when the :Implements constructor statement is reached.

If several classes are based one on another their constructors’ call are made in the same fashion.

Implementation: inheritance

Page 75: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 79

Example: a parrot is a bird

Coco← NEW Parrot⎕Coco.Desc

Not a plain Bird, a Parrot

Implementation: inheritance

Bird

Birdy (Bird)

Parrot: Bird Coco (Parrot)

Page 76: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 80

We can create classes and instances at all levels

Implementation: inheritance

Bird

Parrot: Bird

Tweety (Macaw)

Macaw: Parrot

InstancesClasses

Birdy (Bird)

Coco (Parrot)

Page 77: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 81

Implementation: inheritanceInheritance: constructors with arguments

Using the animal kingdom as example.

Animal

Dog: Animal

Rex (Collie)Fish: Animal

Fido (Collie)

Big Dane: Dog

Collie: Dog

Instances

Classes

Great Dane: Dog

Page 78: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 82

Implementation: inheritance

pet← NEW Collie ‘Rex’⎕pet. nl -2⎕

Name Nlegs Sounds Typepet.(Name Type)

Rex canis familiaris

Page 79: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 83

Implementation: inheritance

pet← NEW Collie ‘Rex’⎕pet. nl -2⎕

Name Nlegs Sounds Typepet.(Name Type)

Rex canis familiaris

Let’s go over this again slowly…

Page 80: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 84

Implementation: inheritance

pet← NEW Collie ‘Rex’⎕pet. nl -2⎕

Name Nlegs Sounds Typepet.(Name Type)

Rex canis familiaris

Page 81: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 85

Implementation: Encapsulation

Conceals the exact details of how a particular class works from objects that use its code.

To allow access to a member there are various access level definitions.

Page 82: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 86

To expose a member you must make it public

For a property or a method (function) you must use the :Access public Statement

For a field (var) you must use this statement::Field public MyField

Implementation: Encapsulation

Page 83: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 87

The class to the right shows a few fields (vars) and their access.

The access is the same for methods (fns) and properties.

Implementation: Encapsulation

Page 84: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 88

Shared vs instanceEach instance gets a copy of each

instance member.If a member is shared it is kept in

the class for all instances to see (and use)

Implementation: Encapsulation

Page 85: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 89

Shared vs instance

Example: keepCountHere each instance has its own private

ID and public nameThe class keeps track of the number of

instances created privately.

Implementation: Encapsulation

Page 86: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 90

Shared vs instance

keepCount:Count←0,1,…

MyID MyName

'Count' remainsin the class

CountMyID=1

MyName=XYZ1

CountMyID=2

MyName=XYZ2

Instance members are created in theinstance

Implementation: Encapsulation

CountMyID=3

MyName=XYZ3

Page 87: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 91

Shared vs instance in1← new keepCount⎕

I am XYZ1 in2← new keepCount⎕I am XYZ2 in3← new keepCount⎕I am XYZ3 keepCount.Count3 keepCount. nl-2⎕ Count in2. nl-2⎕ Count MyName in1.Count3

Implementation: Encapsulation

Page 88: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 92

In APL a function CANNOT have different definitions using a single name.

OTOH, a constructor MAY have several definitions.

Since APL is typeless the only way to tell which function to use is by the NUMBER of arguments, from 0 (niladic) to any number.

Implementation: Polymorphism

Page 89: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

:Class manyCtors ∇ general x ⍝ This ctor any arg ⍝ It can be anything :Implements constructor :Access public ∇ ∇ nil ⍝ This ctor takes no arg :Implements constructor :Access public ∇ ∇ mon1(a1) ⍝ This ctor takes 1 arg ⍝ It MUST be a vector :Implements constructor :Access public ∇ ∇ mon5(a1 a2 a3 a4 a5) ⍝ This ctor takes 5 arg ⍝ It MUST be exactly 5 :Implements constructor :Access public ∇:EndClass

Oct 2008 OOAPL 93

Implementation: Polymorphism

Example:

Depending on the number of arguments, the proper fn will be used.

Page 90: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 94

Implementation summary

• Dyalog follows C# rules closely• )ED to edit classes• classes are much like namespaces• their members (vars & fns) can all be

accessed using public access• ⎕NEW makes an instance• classes can be based on another one• they use constructors to initialize them

Page 91: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 95

End of implementation

There are MANY other things related to OO that have been implemented but are out of the scope of this presentation.

To find more visit Dyalog’s website at www.dyalog.com and grab the free documentation.

Page 92: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 96

End of implementation

QUESTIONS

?

Page 93: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 97

Exercises

Choice of exercises:1.Simple numbers2.Complex numbers3.Parser4.Pre formatted forms5.Graphical objects6.Telnet client The end

Page 94: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 98

Exercises – Preformatted form

Deriving from Dyalog GUI classes.

Besides classes you can write classes derived from

- Forms- OLE servers/controls- .Net classes

Page 95: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 99

Exercises – Preformatted form

Ex:f1← new ⎕ 'form' (('caption' 'zzz')

('size'(100 200)))XL← new ⎕ 'oleclient' (⊂'classname'

'Excel.application')⎕using←''present←System.DateTime.Now

Page 96: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 100

Exercises – Preformatted form

We need to write a class that will create a form, just like

f1← new ⎕ 'form' (('caption' 'zzz')('size'(100 200)))

But with 2 buttons already setup for SAVE and QUIT so we can do

f1← new ⎕ myForm ((…))

Page 97: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 101

Exercises – Preformatted form

Page 98: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 102

Exercises – Preformatted form

f1← new Dialog(‘pref form' (100 500) )⎕ ⍬

Page 99: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 103

Exercises – Preformatted form

This class creates an edit object:

Page 100: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 104

Exercises – Preformatted form

f1← new Dialog('pref form' (200 300) )⎕ ⍬f1.fn←f1. new EditField ('First name:' '' (10 60) ( 100) )⎕ ⍬ ⍬f1.ln←f1. new EditField ('Last name:' '' (38 60) ( 100) )⎕ ⍬ ⍬f1.ad←f1. new EditField ('Address:' '' (66 60) (90 230) ( 'style' 'multi'))⎕ ⊂f1.(fn ln ad).Text←'Jeremy' 'Cricket'('TopFlower' 'last field')

Page 101: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 105

Exercises

Improvements:- Use an interface

Back to exercise choices

Page 102: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 106

Exercises – Complex numbersCreate a class to do complex math.

A rational or “normal number” is a decimal number that can be viewed on the line of numbers:

-10 -5 0 +5.3 +10

Page 103: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 107

ExercisesA complex numberis a number in thecomplex plane:2 rational numbersare used torepresent it.

-4 -2 0 +2 +4 +6

+2

+4

+6

The number 3J4

Page 104: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 108

Exercises

Create a class to do complex math.

The class will contain 2 real numbers and 3 methods to perform Add, Multiply and return the Reciprocal of a complex number.

Page 105: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 109

Exercises

Create a class to do complex math.

The methods to perform Add and Multiply will be shared (in the class) methods and the Reciprocal will be an instance method.

Page 106: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 110

ExercisesComplex math definition:

C = a + bi, where i = ¯1*0.5

Engineers use the J notation, like this:3j4 to denote the complex number with

a real value of 3 and an imaginary value of 4.

Page 107: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 111

Exercises

Complex math definition:

Addition of 2 complex numbers

C1 + C2 = (a1+a2) + (b1+b2)i

Page 108: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 112

Exercises

Complex math definition:Multiplication of 2 complex numbers C1 a1 b1i x C2 a2 b2i=(a1×a2) + (b1i × b2i) + (a1×b2i) +

(b1i×a2)=((a1×a2) - (b1 × b2)) + ((a1×b2) +

(b1×a2))i

Page 109: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 113

Exercises

Complex math definition:Reciprocal of a complex number is 1÷C such that C × R = 1 = 1 + 0ireal = ((a1×a2) - (b1 × b2)) = 1img = ((a1×b2) + (b1×a2))i = 0Solving:Ra = Ca÷((Ca×Ca)-(Cb×Cb))Rb = -Cb÷((Ca×Ca)-(Cb×Cb))

Page 110: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 114

Exercises

The first thing to do:)ED ○ complex

Page 111: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 115

Exercises

Enter the fields:

Page 112: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 116

ExercisesEnter the constructor, it takes 2

numbers as arguments, it merely sets the 2 fields:

Page 113: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 117

ExercisesTest

c1← NEW complex (3,4)⎕c1.real

To ease creation of complex numbers:

j←{ new complex (⍺ ⍵)}⎕c2←5 j 12

c2.img

Page 114: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 118

ExercisesTest

Typing c1 does not provide useful information.

It would be nice if we could find what the numbers are without having to use

c1.(real img)

Page 115: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 119

Display form

• The display form can be improved• We can use ⎕DF to show a

different string, e.g. 3J4• Try c1. DF '3J4'⎕ (or whatever)• Try including the setting in the

constructor

Page 116: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 120

Display form

• assignment does not change the display

Try c1.img←22 and verify that ←c1⎕ has the same display form

• use properties to change that• create 2 properties• use DF to change the display in the ⎕

<set> function

Page 117: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 121

Exercises

Enter the methods, first, <plus>:

Page 118: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 122

Exercises

Test <plus>: cs←c1 complex.plus c2 cs.real ?

Page 119: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 123

Exercises

Enter the methods, 2nd, <times>:

Page 120: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 124

Exercises

Test <times>: ct←c1 complex.times c2 ct.real ?

Page 121: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 125

Exercises

Enter the methods, 3rd, <reciprocal>:

Page 122: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 126

Exercises

Try it!complex.plus/4⍴c1 if funny display, ⍝

use dj←{⍵.(real img)}dj complex.plus/4⍴c1 12 16?⍝dj complex.times\3⍴c1 3 4 ¯7 24...⍝dj complex.plus/c1 complex.times¨4⍴c1

Page 123: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 127

Exercises

Try it!dj c1.reciprocal

⍝ c1 ÷ c1 or c1 × ÷c1:dj c1 complex.times c1.reciprocaldj c2 complex.times c1.reciprocal2.52 0.64?

Page 124: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 128

Exercises

Improvements:- other functions (magnitude?)- accept a single (real) number

Back to exercise choices

Page 125: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 129

Exercises

Create a class to do simple math on 2 integers (as in complex numbers).

i.e.: Real & Imaginary

Page 126: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 130

Exercises

Create a class to do simple math.

The class will contain 2 real numbers and 3 methods to perform Add, Multiply and return the Reciprocal of a pair of simple numbers.

Page 127: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 131

Exercises

Create a class to do simple math.

The methods to perform Add and Multiply will be shared (in the class) methods and the Reciprocal will be an instance method.

Page 128: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 132

ExercisesSimple math definition:- The 1st number will be called RR- The 2nd number will be called II

They will be stored in a vector (2 elem)There will be two properties to access

them individually.

Page 129: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 133

ExercisesSimple math definition:Addition of 2 simple numbersS1 + S2 = (r1+r2) , (i1+i2)Multiplication of 2 simple numbersS1 x S2 = (r1xr2) , (i1xi2)Reciprocal of a simple number÷S1 = (÷r2) , (÷i2)

Page 130: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 134

Exercises

The first thing to do:)ED ○ simple

Page 131: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 135

Exercises

Enter the field:

Page 132: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 136

ExercisesEnter the constructor, it takes 2

numbers as arguments, it merely sets the field:

Page 133: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 137

ExercisesAt this point the class does not do

anything.‘Numbers’ is private and cannot be

accessed from outside.Let’s create properties to access it.

Page 134: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 138

ExercisesEnter the properties, they take 1

number to set a value in the field:

Page 135: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 139

ExercisesTest

s1← NEW simple(3,4)⎕s1.R

To ease creation of simple numbers:

s←{ new simple (⍺ ⍵)}⎕s2←5 s 12

s2.R

Page 136: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Now enter the second property…

Oct 2008 OOAPL 140

Exercises

Page 137: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 141

ExercisesTest

Typing s1 does not provide useful information.

It would be nice if we could find what the numbers are without having to use

s1.(R I)

Page 138: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 142

Display form

• The display form can be improved• We can use ⎕DF to show a

different string, e.g. 3S4• Try s1. DF '3S4'⎕ (or whatever)• Try including the setting in the

constructor

Page 139: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 143

Display form

• assignment does not change the display

Try s1.I←22 and verify that ←s1⎕ has the same display form it had before

• use the properties’ code to change that

• use DF to change the display in the ⎕<set> function

Page 140: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 144

Exercises

Enter the methods, first, <plus>:

Page 141: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 145

Exercises

Test <plus>: cs←s1 simple.plus s2 cs.R ?

Page 142: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 146

Exercises

Enter the methods, 2nd, <times>:

Page 143: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 147

Exercises

Test <times>: ct←s1 simple.times s2 ct.R ?

Page 144: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 148

Exercises

Enter the methods, 3rd, <reciprocal>:

Page 145: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 149

Exercises

Try it!simple.plus/4⍴s1 if funny display, ⍝

use dj←{⍵.(R I)}dj simple.plus/4⍴s1 12 S 88?⍝dj simple.times\3⍴s1 3S22 ⍝

9S484…dj simple.plus/s1 simple.times¨4⍴s1

Page 146: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 150

Exercises

Try it!dj s1.reciprocal

⍝ s1 ÷ s1 or s1 × ÷s1:dj s1 simple.times s1.reciprocaldj s2 simple.times s1.reciprocal1.67 0.54?

Page 147: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 151

Exercises

Improvements:- other functions (magnitude?)- accept a single (real) number- make this into a rational number

class

Back to exercise choices

Page 148: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 152

There are many advantages to using OO languages over procedural languages:

• ease of modification• reduced maintenance costs• easier to model• can speed up development time• etc.

Conclusion

Page 149: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 153

OO languages make abstraction easyThey encourage architectures with

elaborate layers. They can be good when the problem

domain is truly complex and demands a lot of abstraction.

Conclusion

Page 150: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 154

• All OO languages show some tendency to suck programmers into the trap of excessive layering

• Object frameworks and object browsers are not a substitute for good design or documentation

Careful!

Page 151: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 155

• Too many layers destroy transparency: It becomes too difficult to see down through them and mentally model what the code is actually doing.

• The Rules of Simplicity, Clarity, and Transparency can get violated wholesale, and the result is code full of obscure bugs and continuing maintenance problems.

Careful!

Page 152: Object Oriented Programming in APL A New Direction Dan Baronet 2008 V1.20.

Oct 2008 OOAPL 156

Buyer beware!

Careful!