a gentle introduction to ( object-oriented) programming ugur dogrusoz associate professor, computer...

Post on 14-Dec-2015

225 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

A Gentle Introduction to

(Object-Oriented) Programming

Ugur DogrusozAssociate Professor, Computer Eng Dept,Bilkent University, Ankara, Turkey

December 2011 Computer Eng Dept, Bilkent Univ

2

Computer hardware

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

Memory

Output Devices

Input Devices

Hard disk

ALU

Control Unit

Memory

Registers Cache

CPU

3

Computer software

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

Operating System

Hardware

Application Programs

User

Source file

ADDF3 R1,R2, R3noStudents++;

Executable file

11000101011000100011101001

1

Compiler / Linker

Specific computer

Specific JVM

Java Bytecode

4

How does a program work

A program tells a computer what to do, step by step, to get it to do something useful

Computers’ power comes from (nothing more than) Accuracy Speed

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

5

Programming languages

Machine Code 101110101… Lowest level: most efficient but (almost) humanly

impossible to directly deal with

Assembly Language ADDF3 R1,R2, R3

Compiler / Interpreter Language noStudents++ Highest level: easier for humans to express their

instructions in

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

6

Object-oriented (OO) prog. languagesAs opposed to procedural / functional /

imperative approachHigh level general purpose prog. languagesEach object (modeled after its real-life equivalent) has

certain properties and responsibilitiesAbstraction, encapsulation, polymorphism,

reuse, maintenanceOO software = interacting collection of objects

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

7

OOP basics: memory

When a program is loaded into memory for execution:

Heap segment

Stack segment

Text (code) segment

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

Memory

Heap

Stack

Static dataCode

myObj = new Object();

int i = 9;

8

OOP basics: memory

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

class Node { Object data; Node next;}

class List { private Node first; public Object getFirst() {return(first.data);} public void insertFront(Object newElement) { ... } public void insertRear(Object newElement) { ... } public void delete(Object existingElement) { ... }}

… main(…) { List myList = new List(); Integer i = new Integer(5); myList.insertFront(i); myList.insertRear(new Integer(8);}

9

OOP basics: memory

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

class Node { Object data; Node next;}

class List { private Node first; public Object getFirst() {return(first.data);} public void insertFront(Object newElement) { ... } public void insertRear(Object newElement) { ... } public void delete(Object existingElement) { ... }}

… main(…) { List myList = new List();

}

myList

first: null List

null123 List

123456 myList

1

23

Heap

Stack

10

OOP basics: memory

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

class Node { Object data; Node next;}

class List { private Node first; public Object getFirst() {return(first.data);} public void insertFront(Object newElement) { ... } public void insertRear(Object newElement) { ... } public void delete(Object existingElement) { ... }}

… main(…) { List myList = new List(); Integer i = new Integer(5); } myList

first: null List

i

value: 5 Integer

11

OOP basics: memory

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

class Node { Object data; Node next;}

class List { private Node first; public Object getFirst() {return(first.data);} public void insertFront(Object newElement) { ... } public void insertRear(Object newElement) { ... } public void delete(Object existingElement) { ... }}

… main(…) { List myList = new List(); Integer i = new Integer(5); myList.insertFront(i); }myList

first Listi

value: 5 Integer

datanext: null Node

12

OOP basics: memory

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

class Node { Object data; Node next;}

class List { private Node first; public Object getFirst() {return(first.data);} public void insertFront(Object newElement) { ... } public void insertRear(Object newElement) { ... } public void delete(Object existingElement) { ... }}

… main(…) { List myList = new List(); Integer i = new Integer(5); myList.insertFront(i); myList.insertRear(new Integer(8);}

myList

first Listi

value: 5 Integer

datanext Node

datanext: null Node

value: 8 Integer

13

OOP basics: encapsulation/info hidingExpose only what’s necessaryHide implementation details

Unnecessary information should not be visible or modifiable

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

14

OOP basics: encapsulation/info hiding

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

class MyRectangle { private double width; private double height; private Point leftTop;

public double getWidth(){ return width; } public void setWidth(double width){this.width=width;} public void translate(double deltaX, double deltaY){…}}

class MyRectangle { private Rectangle rect;

public double getWidth(){ return rect.getWidth(); } public void setWidth(double width){ rect.setSize(width, rect.getHeight()); } public void translate(double deltaX, double deltaY){…}}

Implementation details hidden

Proper class interface

Implementation changed

Class interface unchanged

15

OOP basics: reuse (inherit. & compo.)Two main forms of re-use in software eng.:

Inheritance: ask whether instance of sub-class is-a(n) instance of super-class

Composition: ask whether whole has-a(n) part makes sense

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

16

OOP basics: reuse (inherit. & compo.)

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

List

+getFirst()+insertFront(Object)+insertRear(Object)

+delete()

IncrStringStack

+push(String)

void push(Object newElement) { elements.insertFront(newElement);}

Stack

+top()+push(Object)

+pop()elements

StringStack

+top()+push(String)

+pop()elements

void push(String newString) { elements.push(newString);}

void push(String newString) { String top = getTop(); if (top==null || newString.compareTo(top)>0) super.push(newString);}

Reuse through Delegation

String pop() { (String)(elements.pop());}

17

OOP basics: polymorphism

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

Entries in this file system are either files or folders or links to other entries

Files contain textSingle root

18

OOP basics: polymorphism

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

public File search(String aString) { if (!this.isBroken()) return this.linkTo.search(aString); return null;}

public File search(String aString) { if (this.contents.indexOf(aString) >= 0) return this; return null;}

public File search(String aString) { for (Entry anEntry : this.entries) { File aFile = anEntry.search(aString); if (aFile != null) return aFile; } return null;}

Abstract methods needed for

polymorphic use

Overriden insub-classes for

specific behavior

Composite Design Pattern

Example use of polymorphism

19

References

OOSE, Using UML, Patterns, and Java, 3rd Edition by Bernd Bruegge and Allen H. Dutoit, Prentice-Hall, 2010

Java Software Solutions, Foundations of Program Design by John Lewis and William Loftus, Addison-Wesley, 1998

Wikipedia, http://en.wikipedia.org

Ugur Dogrusoz Computer Eng Dept, Bilkent Univ

top related