Classes and Objects 2nd Lecture

Slides:



Advertisements
Similar presentations
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Immutable Objects and Classes.
Advertisements

Chapter 4 Defining Classes I Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Information Hiding and Encapsulation
Encapsulation CMSC 202. Types of Programmers Class programmers – Developers of new classes – Goal: Expose the minimum interface necessary to use a new.
Writing Classes You have already used classes –String, Random, Scanner, Math, Graphics, etc –To use a class: import the class or the package containing.
P Chapter 2 introduces Object Oriented Programming. p OOP is a relatively new approach to programming which supports the creation of new data types and.
JAVA Classes Review. Definitions Class – a description of the attributes and behavior of a set of computational objects Constructor – a method that is.
Topic 1 Object Oriented Programming. 1-2 Objectives To review the concepts and terminology of object-oriented programming To discuss some features of.
CMSC 202 Classes and Objects: The Basics. Version 9/09 2 Programming & Abstraction All programming languages provide some form of abstraction. –Also called.
CMSC 202 Advanced Section Classes and Objects: Object Creation and Constructors.
CMSC 202 Java Classes and Object 2nd Lecture. Aug 6, Stack and Heap When your program is running, some memory is used to store local variables.
CMSC 202 CMSC 202, Advanced Section Classes and Objects In Java.
Defining Classes I Part B. Information hiding & encapsulation separate how to use the class from the implementation details separate how to use the class.
AP Java Ch. 4 Review Question 1  Java methods can return only primitive types (int, double, boolean, etc).
CMSC 202 Classes and Objects. Aug 6, Programming Languages All programming languages provide some form of abstraction Procedural language (eg C)
Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 6-1 Learning Objectives  Classes  Constructors  Principles of OOP  Class type member.
Chapter 4 Defining Classes I Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights reserved.
CMSC 202 Polymorphism 2 nd Lecture. Aug 6, Topics Constructors and polymorphism The clone method Abstract methods Abstract classes.
CSIS 123A Lecture 1 Intro To Classes Glenn Stevenson CSIS 113A MSJC.
Structures and Classes
Chapter 10 Thinking in Objects
Classes and Objects: Encapsulation
Chapter 10 Thinking in Objects
Chapter 10 Thinking in Objects
Auburn University COMP 3000 Object-Oriented Programming for Engineers and Scientists Constructors and Other Tools Dr.
10.2 Classes Copyright © 2008 Pearson Addison-Wesley. All rights reserved. 1.
Polymorphism 2nd Lecture
Polymorphism 2nd Lecture
Chapter 3: Using Methods, Classes, and Objects
Methods The real power of an object-oriented programming language takes place when you start to manipulate objects. A method defines an action that allows.
CMSC 202 Static Methods.
CMSC 202 Composition.
Classes and Objects: Encapsulation
Inheritance 2nd Lecture
Chapter 9 Thinking in Objects
Classes and Objects Encapsulation
Polymorphism 2nd Lecture
Defining Classes and Methods
Chapter 6 Methods: A Deeper Look
slides created by Ethan Apter
CMSC 202 Polymorphism.
Inheritance 2nd Lecture
Slides by Steve Armstrong LeTourneau University Longview, TX
Fall 2018 CISC124 12/3/2018 CISC124 or talk to your grader with questions about assignment grading. Fall 2018 CISC124 - Prof. McLeod Prof. Alan McLeod.
Classes and Objects 5th Lecture
Learning Objectives Classes Constructors Principles of OOP
Java Classes and Objects 3rd Lecture
Defining Classes I Part A.
slides created by Ethan Apter
Chapter 9 Thinking in Objects
Inheritance 2nd Lecture
Defining Classes and Methods
Java Classes and Objects
CMSC 202 Classes and Objects.
CMSC 202 Interfaces.
Chapter 4 Defining Classes I
Classes and Objects Static Methods
Defining Classes and Methods
Classes, Objects and Methods
OO Programming Concepts
Classes and Objects Reusing Classes with Composition
CMSC 202 Lesson 8 Classes II.
Information Hiding and Encapsulation Section 4.2
slides created by Ethan Apter and Marty Stepp
CMPE212 – Reminders Assignment 2 due next Friday.
CMSC 202 Encapsulation Version 9/10.
CMSC 202 Inheritance II.
CMSC 202 Exceptions.
Classes and Objects Object Creation
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Classes and Objects 2nd Lecture CMSC 202 Classes and Objects 2nd Lecture

Visibility of instance variables and methods Topics OOP techniques encapsulation data hiding Visibility of instance variables and methods public private Accessor and mutator methods Preconditions and postconditions Method overloading February 2008

OOP Techniques Encapsulation Abstraction Information hiding Combines data and operations into a single entity (a class) Abstraction Discarding details Information hiding A form of abstraction Separating the description of how to use a class from the details of the class’ implementation February 2008

The Value of Information Hiding With information hiding: programmers that use a class do not need to know how the class is implemented, only how to use it, the information the programmer needs to use the class is kept to a minimum, and class implementation may be changed with no impact on those who use the class. February 2008

Date2 Class public class Date2 { In this new date class, the instance variables have been labeled private. public class Date2 { private String month; private int day; private int year; public void print( ) System.out.println(month + “ “ + day + “ “ + year); } // setDate and monthString included A method may use the class’ private instance variables February 2008

Visibility Modifiers public class Date2Demo { Date1 class - public instance variables were used Date2 class - private instance variables are now used public class Date2Demo { public static void main( String[ ] args ) { Date2 myDate = new Date2( ); myDate.month = “July”; // compiler error myDate.day = 4; // compiler error myDate.year = 1950; // compiler error myDate.setDate( 7, 4, 1950 ); // OK – why? myDate.print( ); // OK – why? } February 2008

Private Instance Variables Good programming practice: Label all instance variables as private. The class has complete control over how/when/if the instance variables are changed. How are private instance variables accessed or modified? Accessor and mutator methods give the class user indirect access to the instance variables degree of access is still controlled by the class implementer February 2008

Accessors & Mutator Accessor method Mutator method retrieves the value of a private instance variable conventional to start the name with get Mutator method changes the value of a private instance variable conventional to start the name of an with set February 2008

More Accessors and Mutators Question: Don’t the use of accessors and mutators defeat the purpose of making the instance variable private? Answer: No. The class implementer decides which instance variables will have accessors. Mutators can: validate the new value of the instance variable, and decide whether or not to actually make the requested change. February 2008

Copyright © 2008 Pearson Addison-Wesley. Encapsulation February 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 10

Date2 Accessor and Mutator public class Date2 { private String month; private int day; // 1 - 31 private int year; // 4-digit year // accessors return the value of private data public int getDay ( ) { return day; } // mutators can validate the new value public boolean setYear( int newYear ) { if ( newYear < 1000 || newYear > 9999 ) // this is an invalid year return false; } else year = newYear; return true; // rest of class definition follows February 2008

Other Methods Classes can provide many methods besides accessors and mutators. Clear communication with the class user is of paramount importance so that he can use the appropriate method, and use class methods properly. Method comments: explain what the method does, and describe how to use the method. Two important types of method comments: precondition comments post-conditions comments February 2008

Preconditions and Postconditions What is assumed to be true when a method is called If any pre-condition is not met, the method cannot correctly perform its function. Postcondition Describes the effect of the method States what will be true after the method executes (assuming all pre-conditions are met) February 2008

<month string> <day>, <year> A Simple Example Recall the print method from Date2 that outputs the month string, day, and year to the screen. The print method might look something like this: /* PreCondition:none PostCondition: The calling object has been written to the screen in the format <month string> <day>, <year> */ public void print( ) { // code here } February 2008

Another Common Example Very often the precondition specifies the limits of the parameters and the postcondition says something about the return value. /* Pre-condition: 1 <= month <= 12 day appropriate for the month 1000 <= year <= 9999 Post-condition: The month, day, and year of the calling object have been set to the parameter values. Returns true if the calling object has been changed Returns false otherwise */ public boolean setDate( int month, int day, int year) { // code here } February 2008

What’s in a name? Many different classes can define a method with the same name (e.g. print). Java can determine which method to call based on the type of the calling object. Consider this code snippet: Date2 birthday = new Date2(); Dog fido = new Dog( ); birthday.print( ); fido.print( ); birthday.print( ) will call the print( ) method defined in the Date2 class. fido.print( ) will call the print( ) method defined in the Dog class. February 2008

toString One method which should be implemented for all classes is toString. public String toString( ) The toString method returns a String chosen by the class implementer. The string typically contains the values of important instance variables in a readable format. This method is very often used for outputting the “contents” of a class. February 2008

Method Overloading Two or more methods in the same class may have the same name. This technique is known as method overloading. February 2008

public boolean setDate( int month, int day, int year ) Overloaded setDate The Date2 class setDate method: public boolean setDate( int month, int day, int year ) But suppose we wanted to change only the day and year? We can define another method named setDate like this: public boolean setDate( int day, int year ) (after all, setDate is a good descriptive name for what this method does) February 2008

Date3 Class with Overloaded setDate Method public class Date3 { private String month; private int day; // 1 - 31 private int year; // 4 digits public boolean setDate( int newMonth, int newDay, int newYear ) // code here } public boolean setDate( int newDay, int newYear ); // code here, doesn’t change month // print(), monthString( ), setYear( ), etc. follow February 2008

Date3Demo Class How does Java know which setDate method to call? public class Date3Demo { public static void main (String[ ] args) Date3 myDate = new Date3( ); myDate.setDate( 1, 23, 1982 ); myDate.print( ); myDate.setDate( 4, 1999 ); } How does Java know which setDate method to call? February 2008

Method Signature In Java (and other OO languages), a method is uniquely identified by its name and its parameter list (parameter types and their order). This is known as its signature. Examples: public boolean setDate(int newMonth, int newDay, int newYear) public boolean setDate(String newMonth, int newDay, int newYear) public boolean setDate(int newDay, int newYear) public boolean setDate(int newDay, String newMonth) February 2008

Return Type is Not Enough Suppose we attempt to overload Date3’s print( ) method by using different return types. public void print( ) { /* code here */ } public boolean print( ) { /* code here */ } This is NOT valid method overloading because the code that calls print( ) can ignore the return value birthday.print( ); The compiler can’t tell which print( ) method to call. Just because a method returns a value doesn’t mean the caller has to use it. February 2008

Too Much of a Good Thing Automatic type promotion and overloading can sometimes interact in ways that confuse the compiler. Example: public class X { ... public void printAverage ( int a, double b) //version 1 public void printAverage ( double a, int b) //version 2 } And then consider this: myX = new X( ); myX.printAverage( 5, 7 ); The Java compiler can’t decide whether to promote 7 to 7.0 and call the first version of printAverage or to promote 5 to 5.0 and call the second. The Java compiler is confused and will issue an error stating that the method invocation of myX.printAverage is ambiguous. February 2008

Cannot be invoked by the class user Private Methods Methods may be private Cannot be invoked by the class user Can only be called by other class methods Most commonly used as “helper” methods to support top-down implementation of a public method February 2008