1 prototype-basedprototype-based scripting languagescripting language
TRANSCRIPT
![Page 1: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/1.jpg)
1
Prototype-based scripting language
![Page 2: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/2.jpg)
Most browsers support a <SCRIPT> tag that is used to include executable content in an HTML document.
There are a number of scripting languages that are supported
2
![Page 3: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/3.jpg)
Netscape and others JavaScript
Internet Explorer Jscript (MS name for JavaScript) VBScript PerlScript
3
![Page 4: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/4.jpg)
Add content to a web page dynamically.
Alter a web page in response to user actions.
React to user events. Interact with frames. Manipulate HTTP cookies
4
![Page 5: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/5.jpg)
JavaScript is a very simple scripting language.
Syntax is similar to a subset of Java. Interpreted language. Uses objects, but doesn't really support
the creation of new object types*
*It almost does, but it's cumbersome.
5
![Page 6: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/6.jpg)
Imperative and structured Dynamic1.dynamic typing: As in most scripting
languages, types are associated with values, not with variables. For example, a variable x could be bound to a number, then later rebound to a string. JavaScript supports various ways to test the type of an object, including duck typing.
2.run-time evaluation: JavaScript includes an eval function that can execute statements provided as strings at run-time.
6
![Page 7: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/7.jpg)
Functionalclosures JavaScript allows nested functions
to be created, with the lexical scope in force at their definition, and has a () operator to invoke them now or later. This combination of code that can be executed outside the scope in which it is defined, with its own scope to use during that execution, is called a closure in computer science
7
![Page 8: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/8.jpg)
JavaScript and the DOM provide the potential for malicious authors to deliver scripts to run on a client computer via the web. Browser authors contain this risk using restrictions. scripts run in a sandbox in which they can only perform web-related actions, not general-purpose programming tasks like creating files.
Most JavaScript-related security bugs are breaches of either the same origin policy or the sandbox.
8
![Page 9: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/9.jpg)
Variables Literals Operators Control Structures Objects
9
![Page 10: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/10.jpg)
Untyped! Can be declared with var keyword:
var foo;
Can be created automatically by assigning a value:foo=1; blah="Hi Eve";
10
![Page 11: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/11.jpg)
Using var to declare a variable results in a local variable (inside a function).
If you don't use var – the variable is a global variable.
11
![Page 12: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/12.jpg)
The typical bunch: Numbers 17 123.45 Strings "Hello Eve" Boolean: true false Arrays: [1,"Hi Eve",17.234]
12
Arrays can hold anything!
![Page 13: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/13.jpg)
Arithmetic, comparison, assignment, bitwise, Boolean
+ - * / % ++ -- == != > <
&& || ! & | << >>
13
![Page 14: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/14.jpg)
if if-else ?: switch
for while do-while
And a few not in Cfor (var in object)
with (object)
14
![Page 15: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/15.jpg)
Objects have attributes and methods. Many pre-defined objects and object
types. Using objects follows the syntax of
C++/Java:objectname.attributename
objectname.methodname()
15
![Page 16: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/16.jpg)
Arrays are supported as objects.
Attribute length
Methods include:concat join pop push reverse sort
16
![Page 17: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/17.jpg)
var a = [8,7,6,5];
for (i=0;i<a.length;i++)
a[i] += 2;
b = a.reverse();
17
![Page 18: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/18.jpg)
String: manipulation methods Math: trig, log, random numbers Date: date conversions RegExp: regular expressions Number: limits, conversion to string
18
![Page 19: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/19.jpg)
JavaScript also includes some objects that are automatically created for you (always available). document navigator screen window
19
![Page 20: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/20.jpg)
Many attributes of the current document are available via the document object:
Title ReferrerURL ImagesForms LinksColors
20
![Page 21: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/21.jpg)
document.write() like a print statement – the output goes into the HTML document.
document.write("My title is" + document.title);
21
string concatenation!
![Page 22: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/22.jpg)
<HEAD>
<TITLE>JavaScript</TITLE>
</HEAD>
<BODY>
<H3>I am a web page and here is my name:</H3>
<SCRIPT>
document.write(document.title);
</SCRIPT>
<HR>
<HEAD>
<TITLE>JavaScript</TITLE>
</HEAD>
<BODY>
<H3>I am a web page and here is my name:</H3>
<SCRIPT>
document.write(document.title);
</SCRIPT>
<HR>
22
![Page 23: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/23.jpg)
<SCRIPT>
<!--
document.write("Hi Eve");
document.bgColor="BLUE";
-->
</SCRIPT>
23
HTML
com
men
t
![Page 24: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/24.jpg)
The keyword function used to define a function (subroutine):
function add(x,y) {return(x+y);
}
24
![Page 25: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/25.jpg)
JavaScript supports an event handling system. You can tell the browser to execute javascript
commands when some event occurs. Sometimes the resulting value of the
command determines the browser action.
25
![Page 26: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/26.jpg)
<BODY BGCOLOR=WHITE onUnload="restore()"><H5>Hello - I am a very small page!</H5><SCRIPT>savewidth = window.innerWidth;saveheight = window.innerHeight;function restore() { window.innerWidth=savewidth; window.innerHeight=saveheight;}// Change the window size to be smallwindow.innerWidth=300; window.innerHeight=50;document.bgColor='cyan';</SCRIPT>
<BODY BGCOLOR=WHITE onUnload="restore()"><H5>Hello - I am a very small page!</H5><SCRIPT>savewidth = window.innerWidth;saveheight = window.innerHeight;function restore() { window.innerWidth=savewidth; window.innerHeight=saveheight;}// Change the window size to be smallwindow.innerWidth=300; window.innerHeight=50;document.bgColor='cyan';</SCRIPT>
26
![Page 27: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/27.jpg)
You can associate buttons with JavaScript events (buttons in HTML forms)
27
<FORM>
<INPUT TYPE=BUTTON
VALUE="Don't Press Me"
onClick="alert('now you are in trouble!')“ >
</FORM>
<FORM>
<INPUT TYPE=BUTTON
VALUE="Don't Press Me"
onClick="alert('now you are in trouble!')“ >
</FORM>
![Page 28: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/28.jpg)
onUnLoad
onLoad
onClick
onMouseUp
onMouseDown
onDblClick
onMouseOver
28
Window events
Button events
Link events
![Page 29: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/29.jpg)
Naming hierarchy used to access individual elements of a HTML document.
Netscape D.O.M. is a little different than IE D.O.M.
Easy to use if you name all entities: Forms, fields, images, etc.
29
Things are getting better all the time – there are standard DOMs defined by The W3C
![Page 30: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/30.jpg)
<FORM ID=myform ACTION=…Please Enter Your Age:<INPUT TYPE=TEXT ID=age NAME=age><BR>And your weight:<INPUT TYPE=TEXT ID=weight NAME=weight><BR>
</FORM>
30
From javascript you can get at the age input field as: document.myform.age.value
![Page 31: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/31.jpg)
You can have JavaScript code that makes sure the user enters valid information.
When the submit button is pressed the script checks the values of all necessary fields: You can prevent the request from happening.
31
![Page 32: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/32.jpg)
function checkform() { if (document.myform.age.value == "") { alert("You need to specify an age"); return(false); } else { return(true); }}
function checkform() { if (document.myform.age.value == "") { alert("You need to specify an age"); return(false); } else { return(true); }}
32
Needs to return true or false!
![Page 33: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/33.jpg)
<FORM METHOD=GET ACTION=foo.cgi
NAME=myform
onSubmit="return(checkform())">
AGE: <INPUT TYPE=TEXT NAME=Age>
<INPUT TYPE=SUBMIT>
</FORM>
<FORM METHOD=GET ACTION=foo.cgi
NAME=myform
onSubmit="return(checkform())">
AGE: <INPUT TYPE=TEXT NAME=Age>
<INPUT TYPE=SUBMIT>
</FORM>
33
Needed to prevent the
browser from submitting!
![Page 34: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/34.jpg)
It's a good idea to make sure the user fills out the form before submitting.
Users can bypass your form – they can create requests manually (or their own forms).
Your CGI programs cannot rely (soley) on Client-Side JavaScript to validate form fields!
34
![Page 35: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/35.jpg)
Speed. Being client-side, JavaScript is very fast because any code functions can be run immediately instead of having to contact the server and wait for an answer.
Simplicity. JavaScript is relatively simple to learn and implement.
Versatility. JavaScript plays nicely with other languages and can be used in a huge variety of applications. Unlike PHP or SSI scripts, JavaScript can be inserted into any web page regardless of the file extension. JavaScript can also be used inside scripts written in other languages such as Perl and PHP.
Server Load. Being client-side reduces the demand on the website server.
35
![Page 36: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/36.jpg)
Security. Because the code executes on the users' computer, in some cases it can be exploited for malicious purposes. This is one reason some people choose to disable JavaScript.
Reliance on End User. JavaScript is sometimes interpreted differently by different browsers. Whereas server-side scripts will always produce the same output, client-side scripts can be a little unpredictable. Don't be overly concerned by this though - as long as you test your script in all the major browsers you should be safe.
36
![Page 37: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/37.jpg)
37
![Page 38: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/38.jpg)
Lua from Portuguese meaning " moon ") is a lightweight multi-paradigm programming language designed as a scripting language with extensible semantics as a primary goal. Lua has a relatively simple C API compared to other scripting languages
38
![Page 39: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/39.jpg)
Lua is a powerful, fast, lightweight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting byte code for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.
39
![Page 40: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/40.jpg)
Lua's historical 'father and mother' were data-description/configuration languages SOL (Simple Object Language) and DEL (data-entry language). They had been independently developed at Tecgraf in 1992-1993 to add some flexibility into two different projects (both were interactive graphical programs for engineering applications at Petro bras company).
40
![Page 41: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/41.jpg)
Multi-paradigm language does not contain explicit support for
inheritance easily with meta tables implement namespaces and classes first-class functions functional programming
41
![Page 42: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/42.jpg)
Lua is fastest language Lua is portable Lua is embeddable Lua is powerful (but simple) Lua is free open-source software
42
![Page 43: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/43.jpg)
An inherent is that it’s a fairly rarely-used language.
An implementation is that it currently dependent on an external Lua binary installation
43
![Page 44: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/44.jpg)
Data Types Boolean values numbers (double-precision floating point by
default) strings.Typical data: Arrays, sets, lists, and records can be
represented using Lua’s single native data structure, the table, which is essentially a heterogeneous associative array Data Type
44
![Page 45: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/45.jpg)
Literals and output in Luaprint ('1: Hello World')print ("2: Hello
World")
The Result: 1: Hello World2: Hello World
45
![Page 46: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/46.jpg)
A simple array of stringsarray = { "a", "b", "c", "d" } print(array[2]) print(#array) array[0] = "z" print(#array) An array of objects:function Point(x, y) return { x = x, y = y } end array = { Point(10, 20), Point(30, 40), Point(50,
60) } print(array[2].y)
46
![Page 47: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/47.jpg)
Vector = {} the class methods function Vector:new(x, y, z local object = { x = x, y = y, z = z }
setmetatable(object, { __index = Vector }) return object Endfunction Vector:magnitude() return math.sqrt(self.x^2 + self.y^2 + self.z^2) end vec = Vector:new(0, 1, 0) print(vec:magnitude()) print(vec.x)
47
![Page 48: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/48.jpg)
For-loopfor variable = 0, 10, 2 do print ( variable ) end Loops: While-loop: i = 1while i <= 5 do print (i) i = i + 1 end
48
![Page 49: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/49.jpg)
A very simple configuration file:
width = 420 height = width*3/2 -- ensures 3/2 aspect ratio
color = "blue
49
![Page 50: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/50.jpg)
A configuration file using Functions:function Bound (w, h)
if w < 20 then w = 20elseif w > 500 then w = 500endlocal minH = w*3/2 -- local variable
if h < minH then h = minH endreturn w, h
end width, height = Bound(420, 500) if monochrome then color = "black" else
color = "blue" end 50
![Page 51: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/51.jpg)
Tollgrade’s DigiTest (telephony network testing)
Performance Technologies’ command line interface of CPC4400 (a hot swappable Ethernet switch)
LucasArts’ Escape from Monkey Island and Grim Fandango
51
![Page 52: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/52.jpg)
How does Lua apply the new configurations to the original program / application?
Ans. There are two phases in Lua programming: compilation time (that is when all Lua functions and program lines are compiled) and runtime (that is when C and C++ functions of the original program are called by Lua to apply the new configurations the user has specified)
52
![Page 53: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/53.jpg)
Extend the meaning of many syntactical constructions
e.g. fallbacks can be used to implement different kinds of inheritance, a feature not present in Lua
53
![Page 54: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/54.jpg)
54
![Page 55: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/55.jpg)
1985 Language Development Began Developed by Bertrand Meyer of Interactive
Software Engineering 1986 First Compiler Delivered 1987 Commercial Applications Developed 1991 NICE Founded (Non-Profit International
Consortium for Eiffel) NICE controls evolution, standardization and
basic class definitions for Eiffel 1996 Commercial Eiffel based development
system becomes available (iss-base). Decendent of Algol and ADA
55
![Page 56: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/56.jpg)
Pure object oriented language Strong statically typed Automatic memory management/Garbage
collection Supports ADTs Supports Generic Classes Supports By Value and By reference semantics Promotes simplicity (Readable, not Writeable) Non-Object Oriented Capabilities/Low Level
Functionality (C-Lang) Some Compilers only generate C source code Design By Contract (Reliability) Exception Handling Supports separate library compilation Supports In-Class Documentation Root class starts execution
56
![Page 57: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/57.jpg)
indexing description: “Basic Hello World author : “Jim Developer” class HELLO_WORLDcreation makefeature make is do io.put_string ("Hello, world!%N") endend
57
![Page 58: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/58.jpg)
Assignment Object Creation Routine Call Conditional Iteration Choice/Switch/Case
58
![Page 59: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/59.jpg)
i := i + 1 Assignments cannot happen directly to
class attributes. Methods/Routines must be used.
Shortcut Assignments don’t exist
59
![Page 60: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/60.jpg)
Declaration acc:ACCOUNT acc is “void” when declared At runtime acc obtains an object by calling create acc Which creates a new instance of ACCOUNT
and attaches acc acc can now be used: acc.open(“John”) acc.deposit(5000)
60
![Page 61: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/61.jpg)
The following data types exist, the initialization of variables of these types is automatically initialized
INTEGER initializes to zero REAL and DOUBLE initialize to 0.0 BOOLEAN initializes to false CHARACTER initializes to null Reference types initialize to a null reference INTEGER, REAL, DOUBLE, BOOLEAN and
CHARACTER are all considered Expanded types
61
![Page 62: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/62.jpg)
A reference is the default object type, when an instance of a class is created it is called a reference, this is created by either calling “create” or using “!!”
62
![Page 63: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/63.jpg)
An expanded type is one that is already initialized
INTEGER, REAL, DOUBLE, BOOLEAN and CHARACTER are all considered Expanded types
Expanded types don’t require calling “create” or “!!”
If the class is not defined with the keyword “expanded” then it will be a reference type.
expanded class INTEGER feature ... end -- INTEGER
63
![Page 64: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/64.jpg)
acc.open ("Jill")
acc.deposit (5000)
if acc.may_withdraw(3000) then
acc.withdraw(3000);print(acc.balance)
end
64
![Page 65: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/65.jpg)
if x > 10 then
... statements ...
elseif x > 5 then
... elsif statements ...
elseif x > 0 then
... more elsif statements ...
else
... else statements ...
end
65
![Page 66: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/66.jpg)
Only one looping statement exists, but it could be used to emulate other types of loops.
For Loop
from i := 1 until i = 10 loop io.put_int (i); io.new_line; i := i + 1; end
66
![Page 67: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/67.jpg)
While Loopfrom
node := first;
until
node = Void;
loop
io.put_string (node.text);
node := node.next;
end;
67
![Page 68: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/68.jpg)
Repeat Loopfrom done := False until done and pages = 10; loop done := True; printer.output_next; pages := pages + 1; end
68
![Page 69: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/69.jpg)
The inspected value must be enumerableState : INTEGER;State_1, State_2, State_3 : INTEGER is unique;... statements ...inspect State when State_1 then ... statements ...when State_2 then ... statements ...when State_3 then ... statements ...else ... statements ...end;
69
![Page 70: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/70.jpg)
Exceptions can be thrown in few cases: Design by contract failures Low level functions Rescue (Catch) Retry (can only exist within a rescue
clause) Retry starts execution of the routine
again without the variable initialization
70
![Page 71: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/71.jpg)
read_next_character (f: FILE) is -- Make next character available in last_character ; -- if impossible, set failed to True. require readable: file . readable local impossible: BOOLEAN do if impossible then failed := True else last_character := low_level_read_function ( f ) end rescue impossible := True retry end
71
![Page 72: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/72.jpg)
Facilitates more reliable techniques Defines correct usage Assertions (Boolean Expression): Precondition (require) Post condition (ensure) Class invariants (invariant) Class invariant must be satisfied upon
exit of the creation procedure (constructor)
72
![Page 73: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/73.jpg)
Assertion monitoring levels are set at compile time
The levels vary from no monitoring to monitoring all require/ensure/invariant
Exceptions will be thrown if assertions are being monitored
If the exception isn’t handled, a run-time error will result
73
![Page 74: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/74.jpg)
Purely Object Oriented Everything is an object Information Hiding Encapsulation Polymorphism/Dynamic Binding Inheritance (Including Multiple)
74
![Page 75: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/75.jpg)
Supports information hiding/encapsulation
No attributes of a class are allowed to be modified directly. All modifications must happen within a subroutine
No global variables are allowed No static functions are allowed Secret attributes/routines are equivalent
to private variables/methods
75
![Page 76: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/76.jpg)
Dynamic binding allows polymorphic object to call the appropriate versioned routine
acc : ACCOUNT ; sav : SAVINGS_ACCOUNT
acc := sav
acc.deposit( 1000 )
76
![Page 77: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/77.jpg)
Inheritance is supported Multiple inheritance is supported Routine can be overridden (redefine) Parent is known as a precursor Keyword precursor can be used to
reference the parent Renaming allows conflicts with multiple
inheritance to be resolved
77
![Page 78: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/78.jpg)
indexing description: "Savings accounts" class SAVINGS_ACCOUNT inherit ACCOUNT redefine deposit end feature -- Element change deposit ( sum : INTEGER ) is -- Add sum to account. do precursor (sum) … end … Other features … end -- class SAVINGS_ACCOUNT
78
![Page 79: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/79.jpg)
The implementation of inheritance supplies many keywords to define how the parents members are recognized
Rename allows renaming of a parent attribute/routine
Export allows changing protection of a parent attribute/routine
Redefine allows overriding a routine Undefine allows removing a routine
79
![Page 80: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/80.jpg)
The best page for a language overview is probably Eiffel on Wikipedia
It is very different to other languages but also very simple (there are only a small amount of keywords to learn)
Eiffel code is long compared to C (or similar languages). I. e. you have more words than symbols (end instead of }; from-until-loop-do instead of for(...; ...; ...) {...}). You can love or hate it.
80
![Page 81: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/81.jpg)
Every part of the language is defined as much as possible (i. e. there is a BNF for the whole syntax).
Design by Contract (DbC) is part of the language (preconditions, post conditions, class invariants, state-checks, exception handling deeply connected to DbC, etc.).
Garbage Collected (GC) or not - you can choose
81
![Page 82: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/82.jpg)
Apart from different compilers there is an IDE called Eiffel Studio with a lot of integrated tools (UML / BON diagrams, eiffel doc (similar to java doc), debugger, etc.). The IDE should run fine on Windows and platforms that support GTK
There are compilers that target .Net (Eiffel Software), Java (Smart Eiffel), interpreted (Beta, TE Comp) and C (which is compiled to native code)
82
![Page 83: 1 Prototype-basedPrototype-based scripting languagescripting language](https://reader031.vdocuments.net/reader031/viewer/2022032203/56649dbb5503460f94aad611/html5/thumbnails/83.jpg)
There are the commercial ones from Eiffel.com
Free, active ones like: Gobo and EWLC A lot of dead ones :( , yeah, that is a BIG
disadvantage of eiffel
83