35
CMSC 202 Classes and Objects

CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Embed Size (px)

DESCRIPTION

Aug 4, 2008Adapted from "Thinking in Java" by Bruce Eckel 3 Objects Elements in the problem are referred to as objects Examples Car Bank account String Each object has State represented by internal data Behaviors produced by methods

Citation preview

Page 1: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

CMSC 202

Classes and Objects

Page 2: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 20072

Programming Languages

All programming languages provide some form of abstraction

Procedural language (eg C) abstraction requires thinking in terms of the underlying computer (data areas, sequential statement execution)

Object-oriented languages allow abstraction of the elements of the problem

Page 3: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 4, 2008Adapted from "Thinking in Java" by Bruce Eckel3

Objects

Elements in the problem are referred to as objects

Examples Car Bank account String

Each object has State represented by internal dataBehaviors produced by methods

Page 4: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

July 21, 20084

What’s a class

From the dictionary a kind or category A set, collection, group, or configuration containing

members regarded as having certain attributes or traits in common

From OOP (Rumbaugh, et al) A class describes a group of objects with similar

properties, common behavior, common relationships with other objects, and common semantics

Examples

Page 5: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 20075

Classes

All objects are unique Objects which are identical except for

their state can be grouped into a classClass of carsClass of birdsClass of playing cards

Defining classes is a fundamental concept in OOP

Page 6: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

July 21, 20086

A class is a model

A class is a model for a group of objects The focus of the class is the common

behavior of the objects the class models. A class’ behavior may also referred to as a

service, operation, action, or command. The model also contains common attributes

of the objects The attributes exit to support the model’s

behaviors

Page 7: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 20077

A class is a type

Variables of the class type may be created just like variables of built-in types

You can create as many objects of the class type as you like

OOP challenge is to create the objects that match the problem

Page 8: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 2007Adapted from "Thinking in Java" by Bruce Eckel8

Object Interface

The requests you can make so an object will do something are determined by its interface

The interface is determined by its type

LightBulb

on( )

off( )

brighten( )

dim( )

TYPE

INTERFACE

Page 9: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 2007Adapted from "Thinking in Java" by Bruce Eckel9

Implementation

Code and hidden data within the object that satisfies the requests comprise the implementation

Each request in the interface has an associated method. When a particular request is made, that method is called.

In OO-speak we say that you are “sending a message” to the object which responds to the message by executing the appropriate code.

Page 10: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200710

Class Definitions

You already know how to use classes and the objects created from them, and how to invoke their methodsFor example, you have already been

using the predefined String Now you will learn how to define your

own classes and their methods, and how to create your own objects from them

Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Page 11: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200711

A Class Is a Type A class is a special kind of programmer-defined

type, and variables can be declared of a class type A value of a class variable type is called an object or

an instance of the class If A is a class, then the phrases

• “X is of type A“• “X is an object of the class A"• “X is an instance of the class A"

mean the same thing A class determines the actions it can perform and the types of data that required to support those

actions

Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Page 12: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200712

The Class Definition

A class definition implements the class model The class behaviors/services/actions/operations are

implemented by class methods. The class attributes (data items) are called fields or

instance variables. In Java, classes are defined in files with the .java

extension. The name of the file must match the name of the class defined within it.

Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Page 13: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

July 21, 200813

Objects

All objects of a class have the same methods

All objects of a class have the same attributes (i.e., name, type, and number) For different objects, each attribute can hold

a different value The values of the attributes define the object state which is what makes each object unique.

Copyright © 2008 Pearson Addison-Wesley. All rights reserved

Page 14: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200714

Class Examples

What services/behaviors might be appropriate for the following thingsA red-green-yellow traffic lightA garage door openerA bank account

Page 15: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200715

Anatomy of a Java Class

Visibility modifier(More on this later) Name of the classKeyword class

public class Date1

{

}

Class body: instance variables, methods

NO semi-colon

Page 16: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200716

Instance Variables

are defined inside the class definition. may be primitive types or other class types are accessible by all methods of the class

i.e. have “class scope”

Given the services identified for the red-green-yellow traffic light, the garage door opener and the bank account, what instance variables might be defined for each?

Page 17: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Anatomy of a methodClass methods are very much like functions. Methods

include a visibility modifier, return type, method name, and optional parameters

Visibility modifier(More on this later)

Name of the method return type

public double toCelcius{

}

Method code: local variables and statements

(double fTemp)

Optional parameters

Page 18: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200718

A Date Class

The code below defines a class named Date1.This class definition goes in a file named Date1.javapublic class Date1{

public String month;public int day;public int year;

public void print( ){

System.out.println(month + “ “ + day + “, “ + year);}

}

These are the (public)“data members” or “instance variables” of the class

This is a method definition and its implementation

A method may use the class’ instance variables

Page 19: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200719

Date1 print

print is a method of the Date1 class. Its definition and implementation are part of the Date1 class.

Like functions in C, class methods may be void, return a value, and (optionally) have parameters. Method parameters may be primitive types passed by value or may be objects (which need further discussion later).

All class methods have access to all class instance variables.

Page 20: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200720

Using Date1

We can create instances of Date1, modify, and print the date. This class definition (program) goes in a file named Date1Demo.java

public class Date1Demo{

public static void main( String[ ] args ){Date1 myDate;myDate = new Date1( );

myDate.month = “July”;myDate.day = 4;myDate.year = 2007;

myDate.print( );

}}

Create a Date1 objectnamed myDate

Give values to the datamembers

Invoke the print method

Page 21: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200721

Creating the Date1 Object

The statement Date1 myDate; defines a variable of type Date1. But there is no Date1 object yet!

The statement myDate = new Date1( ); creates a “new” Date1 object and names it with the variable “myDate”. Now “myDate” refers to a Date1 object

For convenience, these statements can be combinedDate1 myDate = new Date1( );

(continued)

Page 22: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200722

“Dot” notationPublic instance variables of an object are

referenced using the “dot” operator (like members of a struct in C)myDate.month = “July”;myDate.day = 4;myDate.year = 2007;

Instance variable can be used like any other variable of the same type.

The set of values stored in all instance variables define the state of the myDate object.(continued)

Page 23: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200723

“Dot” notation

The print method of myDate is invoked using the “dot” operator (again similar to accessing a member in a C struct).

The statement myDate.print( ); invokes the print method of myDate which refers to an object of type Date1.

In OO terminology we say that we are “sending the print message” to the object referred to by myDate.

The object myDate is referred to as the “calling object” or “host object”. It is the object in which the print method is invoked.

Page 24: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200724

Other Date Methods

Some other possible services which the Date class might provide include• incrementDay - changes the date to

“tomorrow”• printDMY - a different printing format• setDate - initialize/change the year,

month, and/or day• What others ?

Page 25: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

New Date1 Methods

// change the month (using an int), day, and year.public void setDate( int newMonth, int newDay, int newYear ){month = monthString( newMonth );day = newDay;year = newYear;}

// change month number (int) to string - used by setDate public String monthString( int monthNumber ) {

switch ( monthNumber ) {case 1: return "January"; case 2: return "February";case 3: return "March"; case 4: return "April"; case 5: return "May"; case 6: return "June"; case 7: return "July"; case 8: return "August"; case 9: return "September"; case 10: return "October"; case 11: return "November"; case 12: return "December"; default: return “????”; }}

Page 26: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Jan 23, 200826

Confusion

In the preceding setDate method it’s tempting to define the method using the common terms “month”, “day” and “year” as the parameters.

public void setDate( int month, int day, int year){

month = monthString( month );// which month is which?day = day; // which day is which?year = year; // which year is which?

}

The problem with this code is that the compiler assumes that all uses of day, month, and year refer to the method parameters and hence this code has no effect.

Page 27: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Jan 23, 200827

Calling ObjectWhen any class method is called, the instance variables used within

the method are assumed to belong to the calling object.

What the code in setDate is really trying to do is

public void setDate( int month, int day, int year){“calling object”.month = monthString( month ); “calling object”.day = day; “calling object”.year = year; }

It’s handy (and sometimes necessary) to have a name for the calling object. In Java, we use the reserved word this as the generic name of the calling object.(continued)

Page 28: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Jan 23, 200828

Using this

So, if we want to name our parameters the same as our instance variables, we could write the setDate method aspublic void setDate( int month, int day, int year){

this.month = monthString( month ); this.day = day; this.year = year;

}Note that many examples in the text use this technique

for class methods and some Java programmer tools (including Eclipse) use this technique when writing code for you.

Page 29: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200729

this againAs a final example, recall the print method from Date1

public void print( ){

System.out.println(month + “ “ + day + “ “ + year);}

Here it’s clear that month, day, and year refer to the instance variables of the calling object because there are no parameters. To be more explicit we could have writtenpublic void print( ){

System.out.println(this.month + “ “ + this.day + “ “ + this.year);

}

With no chance for confusion, using the prefix this is unnecessary and usually omitted.

Page 30: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200730

Method Documentation

Clear communication with the class user is of paramount importance so that he can use the appropriate method, and use class methods properly.

Method comments: explain what the method does, and describe how to use the method.

Two important types of method comments: precondition comments post-conditions comments

Page 31: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200731

Preconditions and Postconditions

PreconditionWhat is assumed to be true when a method is

calledIf any pre-condition is not met, the method

cannot correctly perform its function. Postcondition

Describes the effect of the methodStates what will be true after the method

executes (assuming all pre-conditions are met)

Page 32: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200732

A Simple ExampleRecall the print method from Date2 that outputs the

month string, day, and year to the screen. The print method might look something like this:

/* PreCondition:none

PostCondition: The calling object has been written to the screen in the format

<month string> <day>, <year>*/public void print( ){

// code here}

Page 33: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Aug 6, 200733

Another Common ExampleVery often the precondition specifies the limits of the parameters and the

postcondition says something about the return value./* Pre-condition:

1 <= month <= 12day appropriate for the month1000 <= year <= 9999

Post-condition:The month, day, and year of the calling

object have been set to the parameter values.Returns true if the calling object has been

changed. Returns false otherwise*/public boolean setDate( int month, int day, int

year){

// code here}

Page 34: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Sept 7, 200734

Date1 Code Example

Date1 newYears = new Date1( );newYears.month = “January”;newYears.day = 1;newYears.year = 2008;

Date1 birthday = new Date1( );birthday.month = “July”;birthday.day = 4;birthday.year = 1776;

newYears.print( ); // line 1birthday.print( ); // line 2System.out.println(birthday.monthString(6)); // line 3birthday.setDate( 2, 2, 2002); // line 4birthday.print( ); // line 5newYears.day = 42; // line 6newYears.print( ); // line 7

Page 35: CMSC 202 Classes and Objects. Aug 6, 2007 2 Programming Languages All programming languages provide…

Sep 7, 200735

January 42, 2008

It appears that classes allow the user to change the data anytime he chooses and can possibly make the data invalid

That’s true so far because we have defined our instance variables with public access. This is rarely the case in real applications.

Our focus today was on classes vs objects and the syntax used for accessing methods.

Next time we’ll see a more robust class that will prevent the user from making our data invalid.