object oriented programming in apl
DESCRIPTION
Object Oriented Programming in APL. A New Direction Dan Baronet 2009 V1.22. Dyalog V11 was released in 2006. One of the major features was:. Object Orientation. This presentation is based on two things:. What is Object Orientation programming? How do I use it in APL?. Another tool. - PowerPoint PPT PresentationTRANSCRIPT
Object Oriented Programming in APL
A New DirectionDan Baronet
2009V1.22
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.What is Object Orientation programming?
2.How do I use it in APL?
Oct 2008 OOAPL 7
Another toolObject 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.
Concepts of the OO paradigmThe namespace From the beginning APL had this
kind of notion in the form of the workspace
Namespace = Workspace?
Oct 2008 OOAPL 8
Concepts of the OO paradigmThe workspace - It contains everything needed to
run an application
Oct 2008 OOAPL 9
Concepts of the OO paradigmThe workspace - It contains everything needed to
run an application- It can be initialized (via []LX)
Oct 2008 OOAPL 10
Concepts of the OO paradigmThe workspace - It can be initialized (via []LX)- It can be viewed as an object
Oct 2008 OOAPL 11
Concepts of the OO paradigmThe workspace - It can serve as base and be copied
into another workspace
Oct 2008 OOAPL 12
CurrentWorkspace
Inmemory
FilesUtils)COPY FilesUtils FilesUtils
Concepts of the OO paradigmThe workspace - It contains everything needed to
run an application- It can be initialized (via []LX)- It can be viewed as an object- It can serve as base and be copied
into another workspace- It can be modifiedOct 2008 OOAPL 13
Concepts of the OO paradigmThe workspace problems- Name clashing (using )COPY)
Oct 2008 OOAPL 14
Fn1Fn3Var1varx
Fn2varx
)COPY FilesUtils Fn2varx
Concepts of the OO paradigmThe workspace problems- Name clashing (using )COPY)- They cannot be stored as a unit on
file- Only 1 workspace item per
component (variable or function)- Need to cleanup when finishedOct 2008 OOAPL 15
Concepts of the OO paradigmThe workspace (solutions)The package or overlay- They group items (vars & fns) together- They act as a (static) unit- They can be stored on file- They can be copied, like wss, into
existing code and dispersed in it
Oct 2008 OOAPL 16
Concepts of the OO paradigmThe workspace – packagesThey were only a partial solution to
a more general problem- Name clashing still happened- Clean up was still needed
Oct 2008 OOAPL 17
Concepts of the OO paradigmThe workspace – namespace In the 80s a company came up with
the concept of namespace, probably from other languages like C++ and Java
Namespaces are like workspaces but nested.
Oct 2008 OOAPL 18
DOS V1.0 APL V1.0File1,ext var1File2.ext fn1Abc.dws var2Note.txt function_2Etc.doc etc
flat structureOct 2008 OOAPL 19
Concepts of the OO paradigm
DOS V2.0 APL V8.0Dir1 ns1
File2.ext var1Abc.dws var2
Note.txt function_2Folder2 namespace2
Etc.doc fnasubf subnsfile1 fnafilex opb
Fich.log objxv
Tree (nested) structureOct 2008 OOAPL 20
Concepts of the OO paradigm
Each namespace is similar to a workspace- It contains functions, variables (including
some system variables)- It can contain an entire application- It acts as a unit: it can be put as a single
item on file- It is dynamic: it can be moved into to
execute code, no need to disperse contents
Oct 2008 OOAPL 21
Concepts of the OO paradigm
Each namespace is similar to a workspaceLike a workspace, if you need to tweak
one you take a copy and modify it:Workspace: Namespace:)LOAD myApp newApp<-[]NS []OR
’myApp’A<-3 newApp.A<-3)SAVE newApp
Oct 2008 OOAPL 22
Concepts of the OO paradigm
Reusability This is one of the key conceptsFrom a template you create a new
version possibly modifying it 1 namespace many possibly
different versions
Oct 2008 OOAPL 23
Concepts of the OO paradigm
Reusability Classes are very much like
namespaces From a class you create a new version
possibly modifying it 1 class many possibly different
versions
Oct 2008 OOAPL 24
Concepts of the OO paradigm
.Net and OO
.Net is based on namespaces and supports many OO concepts.
Dyalog APL is based on namespaces and supports many OO concepts.
They go well hand in hand together.
Oct 2008 OOAPL 25
Oct 2008 OOAPL 26
.Net and DyalogThis is not new! The ability to use .Net
and create classes was already in V10 but it was more difficult to use.
Oct 2008 OOAPL 33
The Object Oriented paradigm
Oct 2008 OOAPL 34
OO fundamental concepts
The Object Oriented paradigm is based on:
1.Classes & Interfaces2.Instances 3.Members4.Message passing5.Inheritance6.Encapsulation7.Polymorphism
Oct 2008 OOAPL 35
OO fundamental concepts
1. ClassesA 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 36
OO fundamental concepts
Classes
ex: House blueprint
Oct 2008 OOAPL 37
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 38
OO fundamental concepts
InterfacesAn interface describes how to
communicate with an object.Ex: electrical system & electrical outlets
Oct 2008 OOAPL 39
Interfaces - exampleThe following maneuvering interface
describes what HAS to be done with a machine:
Method Steer (direction); // where to goMethod Accellerate (power); // go fasterMethod SlowDown (strength); // go slower
It does NOT specify HOW it should be done.
Oct 2008 OOAPL 40
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 41
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 42
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 43
OO fundamental concepts
2. InstancesNew House (Blue):
After the creation of the new House the Constructor paints it in blue
Oct 2008 OOAPL 44
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 45
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 46
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 47
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 48
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 49
OO fundamental conceptsMembers: PropertiesThose are Fields implemented by
accessing methods, i.e. PropX←value ⍝ is implemented by SET valueThey can either reside in the class
(shared property) or in the instance (instance property).
Oct 2008 OOAPL 50
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 51
OO fundamental concepts5. Inheritance
This 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 52
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 from System.Object (the default)
Oct 2008 OOAPL 53
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 54
OO fundamental conceptsInheritance: 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 55
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 56
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 57
OO fundamental concepts
Inheritance: a derived class inherits all the base members
C1memberAmemberB
C2: C1
memberCmemberD
Oct 2008 OOAPL 58
OO fundamental concepts
Inheritance: a derived class inherits all the base members
C1memberAmemberBmemberC
C2: C1
memberCmemberD
Oct 2008 OOAPL 59
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 60
OO fundamental concepts
InheritanceSome classes may be sealed to prevent
other classes from inheriting them.
Oct 2008 OOAPL 61
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 62
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 63
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 64
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 65
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 66
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 67
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 68
OO fundamental conceptsEncapsulation: private
A 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 69
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 70
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 71
OO fundamental conceptsEncapsulation: friend
A 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 72
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 73
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 74
OO fundamental conceptsPolymorphism
A 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 75
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 76
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 77
End of OO basics
QUESTIONS
?
Oct 2008 OOAPL 78
Oct 2008 OOAPL 79
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 80
ImplementationLet’s see how Dyalog APL does this:
1.Classes and interfaces2.Instances 3.Members4.Message passing5.Inheritance6.Encapsulation7.Polymorphism
Oct 2008 OOAPL 81
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 82
Implementation: classesIn the workspace MyClass appears
as a namespace:⎕NC ‘MyClass’
9)CLASSES
MyClass
Oct 2008 OOAPL 83
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 84
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 85
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 86
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 87
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 88
⎕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 89
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 90
⎕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 91
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 92
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 93
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 94
Implementation: inheritanceInheritance: Based classesA 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 95
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 96
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 97
Example: a parrot is a birdCoco← NEW Parrot⎕Coco.Desc
Not a plain Bird, a Parrot
Implementation: inheritance
Bird
Birdy (Bird)
Parrot: Bird Coco (Parrot)
Oct 2008 OOAPL 98
We can create classes and instances at all levels
Implementation: inheritance
Bird
Parrot: BirdTweety (Macaw)
Macaw: Parrot
InstancesClasses
Birdy (Bird)
Coco (Parrot)
Oct 2008 OOAPL 99
Implementation: inheritanceInheritance: constructors with argumentsUsing 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 100
Implementation: inheritance
pet← NEW Collie ‘Rex’⎕pet. nl -2⎕
Name Nlegs Sounds Typepet.(Name Type)
Rex canis familiaris
Oct 2008 OOAPL 101
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 102
Implementation: inheritance
pet← NEW Collie ‘Rex’⎕pet. nl -2⎕
Name Nlegs Sounds Typepet.(Name Type)
Rex canis familiaris
Oct 2008 OOAPL 103
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 104
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 105
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 106
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 107
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 108
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 109
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 110
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 111
Implementation: Polymorphism
Example:
Depending on the number of arguments, the proper fn will be used.
Oct 2008 OOAPL 112
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 113
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 114
End of implementation
QUESTIONS
?
Oct 2008 OOAPL 115
ExercisesChoice of exercises:1.Simple numbers2.Complex numbers3.Parser4.Pre formatted forms5.Graphical objects6.Telnet client The end
Oct 2008 OOAPL 116
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 117
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 118
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 119
Exercises – Preformatted form
Oct 2008 OOAPL 120
Exercises – Preformatted form
f1← new Dialog(‘pref form' (100 500) )⎕ ⍬
Oct 2008 OOAPL 121
Exercises – Preformatted form
This class creates an edit object:
Oct 2008 OOAPL 122
Exercises – Preformatted formf1← 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 123
ExercisesImprovements:- Use an interface
Back to exercise choices
Oct 2008 OOAPL 124
Exercises – Complex numbers
Create a class to do complex math.
A rational or “normal number” is a decimal number that can be viewed on the line of “real” numbers:
-10 -5 0 +5.3 +10
Oct 2008 OOAPL 125
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 126
ExercisesCreate 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 127
ExercisesCreate 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 128
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 129
ExercisesComplex math definition:
Addition of 2 complex numbers
C1 + C2 = (a1+a2) + (b1+b2) i
Oct 2008 OOAPL 130
ExercisesComplex 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 131
ExercisesComplex math definition:Reciprocal of a complex number is 1÷C such that C × R = 1 = 1 + 0 ireal = ((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 132
ExercisesThe first thing to do:)ED ○ complex
Oct 2008 OOAPL 133
ExercisesEnter the fields:
Oct 2008 OOAPL 134
ExercisesEnter the constructor, it takes 2
numbers as arguments, it merely sets the 2 fields:
Oct 2008 OOAPL 135
ExercisesTestc1← NEW complex (3,4)⎕c1.realTo ease creation of complex numbers:j←{ new complex (⍺ ⍵)}⎕c2←5 j 12c2.img
Oct 2008 OOAPL 136
ExercisesTestTyping c1 does not provide useful
information.It would be nice if we could find what
the numbers are without having to usec1.(real img)
Oct 2008 OOAPL 137
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 138
Display form• assignment does not change the
displayTry 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 139
ExercisesEnter the methods, first, <plus>:
Oct 2008 OOAPL 140
ExercisesTest <plus>: cs←c1 complex.plus c2 cs.real ?
Oct 2008 OOAPL 141
ExercisesEnter the methods, 2nd, <times>:
Oct 2008 OOAPL 142
ExercisesTest <times>: ct←c1 complex.times c2 ct.real ?
Oct 2008 OOAPL 143
ExercisesEnter the methods, 3rd,
<reciprocal>:
Oct 2008 OOAPL 144
ExercisesTry 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 145
ExercisesTry 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 146
ExercisesImprovements:- other functions (magnitude?)- accept a single (real) number
Back to exercise choices
Oct 2008 OOAPL 147
ExercisesCreate a class to do simple math with
2 integers representing fractions.
Using a Numerator & a DenominatorEx.: 3 / 7th
Oct 2008 OOAPL 148
ExercisesCreate a class to do simple math.
The class will contain 2 integer numbers and 3 methods to perform Add, Multiply and return the Reciprocal of a pair of simple numbers representing a fraction.
Oct 2008 OOAPL 149
ExercisesCreate 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 150
ExercisesSimple math definition:- The 1st number will be called NN- The 2nd number will be called DD
They will be stored in a vector (2 elem)There will be two properties to access
them individually.
Oct 2008 OOAPL 151
ExercisesSimple math definition:Addition of 2 simple numbers (fractions)S1 + S2 = (n1 x d2 + n2 x d1) , (d1 x d2)Multiplication of 2 simple numbersS1 x S2 = (n1 x n2) , (d1 x d2)Reciprocal of a simple number÷S1 = (d1) , (n1)
Oct 2008 OOAPL 152
ExercisesThe first thing to do:)ED ○ simple
Oct 2008 OOAPL 153
ExercisesEnter the field:
Oct 2008 OOAPL 154
ExercisesEnter the constructor, it takes 2
numbers as arguments, it merely sets the field:
Oct 2008 OOAPL 155
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 156
ExercisesEnter the properties, they take 1
number to set a value in the field:
N
Oct 2008 OOAPL 157
ExercisesTest
s1← NEW simple(3,4)⎕s1.N
To ease creation of simple numbers:s←{ new simple (⍺ ⍵)}⎕s2←5 s 12s2.N
Now enter the second property…
Oct 2008 OOAPL 158
Exercises
Oct 2008 OOAPL 159
ExercisesTestTyping s1 does not provide useful
information.It would be nice if we could find what
the numbers are without having to uses1.(N D)
Oct 2008 OOAPL 160
Display form• The display form can be improved• We can use ⎕DF to show a
different string, e.g. 3/4• Try s1. DF '3/4'⎕• Try including the setting in the
constructor
Oct 2008 OOAPL 161
Display form• assignment does not change the
displayTry s1.N←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 162
ExercisesEnter the methods, first, <plus>:
Oct 2008 OOAPL 163
ExercisesTest <plus>: cs←s1 simple.plus s2 cs.N ?
Oct 2008 OOAPL 164
ExercisesEnter the 2nd method, <times>:
Oct 2008 OOAPL 165
ExercisesTest <times>: ct←s1 simple.times s2 ct.N ?
Oct 2008 OOAPL 166
ExercisesEnter the methods, 3rd,
<reciprocal>:
Oct 2008 OOAPL 167
ExercisesTry it!simple.plus/4⍴s1 if funny display, ⍝
use dj←{⍵.(N ‘/’ D)}dj simple.plus/4⍴s1 22/1?⍝dj simple.times\3⍴s1 11/2 121/4…⍝dj simple.plus/s1 simple.times¨4⍴s1
Oct 2008 OOAPL 168
ExercisesTry it!dj s1.reciprocal
⍝ s1 ÷ s1 or s1 × ÷s1:dj s1 simple.times s1.reciprocaldj s2 simple.times s1.reciprocal5/66?
Oct 2008 OOAPL 169
ExercisesImprovements:- other functions (square, abs?)- accept a single (real) number- make this into a complex number
class
Back to exercise choices
Oct 2008 OOAPL 170
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 171
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 172
• 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 173
• 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 174
Buyer beware!
Careful!