• No results found

More on Objects and Classes

N/A
N/A
Protected

Academic year: 2021

Share "More on Objects and Classes"

Copied!
21
0
0

Loading.... (view fulltext now)

Full text

(1)

Software and Programming I

More on Objects

and Classes

Roman Kontchakov

Birkbeck, University of London

(2)

Outline

Object References

Class Variables and Methods

Packages

Testing a Class

Discovering Classes

Sections 7.6 – 7.10

slides are available at

www.dcs.bbk.ac.uk/˜roman/sp1

(3)

Java Compilation

source

CashRegisterTest.java

source

CashRegister.java

bytecode

CashRegisterTest.class

bytecode

CashRegister.class compiler javac

running

program

Virtual Machine

java

public static void main(String[] args) {

. . .

}

NB:statements must be inside methods!

(4)

Object-Oriented Programming

Tasks are solved by collaborating

objects

Each object has its own set of encapsulated

data

,

together with a set of

methods

that

act upon the data (

public interface

)

A

class

describes a set of objects with the same

structure

(i.e., data)

and behaviour

(i.e., methods)

Encapsulation enables

changes in the implementation

without affecting users of the class

all instances variables should be private most methods should be public

(5)

Example: Cash Register

1 class CashRegister {

2 /* private data (instance variables) */

3 private int itemCount;

4 private double totalPrice;

5 /* methods (public interface) */

6 public void addItem(double price)

7 { itemCount++; totalPrice += price; }

8 public void clear()

9 { itemCount = 0; totalPrice = 0; }

10 public double getTotal() { return totalPrice; }

11 public int getCount() { return itemCount; }

12 }

addItem(double) and clear() aremutators; getTotal() and getCount() areaccessors

(6)

Using the CashRegister

1 // constructing objects

2 CashRegister reg1 = new CashRegister(); 3 CashRegister reg2 = new CashRegister(); 4 // invoking methods 5 reg1.addItem(1.95); 6 reg1.addItem(2.99); 7 System.out.println(reg1.getTotal() + " " + 8 reg1.getCount()); 9 reg2.addItem(7.67); 10 System.out.println(reg2.getTotal() + " " + 11 reg2.getCount());

12 reg1.itemCount = 0; // ERROR: private variable

(7)

Instance Variables

Every instance of a class has its

own

set

of instance variables

reg1 reg2 CashRegister itemCount = 2 totalPrice = 4.94 CashRegister itemCount = 1 totalPrice = 7.67

An

object reference

specifies the location of an object

(8)

Primitive Datatypes:

Values are Copied

1 int num1 = 0; num1 0

2 int num2 = num1; num1 0

0 num2

3 num2++; num1 0

1 num2

by executingnum2++; only num2 is changed, num1 remains the same

(9)

Objects:

References are Copied

1 CashRegister reg1 = new CashRegister();

reg1

CashRegister itemCount = 0 totalPrice = 0

2 CashRegister reg2 = reg1;

reg1 reg2 CashRegister itemCount = 0 totalPrice = 0 3 reg2.addItem(2.95); reg1 reg2 CashRegister itemCount = 1 totalPrice = 2.95

reg1 and reg2 refer to thesame object

and so, all modifications by methods onreg2

are reflected inreg1

(10)

The null Reference

The

null

reference refers to

no object

1 String middleInitial = null; // not the same as ""! 2 if (middleInitial == null)

3 System.out.println(firstName + " " + lastName);

4 else

5 System.out.println(firstName + " " +

6 middleInitial + " " + lastName);

It is an

error

to invoke a method on a

null

reference:

1 CashRegister reg1 = null;

2 // ERROR: null pointer exception 3 System.out.println(reg1.getTotal());

(11)

The this reference

In a method (or constructor)

this

refers to

the object the method is called on

1 public void addItem(double price) {

2 this.itemCount++; // matter of taste 3 this.totalPrice += price;

4 }

5 public CashRegister() {

6 this.clear(); // or simply clear();

7 }

NB:

we shall see substantial uses of

this

later

(12)

Class Variables

A

static

variable belongs to the class,

not to any object of the class

1 public class BankAccount {

2 private double balance; // instance variable

3 private int accountNumber; // instance variable

4 // class variable

5 private static int lastAssignedNumber = 1000;

6

7 public BankAccount() {

8 lastAssignedNumber++; // one for all instances 9 accountNumber = lastAssignedNumber;

10 }

11 }

(13)

Class Constants

1 public class BankAccount {

2 public static final double OVERDRAFT_FEE = 29.95;

3 }

methods from any class can refer to this constant as

BankAccount.OVERDRAFT FEE

NB:

other examples include

Math.PI

:

public static final double PI

System.out

:

public static final PrintStream out javax.xml.XMLConstants.XMLNS ATTRIBUTE

:

public static final String XMLNS ATTRIBUTE

. . .

(14)

Class Methods

1 public class Financial {

2 public static double percentOf(double percentage,

3 double amount) {

4 return (percentage / 100) * amount;

5 }

6 }

class methods

are

not

invoked on an object:

System.out.println(Financial.percentOf(50, 100));

NB:

other examples include

Math.abs

,

Math.sqrt

, . . .

NB: can one usethis in a class method?

(15)

Packages

a

package

is a set of related classes, e.g.,

java.util

the

import

directive lets you refer to a class

from a package by its class name,

without the package prefix

1 import java.util.Scanner; // before classes 2 ...

3 Scanner = new Scanner(System.in); 4 ...

without this directive one must use the full class name

to import all classes of the package

java.util

, use

import java.util.*

(16)

Packages

to put a class in a package, use

package packagename;

as the first statement in the source file

use a domain name in reverse to construct

an unambiguous package name:

e.g.,

uk.ac.bbk.dcs.sp1

the path of a class file must match

its package name:

e.g.,

uk.ac.bbk.dcs.sp1 is looked up at

uk/ac/bbk/dcs/sp1 in the CLASSPATH directories

(17)

Overloading

Methods and constructors can have the same name

(provided their signature (i.e., name and types of parameters)are different)

1 public class CashRegister { 2 // ... 3 public CashRegister() { 4 itemCount = 0; 5 totalPrice = 0; 6 } 7 public CashRegister(CashRegister c) {

8 this.itemCount = c.itemCount; 9 this.totalPrice = c.totalPrice;

10 }

11 }

(18)

Overloading

(2)

1 // constructor 1: CashRegister()

2 CashRegister reg1 = new CashRegister(); 3 reg1.addItem(2.95); reg1 CashRegister itemCount = 1 totalPrice = 2.95 4 // constructor 2: CashRegister(CashRegister) 5 CashRegister reg2 = new CashRegister(reg1);

reg2

CashRegister itemCount = 1 totalPrice = 2.95

NB:

type of arguments determines which constructor is called

(19)

Testing a Class

1 public class CashRegisterTester {

2 public static void main(String[] args) {

3 CashRegister reg1 = new CashRegister(); 4 reg1.addItem(2.95); 5 reg1.addItem(1.99); 6 System.out.println(reg1.getCount()); 7 System.out.println((reg1.getCount() == 2) 8 ? "OK" : "FAIL"); 9 System.out.printf("%.2f\n", reg1.getTotal()); 10 System.out.println((reg1.getTotal() == 4.94) 11 ? "OK" : "FAIL"); 12 } 13 } SP1 2013-06 18

(20)

Discovering Classes

Find the concepts that you need to implement as

classes. Often these will be nouns in the problem

description

Find the responsibilities of the classes. Often these

will be verbs in the problem description.

Find relationships between the classes that you have

discovered (aggregation, inheritance)

Class-Responsibility-Collaboration cards

subject of OO Analysis and Design

(21)

Take Home Messages

encapsulation enables changes in implementation

all instances variables should be private

most methods should be public (public interface)

every instance of a class has

its own instance variables

assignment statements copy

values for primitive datatypes object references for object

the

null

reference refers to no object

static

variables and methods belong to the class

a package is a set of related classes

References

Related documents

I All methods of a class have a mandatory first parameter which refers to the instance on which you called the method. I This parameter is usually

constructors performed a defacto type conversion from the argument's type to the constructor's class type. The variables length and name are data members of the class string. Once

The acquisition by one class (called the derived class or child class or direct subclass ) of the variables and methods of another class (called the base class or parent class or

The keyword static allows main() to be called without having to instantiate a particular instance of the class this is necessary because main() is called by Java virtual machine

If class Client has a relation to class Service , then it's obvious that the packages containing these two classes also have a relationship, formally known as a

Download the classes have static declarations may be common to implement methods of record declarations define an enum type variables of its objects are passed in inner..

In java, we have static instance variables as well as static methods and also static block. Classes can also be made static in Java. Java allows us to define a class within

▪There is no need to specify the implicit parameter (name of the object) when using instance variables inside the class. ▪Explicit parameters must be listed in the