Abstract Datatype, Classes, Methods, Attributes, Messages, Scopes, Generalizing Class Hierarchy, Inheritance
"20050901 16:00""20080229 19:19""Albert Einstein 45000""Vera Withanyname 25000"Encoding of data in a string, storing a collection with a stem (birth.)
Structuring and collecting of data with a stem (birth.) and indexes (eDate, eTime)
Structuring with the help of stems
and
"Vera" …) would replace ("overwrite") the first ones ("Albert" …)!::CLASS directive
::ATTRIBUTE directive, or::METHOD directiveObject Rexx implementation of the ADT Birthday
Object
Dot, immediately followed by the class identifier (name of the class), e.g.
If an object receives a message (with or without arguments) it
"Object does not understand message" and the interpreter stops the execution of the programA message term consists at least of the receiving object, the message operator (~) and the message name to be sent to the object, e.g.
"ABC"~REVERSE yields: CBA"ABC"~~REVERSE yields (attention!): ABCObject Rexx implementation of the ADT Birthday
Output:
20320901 20360229 16:00 19:19::ROUTINE and ::METHOD directives are only visible within these directives::REQUIRES directive) programs become accessible
/**/
p1 = .Person~New; p1~firstName= "Albert";
p1~familyName= "Einstein"; p1~salary=45000
p2=.Person~New~~"firstName="("Vera")~~"salary="("25000")
p2~~"familyName="("Withanyname")
SAY p1~firstName p1~familyName p1~salary
SAY p2~firstName p2~familyName p2~salary
SAY "Total costs of salaries:" p1~salary + p2~salary
::CLASS Person
::ATTRIBUTE firstName
::ATTRIBUTE familyName
::ATTRIBUTE salary
Output:
Albert Einstein 45000
Vera Withanyname 25000
Total costs of salaries: 70000
/**/
p1 = .Person~New; p1~firstName= "Albert";
p1~familyName= "Einstein"; p1~salary= "45000"
p2=.Person~New~~"firstName="("Vera")~~"salary="(25000)
p2~~"familyName="("Withanyname")
SAY p1~firstName p1~familyName p1~salary p2~firstName
SAY p1~firstName p1~salary p1~~increaseSalary(10000)~salary
::CLASS Person
::ATTRIBUTE firstName
::ATTRIBUTE familyName
::ATTRIBUTE salary
::METHOD increaseSalary
EXPOSE salary
USE ARG increase
salary = salary + increase
Output:
Albert Einstein 45000 Vera
Albert 45000 55000
/**/
p1 = .Person~New; p1~firstName= "Albert";
p1~familyName= "Einstein"; p1~salary= "45000"
p2=.Person~New~~"firstName="("Vera")~~"salary="(25000)
p2~~"familyName="("Withanyname")
SAY p1~firstName p1~familyName p1~salary p2~firstName
tmpSalary=p1~salary
p1~increaseSalary(10000)
SAY p1~firstName tmpSalary p1~salary
::CLASS Person
::ATTRIBUTE firstName
::ATTRIBUTE familyName
::ATTRIBUTE salary
::METHOD increaseSalary
EXPOSE salary
USE ARG increase
salary = salary + increase
Output:
Albert Einstein 45000 Vera
Albert 45000 55000
Abstract Datatype “Person”, 2
/**/
p1 = .Person~New("Albert","Einstein","45000")
p2 = .Person~New("Vera","Withanyname",25000)
SAY p1~firstName p1~familyName p1~salary p2~firstName
SAY p1~firstName p1~salary p1~~increaseSalary(10000)~salary
::CLASS Person
::METHOD INIT
EXPOSE firstName familyName salary
USE ARG firstName, familyName, salary
::ATTRIBUTE firstName
::ATTRIBUTE familyName
::ATTRIBUTE salary
::METHOD increaseSalary
EXPOSE salary
USE ARG increase
salary = salary + increase
Output:
Albert Einstein 45000 Vera
Albert 45000 55000
Abstract Datatype “Person”
/**/
p1 = .Person~New("Albert","Einstein","45000")
p2 = .Person~New("Vera","Withanyname",25000)
SAY p1~firstName p1~familyName p1~salary p2~firstName
SAY p1~firstName p1~salary p1~~increaseSalary(10000)~salary
DROP p1; DROP p2; CALL SysSleep( 15 ); SAY "Finish."
::CLASS Person
::METHOD INIT
EXPOSE firstName familyName salary
USE ARG firstName, familyName, salary
::METHOD UNINIT
EXPOSE firstName familyName salary
SAY "Object: <"firstName familyName salary"> is about to be destroyed."
::ATTRIBUTE firstName
::ATTRIBUTE familyName
::ATTRIBUTE salary
::METHOD increaseSalary
EXPOSE salary
USE ARG increase
salary = salary + increase
Output (maybe as uninit may run at different times):
Albert Einstein 45000 Vera
Albert 45000 55000
Object: <Vera Withanyname 25000> is about to be destroyed.
Finish.
Object: <Albert Einstein 55000> is about to be destroyed.
"Object does not understand message")
Definition of a class "BigDog", which possesses all properties common to all big dogs
/**/
h1 = .Dog ~NEW ~~"NAME="("Sweety") ~~Bark
.BigDog ~NEW ~~"NAME="("Grobian") ~Bark
::CLASS Dog SUBCLASS Object
::ATTRIBUTE Name
::METHOD Bark
SAY self~Name":" "Wuff Wuff"
::CLASS BigDog SUBCLASS dog
::METHOD Bark
SAY self~Name":" "WUFFF! WUFFF!! WUFFF!!!"
Output:
Sweety: Wuff Wuff
Grobian: WUFFF! WUFFF!! WUFFF!!!Definition of a class "LittleDog", which possesses all properties common to all little dogs
/**/
.Dog~NEW ~~"NAME="("Sweety") ~Bark
.BigDog~NEW ~~"NAME="("Grobian") ~Bark
.LittleDog~NEW ~~"NAME="("Arnie") ~Bark
::CLASS Dog
::ATTRIBUTE Name
::METHOD Bark
SAY self~Name":" "Wuff Wuff"
::CLASS BigDog SUBCLASS dog
::METHOD Bark
SAY self~Name":" "WUFFF! WUFFF!! WUFFF!!!"
::CLASS LittleDog SUBCLASS dog
::METHOD Bark
SAY self~Name":" "wuuf"
Output:
Sweety: Wuff Wuff
Grobian: WUFFF! WUFFF!! WUFFF!!!
Arnie: wuufDefinition of a class "LittleDog", which possesses all properties common to all little dogs
/**/
.Dog~NEW ~~"NAME="("Sweety") ~Bark
.BigDog~NEW ~~"NAME="("Grobian") ~Bark
.LittleDog~NEW ~~"NAME="("Arnie") ~Bark
::CLASS Dog SUBCLASS Object
::ATTRIBUTE Name
::METHOD Bark
SAY self~Name":" "Wuff Wuff" "-" self
::CLASS BigDog SUBCLASS dog
::METHOD Bark
SAY self~Name":" "WUFFF! WUFFF!! WUFFF!!!" "-" self
::CLASS "LittleDog" SUBCLASS dog
::METHOD Bark
SAY self~Name":" "wuuf" "-" self
Output:
Sweety: Wuff Wuff - a DOG
Grobian: WUFFF! WUFFF!! WUFFF!!! - a BIGDOG
Arnie: wuuf - a LittleDogWU
Prof. Mag. Dr. Rony G. Flatscher
Welthandelsplatz 1
1020 Wien/Vienna
Austria/Europe
www: www.wu.ac.at