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

Post on 31-Mar-2015

219 views 0 download

Tags:

Transcript of 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

Oct 2008 OOAPL 2

Object Orientation

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

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?

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

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.

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)

Oct 2008 OOAPL 11

The evolution of dataIn traditional (procedural) systems,

data is separated from code:

data

code

Oct 2008 OOAPL 12

The evolution of dataThis is the same in traditional APL

systems, data is separated from code:data

code

Oct 2008 OOAPL 13

The evolution of dataIn OO systems, data is more tightly

coupled with code:

privatecode

data

Oct 2008 OOAPL 14

The evolution of dataSame thing in OO APL systems:

privatecode

data

Oct 2008 OOAPL 15

The Object Oriented paradigm

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

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

Oct 2008 OOAPL 18

OO fundamental concepts

Classes

ex: House blueprint

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.

Oct 2008 OOAPL 20

OO fundamental concepts

InterfacesAn interface describes how to

communicate with an object.Ex: electrical system & electrical

outlets

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.

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);

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);

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.

Oct 2008 OOAPL 25

OO fundamental concepts

2. InstancesNew House (Blue):

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

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.

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

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

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.

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.

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).

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.

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.

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)

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

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

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

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.

Oct 2008 OOAPL 39

OO fundamental concepts

Inheritance: a derived class inherits all the base members

C1memberAmemberB

C2: C1

memberCmemberD

Oct 2008 OOAPL 40

OO fundamental concepts

Inheritance: a derived class inherits all the base members

C1memberAmemberBmemberC

C2: C1

memberCmemberD

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.

Oct 2008 OOAPL 42

OO fundamental concepts

InheritanceSome classes may be sealed to prevent

other classes from inheriting them.

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

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

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

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

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).

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.

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.

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

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

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

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

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)

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

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

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.

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

Oct 2008 OOAPL 59

End of OO basics

QUESTIONS

?

Oct 2008 OOAPL 60

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

Oct 2008 OOAPL 62

ImplementationLet’s see how Dyalog APL does this:

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

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. #)

Oct 2008 OOAPL 64

Implementation: classesIn the workspace MyClass appears

as a namespace:⎕NC ‘MyClass’

9)CLASSES

MyClass

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)

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.

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.

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

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

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⎕

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⎕

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⎕

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

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

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⍝

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

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

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

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)

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)

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

Oct 2008 OOAPL 82

Implementation: inheritance

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

Name Nlegs Sounds Typepet.(Name Type)

Rex canis familiaris

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…

Oct 2008 OOAPL 84

Implementation: inheritance

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

Name Nlegs Sounds Typepet.(Name Type)

Rex canis familiaris

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.

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

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

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

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

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

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

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

: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.

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

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.

Oct 2008 OOAPL 96

End of implementation

QUESTIONS

?

Oct 2008 OOAPL 97

Exercises

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

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

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

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 ((…))

Oct 2008 OOAPL 101

Exercises – Preformatted form

Oct 2008 OOAPL 102

Exercises – Preformatted form

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

Oct 2008 OOAPL 103

Exercises – Preformatted form

This class creates an edit object:

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')

Oct 2008 OOAPL 105

Exercises

Improvements:- Use an interface

Back to exercise choices

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

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

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.

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.

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.

Oct 2008 OOAPL 111

Exercises

Complex math definition:

Addition of 2 complex numbers

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

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

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))

Oct 2008 OOAPL 114

Exercises

The first thing to do:)ED ○ complex

Oct 2008 OOAPL 115

Exercises

Enter the fields:

Oct 2008 OOAPL 116

ExercisesEnter the constructor, it takes 2

numbers as arguments, it merely sets the 2 fields:

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

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)

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

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

Oct 2008 OOAPL 121

Exercises

Enter the methods, first, <plus>:

Oct 2008 OOAPL 122

Exercises

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

Oct 2008 OOAPL 123

Exercises

Enter the methods, 2nd, <times>:

Oct 2008 OOAPL 124

Exercises

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

Oct 2008 OOAPL 125

Exercises

Enter the methods, 3rd, <reciprocal>:

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

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?

Oct 2008 OOAPL 128

Exercises

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

Back to exercise choices

Oct 2008 OOAPL 129

Exercises

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

i.e.: Real & Imaginary

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.

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.

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.

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)

Oct 2008 OOAPL 134

Exercises

The first thing to do:)ED ○ simple

Oct 2008 OOAPL 135

Exercises

Enter the field:

Oct 2008 OOAPL 136

ExercisesEnter the constructor, it takes 2

numbers as arguments, it merely sets the field:

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.

Oct 2008 OOAPL 138

ExercisesEnter the properties, they take 1

number to set a value in the field:

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

Now enter the second property…

Oct 2008 OOAPL 140

Exercises

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)

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

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

Oct 2008 OOAPL 144

Exercises

Enter the methods, first, <plus>:

Oct 2008 OOAPL 145

Exercises

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

Oct 2008 OOAPL 146

Exercises

Enter the methods, 2nd, <times>:

Oct 2008 OOAPL 147

Exercises

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

Oct 2008 OOAPL 148

Exercises

Enter the methods, 3rd, <reciprocal>:

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

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?

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

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

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

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!

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!

Oct 2008 OOAPL 156

Buyer beware!

Careful!