370 likes | 408 Views
OOP in Java and C++. CS 123/CS 231. Outline. Program Structure and Execution Encapsulation and Inheritance Objects, Variables, and Arrays Constructors Methods, Operators, and Binding Containers and Reuse GUI Programming. Program Structure. Class definition similar in Java and C++
E N D
OOP in Java and C++ CS 123/CS 231
Outline • Program Structure and Execution • Encapsulation and Inheritance • Objects, Variables, and Arrays • Constructors • Methods, Operators, and Binding • Containers and Reuse • GUI Programming
Program Structure • Class definition similar in Java and C++ • Java: two types of programs • application (with main() function) • applet (typically embedded in a web page) • C++ • a program is (still) a collection of functions that may use objects and classes • main() function serves as driver
Program Execution • Java: Virtual Machine (VM) • programs: both compiled and interpreted • compiler produces .class from .java • VM loads .class file(s) as needed • C++: compiled, linked, and loaded • modules separately compiled • linked to produce executable • static vs dynamic libraries
Encapsulation • Enforced through access keywords • public: for interface • private: to make implementation inaccessible • protected: access for subclasses only • In Java • each member is prefixed with a keyword • In C++ • public, private, and protected sections
Breaking Encapsulation • Possible in C++ through the friend keyword • A method or class may be declared as a friend of an existing class • Allows access to private members “A friend is someone who has access to your private parts.”
Inheritance • Feature that allows a class to be defined based on another class • methods and attributes are inherited • Java and C++ difference • Java: public class A extends B { … } • C++: class A: public B { … }(different types of inheritance) • Multiple inheritance possible in C++, not in Java • But in Java, one may implement several interfaces
Objects and Identity • Questions: • How/when are objects created? • What is the relationship between a variable and an object? • Difference between Java and C++ • distinction between primitive (built-in) type variables and variables for objects • reference relationship between variable and actual object
Variables for Built-in Types • Variables for built-in types (C++ and Java) int x; … x = 5; X X 5
Reference Variables(in Java) • Reference type variables Button x; … x = new Button(“click”); X Button Object “click” X
Variables That “hold” Objects (in C++) • Declaration of an object variable allocates space for the object Button x(“Click”); X “click”
Pointers (in C++) • Variables can be explicitly declared as pointers to objects Button *x; … x = new Button(“click”); X Button Object “click” X
Disposing ofAllocated Memory • In Java, garbage collection is automatic • Memory allocated objects are reclaimed when no variables refer to them • Need to set reference variables to null when the object is no longer needed • In C++, object destruction is the programmers responsibility using the delete keyword
delete in C++ • There should be a delete for every new • SomeClass *x = new SomeClass(…); • // … use object pointed to by x • delete x; // done using object • Memory leak • Occurs when you forget to delete • Wasted memory • Can this occur in Java?
Object Construction • Constructor • place where you include code that initializes the object • Default Constructor • no additional info required • User-defined Constructor • with parameters that specify values or sizes
Arrays • int x[20]; Button b[20]; • Valid declarations in C++, not in Java • Creates 20 ints and 20 Button objects • In Java, • Declaration and array creation separate • For object arrays, individual object creation necessary
Pointers and Arrays • In C++, there is a close relationship between pointers and arrays • Instead of int x[20]; can issueint *x; x = new int[20];to allow for dynamic allocation • Usage of the array (e.g., x[3] = 5;) identical in both cases • To deallocate, use delete [] x;
Constructors in Java and C++ • In Java, • a constructor is invoked only through the new keyword • recall that all object variables are references • In C++, • a constructor is called upon variable declaration, or explicitly through new with pointers, or in other situations • other types of constructors
C++ Destructor • Special method whose signature is a ~ followed by the name of the class • e.g., ~SomeClass(); • Particularly if the class contains pointers and the constructor contains calls to new, a destructor needs to be defined • e.g., SomeClass() { A = new int[20]; } ~SomeClass() { delete [] A; }
C++ Control Over Copy and Assignment • In C++, the semantics of “a = b” (assignment) can be specified • by defining the copy-assignment operator • In C++, there is a copy constructor • specifies what happens during object copying, e.g., when function parameters are passed • There is more low-level control • shallow copy vs deep copy
Methods • Defines object behavior • Static methods vs instance methods • Method overloading • within class, two methods with the same name but different signatures • Method overriding • same signatures across different classes (subclass and superclass)
Operators • In C++, operators like =, +, *, ==, etc. can be defined, just like methods • Example: • class Matrix { // ... Matrix operator+(Matrix m) { … } // …} • c = a + b; // equiv to c = a.operator+(b);
Method Binding • Let Teacher be a subclass of Employee • Also, suppose promote() is a method defined in both classes • Employee variables can refer to Teachers • In Java, Employee e; … e = new Teacher(); • In C++, Employee *e; … e = new Teacher; • e.promote() (or (*e).promote() ) calls which promote() method?
Static vs Dynamic Binding • In C++, Employee’s promote() is called • Determined at compile time and deduced from the type of the variable (static binding) • In Java, Teacher’s promote is called • Determined at run-time because the actual type of the referred object is checked then (dynamic binding) * C++ uses virtual functions for dynamic binding
Static Binding • Pointer is typed to know the base class and is ignorant of the structure or existence of the derived classes • If the virtual keyword is NOT used, if a derived class has its own variation on the implementation of a base class member function, it will NOT cause the derived class version to be selected when a function is invoked on an object of than class through a variable declared in terms of the base class.
class Employee{ public: double salary() {return sal;} double computeRaise() {return 25;} Employee(double salary) {sal = salary;} private: double sal; }; class Manager: public Employee { public: double computeRaise() {return 100;} Manager(double Salary) : Employee (salary) {} }; Another example
Sample continued Driver Code: Manager * boss1 = new Manager(2000); double boss1Salary = boss1->salary(); // 2000 Employee *boss2 = new Manager(2300); double *boss2Salary = boss2->salary(); //2300 double boss1Raise = boss1->computeRaise(); // 100 double boss2Raise = boss2->computeRaise(); // 25
C++ Run Time Binding • 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
Virtual Functions • 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
Containers • 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 • unified container code for a stack of integers, a stack of webpages, a stack of strings, ...
Java and the Object Hierarchy • All classes extend the Object class: • A variable of class Object can refer to any Java object • Example: • public class Stack { Object A[]; int top; // … void push(Object elt) // ...}
C++ and Templates • Templates allow for a generic definition • parameterized definition, where the element type is the parameter • Example: • template<class T>class Stack<T> { T A[MAX]; int top; public: void push(T element) // …}
C++ Templates • <class T> indicates that a template is being declared • T is the type name (can be a class) • Usage example: • Stack <int> iStack; • Stack <Cards> cStack; • where Cards is a user defined class • A type used as a template argument must provide the interface expected by the template
Defining a Template • When defining a template member outside of its class, it must be explicitly declared a template • Example • template <class T> Stack<T>::Stack()
C++ Standard Containers • 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
GUI Programming • In Java, GUI is part of its development kit • 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++ • not part of the language • libraries dependent on platform (e.g., MFCs and Motif)