0% found this document useful (0 votes)
14 views

Lecture 4 OOP(OOP in Java)

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views

Lecture 4 OOP(OOP in Java)

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 39

OOP in Java

By Muhammad Abu Bakar


OOP in Java
• Java is fundamentally Object-Oriented
• Every line of code you write in Java must be inside a Class
(not counting import directives)

• Clear use of
• Variables
• Methods

• Re-use through “packages”

• Modularity, Encapsulation, Inheritance, Polymorphism


etc
OOP Vocabulary Review
• Classes
• Definition or a blueprint of a userdefined
datatype
• Prototypes for objects

• Objects
• Nouns, things in the world

• Constructor
• Given a Class, the way to create an Object (that
is, an Instance of the Class) and initialize it
Object
• Attributes Anything we can put a
thumb on
• Properties an object has

• Methods
• Actions that an object can do
Defining Classes
The Structure of Classes
class name {
instance variables
declarations and symbolic constants

constructor how to create and


initialize objects
definitions

how to manipulate
method those objects (may or
definitions may not include its
own “driver”, i.e.,
} These parts of a class can main( ))
actually be in any order
Defining a Class Comparison with C++
• Java gives you the ability to write classes or user-defined data
types similar to the way C++ does, with a few differences

• Points to consider when defining a class

• There are no global variables or functions. Everything


resides inside a class. Remember we wrote our main
method inside a class

• Specify access modifiers (public, private or protected ) for each member


method or data members at every line.
• No semicolon (;) at the end of class
• All methods (functions) are written inline. There are
no separate header and implementation files.
The Point Class
class Point {
private int x; instance variables
private int y; and symbolic constants

how to create and


public Point (……) initialize objects
{……}

how to manipulate
public void Display
those objects (may or
(……) {
may not include its
………. own “driver”, i.e.,
} main( ))
Defining a Class Comparison with C++ (cont)
• Points to consider when defining a class (cont)

• Automatic initialization of class level data members if you do not


initialize them
• Primitive types
• Numeric (int, float etc) with zero
• Char with null
• Boolean with false

• Object References
• With null
• Remember, the same rule is not applied to local variables. Using a
local variable without initialization is a compile time error.

public void someMethod () {


int x; //local variable
System.out.println(x); //compile time error
}
Defining a Class Comparison with C++ (cont)
• Points to consider when defining a class (cont)

• Access Modifiers
• public : Accessible anywhere by anyone
• Private : Only accessible within this class
• Protected : Accessible only to the class itself and to it’s subclasses or other
classes in the same “package”
• Package : Default access if no access modifier is provided.
Accessible to all classes in the same package
• Constructor
• Same name as class name
• Does not have a return type
• No initialization list
• JVM provides a zero-argument constructor only if a class
doesn’t define it’s own constructor
• Destructor
• Destructors are not required in a java class
Example
Task - Defining a Class
• Create a class for Student Student
• should be able to store the following
characteristics of student Attributes:
Roll NO
• Roll No Name
• Name Methods:
constructors
• Provide default, parameterized and copy getters/setters
constructors print

• Provide standard getters/setters for instance


variables
• Make sure, roll no has never assigned a negative value i.e.
ensuring the correct state of the object

• Provide print method capable of printing


student object on console
Student Implementation Code
// Student.java
/*
Demonstrates the most basic features of a class. A student is defined by
their name and rollNo. There are standard get/set accessors for name
and rollNo.
NOTE A well documented class should include an introductory comment
like this. Don't get into all the details – just introduce the landscape.
*/
public class Student {
private String Name;
private int RollNo;
Student Implementation Code
cont.
// Standard Setters

public void setName (String name) {


this.Name = name;
}

// Note the masking of class level variable rollNo


public void setRollNo (int rollNo) {
if (rollNo > 0) {
this.RollNo = rollNo;
}else {
this.rollNo = 100;
}
}
Student Implementation Code
cont.

// Standard Getters

public String getName ( ) {


return name;
}

public int getRollNo ( ) {


return rollNo;
}
Student Implementation Code
// Constructor that uses a default value instead of taking an argument.

public Student() {
name = “not set”;
rollNo = 100;
}

// parameterized Constructor for a new student

public Student(String name, int rollNo) {


setName(name); //call to setter of name
setRollNo(rollNo); //call to setter of rollNo
}

// Copy Constructor for a new student


public Student(Student s) {
name = s.name;
rollNo = s.rollNo;
Student Implementation Code
cont.

// method used to display method on console

public void print () {


System.out.println("Student name:" +name+ ", roll no:" +rollNo);
}

} // end of class
Using Classes
Defining a Class Comparison with C++
• Objects of a class are always created on heap using the “new”
operator followed by constructor

• \Student s = new Student () // no pointer operator “*” between


// Student and s

• Only String constant is an exception


• String greet = “Hello” ; // No new operator

• However you can use


• String greet2 = new String(“Hello”);

• Members of a class ( member variables and methods also known as


instance variables/methods ) are accessed using “.” operator. There
is no “” operator in java
• s.setName(“Ali”);
• SsetName(“Ali”) is incorrect and will not compile in java
Differences from C++
(cont)
• Objects are always passed by reference
whereas primitive data types are passed
by value. Using a
• All methods use the run-time, not class
compile-time, types (i.e. all Java
methods are like C++ virtual functions) Comparis
• The types of all objects are known at
on with
run-time C++
• All objects are allocated on the heap
(always safe to return objects from
methods)
Task – Using
Student Class
Student
• Create objects of Student Attributes:
class by calling default, Roll NO
Name
parameterized and copy Methods:
class
constructors
constructors. getters/setters
print

• Call Students class various ali


methods on objects
Attributes:
Roll NO: 89
Name: ali raza
Methods: object
getters/setters
print
Student Client Code
public class Test{

public static void main (String args[]){

// Make two students


Student s1 = new Student("ali", 15);
Student s2 = new Student(); //call to default costructor

s1.print();
s2.print();

s2.setName("usman");
s2.setRollNo(20);

System.out.print("Student name:" + s2.getName());


System.out.println(" rollNo:" + s2.getRollNo());

//continue….
Student Client Code
System.out.println("calling copy constructor");
Student s3 = new Student(s2); //call to copy constructor

s2.print();
s3.print();

s3.setRollNo(-10); //Roll No would be set to 100

s3.print();

/*NOTE: public vs. private


A statement like "b.rollNo = 10;" will not compile in a client
of the Student class when rollNo is declared protected or private */

} //end of main
Compile and Execute
More on Classes
Static
• A class can have static
• Variables
• Methods

• Static variables and methods


• Are associated with the class itself!!
• Not associated with the object

• Therefore Statics can be accessed without instantiating an


object!

• Generally accessed by class name

• Cannot refer to a non-static instance variable in a static


method
• No this reference
Static Variable & Methods
• Occurs as a single copy in the class
• For example;
• System.out is a static variable
• JOptionPane.showInputDialog(String)
Static Fun
Object: ali
Type: Student
Name: ali raza
Roll No: 5
Methods: getName, setName
getRollNo, setRollNo
toString

Class: Student
countStudents: 2
Method: getCountStudents()
Object: usman
Type: Student
Name: usman shahid
Roll No: 5
Methods: getName, setName
getRollNo, setRollNo
toString
Garbage Collection
• Java performs garbage collection
and eliminates the need to free
objects explicitly.

• When an object has no references


to it anywhere, except in other Garbage
objects that are also unreferenced,
its space can be reclaimed. collection and
finalize
• Before the object is destroyed, it
might be necessary for the object
to perform some actions.
• For example closing an open file. In
such a case define a finalize()
method with the actions to be
performed before the object is
destroyed.
finalize
• When a finalize method is defined in a class, Java run time calls
finalize() whenever it is about to recycle an object of that
class.

protected void finalize()


{
// code
}

• A garbage collector reclaims objects in any order or never


reclaim them.

• System.gc()
• Request the JVM to run the garbage collector
• Not necessary it will run
Memory Management
Stack Heap
public class Test{
0F59
public static void main|(String args[]){ s1
name
ali
0F59
Student s1 = new Student(“ali”);
Student s2 = new Student(“raza”);
03D2
s1= s2; s2
name
raza
03D2
}

No Memory leakage in Java, Automatic


Garbage Collection will take care of such
scenarios
Example
Modify Student Class
public class Student {
…..
private static int countStudents = 0;

public static int getCountStudents() {


return countStudents;
}

…….
Modify Student Class
// Constructor that uses a default value instead of taking an argument.

public Student() {
name = “not set”;
rollNo = 100;
countStudents += 1;
}

// parameterized Constructor for a new student


public Student(String name, int rollNo) {
setName(name); //call to setter of name
setRollNo(rollNo); //call to setter of rollNo
countStudents += 1;
}

// Copy Constructor for a new student


public Student(Student s) {
name = s.name;
rollNo = s.rollNo;
countStudents += 1;
}
Modify Student Class
// Overridden methods

// Overriding toString method of class java.lang.Object


public String toString () {
return ("name: "+name + "RollNo: " + rollNo);
}

//Overriding finalize method of Object class


protected void finalize () {
countStudents -= 1;
}
} // end of class
Student Client Code
public class Test{

public static void main (String args[]){

int numObjs;

numObjs = Student.getCountStudents();
System.out.println("Students Objects:"+numObjs);

Student s1 = new Student("ali", 15);


System.out.println("Student:" + s1.toString() );

numObjs = Student.getCountStudents();
Student Client Code
Student s2 = new Student("usman", 49);
System.out.println("Student:" +s2); //implicit call to toString()

numObjs = Student.getCountStudents();
System.out.println("Students Objects:"+numObjs);

s1 = null;

System.gc(); // request the JVM to run the garbage collector But


// there is no gaurantee that garbage collector will run

numObjs = Student.getCountStudents();
System.out.println("Students Objects:"+numObjs);

} //end of main
Compile and Execute
More on Java OOP

• http://www.codeguru.com/java/tij/tij_c.shtml

You might also like