Статический анализатор для языка ECMA Script 4 Власов В. А. Мат.-мех. Ф-т.

Презентация:



Advertisements
Похожие презентации
Классы и объекты. Декларация классов Обычный класс class MyClass { // field, constructor, and // method declarations } Класс наследованный class MyClass.
Advertisements

Class Date { private int year = 0; private int month = 0; private int day = 0; public void SetDate (int y, int m, int d) { year = y; month = m; day = d;
Преобразование типов Макаревич Л. Г.. Операция приведения типов Тип ( выражение ) Тип ( выражение ) (тип) выражение (тип) выражение int a = 5; float b.
Test 13 Вопрос 1. public class StringTest { public static void main(String[] arg){ test(new String[] { null });} static void test(Object[] o){System.out.print(1);}
Особенности языка JavaScript и его использования.
Test 10 Вопрос 1. public class Test implements Iterator { // 1 private List list = new ArrayList (); // 2 public void addList(T... ts) { Collections.addAll(list,
Объектно-ориентированное программирование Центральное место в ООП занимает понятие пользовательского типа данных называемого классом, объединяющего под.
Test 9 Вопрос 1. public class A { private String runNow() { return "High"; } static class B extends A { public String runNow() { return "Low"; } } public.
Шаблоны в С++ Макаревич Л. Г.. Шаблоны функций Многие алгоритмы не зависят от типов данных. Многие алгоритмы не зависят от типов данных. #include using.
Test21 Вопрос 1. public class Test { void a1(Object... i){ System.out.println("[Object... i]"); } void a1(Integer... i){ System.out.println("[Integer...
«Центр Разработки и Внедрения Террасофт Поволжье» JS/ExtJS или как сломать мозг программисту C#
Test 16 Вопрос 1. class Clazz { { System.out.println("non-static init"); } public static void main(String a[]) { System.out.println("main"); Clazz ob1.
Test 14 Вопрос 1. class Main { public void method() { static class One { public One() { System.out.println("From one"); } } public static void main(String...
Интерфейсы и наследование. Интерфейсы Объявление public interface OperateCar { // constant declarations, if any // method signatures int turn(Direction.
Test15 Вопрос 1. class AClass { } public class Test { public static void main (String... args) { ArrayList a = new ArrayList (); AClass aaaClass = new.
REFLECTION Библиотека, позволяющая оперировать информацией о типах во время выполнения Пакеты java.lang java.lang.reflect.
PHP&Flex - новая альтернатива для создания RIAs Иванников Андрей Улич Дмитрий.
Work with server by XMLRPC – library in Java For students Author: Dudnik Oxana.
Test 11 Вопрос 1. class HashTest { private static Set set = new LinkedHashSet (); public static void main(String[] args) { set.add("one"); set.add("two");
Test 8 Вопрос 1. class Class1 { Class1(int i) { System.out.println("Class1(int)"); } public class Class2 extends Class1 { Class2(double d) { // 1 this((int)
Транксрипт:

Статический анализатор для языка ECMA Script 4 Власов В. А. Мат.-мех. Ф-т.

Языки ECMA Script 4 JavaScript 2 (Mozilla) ActionScript 3 (Adobe) class Greeter implements Greetings { public function hello() { print(hello, world) } public function goodmorning() { print(goodmorning, world) }

ECMA: Variables var x = 10 const PI = var x: Shape var x: Shape = new Shape

ECMA: Functions Как статические функции. function hello() { print(hello, world) } hello() Как методы классов public class Greeter { public function hello() { print(hello, world) } Анонимные функции function (x: Integer, y: Integer) : Integer { return x + y }

ECMA: Classes, Interfaces interface Greetings { function hello() function goodmorning() } class Greeter implements Greetings { public function hello() { print(hello, world) } public function goodmorning() { print(goodmorning, world) } var greeter : Greetings = new Greeter() greeter.hello()

ECMA: Прототипы У каждого объекта есть прототип Прототип подкласс класса dynamic class Object class A { prototype var x : int = 10 } var a1 = new A; var a2 = new A; trace(a1.x); trace(a2.prototype.x); var p1: Object; p1.prototype = a1; trace(p1.x); trace(p1.prototype.x); class A { prototype var f = function() { trace("A.f") } // prototype function g() { trace("A.g") } // не разрешено }

ECMA: Dynamic Расширение экземпляра класса с добавлением дополнительных полей dynamic class A { var x : String; var y; } var a : A = new A print(a.x) // null print(a.y) // undefined print(a.z) // undefined a.y = 10 a.z = 20 print(a.y) // 10 print(a.z) // 20

ECMA: Анонимные классы class A { var x function A() { this.x = 10 } function m() { trace(this.x) } } var a = new A() var o = { x : 20 } o.m = a.m o.m() // traces 10

ECMA: Class Members Fields class A { var __x : Integer ; } Methods class A { public function sum(x, y) : integer { return x + y; } Property Emulation class A { var __x : Integer ; public function get x() { return __x; } public function set x(v) { __x = v; }

ECMA: Packages package actors { public class Greeter { public function hello() { print(hello, world) } import actors.Greeter var greeter : Greeter = new Greeter greeter.hello()

ECMA: Namespaces package actors { public namespace English public namespace French public class BilingualGreeter { English function hello() { print("hello, world") } French function hello() { print("bonjour, le monde") } import actors.* var greeter : BilingualGreeter = new BilingualGreeter use namespace English greeter.hello() greeter.French::hello()

Статический анализ Слаботипизированный язык. Проверка типов только во время исполнения. Функциональные переменные.

Решение Ecplipse plug-in: Parser Частичные интерпретатор Find Usages Проверка типов (статический анализ) Refactoring tool: Inline Variable Introduce Variable Rename