46-699 object-oriented programming andrew.cmu/course/46-699

32
46-699 Object-oriented Programming www.andrew.cmu.edu/course/46-699/ Ananda Guna May 17, 1999 - Lecture #1 guna@ cs.cmu.edu School of Computer Science Carnegie Mellon University

Upload: eliza

Post on 11-Jan-2016

35 views

Category:

Documents


4 download

DESCRIPTION

46-699 Object-oriented Programming www.andrew.cmu.edu/course/46-699/. Ananda Guna May 17, 1999 - Lecture #1. guna@ cs.cmu.edu School of Computer Science Carnegie Mellon University. Administrivia. Web page, schedule, text TA’s: Ramu Arunachalam(Pgh) and TBA (NYC) Due dates Final exam - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 46-699  Object-oriented Programming andrew.cmu/course/46-699

46-699 Object-oriented Programmingwww.andrew.cmu.edu/course/46-699/

Ananda GunaMay 17, 1999 - Lecture #1

guna@ cs.cmu.eduSchool of Computer ScienceCarnegie Mellon University

Page 2: 46-699  Object-oriented Programming andrew.cmu/course/46-699

2

Administrivia

Web page, schedule, text TA’s: Ramu Arunachalam(Pgh) and TBA (NYC) Due dates Final exam Recitation hours Software

– MSVC++ (5.0)– Metrowerks Codewarrior – Any other compiler e.g. Borland– g++

Page 3: 46-699  Object-oriented Programming andrew.cmu/course/46-699

3

C++: Language Background

Designed “on top of” C– C plus OOP features, hence the name C++

Implications– Almost all of the C features still work– Some features were simplified, notably the I/O– Many people claim to program in C++, but never

really use its OOP features - also called “a better C”

– Most compilers support C/C++ The challenge of learning C++ is in the paradigm

shift Java is based on C++

Page 4: 46-699  Object-oriented Programming andrew.cmu/course/46-699

4

Review

Variables Data types

– Primitives: int, double, float, char... Conditionals (if, if-else, switch) Repetition (for, while loops) General structure of a C program Functions

– Prototypes– Arguments/parameters– Call by value

Page 5: 46-699  Object-oriented Programming andrew.cmu/course/46-699

5

Review

All variables must be declared before use– Must specify the type of your variable – Compiler allocates memory – e.g. int count=0; float num1= 0.0, num2 = 0.0;– Always initialize your variables or they contain

garbage Conditionals: Used to control execution

– if– if-else, nested if– switch

Page 6: 46-699  Object-oriented Programming andrew.cmu/course/46-699

6

Conditionals if ( boolean condition true){ if(( boolean condition true){

statements; if (boolean condition true){

} ...

}

} if ( boolean condition true){ if ( boolean condition true){

statements; statement

} else { } else if (boolean condition true){

statements; statements;

} } else if (...)

switch(varName){ //int varName

case 1: statements;

break; // REQUIRED

case 2,3,4: statements;

break; // REQUIRED

default: debug statement;

}

Page 7: 46-699  Object-oriented Programming andrew.cmu/course/46-699

7

Repetition

Loops– for: Used when we know the # iterations– while: We don’t know the exact # iterations, but we

know the exit condition– do while: Executes the loop body at least once, test is at the

bottom

for ( i=0; i< MAX; i++){

//loop body statements;

} while (i < MAX){ // assume i is initialized

//loop body statements; //Be sure to update loop control variable

} do while{

//loop body statements; // Be sure to update loop control variable

} while (i < MAX);

Page 8: 46-699  Object-oriented Programming andrew.cmu/course/46-699

8

Functions

Units or modules within a program Each performs a specific task Allow for cleaner programs, promote reuse. May be

– system-defined. E.g. the math library functions– User defined tailored to the application

Must be called or invoked to be executed Prototypes are optional if the function implementations

appear before the function call. However, it is good style to use function prototypes

Can pass arguments to each other Can return a value upon exit(Single return functions)

Page 9: 46-699  Object-oriented Programming andrew.cmu/course/46-699

9

Scope of a variable

The segment of the program where it can be “seen” A local variable’s scope is the block within which it

is declared plus any nested blocks A global variable’s scope is the entire program Lifetime of variables:

– Locals die upon exit of a function– Globals are “alive” throughout the “life” of the

program It is bad style to use global varibles. Why? Global constants are fine. Why?

– E.g. const int MAX = 10; // same as #define in C

Page 10: 46-699  Object-oriented Programming andrew.cmu/course/46-699

10

Passing Arguments/parameters

Call by value:– A copy of the variable is passed

Call by reference:– The address of the variable is passed– The called function has direct access to the

variable Arguments

– Must match in number– Must match in type– The names do not matter, what matters is the

order of the arguments, i.e. the first is mapped to the first and so on

Page 11: 46-699  Object-oriented Programming andrew.cmu/course/46-699

11

Call by value example

void print ( int x, float y){

cout << x << “ “ << y << endl;

}

int

main(){

int x = 10;

float y= 22.7;

print(x, y);

return 0;

}

// What will be the output for print(y,x)?

10

22.7

10 22.7

Page 12: 46-699  Object-oriented Programming andrew.cmu/course/46-699

12

Call by reference example

void swap ( int& a, int& b){ // the addresses are passed

int temp;

temp = a;

a = b; // change a ==> change x

b = temp; // change b ==> change y

cout << a << “ “ << b << endl;

}

int

main(){

int x = 7;

int y= 55;

swap(x, y); // Note: NO & is required here unlike C

cout << x << “ “ << y << endl;

return 0;

}

x y557

Page 13: 46-699  Object-oriented Programming andrew.cmu/course/46-699

13

Arrays

Group/collection of memory cells Each cell must be of the same type Declaring an array in C++:

– const int MAX = 30; // #define in C– float stocksPrices[MAX];

[0] [1] [MAX - 1]

- Subscript/index begins at zero- stocksPrices[0] is the first element- Every element is of type float

98.30 51.5

Page 14: 46-699  Object-oriented Programming andrew.cmu/course/46-699

14

Passing arrays as arguments

void multArray(float arr[], int count){

// no & for array arguments - as in C

int i;

for ( i = 0; i < count; i++){

arr[i] *= 10.2; // change to the original array

}

return sum;

} //multArray

// function call

multArray(arr, count); // assume arr has been loaded

// count is the # items in the arraycout << "\narr[0] ” << setiosflags(ios :: fixed|ios ::showpoint)

<< setw(10) << setprecision(2)<< arr[0];

//output with two decimal places

// need #include <iomanip>

Page 15: 46-699  Object-oriented Programming andrew.cmu/course/46-699

15

const array arguments

void multArray(const float arr[], int count){

// no & for array arguments - as in C

int i;

for ( i = 0; i < count; i++){

arr[i] *= 10.2; // change to the original array

}

} //multArray

const means the function can use, but may not change the array

The above will throw a compile error - at which line? Use const to protect against accidently changing the array

values– Printing the contents of an array– Using the array to do some computation

Page 16: 46-699  Object-oriented Programming andrew.cmu/course/46-699

16

Input/output in C++

To read from the console: cin– cin >> varName; // read into this variable– cin >> varName1 >> varName2;

– >> is called the stream extraction operator To print to the console

– cout << varName; // dump contents of varName– cout << varName1 << varName2 << endl;– cout << varName1 + varName2 << “\n”;

– << is called the stream insertion operator– endl: end of line (newline plus flush the output buffer)

Much simpler and cleaner than C! Sample program

Page 17: 46-699  Object-oriented Programming andrew.cmu/course/46-699

17

File I/O in C++

Sequential Access Files - input– programmer must create/recognize structure– ifstream infile(filename, ios::in)– if (!infile) { cerr<<“File cannot be open”;– exit(1);}– infile >> date >> maxprice >> minprice >> close;

File output– ofstream outfile(filename, ios::out)– outfile << varName1 << varName2 << endl;– if no file then a file is created

– << is called the stream insertion operator– >> is called the stream extraction operator

Much simpler and cleaner than C!

Page 18: 46-699  Object-oriented Programming andrew.cmu/course/46-699

18

File I/O in C++ ctd...

ifstream infile(“infile.txt”); is ok too ofstream outfile(“outfile.out”) is ok too In each case object constructor is called logical file physical file alternative style

– ofstream outfile;– outfile.open(“filename”,ios::out);

Reading a file of data to eof– while (infile>>var1>>var2…) { process}– while (!infile.eof()) { infile>>var1>>var2>>…}

Page 19: 46-699  Object-oriented Programming andrew.cmu/course/46-699

19

File I/O in C++ ctd...

You may use #include “Openfile.h” utility ifstream infile; OpenFileForReading(“Enter input file “ , infile); ofstream outfile; OpenFileForWriting(“Outfile ? “ , outfile); infile.close(); outfile.close(); // explicit close File stream is also destroyed upon leaving the

scope.

Page 20: 46-699  Object-oriented Programming andrew.cmu/course/46-699

20

Problem Solving Process

Review:– Algorithm– Top-down design, stepwise refinement– Pseudocode– Flow Chart

Phases of software development– Planning: figuring out the problem specs– Design: the algorithm, use pseudocode etc – Code: Translate the design into C++/Java syntax– Code review: “Spell-check” your code. Simulate the

compiler looking for syntax errors– Compile: With a thorough code review, compile time is small– Test/debug

Page 21: 46-699  Object-oriented Programming andrew.cmu/course/46-699

21

System Costs: Hardware vs. Software*

100%

1950 2000

Software

Hardware

PercentSystemCost

Year

* courtesy R.Pattis

Page 22: 46-699  Object-oriented Programming andrew.cmu/course/46-699

22

Motivation for Design before Coding

Analogy: Think about how you write a paper– Problem Statement? Outline? Abstract? Fill in details

based on the outline? Refine sections/paragraphs? How do you proof your paper? Do you just type something and watch the spell-checker or do you print it out and read it for errors?

Your solution is only as good as your design Coding should be low priority compared to design If you take short cuts, you will end up spending a lot

more time on the program. Bottom Line: There is nothing mysterious about

coding!!!

Page 23: 46-699  Object-oriented Programming andrew.cmu/course/46-699

23

OOP Versus Non-OOP

Procedural programming OOP

- Identify tasks/sub-tasks - Design the classes- Write procedures - Design the methods- Procedures act upon data - Objects communicate to solve to solve the problem the problem- Start with “verbs” - Start with “nouns”- Data is secondary - Data is primary

Page 24: 46-699  Object-oriented Programming andrew.cmu/course/46-699

24

Problem Solving - OO Design

Identify the objects Identify the operations Design the algorithm/decompose into smaller chunks E.g: Compute the amount of tuition to be paid Name the objects

– # credit hours– cost per credit hour– Other costs, such as student activity fee etc– Any discounts

Name the operations to be performed:– Addition, subtraction, multiplication

Algorithm

Page 25: 46-699  Object-oriented Programming andrew.cmu/course/46-699

25

Key Elements of OOP

Abstraction: Focus on the important, ignore the details– e.g. Driving a car

» The interface of the car is what the driver sees on the outside, i.e. the dash board, the gas pedal and so on.

» The implementation is a detail, e.g. what exactly happens when I step on the gas pedal.

Encapsulation: Information hiding– The details of an object are hidden. – Users are not allowed to make changes to the

implementation.– If there is any change in the implementation, it does not

affect the users(clients) of the interface. – E.g. A Stack Class has as its interface: init, push, pop. The

implementation may be changed from an array to a linked list

Page 26: 46-699  Object-oriented Programming andrew.cmu/course/46-699

26

Key Elements of OOP

Inheritance– Building upon what is already defined– A class can inherit from another class much like a

child inherits from its parent

Polymorphism– Greek for “many shapes”– Same name for different things– Two forms in OOP

» Overloading: Functions with the same name» Over-riding: A child class redefining its parent’s

functions

Page 27: 46-699  Object-oriented Programming andrew.cmu/course/46-699

27

OOP Terminology

Program = objects cooperating to solve a problem

Properties of an object:

» State ==> data ==> nouns» Operations ==> behavior ==> verbs» Identity

Page 28: 46-699  Object-oriented Programming andrew.cmu/course/46-699

28

Object Examples

Example 1: An electronic mailbox

» States: full or empty» Operations: add, delete ...» Identity: any 2 mailboxes will be different

e.g. hou and aj29 each have a mail box

Example 2: traffic signal

Page 29: 46-699  Object-oriented Programming andrew.cmu/course/46-699

29

Object Components

An object is composed of both data and Operations which can act upon the data

Data

Operations

In a C++ object: Operations ==> member functions (methods) Data ==> data members

Page 30: 46-699  Object-oriented Programming andrew.cmu/course/46-699

30

Classes

Class:– A collection of related objects. – Instance of a class = object– Factory with blueprints/instructions to build gadgets– Objects: the gadgets the factory makes.

Example:– Class : checkingaccount– Objects: minnieCheckacct, mickeyCheckacct

Page 31: 46-699  Object-oriented Programming andrew.cmu/course/46-699

31

Example: OOP Design

Problem: write a program to simulate an ATM Data (nouns):

– Account name– Account balance– ...

Operations /behavior(verbs):

– Deposit

– Withdraw

– Inquire balance

– ...

Page 32: 46-699  Object-oriented Programming andrew.cmu/course/46-699

32

Problem ( Elevator Control Problem)

Simulation of an elevator control system. 20 floors , 4 elevators1. Identify the data objects2. Identify the data operations3. Solve the problem

Read Chapter 6-7 (Dietel Text) Any questions Email : [email protected]