+ All Categories
Home > Documents > Messages, Instances, and Initialization (Methods)

Messages, Instances, and Initialization (Methods)

Date post: 24-Jan-2016
Category:
Upload: alena
View: 43 times
Download: 0 times
Share this document with a friend
Description:
Messages, Instances, and Initialization (Methods). CMPS 2143. Terms. Creation – allocation of memory space for a new object and the binding of that space to a name Initialization – setting initial data values for the object and establishing initial conditions for manipulating it - PowerPoint PPT Presentation
31
Messages, Instances, and Initialization (Methods) CMPS 2143
Transcript
Page 1: Messages, Instances, and Initialization  (Methods)

Messages, Instances, and Initialization (Methods)

CMPS 2143

Page 2: Messages, Instances, and Initialization  (Methods)

2

Terms

•Creation – allocation of memory space for a new object and the binding of that space to a name

• Initialization – setting initial data values for the object and establishing initial conditions for manipulating it

•Message passing (method lookup, method call) – dynamic process of asking an object to perform a specific action.

Page 3: Messages, Instances, and Initialization  (Methods)

3

Messages

•A message is always given to some object, called the receiver

•Different objects may accept the same message and yet perform different actions ▫eg. circle.getArea() and square.getArea()

•3 parts to a message-passing expression▫aGame.displayCard (aCard, 42, 27) receiver message selector arguments

Page 4: Messages, Instances, and Initialization  (Methods)

4

Variations in Messages Syntax

•Most common syntax uses period to separate receiver from selector / some use a space

•Requiring ( ) when they are empty (known as a unary message)

•Messages may require keyword notations▫aGame displayCard: aCard atLocation: 45 and: 56.

•Might use brackets▫ int cardRank = [aCard getRank];

Page 5: Messages, Instances, and Initialization  (Methods)

5

Examples:•C++, C#, Java, Python, Ruby aCard.flip (); aCard.setFaceUp (true);

•Pascal, Delphi, Eiffel, Oberon aCard.flip; aCard.setFaceUp (true);•Smalltalk aCard flip. aCard setFaceUp: true.•Objective-C [aCard flip.] [aCard setFaceUp: true].•CLOS (flip aCard) (setFaceUp aCard true)

Page 6: Messages, Instances, and Initialization  (Methods)

6

Statically vs Dynamically Typed Languages• IMPORTANT in regards to message passing

• Java, C++, C#, and Pascal are statically typed▫Use the type of the receiver to check at compile time that

a receiver will understand the message selector•Smalltalk, CLOS and Python are dynamically typed▫No way to do this at compile time, so may generate a run

time error if receiver does not understand the message selector

•Objective-C – you have a choice on a variable by variable basis

Page 7: Messages, Instances, and Initialization  (Methods)

7

Accessing Receiver within Method

•Message is ALWAYS passed to a receiver in OOP•Receiver (in most languages) does NOT appear in the

arguments - it is implicit within the method

•When necessary, can be explicit and use a pseudo-variable ▫Java, C++, C# use this▫Eiffel uses Current▫Smalltalk, Obj-C, Object Pascal – use self▫Python, CLOS, Oberon require explicit

Page 8: Messages, Instances, and Initialization  (Methods)

8

C++ Example of thisPlayingCard::PlayingCard (Suits suitValue, int rankValue) { this.suitValue = suitValue; this.rankValue = rankValue;}

•Rarely needed, unless you need to pass this to another method.

•Some Java guidelines suggest this style.

Page 9: Messages, Instances, and Initialization  (Methods)

9

Java Example

class QuitButton extends Button implements ActionListener {

public QuitButton ( ) { :

//install ourself as a listener for button //events addActionListener (this); } :}

Page 10: Messages, Instances, and Initialization  (Methods)

10

Creating Primitive objects•Most languages, variables created in a declaration

statement – some can combine initialization• Pascal

var sum : integer; begin sum := 0;

• Java, C++, C# int sum = 0;

• Primitive variables exist within block they are declared

Page 11: Messages, Instances, and Initialization  (Methods)

11

Creating Objects•Usually process of naming and creating Objects separate

• JavaPlayingCard aCard;aCard = new PlayingCard (Heart, 3);

•or

PlayingCard aCard = new PlayingCard (Heart, 3);

Page 12: Messages, Instances, and Initialization  (Methods)

12

Creating Objects

•C++ - you have a choicePlayingCard aCard(Heart, 3);

•orPlayingCard * aCard;aCard = new PlayingCard (Heart, 3);

Page 13: Messages, Instances, and Initialization  (Methods)

13

Creation of Array of Objects

•Create/allocate array•Create/allocate array elements

•C++ - can be combined PlayingCard cardArray [52]; //all will have default values Heart, 0

• JavaPlayingCard cardArray[ ] = new PlayingCard [52];for (int i = 0; i < 13; i++) cardArray[i] = new PlayingCard (Spade, i+1);

Draw Picture

Page 14: Messages, Instances, and Initialization  (Methods)

14

Memory Allocation

•All OO languages use pointers in underlying representation – not all expose this rep to the programmer

• Java “has no pointers” in contrast to C++ (that is they can’t be seen by the programmer)

•C++PlayingCard aCard; //automatic variable

PlayingCard * aCard = new PlayingCard; //dynamically allocated

Page 15: Messages, Instances, and Initialization  (Methods)

15

Memory Recovery

•Primitive variables are automatically recovered on procedure/method exit

•Automatic variables are automatically recovered on procedure/method exit

•Dynamically allocated variables are recovered▫Using delete or free

Fast, but programmer could forget and create memory leaks▫Automatic garbage collection

Slow, but no memory leaks and not possible to accidently try to use memory after freed or try to free memory already freed

Page 16: Messages, Instances, and Initialization  (Methods)

16

Examples

•Ojective-C [acard free];•C++ delete aCard•Arrays▫C++ delete [ ] cardArray;

• Java, C#, Smalltalk, CLOS – auto garbage collection

Page 17: Messages, Instances, and Initialization  (Methods)

17

Constructors

•Constructor is a special method used to initialize a newly created object

•Want to guarantee that an object can never be used before it has been initialized

•Do NOT construct twice!!!▫You’ll get a redefinition error or memory leak

•Constructors have same name as class•Never have a return type

Page 18: Messages, Instances, and Initialization  (Methods)

18

Example• Java declaration/definition

class PlayingCard { public PlayingCard (int s, int r) { suit = s; rank = r; faceup = true; } : }

•UseaCard = new PlayingCard (PlayingCard.Diamong, 3);

Page 19: Messages, Instances, and Initialization  (Methods)

19

Overloaded Constructors•C++, C#, Java allow several methods with same name,

as long as signature is different

class PlayingCard { public: PlayingCard () { suit = Diamond; rank = 1; faceUp = true;}

PlayingCard (Suit s, int r) { suit = s; rank = r; faceUp = true;}

PlayingCard ( PlayingCard & other) { suit = other.suit; rank = other.rank; }};

Page 20: Messages, Instances, and Initialization  (Methods)

20

Calling Constructors in C++

PlayingCard cardOne; //invokes defaultPlayingCard * cardTwo = new PlayingCard; //defaultPlayingCard cardThree (PlayingCard.Heart, 3); //param.PlayingCard cardFour (cardThree); //copy

CAREFUL!!!

//creates a new cardPlayingCard cardFive;

//forward definition for function called cardSix that//returns a PlayingCardPlayingCard cardSix (); //

Page 21: Messages, Instances, and Initialization  (Methods)

21

Calling Constructors in Java

PlayingCard cardOne = new PlayingCard(); //defaultPlayingCard cardTwo = new PlayingCard(); //defaultPlayingCard cardThree = new PlayingCard(PlayingCard.Heart, 3); //param.PlayingCard cardFour = cardThree.clone(); //copy

CAREFUL!!!

//only creates referencePlayingCard cardFive;

//syntax error??PlayingCard cardSix ();

Page 22: Messages, Instances, and Initialization  (Methods)

22

Other languages

•Objective-C constructors do not have to have same name, use + sign

•Apple Object Pascal has none (create using new)•Delphi Pascal closer to C++•Python uses __init__

Page 23: Messages, Instances, and Initialization  (Methods)

23

Constant values

•Data fields that can be assigned once and thereafter are not allowed to change

•Constructors give us the ability to assign the values

• Java – it is a final variable

class ShippingCo implements IShippingCo { //max packages public final int MAX = 100; :}

Page 24: Messages, Instances, and Initialization  (Methods)

24

Java•Final value can be assigned in the constructor (s)

class Game implements IGame { public Game (int maxPlayers ) { MAXPLAYERS = maxPlayers; : } : public final int MAXPLAYERS;}

Page 25: Messages, Instances, and Initialization  (Methods)

25

C++• Just uses const instead

•One difference between C++ and Java▫C++ are truly constant▫Java finals asserts that the associated variable cannot be

assigned a new value – nothing prevents it from changing its own internal state

final aBox = new Box(); //aBox can be assigned only //once

aBox.setHeight (10); //can change internal state

Page 26: Messages, Instances, and Initialization  (Methods)

26

Orthodox canonical class form

•C++ Guidelines on Style say you should define 4 important methods1. A default constructor2. A copy constructor3. An overloaded assignment operator4. A destructor (even if it is an empty method)

• We have already seen the first two

Page 27: Messages, Instances, and Initialization  (Methods)

27

Destructors and Finalizers•Actions to perform at the end of a variable’s lifetime

•Performed in C++ with a destructor easily▫Invoked automatically

On block exit for automatic variables On delete for dynamic variables

▫Destructor is the name of the class preceded by a tilde (~) Has no arguments

•Should always provide one, even if empty▫There is a system default one

Page 28: Messages, Instances, and Initialization  (Methods)

28

C++

class ShippingCo {

public: : ~ShippingCo ( ) { delete [] items;}

private: Package [ ] packages;

int numPackages; int coID;}

Page 29: Messages, Instances, and Initialization  (Methods)

29

Other languages

•Delphi Pascal uses keyword destructor, called when memory is freed

• Java and Eiffel have similar facilities, although both languages use garbage collection.

Page 30: Messages, Instances, and Initialization  (Methods)

30

Java finalizer

Class FinalizeExample { : public void finalize () { System.out.printline (“finally doing finalization”); System.exit (0); }

Object x = new FinalizeExample (); //Superclass Objectx = new Integer (3); //redefining x releases memory . : //at any point the gc will get it

Page 31: Messages, Instances, and Initialization  (Methods)

31

Metaclasses

•Hidden classes•Ha! Classes are objects▫Contain static member data and static methods▫To access these members

ClassName.methodName (args);

double y = Math.sqrt (4.4);


Recommended