Programming Languages and Paradigms ObjectOriented Programming Part II
Programming Languages and Paradigms Object-Oriented Programming (Part II) 6/15/2005
Java and C++ Comparison (continued) n n n Arrays Constructors and destructors Operators Static vs Dynamic Binding Containers and Reuse GUI Programming 2
Arrays n int x[20]; Button b[20]; n n n Valid declarations in C++, not in Java Creates 20 ints and 20 Button objects In Java, n n Declaration and array creation separate For object arrays, individual object creation necessary 3
Pointers and Arrays n n In C++, there is a close relationship between pointers and arrays Instead of int x[20]; can issue int *x; x = new int[20]; to allow for dynamic allocation n n Usage of the array (e. g. , x[3] = 5; ) identical in both cases To deallocate, use delete [] x; 4
Constructors in Java and C++ n In Java, n n n a constructor is invoked only through the new keyword recall that all object variables are references In C++, n n a constructor is called upon variable declaration, or explicitly through new with pointers, or in other situations other types of constructors 5
C++ Destructor n Special method whose signature is a ~ followed by the name of the class n n e. g. , ~Some. Class(); Particularly if the class contains pointers and the constructor contains calls to new, a destructor needs to be defined n e. g. , Some. Class() { A = new int[20]; } ~Some. Class() { delete [] A; } 6
C++ Copy and Assignment n In C++, the semantics of “a = b” (assignment) can be specified n n In C++, there is a copy constructor n n by defining the copy-assignment operator specifies what happens during object copying, e. g. , when function parameters are passed There is more low-level control n shallow copy vs deep copy 7
Operators n n In C++, operators like =, +, *, ==, etc. can be defined, just like methods Example: n n class Matrix { //. . . Matrix operator+(Matrix m) { … } // … } c = a + b; // equiv to c = a. operator+(b); 8
Method Binding n Let Teacher be a subclass of Employee n n Employee variables can refer to Teachers n n n Also, suppose promote() is a method defined in both classes In Java, Employee e; … e = new Teacher(); In C++, Employee *e; … e = new Teacher; e. promote() (or e->promote() ) calls which promote() method? 9
Static vs Dynamic Binding n In C++, Employee’s promote() is called n n Determined at compile time and deduced from the type of the variable (static binding) In Java, Teacher’s promote is called n Determined at run-time because the actual type of the referred object is checked then (dynamic binding) * C++ uses virtual functions for dynamic binding 10
Another example class Employee{ public: double salary() {return sal; } double compute. Raise() {return 25; } Employee(double salary) {sal = salary; } private: double sal; }; class Manager: public Employee { public: double compute. Raise() {return 100; } Manager(double Salary) : Employee (salary) {} }; 11
Sample continued Driver Code: Manager * boss 1 = new Manager(2000); double boss 1 Salary = boss 1 ->salary(); // 2000 Employee *boss 2 = new Manager(2300); double *boss 2 Salary = boss 2 ->salary(); //2300 double boss 1 Raise = boss 1 ->compute. Raise(); // 100 double boss 2 Raise = boss 2 ->compute. Raise(); // 25 12
C++ Run Time Binding n If the intent is for the selection of the function to be determined by the object’s class, not by the declaration of the pointer used to address it: Ø Ø Declare some base class members to be virtual If virtual, the compiler will deposit the “type field” of the class in the object 13
Virtual Functions n n n Base class usually defines a body for a virtual function. Inherited by derived class as default if it chooses not to override the implementation Virtual keyword in function declaration, not in definition 14
Containers n n Examples: Lists, Stacks, Files, etc. Structures that “contain” elements Often, the element’s type has little or nothing to do with the containers’ operations Possible room for re-use n unified container code for a stack of integers, a stack of webpages, a stack of strings, . . . 15
Java and the Object Hierarchy n All classes extend the Object class: n n A variable of class Object can refer to any Java object Example: n public class Stack { Object A[]; int top; // … void push(Object elt) //. . . } 16
C++ and Templates n Templates allow for a generic definition n n parameterized definition, where the element type is the parameter Example: n template<class T> class Stack<T> { T A[MAX]; int top; public: void push(T element) // … } 17
C++ Templates n n n <class T> indicates that a template is being declared T is the type name (can be a class) Usage example: n n Stack <int> i. Stack; Stack <Cards> c. Stack; n n where Cards is a user defined class A type used as a template argument must provide the interface expected by the template 18
C++ Standard Containers n n n n vector : 1 -D array of T list : double linked list of T dequeue : double-ended queue of T queue : queue of T stack : stack of T map : associative array of T set : set of T bitset : set of booleans 19
Java Generics n n n Recent addition to Java Similar to C++ templates Why are templates/generics better than using the Object class as a parameter? 20
GUI Programming n In Java, GUI is part of its development kit n n n java. awt. * is a collection of classes that support visual programming and graphics visual objects (buttons, text fields, etc), layout managers, events, etc. In C++ n n not part of the language libraries dependent on platform (e. g. , MFCs and Motif) 21
- Slides: 21