Top Banner
Object Oriented Programming: Its Origins and Importance in Computer Science Prof. Jeffrey S. Rosenschein School of Computer Science and Engineering Hebrew University, Jerusalem, Israel
56

Oop rosenschein

Aug 13, 2015

Download

Education

Himanshu Modi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Oop rosenschein

Object Oriented Programming: Its Origins and Importance in Computer Science

Prof. Jeffrey S. Rosenschein

School of Computer Science and Engineering

Hebrew University, Jerusalem, Israel

Page 2: Oop rosenschein

2

Computer Programming

The history of computer programming is a steady move away from machine-oriented views of programming towards concepts and metaphors that more closely reflect the way in which we ourselves understand the world

Page 3: Oop rosenschein

3

Programming progression…

Programming has progressed through: machine code assembly language machine-independent programming

languages procedures & functions objects

Page 4: Oop rosenschein

4

Machine language – Mark I

Page 5: Oop rosenschein

5

Machine Language

0000 1001 1100 0110 1010 1111 0101 1000

1010 1111 0101 1000 0000 1001 1100 0110

1100 0110 1010 1111 0101 1000 0000 1001

0101 1000 0000 1001 1100 0110 1010 1111

Page 6: Oop rosenschein

6

Assembly Language – PDP-11

Page 7: Oop rosenschein

7

Assembly Language – Macro-11

GCD: TST BBEQ SIMPLEMOV A, R5SXT R4DIV B, R4MOV B, AMOV R5, BCALL GCD

SIMPLE: RETURN

Page 8: Oop rosenschein

8

Assembly Language – Macro-11

GCD: TST BBEQ SIMPLEMOV A, R5SXT R4DIV B, R4MOV B, AMOV R5, BCALL GCD

SIMPLE: RETURN20/20

Page 9: Oop rosenschein

9

Machine-Independent Programming Languages – Fortran! This example program solves for roots of the quadratic equation,

! ax^2 +bx +c =0,for given values of a, b and c.!PROGRAM bisectionIMPLICIT NONEINTEGER :: iterationDOUBLE PRECISION :: CC, Er, xl, x0, x0_old, xr

! Set convergence criterion and guess for xl, xr.CC = 1.d-4xl = 8.d-1xr = 11.d-1

! Bisection method.Er =CC +1iteration = 0DO WHILE (Er > CC)

iteration = iteration + 1

! Compute x0 and the error.x0_old = x0x0 = (xl + xr) / 2.d0Er = DABS((x0 - x0_old)/x0)*100.d0WRITE (*,10) iteration, x0_old, x0, Er10 FORMAT (1X,I4,3(2X,E10.4)) this is partial…

Page 10: Oop rosenschein

10

Procedures & Functions – Pascalprogram ValueArg(output);

{Shows how to arrange for a procedure to have arguments.}

procedure PrintInitials(First, Last : char);{Within this procedure, the names First and Last represent the argument values. We’ll call write to print them.}begin

write(‘My initials are: ’);write(First);writeln(Last)

end; {PrintInitials}

beginPrintInitials (‘D’, ‘C’); {Any two characters can be arguments.}PrintInitials (‘Q’, ‘T’); {Like strings, characters are quoted.}PrintInitials (‘&’, ‘#’)

end. {ValueArg}

Page 11: Oop rosenschein

11

Objects (My examples will be from Java)

class Time {

private int hour, minute;

public Time (int h, int m) {hour = h;minute = m;

}

public void addMinutes (int m) { int totalMinutes =

((60*hour) + minute + m) % (24*60); if (totalMinutes<0)

totalMinutes = totalMinutes + (24*60); hour = totalMinutes / 60; minute = totalMinutes % 60;

}

}

this is partial…

Page 12: Oop rosenschein

12

“Intrinsic Power” vs. “Effective Power” This progression is not a matter of “intrinsic power” Anything you can do with a minimally capable

computer language, you can theoretically do with any other minimally capable computer language

But that is like saying a shovel is theoretically as capable as a tractor. In practice, using a shovel might make things very hard…

Page 13: Oop rosenschein

13

Objects

hourminute

void addMinutes( int m )

TimeinTimeAttributes: hour = 8 minute = 30Methods: void addMinutes(int m)

outTimeAttributes: hour = 17 minute = 35Methods: void addMinutes(int m)

class

objects

Page 14: Oop rosenschein

14

Classes and Objects

A class is a prototype for creating objects

When we write a program in an object-oriented language like Java, we define classes, which in turn are used to create objects

A class has a constructor for creating objects

Page 15: Oop rosenschein

15

class Time {

private int hour, minute;

public Time (int h, int m) {hour = h;minute = m;

}

public void addMinutes (int m) { int totalMinutes =

((60*hour) + minute + m) % (24*60); if (totalMinutes<0)

totalMinutes = totalMinutes + (24*60); hour = totalMinutes / 60; minute = totalMinutes % 60;

}

}

A Simple Class, called “Time” (partial)

constructor for Time

Page 16: Oop rosenschein

16

Definition of an “Object”

An object is a computational entity that:1. Encapsulates some state

2. Is able to perform actions, or methods, on this state

3. Communicates with other objects via message passing

Page 17: Oop rosenschein

17

1) Encapsulates some state

Like a record in Pascal, it has a set of variables (of possibly different types) that describe an object’s state

These variables are sometimes called an object’s attributes (or fields, or instance variables, or datamembers, or …)

Page 18: Oop rosenschein

18

Pascal Example: Represent a Time

type TimeTYPE = recordHour: 1..23;

Minute: 0..59;

end;

var inToWork, outFromWork: TimeTYPE;

Page 19: Oop rosenschein

19

Java Example: Represent a Timeclass Time {

private int hour, minute;

public Time (int h, int m) {hour = h;minute = m;

}…

}

Time inToWork = new Time(8, 30);Time outFromWork = new Time(17, 35);

constructor for Time

attributes of Time

Page 20: Oop rosenschein

20

Objects

hourminute

void addMinutes( int m )

TimeinToWork

Attributes: hour = 8 minute = 30Methods: void addMinutes(int m)

outFromWork

Attributes: hour = 17 minute = 35Methods: void addMinutes(int m)

class

objects

Page 21: Oop rosenschein

21

class Time {

private int hour, minute;

public Time (int h, int m) {hour = h;minute = m;

}

public void addMinutes (int m) { int totalMinutes =

((60*hour) + minute + m) % (24*60); if (totalMinutes<0)

totalMinutes = totalMinutes + (24*60); hour = totalMinutes / 60; minute = totalMinutes % 60;

}

}

2) Is able to perform actions, or methods, on this state More than a Pascal record! An object can also include a group of procedures/functions

that carry out actions

a method of Time

Page 22: Oop rosenschein

22

3) Communicates with other objects via message passing Sends messages to objects, triggering

methods in those objects

void

Page 23: Oop rosenschein

23

Example of Object Creationand Message Passing

billAttributes: … Methods: …

Page 24: Oop rosenschein

24

Example of Object Creationand Message Passing

billAttributes: … Methods: …

In one of bill’s methods, the following code appears:Time inToWork = new Time(8, 30);inToWork.addMinutes(15);

Page 25: Oop rosenschein

25

Example of Object Creationand Message Passing

inToWorkAttributes: hour = 8 minute = 30Methods: void addMinutes(int m)

billAttributes: … Methods: …

In one of bill’s methods, the following code appears:Time inToWork = new Time(8, 30);inToWork.addMinutes(15);

Page 26: Oop rosenschein

26

Example of Object Creationand Message Passing

inToWorkAttributes: hour = 8 minute = 30Methods: void addMinutes(int m)

inToWork.addMinutes(15)

billAttributes: … Methods: …

In one of bill’s methods, the following code appears:Time inToWork = new Time(8, 30);inToWork.addMinutes(15);

Page 27: Oop rosenschein

27

Example of Object Creationand Message Passing

inToWorkAttributes: hour = 8 minute = 45Methods: void addMinutes(int m)

billAttributes: … Methods: …

In one of bill’s methods, the following code appears:Time inToWork = new Time(8, 30);inToWork.addMinutes(15);

Page 28: Oop rosenschein

28

Structure of a Class Definition

class name {

declarations

constructor definition(s)

method definitions

}

attributes and symbolic constants

how to create and initialize objects

how to manipulate the state of objectsThese parts of a class can

actually be in any order

Page 29: Oop rosenschein

29

History of Object-Oriented Programming Started out for simulation of complex man-

machine systems, but was soon realized that it was suitable for all complex programming projects

SIMULA I (1962-65) and Simula 67 (1967) were the first two object-oriented languages Developed at the Norwegian Computing Center,

Oslo, Norway by Ole-Johan Dahl and Kristen Nygaard

Simula 67 introduced most of the key concepts of object-oriented programming: objects and classes, subclasses (“inheritance”), virtual procedures

Page 30: Oop rosenschein

30

The Ideas Spread Alan Kay, Adele Goldberg and colleagues at

Xerox PARC extend the ideas of Simula in developing Smalltalk (1970’s) Kay coins the term “object oriented” Smalltalk is first fully object oriented language Grasps that this is a new programming paradigm Integration of graphical user interfaces and

interactive program execution Bjarne Stroustrup develops C++ (1980’s)

Brings object oriented concepts into the C programming language

Page 31: Oop rosenschein

31

Other Object Oriented Languages Eiffel (B. Meyer) CLOS (D. Bobrow, G. Kiczales) SELF (D. Ungar et al.) Java (J. Gosling et al.) BETA (B. Bruun-Kristensen, O. Lehrmann

Madsen, B. Møller-Pedersen, K. Nygaard) Other languages add object dialects, such as

TurboPascal …

Page 32: Oop rosenschein

32

REVIEW: Definition of an “Object” An object is a computational entity that:

Encapsulates some state Is able to perform actions, or methods, on this

state Communicates with other objects via message

passing

Page 33: Oop rosenschein

33

Encapsulation The main point is that by thinking of the

system as composed of independent objects, we keep sub-parts really independent

They communicate only through well-defined message passing

Different groups of programmers can work on different parts of the project, just making sure they comply with an interface

It is possible to build larger systems with less effort

Page 34: Oop rosenschein

34

Advantages

Building the system as a group of interacting objects:

Allows extreme modularity between pieces of the system

May better match the way we (humans) think about the problem

Avoids recoding, increases code-reuse

Page 35: Oop rosenschein

35

But there’s more…

Classes can be arranged in a hierarchy Subclasses inherit attributes and

methods from their parent classes This allows us to organize classes, and

to avoid rewriting code – new classes extend old classes, with little extra work!

Allows for large, structured definitions

Page 36: Oop rosenschein

36

Example of Class Inheritance

extends

extends

toString( )equals( Object obj )getClass( )

Shape

Rectangle

Timeextends

extends

Objects made from this class, for example, have all the attributes and methods of the classes above them, all the way up the tree

Object

Circle Triangleextends

void addMinutes( int m )

hourminute

colorborderWidth

Color getColor( )void setBorderWidth( int m )

int computeArea( )

lengthwidth

int computeArea( )

radius baseheight

int computeArea( )

Page 37: Oop rosenschein

37

Java Class Hierarchy

Page 38: Oop rosenschein

38

Java Class Hierarchy, another view

Page 39: Oop rosenschein

39

Polymorphism An object has “multiple identities”, based on

its class inheritance tree It can be used in different ways

Page 40: Oop rosenschein

40

Polymorphism An object has “multiple identities”, based on

its class inheritance tree It can be used in different ways A Circle is-a Shape is-a Object

toString( )equals( Object obj )getClass( )

Shapeextends

extends

Object

Circle

colorborderWidth

Color getColor( )void setBorderWidth( int m )

int computeArea( )

radius

Page 41: Oop rosenschein

41

Polymorphism An object has “multiple identities”, based on

its class inheritance tree It can be used in different ways A Circle is-a Shape is-a Object

toString( )equals( Object obj )getClass( )

Shapeextends

extends

Object

Circle

colorborderWidth

Color getColor( )void setBorderWidth( int m )

int computeArea( )

radius

Shape

Circle

Object

A Circle object really has 3 parts

Page 42: Oop rosenschein

42

How Objects are CreatedCircle c = new Circle( );

Page 43: Oop rosenschein

43

How Objects are CreatedCircle c = new Circle( );

c

Shape

Circle

Object

1.1.1.1.

Execution Time

Page 44: Oop rosenschein

44

How Objects are CreatedCircle c = new Circle( );

c

Shape

Circle

Object

c

Shape

Circle

Object

1.1.1.1. 2.2.2.2.

Execution Time

Page 45: Oop rosenschein

45

How Objects are CreatedCircle c = new Circle( );

c

Shape

Circle

Object

c

Shape

Circle

Object

c

Shape

Circle

Object

1.1.1.1. 2.2.2.2. 3.3.3.3.

Execution Time

Page 46: Oop rosenschein

46

Three Common Uses for Polymorphism

1. Using Polymorphism in Arrays

2. Using Polymorphism for Method Arguments

3. Using Polymorphism for Method Return Type

Page 47: Oop rosenschein

47

1) Using Polymorphism in Arrays We can declare an array to be filled with “Shape” objects, then put in Rectangles, Circles, or Triangles

extends

toString( )equals( Object obj )getClass( )

Shape

Rectangle

extends

extends

Object

Circle Triangleextends

colorborderWidth

Color getColor( )void setBorderWidth( int m )

int computeArea( )

lengthwidth

int computeArea( )

radius baseheight

int computeArea( )

Page 48: Oop rosenschein

48

1) Using Polymorphism in Arrays We can declare an array to be filled with “Shape” objects, then put in Rectangles, Circles, or Triangles

samples(an arrayof Shapeobjects)

[0] [1] [2]

Page 49: Oop rosenschein

49

1) Using Polymorphism in Arrays We can declare an array to be filled with “Shape” objects, then put in Rectangles, Circles, or Triangles

[0] [1] [2]

[2]

firstShapeAttributes: length = 17 width = 35Methods: int computeArea( )

secondShapeAttributes: radius = 11 Methods: int computeArea( )

thirdShapeAttributes: base = 15 height = 7Methods: int computeArea( )

samples(an arrayof Shapeobjects)

Page 50: Oop rosenschein

50

1) Using Polymorphism in Arrays We can declare an array to be filled with “Shape” objects, then put in Rectangles, Circles, or Triangles

[0] [1] [2]

[2]

firstShapeAttributes: length = 17 width = 35Methods: int computeArea( )

secondShapeAttributes: radius = 11 Methods: int computeArea( )

thirdShapeAttributes: base = 15 height = 7Methods: int computeArea( )

RectangleCircle

Trianglesamples(an arrayof Shapeobjects)

Page 51: Oop rosenschein

51

2) Using Polymorphism for Method Arguments We can create a procedure that has Shape as

the type of its argument, then use it for objects of type Rectangle, Circle, and Triangle

public int calculatePaint (Shape myFigure) {

final int PRICE = 5;

int totalCost = PRICE * myFigure.computeArea( ); return totalCost;}

The actual definition of computeArea( ) is known only at runtime, not compile time – this is “dynamic binding”

Page 52: Oop rosenschein

52

2) Using Polymorphism for Method Arguments Polymorphism give us a powerful way of

writing code that can handle multiple types of objects, in a unified way

public int calculatePaint (Shape myFigure) {

final int PRICE = 5;

int totalCost = PRICE * myFigure.computeArea( ); return totalCost;}

To do this, we need to declare in Shape’s class definition that its subclasses will define the method computeArea( )

Page 53: Oop rosenschein

53

3) Using Polymorphism for Method Return Type We can write general code, leaving the type

of object to be decided at runtime

public Shape createPicture ( ) {

/* Read in choice from user */ System.out.println(“1 for rectangle, ” +

“2 for circle, 3 for triangle:”); SimpleInput sp = new SimpleInput(System.in); int i = sp.readInt( );

if ( i == 1 ) return new Rectangle(17, 35); if ( i == 2 ) return new Circle(11); if ( i == 3 ) return new Triangle(15, 7);}

Page 54: Oop rosenschein

54

Java Convinced Me to Start Teaching Object-Oriented in Intro to CS Java is Object-Oriented from the Ground Up Java has the elegance that comes from being

designed after other OO languages had been in use for many years

Java has strong type checking Java handles its own memory allocation Java’s syntax is “standard” (similar to C and C++) Java is a good teaching language, but it (or

something close) will also be seen by students in industry

Page 55: Oop rosenschein

55

Object-Oriented Programming in Industry

Large projects are routinely programmed using object-oriented languages nowadays

MS-Windows and applications in MS-Office – all developed using object-oriented languages

This is the world into which our students are graduating…

Page 56: Oop rosenschein

56

Conclusions Object-oriented programming provides a superior

way of organizing programming projects It encourages a high degree of modularity in

programming, making large projects easier to implement

It provides powerful techniques like inheritance and polymorphism to help organize and reuse code

Object-oriented languages like Java both provide a good environment for beginning students to learn programming, and match real-world developments in computer programming