Announcements Homework 4 – Robot game is assigned Due NEXT WEEK on Wednesday 26 th November  Start EARLY! Common Questions: Be aware of the flow of the.

Slides:



Advertisements
Similar presentations
Wednesday, 10/2/02, Slide #1 CS 106 Intro to CS 1 Wednesday, 10/2/02  QUESTIONS (on HW02 – due at 5 pm)??  Today:  Review of parameters  Introduction.
Advertisements

Chapter 14: Overloading and Templates
 2006 Pearson Education, Inc. All rights reserved Introduction to Classes and Objects.
1 Programming for Engineers in Python Autumn Lecture 5: Object Oriented Programming.
COMP 110 Introduction to Programming Mr. Joshua Stough October 8, 2007.
Wednesday, 10/9/02, Slide #1 CS 106 Intro to CS 1 Wednesday, 10/9/02  QUESTIONS ??  Today:  Discuss HW #02  Discuss test question types  Review 
Liang, Introduction to Programming with C++, Second Edition, (c) 2010 Pearson Education, Inc. All rights reserved Chapter 9 Objects and Classes.
Chapter Objectives You should be able to describe: Object-Based Programming Classes Constructors Examples Common Programming Errors.
Classes in C++ Bryce Boe 2012/08/15 CS32, Summer 2012 B.
Week 4-5 Java Programming. Loops What is a loop? Loop is code that repeats itself a certain number of times There are two types of loops: For loop Used.
Classes: From Use to Implementation
Chapter 6 Structures and Classes. Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 6-2 Structures  2 nd aggregate data type: struct  Recall:
Announcements Midterm is TOMORROW! On August 2 nd Tuesday at 19:40 (~ 100 minutes) in FENS L045 Today at 14:30-17:30 there is an extra recitation in FENS.
An Introduction to Java Chapter 11 Object-Oriented Application Development: Part I.
Using, Understanding, Updating, Designing and Implementing Classes Chapters 5 (5.4) and partially 6 and 7 in Chapter 6, up to in Chapter 7 concepts.
Programming Principles Chapter 1. Objectives Discuss the program design process. Introduce the Game of Life. Discuss object oriented design. – Information.
DATA STRUCTURES LAB 1 TA: Nouf Al-harbi
Copyright 2004 Scott/Jones Publishing Alternate Version of STARTING OUT WITH C++ 4 th Edition Chapter 7 Structured Data and Classes.
1 Advanced Issues on Classes Part 3 Reference variables (Tapestry pp.581, Horton 176 – 178) Const-reference variables (Horton 176 – 178) object sharing:
Classes: Member Functions and Implementation November 22, 2002 CSE103 - Penn State University Prepared by Doug Hogan.
Classes In C++ 1. What is a class Can make a new type in C++ by declaring a class. A class is an expanded concept of a data structure: instead of holding.
More About Objects and Methods Chapter 5. Outline Programming with Methods Static Methods and Static Variables Designing Methods Overloading Constructors.
C++ Programming Basic Learning Prepared By The Smartpath Information systems
Announcements Midterm1 is on this Tuesday at 19:40. Classrooms as follows: if (LastName
CS201 – Introduction to Computing – Sabancı University 1 First Midterm Exam l November 25, 2006, Saturday, 10:40 – 12:20, max 100 minutes l Exam Places.
Copyright © 2012 Pearson Education, Inc. Chapter 11: Structured Data.
Functions Overview Functions are sequence of statements with its own local variables supports modularity, reduces code duplication Data transfer between.
© 2004 Pearson Addison-Wesley. All rights reserved September 14, 2007 Anatomy of a Method ComS 207: Programming I (in Java) Iowa State University, FALL.
Lecture 10: Modular Programming (functions) B Burlingame 13 April 2015.
Structures and Classes Version 1.0. Topics Structures Classes Writing Structures & Classes Member Functions Class Diagrams.
2 Objectives You should be able to describe: Object-Based Programming Classes Constructors Examples Common Programming Errors.
Chapter 10: Classes and Data Abstraction. Objectives In this chapter, you will: Learn about classes Learn about private, protected, and public members.
EGR 2261 Unit 11 Classes and Data Abstraction  Read Malik, Chapter 10.  Homework #11 and Lab #11 due next week.  Quiz next week.
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 15: Overloading and Templates.
Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved X 1 Chapter 9 Objects and Classes.
1 CSC 222: Computer Programming II Spring 2004  classes and objects  abstract data types, classes and objects  using existing classes, #include, member.
Programming Fundamentals. Topics to be covered Today Recursion Inline Functions Scope and Storage Class A simple class Constructor Destructor.
CS201 – Introduction to Computing – Sabancı University 1 Using, Understanding, Updating, Designing and Implementing Classes l Chapters 5 (5.4) and partially.
A Computer Science Tapestry 6.1 Classes: From Use to Implementation l We’ve used several classes, a class is a collection of objects sharing similar characteristics.
Slide 1 Chapter 6 Structures and Classes. Slide 2 Learning Objectives  Structures  Structure types  Structures as function arguments  Initializing.
Programming in Java (COP 2250) Lecture 10 Chengyong Yang Fall, 2005.
Chapter 10: Classes and Data Abstraction. Classes Object-oriented design (OOD): a problem solving methodology Objects: components of a solution Class:
Extra Recitations Wednesday 19:40-22:30 FENS L055 (tomorrow!) Friday 13:40-16:30 FENS L063 Friday 17: :30 FENS L045 Friday 19:40-22:30 FENS G032.
Object Oriented Paradigm OOP’s. Problems with Structured Programming As programs grow ever larger and more complex, even the structured programming approach.
Announcements HW2 is due on Wednesday this week. HW3 will be assigned this week, will be due next week.
FUNCTIONS (C) KHAERONI, M.SI. OBJECTIVE After this topic, students will be able to understand basic concept of user defined function in C++ to declare.
CSCI 51 Introduction to Programming Dr. Joshua Stough February 26, 2009.
Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved X 1 Chapter 9 Introduction of Object Oriented Programming.
Copyright © 2012 Pearson Education, Inc. Chapter 4 Writing Classes : Review Java Software Solutions Foundations of Program Design Seventh Edition John.
Classes C++ representation of an object
Classes and OOP.
Announcements Homework 5 – Robot game will be assigned this week
Announcements Homework 5 – Robot game will be assigned this week
Structures Revisited what is an aggregate construct? What aggregate constructs have we studied? what is a structure? what is the keyword to define a structure?
Announcements Homework 3 – Robot game will be assigned this Friday
User-Defined Functions
Announcements 2nd homework is due this week Wednesday (October 18)
Announcements Homework 5 – Robot game will be assigned this week
Topics Decomposition Parameter passing Reading and writing from files
Introduction to Classes
Using, Understanding, Updating, Designing and Implementing Classes
Chapter 9 Objects and Classes
Chapter 4 Writing Classes.
Outline Anatomy of a Class Encapsulation Anatomy of a Method
Classes C++ representation of an object
Chapter 9 Introduction To Classes
Classes: From Use to Implementation
四時讀書樂 (春) ~ 翁森 山光照檻水繞廊,舞雩歸詠春風香。 好鳥枝頭亦朋友,落花水面皆文章。 蹉跎莫遣韶光老,人生唯有讀書好。
Classes: From Use to Implementation
Introduction to Computer Science and Object-Oriented Programming
Presentation transcript:

Announcements Homework 4 – Robot game is assigned Due NEXT WEEK on Wednesday 26 th November  Start EARLY! Common Questions: Be aware of the flow of the game, read the document for all details Color of player robot is blue or green (does not matter) The flow of the game will repeat inside a big while loop until the game ends, we call one run of this loop a “turn” in the document: In each turn, one of the monster robots move 1 cell to a random direction while the player robot moves with the pressed arrow key of the user. Monster robots move in order (m1-m2-m3-m1-…) equal number of times. Do not use TurnRight in TurnFace member function Instead Turn the robot to a given direction by updating the private data member directly that you implemented for this HW in recitations Submit ALL files in your project: main.cpp, robot_modified.cpp, robot_modified.h, minifw_modified.cpp, minifw_modified.h, randgen.h and randgen.cpp Use the world.rw file in the homework zip to open an example world. If monsters move very fast, you may slow them down by Sleep(200);

Using, Understanding, Updating, Designing and Implementing Classes Chapters 5 (5.4) and partially 6 and 7 in Chapter 6, up to in Chapter 7 concepts of 7.1 and 7.2 are explained, but different examples are given Robot class implementation details

An Overview of Object Oriented (OO) Programming In OO programming Data and Functions for a specific concept combined together called a “class” gives the general definition provides reusability change the values of data and you end up with different objects with the same functionality can be used by several applications

An Overview of Object Oriented (OO) Programming An example without OO programming - Calendar display program needs several utility functions leap year check day of week function … day day of week month MonthName leap year year Data Functions... I s this structure complex? for some yes, for some no

An Overview of Object Oriented (OO) Programming OO version - Calendar display program Date concept is developed as a class data and functions combined together from the point of view of programmer l Did you like this? for some yes, for some no l OO approach is more suitable for a human being human cognition is mostly based on objects Data (day, month, year) Functions Day of the week Month name …

Using classes (Section 5.4) Another way of looking at OO programming Using only string, int, and double limits the kinds of programs we can write (games, calendars, …) why don’t we have off-the-shelf components for programming? Using object-oriented techniques means we develop new types that correspond to the real-world objects we’re writing code for for example: an online roulette game, chess, pişti, tavla some write for us and we use them off-the-shelf components New types are called classes, variables are called objects User defined classes Tapestry Classes: classes written by Owen Astrachan (author of our book) for educational and practical purposes BigInt and other classes (like Date and Dice ) that we will see Robot class is not a Tapestry class, but it is a user-defined one

The class Dice Computer simulated dice not real dice, but have the same functionality random number between 1 and “number of sides” in this class, we can have dice objects with any number of sides Accessible to client programmers using #include "dice.h" Why are quotes used instead of angle brackets ? Dice objects will work as pseudo-random number generators Not truly random in a strict mathematical sense Still useful to introduce randomness into programs

The class Dice A small class better to show basic implementation details on a small example State number of sides roll count Member functions Dice(int sides); // constructor – constructs a die with given number of sides int Roll(); // return the random roll int NumSides() const; // how many sides int NumRolls() const; // # of times this die rolled

Using the class Dice cout << "rolling " << cube.NumSides() << " sided die" << endl; cout << cube.Roll() << endl; cout << "rolled " << cube.NumRolls() << " times" << endl; member functions Dice cube(6); // construct six-sided die Dice dodeca(12); // construct twelve-sided die See roll.cpp for full program constructor

What you can and cannot do with Dice Cannot define a Dice object without specifying number of sides Not a bug, just a design decision You may modify the class implementation to have a default constructor Dice d(2); // ok, like a coin Dice cube; // NOT ok, won’t compile How random is a Dice object – how can we test this? Calculate number of rolls needed to obtain a target sum repeat this several times and find the average in order to approach to the expected value repeat for all target values between 2 and 12 using two 6-sided dice Any expectations? Needs probability knowledge. See testdice.cpp

Classes: From Use to Implementation (Chapter 6.1) We’ve used several classes A class is a collection of objects sharing similar characteristics A class is a type in C++, like int, bool, double A class encapsulates state and behavior string (this is a standard class), needs #include Objects: "hello", "there are no frogs", … Methods: substr(…), length(…), find(…), operators such as + and << Date needs #include "date.h" Objects: December 7, 1949; November 22, 1963 Some Methods: MonthName(), DayName(), operator - etc.

State and Behavior Behavior of a class is what a class does described in verbs babies eat, cry dice are rolled In OO programming terminology, behavior is defined by public member functions for Dice class, member functions are the Dice constructor, NumRolls(), NumSides() and Roll() State of a class depends on physical properties cars have four wheels, different colors dice have a number of sides In OO programming, State is defined by private data in the header file also called member data, instance variables, or data fields for Dice class, mySides and myRollCount (see dice.h)

Objects An object is an instance of a class When created, in memory a set of private data members are allocated and initialized according to the constructor function In other words, each object has a different state However, objects share member function implementations The same function name is used on all objects of the same class When a member function is called on an object, that object’s private data members are accessed and/or modified

Anatomy of the Dice class The class Dice Objects: 6-sided dice, 32-sided dice, one-sided dice Methods: Roll(), NumSides(), NumRolls() A Dice object has state and behavior Each object has its own state, just like each int has its own value Number of times rolled, number of sides All objects in a class share method (member function) implementations, but access their own state How to respond to NumRolls() ? Return my own # of rolls

The header file dice.h Need #include "dice.h" to use the dice class class Dice { public: Dice(int sides); // constructor int Roll(); // return the random roll int NumSides() const; // how many sides int NumRolls() const; // # times this die rolled private: int myRollCount; // # times die rolled int mySides; // # sides on die }; The compiler reads this header file to know what’s in a Dice object Each Dice object has its own mySides and myRollCount generally initialized by the constructor function

The header file is a class declaration Private data are called instance variables (a.k.a. private data members) each object has its own private data Public functions are called methods, member functions, these are called by client programs All objects of a particular class share the method implementations The header file is an interface, not an implementation Description of behavior, analogy to DVD player Do you know how DVD player operates? You do not mind, just press the button (interface) and watch! Square root button on a calculator, how does it calculate? Do you care? Header file provides information to compiler and to programmers Compiler determines what methods/member functions can be called for the objects of a class Programmer reads header file to determine what methods are available, how to use them and other information about the class

What to know? Client programmer (programmer who uses the classes) needs to know the interface from the header file public member functions and constructors parameters, how they behave does not need to know private data (instance variables) does not need to know how the member functions are implemented just need to know where (in which file) it is implemented in order to include the implementation file in the project As a good programmer who will design and/or update classes, YOU may need to know about the class implementations

From interface to use, the class Dice #include "dice.h" int main() { Dice cube(6); Dice dodeca(12); cout << cube.Roll(); int k; for(k=0; k < 6; k++) { cout << dodeca.Roll(); } return 0; } Objects constructed 0 myRollCount mySides 6 cube 0 myRollCount mySides 12 dodeca Method invoked 1 myRollCount mySides 6 cube After for loop 6 myRollCount mySides 12 dodeca

From Interface to Implementation The header file provides compiler and programmer information about how to use a class, but no information about how the class is implemented Important separation of concepts use without complete understanding of implementation Implementation file is a cpp file with no main function member function and constructor bodies are given sometimes some other functions are also given

Implementation: the.cpp file In the implementation file we see all member functions written, similar idea as the functions we’ve seen so far Each function has a name, parameter list, and return type A member function’s name includes its class name return_type class_name :: function_name (parameters) A constructor is a special member function for initializing an object, constructors have no return type class_name :: class_name (parameters) :: is the scope resolution operator specifies the class of the function Each method can access private data members of an object (the object on which this member function will operate) This way, at each invocation, member function can access different objects’ private data cube.NumSides() compared to dodeca.NumSides() dot operator. is used when a member function is called

dice.cpp (Implementation file) – 1/2 Dice::Dice(int sides) // postcondition: all private fields initialized { myRollCount = 0; mySides = sides; } int Dice::NumSides() const // postcondition: return # of sides of die { return mySides; } Constructor

dice.cpp (Implementation file) – 2/2 int Dice::NumRolls() const // postcondition: return # of times die has been rolled { return myRollCount; } int Dice::Roll() // postcondition: number of rolls updated // random 'die' roll returned { RandGen gen; // random number generator myRollCount= myRollCount + 1; // update # of rolls return gen.RandInt(1,mySides); // in range [1..mySides] }

Understanding Class Implementations Private data members are global such that they are accessible by all class member functions e.g. in the implementation of Roll function, mySides and myRollCount are not defined, but used

Understanding Class Implementations Constructors should assign values to each instance variable this is what construction is not a rule, but a general programming style

Understanding Class Implementations Methods (member functions) can be broadly categorized as accessors or mutators Accessor methods may access information about an object but do not change the state (private data members) Dice::NumRolls() and Dice::NumSides() are accessor methods since they do not change the private data members Mutator methods change the state of an object Dice::Roll (), since it changes an object’s myRollCount

Class Implementation Heuristics All data should be private Provide accessor and mutator member functions as needed Make accessor functions const by putting const after all parameters in both class definition (header file) and class implementation A const function cannot modify the state of an object precaution against poor implementations compilers do not allow to update private data in const functions int Dice::NumSides() const // postcondition: return # of sides of die { return mySides; }

The class Date The class Date is accessible to client programmers #include "date.h" to get access to the class The compiler needs this information. It may also contain documentation for the programmer Link the implementation in date.cpp Add this cpp to your project The class Date models a calendar date: Month, day, and year make up the state of a Date object Dates can be printed, compared to each other, day-of-week determined, # days in month determined, many other behaviors Behaviors are called methods or member functions

Constructing Date objects – see usedate.cpp Date today; Date republic(10,29,1923); Date million( ); Date y2k(1,1,2000); cout << "today: " << today << endl; cout << "Republic of Turkey has been founded on: " << republic << endl; cout << "millionth day: " << million << endl; OUTPUT today: April Republic of Turkey has been founded on: October millionth day: November

Constructing/defining an object Date objects (as all other objects) are constructed when they’re first defined Three ways to construct a Date default constructor, no params, initialized to today’s date single long int parameter, number of days from January 1, 1 three params: month, day, year (in this order). Constructors for Date objects look like function calls constructor is special member function Different parameter lists mean different constructors Once constructed, there are many ways to manipulate a Date Increment it using ++, subtract an integer from it using -, print it using cout, … MonthName(), DayName(), DaysIn(), … See date.h for more info on date constructors and member functions

Date Member Functions Date MidtermExam(12,1,2014); Construct a Date object given month, day, year MidtermExam.DayName() Returns the name of the day (“Monday” or “Tuesday”, or...) in this particular case, returns “Monday” since December 1, 2014 is a Monday MidtermExam.DaysIn() Returns the number of days in the particular month in our case return 31, since December 2014 has 31 days in it Add, subtract, increment, decrement days from a date Date GradesDue = MidtermExam + 9; GradesDue is December 10, 2014 Let’s see usedate.cpp in full and datedemo.cpp now

Example: Father’s day (not in book) Father’s day is the third Sunday of June write a function that returns the date for the father’s day of a given year which is the parameter of the function In main, input two years and display father’s days between those years Date fathersday(int year) // post: returns fathers day of year { Date d(6,1,year); // June 1 while (d.DayName() != "Sunday") { d += 1; } //d is now the first Sunday, 3rd is 14 days later return d + 14; } See fathersday.cpp for full program

What if there were no date class? It would be very cumbersome to deal with dates without a date class imagine banking applications where each transaction has associated date fields Classes simplify programming they are designed and tested. then they can be used by programmers You are lucky if you can find ready-to-use classes for your needs otherwise ???

Updating a Class (not in book) Suppose you want to add more functionality to the date class need to change the header file (date.h) need to add implementation of new function(s) to date.cpp Example: a new member function to calculate and return the remaining number of days in the object’s month any ideas? do you think it is too difficult? have a look at the existing member functions and see if they are useful for you

Updating a Class (not in book) We can make use of DaysIn member function Prototype in Date class (add to the header file) int RemainingDays () const; Implementation int Date::RemainingDays () const { return DaysIn() - myDay; } In a member function implementation private data and other member functions referred without the dot operator. They operate on the object for which the member function is called