• No results found

Compared to Java, JavaScript has Fbl fi Fabulous function support Lousy OOP support (not even real OOP at all) Prototype adds better OOP support Still not real OOP, but a definite improvement Main methods Class.create

N/A
N/A
Protected

Academic year: 2019

Share "Compared to Java, JavaScript has Fbl fi Fabulous function support Lousy OOP support (not even real OOP at all) Prototype adds better OOP support Still not real OOP, but a definite improvement Main methods Class.create"

Copied!
11
0
0

Loading.... (view fulltext now)

Full text

(1)

© 2010 Marty Hall

The Prototype Framework Part III:

yp

Better OOP

(Prototype 1.6 Version)

(

yp

)

Originals of Slides and Source Code for Examples:

http://courses coreservlets com/Course-Materials/ajax html

Customized Java EE Training: http://courses.coreservlets.com/

Servlets, JSP, JSF 2.0, Struts, Ajax, GWT 2.0, Spring, Hibernate, SOAP & RESTful Web Services, Java 6. Developed and taught by well-known author and developer. At public venues or onsite at yourlocation.

http://courses.coreservlets.com/Course Materials/ajax.html

© 2010 Marty Hall

For live Ajax & GWT training, see training

t htt //

l t

/

courses at http://courses.coreservlets.com/.

Taught by the author of

Core Servlets and JSP

,

More

Servlets and JSP

and this tutorial Available at public

Servlets and JSP

, and this tutorial. Available at public

venues, or customized versions can be held on-site at

your organization.

C d l d d t ht b M t H ll

•Courses developed and taught by Marty Hall

(2)

Topics in This Section

Constructor and prototype in one place

Single inheritance

(Sort of)

M

i

bj t

Merging objects

Multiple inheritance

(S t f)

(Sort of)

4

“Object-oriented programming is an exceptionally bad idea which could only have originated in California.” -- Edsger Dijkstra, 1972 Turing Award winner.

Overview

Compared to Java, JavaScript has

F b l

f

i

Fabulous function support

Lousy OOP support (not even real OOP at all)

Prototype adds better OOP support

Prototype adds better OOP support

Still not real OOP, but a definite improvement

Main methods

Class.create

• Creates a constructor that calls “initialize”

• You can define everything in prototype instead of half

(fi ld ) i t t d h lf ( th d ) i t t

(fields) in constructor and half (methods) in prototype

Object.extend

• Adds new capabilities to existing class

• Lets you define object hierarchies (almost real inheritance)

• Object.extend called automatically if first arg of

Class.create is a class name

(3)

Class.create: Base Classes

Makes constructor that calls “initialize”

You supply a

single

object that is automatically attached

to MyClass.prototype

var MyClass = Class.create({ var MyClass Class.create({

initialize: function(args) { this.field1 = blah;

this.field2 = blah;; D ’t f t th },

method1: function(...) { ...},

Don’t forget these commas.

method2: function(...) { ...} });

initialize called automatically

var someObject = new MyClass(args);

6

Class.create & Base Classes: Circle

Class

Class

var Circle = Class.create({

initialize: function(radius) {

initialize: function(radius) { this.radius = radius;

},

getArea: function() {

return(Math.PI * this.radius * this.radius); }

(4)

Class.create & Base Classes:

Rectangle Class

Rectangle Class

var Rectangle = Class.create({

initialize: function(width height) {

initialize: function(width, height) { this.width = width;

this.height = height; },

getArea: function() {

return(this.width * this.height); }

}); });

8

Class.create & Base Classes:

Helper (Static) Method

Helper (Static) Method

var ShapeUtils = {};

ShapeUtils.sumArea = function(shapeArray) { var sum = 0;

for(var i=0; i<shapeArray.length; i++) { sum = sum + shapeArray[i].getArea(); }

return(sum); }

(5)

Class.create & Base Classes:

Test Case

Test Case

Code

var shapes =

[ new Circle(10), new Circle(20),

new Rectangle(5,10), new Rectangle(10,20)]; g g ShapeUtils.sumArea(shapes);

Result

Result

1820.7963267948967

10

Class.Create: Single Inheritance

Idea

First argument to Class.create can be a class name

Second argument is the class definition

var Superclass = Class.create({ initialize: function(...) {...}, method1: function( ) { } method1: function(...) {...} });

var Subclass = Class create(Superclass { var Subclass = Class.create(Superclass, {

initialize: function(...) {...}, method2: function(...) {...} })

(6)

Class.create: Accessing Overridden

Methods

Methods

Problem

J S i h b il i h i idd h d

– JavaScript has no builtin approach to accessing overridden methods. So what if subclass wants to call superclass’s initialize method?

Solution

– In subclass, for any overridden method, add $super as first argument

– $super is now the name of the overridden method

• Not $super.methodName as in Javap

Example

var Subclass = Class.create(Superclass, { initialize: function($super, args ) { initialize: function($super, args...) {

$super(someOfTheArgs);

somethingElse(restOfTheArgs); },

}, ... }

12

Class.create & Single Inheritance:

Parallelogram

Parallelogram

// Superclass (Base class)

var Parallelogram = Class.create({

initialize: function(length, width) { this.length = length;

this.width = width; }

});

(7)

Class.create & Single Inheritance:

Rectangle

Rectangle

// Subclass (extended class) of Parallelogram

var Rectangle = Class.create(Parallelogram, { initialize: function($super, length, width) {

$

$super(length, width); },

getArea: function() {

return(this.length * this.width); }

} });

14

Class.create & Single Inheritance:

Test Cases

Test Cases

var shape1 = new Parallelogram(5, 10);

shape1 length;5

shape1.length; 5 shape1.width; 10

var shape2 = new Rectangle(10, 20);

(8)

Object.extend and Multiple

Inheritance

Inheritance

Problem

Al h h Cl l d fi l b l b b

– Although Class.create lets you define a class, a sub-class, a sub-sub-class, a sub-sub-sub-sub-sub-class, etc., it only lets you specify a single

immediateparent

S Cl t l d t t i i t l f i

– So Class.create alone does not support mixin style of programming

• Main (instantiable) base class provides core functionality

• Mixin class (usually not instantiable; static methods only in JavaScript) provides additional functionality

JavaScript) provides additional functionality

Solution

– Specify base class in Class.create

– Use Object.extend(this, MixinClass) in constructor

Note

– Java does not support multiple inheritance at allJava does not support multiple inheritance at all

– Interfaces are not the same as mixin classes, since interfaces have no real (implemented) methods

16

Object.extend

Idea

Merges two objects: first now has all properties of second

Simple usage (object merge)

Add

i

i l

bj

Add properties to a single object

• var obj1 = {a: 1, b: 2} • var obj2 = {c: 3, d: 4};j { }

• Object.extend(obj1, obj2); // obj1 has a, b, c, d

Advanced usage (multiple inheritance)

I i iti li

t d "thi " ith

l

In initialize, extend "this" with new class

• Object.extend(this, MixinClass);

Note for testing

Note for testing

Prototype provides Object.keys that returns array of all of

the property names of an object

(9)

Object.extend:

Simple Object Merging

Simple Object Merging

var obj1 = { a: 1 b: 2}; var obj1 = { a: 1, b: 2};

Object.keys(obj1); ["a", "b"] var obj2 = { c: 3, d: 4};

Object.keys(obj2); ["c", "d"]

Object.extend(obj1, obj2);

Object keys(obj1);["a" "b" "c" "d"] Object.keys(obj1); [ a , b , c , d ] Object.keys(obj2); ["c", "d"]

18

Multiple Inheritance: Mixin Class

// Mixin class: static methods only. // Can't call new Printable( ) // Can't call new Printable(...).

var Printable = {};

Printable.printInfo = function() { return("Area is " + this.getArea() +

(10)

Multiple Inheritance:

Subclass with Mixin

Subclass with Mixin

// Subclass (extended class) of Rectangle, // also supports Printable mixin class

// also supports Printable mixin class

var ColoredRectangle = Class.create(Rectangle, { $

initialize: function($super, length, width, color) { $super(length, width);

Main base class

Mixin class

this.color = color;

Object.extend(this, Printable); }

} });

20

Multiple Inheritance: Test Cases

var shape3 = new ColoredRectangle(2 4 "blue"); var shape3 = new ColoredRectangle(2, 4, "blue"); shape3.length; 2

shape3.width; 4

shape3.getArea(); 8

shape3.color; "blue"

shape3.printInfo(); "Area is 8, color is blue"

(11)

Summary

Base classes

Class.create({initialize: ..., otherMethod: ...});

Single inheritance

Cl

(S

l

{i i i li

h M h d

})

Class.create(Superclass, {initialize: ..., otherMethod: ...});

Use $super to get at overridden methods (esp. initalize)

Merging simple objects

Merging simple objects

Object.extend(obj1, obj2);

• Adds to obj1; leaves obj2 unchanged

Multiple inheritance

Call Object.extend(this, MixinClass) from constructor

22

© 2010 Marty Hall

References

Related documents

For each corresponding pair of the oxygen atoms of the disordered perchlorate anion, the isotropic displacement parameters were restrained to have identical values..

The four pyridine molecules are coordinated to the copper ion through their N atoms in the equatorial plane and display a right- handed screw arrangement around the Cu II ion.

dinuclear complex has unique coordination sites at the apical positions, which can trap ions hardly to coordinate..

The cell esds are taken into account individually in the estimation of esds in distances, angles and torsion angles; correlations between esds in cell parameters are only used

In previous reports containing BNPP anions the most similar deviations for P—O ester bond length in the phosphate group has been observed for these four examples (Sax et al. ,

In the molecule, weak C—H O hydrogen bonds occur between the pyridine ring and carboxylate groups; the dihedral angles between the carboxylate groups and adjacent benzene rings

Forest stand profile of a capercaillie lek in the Fageto- -Aceretum forest type (a virgin forest in the state of disintegra- tion; mean age of the overstorey trees – over

Biomass of trees ( Fagus sylvatica, Abies alba ) in the fir stand in Monte Carlo statistical simulation run in variant 3 (other species not presented because of its