350 likes | 426 Views
Programming Language Concepts (CIS 635). Elsa L Gunter 4303 GITC NJIT, www.cs.njit.edu/~elsa/635. Static Binding in Java. Modifier final used to make a method (or variable) be statically bound, instead of dynamically bound When used on variable (or member), variable becomes a constant
E N D
Programming Language Concepts (CIS 635) Elsa L Gunter 4303 GITC NJIT, www.cs.njit.edu/~elsa/635
Static Binding in Java • Modifier final used to make a method (or variable) be statically bound, instead of dynamically bound • When used on variable (or member), variable becomes a constant • Final methods cannot be overridden in any subclass • Final class has no subclasses
Dynamic Binding in C++ versus Java • Dynamic binding default in Java • Static binding default in C++ • In C++ use virtual keyword on method to cause it to be dynamically bound
Abstract Classes in C++ • A purely virtual method is used for methods that are not to be implemented in base class • Indicated by giving a body of 0 • Purely virtual methods must be overridden in subclasses • Class is abstract if it contains purely virtual functions
Abstract Classes in Java • Abstract class has modifier abstract • May contain abstract methods, prefixed by modifier abstract, and having no body • Abstract classes have no instance objects • Subclass must either override all abstract methods, or be abstract itself
Abstract Classes in Java – Example • Before we had : public class CustomerAccount { … protected int fee () {return 0;} protected int interest () {return 0;}… } • Want to force fee and interest to be overridden
Abstract Classes in Java – Example • Use abstract methods (and class) abstract public class CustomerAccount { … abstract protected int fee (); abstract protected int interest (); … }
Abstract Classes in Java – Example • Can use ChargeAccount just as before • Credit account must supply a fee method
Interfaces in Java • Abstract class specification • Defined with keyword interface instead of class • Purpose to supply export information • All methods are public and abstract (public and abstract keywords not used)
Interfaces in Java • Class may implement several interfaces, but my extend only one class • Parameter to method may have type of an interface • Object from any class that implements an interface may be used • Class that implements an interface is a subtype of interface
Packages in Java • Package is a collection of classes • Intent: classes in package work together • If a member of a class is not marked public, private, or protected, then it is visible to all other classes in package, but not outside
Packages in Java • Class is added to package by being preceded by directive package <module name>; at start of source file • Access classes by <module name>.<class name> • All classes member of some package (noname package, if none specified)
Java Class IOTest • Modified from “Learn Java Now” ny Stephen R. Davis, Microsoft Press import java.io.*; public class IOTest { public static void main(String args[]) { try { //Read input from the keyboard byte bArray[] = new byte[128]; System.out.println("Enter something:");
Java Class IOTest // Reads in an array of bytes System.in.read(bArray); // Convert array into a String before // outputting it String s = new String(bArray, 0); System.out.println("You entered: " + s); }
Java Class IOTest catch(IOException ioe) { System.out.println(ioe.toString()); ioe.printStackTrace(); } }}
Example • What is the result for: 3 + 4 * 5 + 6 • Possible answers: • 41 = ((3 + 4) * 5) + 6 • 47 = 3 + (4 * (5 + 6)) • 29 = (3 + (4 * 5)) + 6 = 3 + ((4 * 5) + 6) • 77 = (3 + 4) * (5 + 6)
Operator Precedence • Operators of highest precedence evaluated first (bind more tightly). • Precedence for infix binary operators given in following table
Example • If assignment returns the assigned value, what is the result of x = 5; y = (x = 3) + x;
Example • If assignment returns the assigned value, what is the result of x = 5; y = (x = 3) + x; • Possible answers: 6 or 8 • Depends on language, and sometimes compiler • C allows compiler to decide • SML forces left-to-right evaluation
Control Structures • Expression Evaluation • Determined by operator evaluation order and operand evaluation order • Operators: • Most operators are either infix or prefix (some languages have postfix) • Order of evaluation determined by operator precedence and associativity
Example Again • In most language, 3 + 4 * 5 + 6 = 29 • In APL, all infix operators have same precedence • Thus we still don’t know what the value is
Example • What is the value of: 7 – 5 – 2 • Possible answers: • In Pascal, C++, SML assoc. left 7 – 5 – 2 = (7 – 5) – 2 = 0 • In APL, associate to right 7 – 5 – 2 = 7 – (5 – 2) = 4
Special Associativity • In languages with built in support for infix exponent operator, it is standard for it to associate to the right: 2 ** 3 ** 4 = 2 ** (3 ** 4) • In ADA, exponentiation in non-associative; must use parentheses
Operand Evaluation Order • Example: A := 5; f(x) = {A := x+x; return x}; B := A + f(A); • What is the value of B? • 10 or 15?
Solution to Operand Evaluation Order • Disallow all side-effect • “Purely” functional languages try to do this – Miranda, Haskell • Problem: I/O, error conditions such as overflow are inherently side-effecting
Solution to Operand Evaluation Order • Disallow all side-effects in expressions but allow in statements • Problem: not applicable in languages with nesting of expressions and statements
Solution to Operand Evaluation Order • Fix order of evaluation • SML does this – left to right • Problem: makes some compiler optimizations hard to impossible • Leave it to the programmer to be sure the order doesn’t matter • Problem: error prone
Short-circuit Evaluation • Boolean expressions: • Example: x <> 0 andalso y/x > 1 • Problem: if andalso is ordinary operator and both arguments must be evaluated, then y/x will raise an error when x = 0
Boolean Expressions • Most languages allow (some version of) if…then…else, andalso, orelse not to evaluate all the arguments • if true then A else B • doesn’t evaluate B
Boolean Expressions • if false then A else B • doesn’t evaluate A • if b_exp then A else B • Evaluates b_exp, then applies previous rules
Boolen Expressions • Bexp1 andalso Bexp2 • If Bexp1 evaluates to false, doesn’t evaluate Bexp2 • Bexp1 orelse Bexp2 • If Bexp1 evaluates to true, doesn’t evaluate Bexp2
Short-circuit Evaluation – Other Expressions • Example: 0 * A = 0 • Do we need to evaluate A? • In general, in f(x,y,…,z) are the arguments to f evaluated before f is called and the values are passed, or are the unevaluated expressions passed as arguments to f allowing f to decide which arguments to evaluate and in which order?
Eager Evaluation • If language requires all arguments to be evaluated before function is called, language does eager evaluation and the arguments are passed using pass by value (also called call by value) or pass by reference
Lazy Evaluation • If language allows function to determine which arguments to evaluate and in which order, language does lazy evaluation and the arguments are passed using pass by name (also called call by name)
Lazy Evaluation • Lazy evaluation mainly done in purely functional languages • Some languages support a mix • Effect of lazy evaluation can be implemented in functional language with eager evaluation