460 likes | 472 Views
Computer Science I Classes and Objects Professor: Evan Korth New York University. Road Map. Introduction to object oriented programming. Classes Encapsulation Members Objects Constructors. Object Oriented Programming. Emphasis is placed on nouns or objects.
E N D
Computer Science IClasses and ObjectsProfessor: Evan KorthNew York University Evan Korth New York University
Road Map • Introduction to object oriented programming. • Classes • Encapsulation • Members • Objects • Constructors Evan Korth New York University
Object Oriented Programming • Emphasis is placed on nouns or objects. • Nouns (objects) have properties and behaviors. • How do we build these objects? • How do we represent their properties? • How do we define their behaviors? Evan Korth New York University
Classes • The main building blocks of Java programs. • Defines objects of the same type. Like a blueprint. Evan Korth New York University
Classes (cont) • Every .java file has one or more classes. Only one of the classes can be a public class. • That class must have the same name as the .java file. • If the class has an method called main(), execution can begin in that class. (Therefore, you can test a class by adding a main method to it.) • If there are other classes in the file, they cannot be public classes. Evan Korth New York University
Encapsulation • Encapsulation refers to the process of combining elements to create a new entity. • You encapsulate the properties (attributes) and behaviors (activities) of an entity into a class. • Encapsulation also enables us to hide the implementation of a class to other classes (information hiding / abstraction). Evan Korth New York University
Designing Classes • A class declaration includes members of the class. • A member can be either a data member or a method member. • A data member (AKA field) is used to define state (attributes or properties) of the entity. • A method member is used to define the behaviors of the entity. Evan Korth New York University
Data members • Data members can be a primitive type or a reference to another object*. • Primitive types are integer types, floating point types, characters and booleans. (Note: an int is not the same as an object of type Integer) • The scope of a data member is the entire class, no matter where within the class it is declared. * More on object references in a moment Evan Korth New York University
Default values for data members • 0 for all numeric type variables (including both floating point types and all integer types) • \u0000 for char variables • null for reference variables* • false for boolean type variables • Note: No default values for local variables (variables declared inside a method). * More on object references in a moment Evan Korth New York University
Objects • An object is an instance of a class. • If we think of a class as a blueprint, an object is one model created from that blueprint. • You can create any number of objects from one class. • An object is distinctly identified by an object reference (except for anonymous objects). Evan Korth New York University
Declaring object references • In order to reference an object, we need an object reference variable. • To declare an object reference variable we use the syntax: ClassName objectReferenceName; • The above statement creates a variable objectReferenceName which can reference a ClassName object. It does NOT create an object. Evan Korth New York University
Instantiating objects • In order to create an object, we use the new keyword along with a constructor* for the class of the object we wish to create. • To refer to the object, we “point” an object reference variable to the new object. objectReferenceName = new Constructor(); • The declaration and instantiation can be combined as follows: ClassName objectReferenceName = new ClassName(); • Note: the name of a constructor is the same as the name of the class * More on constructors soon Evan Korth New York University
Accessing Members of a Class • Within a class you can access a member of the class the same way you would any other variable or method. • Outside the class, a class member is accessed by using the syntax: • Referencing variables: objectReferenceName.varName • Calling methods (sending messages): objectReferenceName.methodName(params) Evan Korth New York University
Constructors • Constructors are special methods that instantiate objects. • A constructor is invoked with the new operator. • A constructor should initialize the class variables. If the variables are not initialized, default values are used. • A constructor does not have a return type. • A constructor’s identifier (name) is the same as the class it constructs. Evan Korth New York University
Constructors continued • Constructors can be overloaded but each one must have its own signature. • A constructor with fewer arguments can call a constructor with more arguments (we will see how to do this soon). • If no constructor is defined, a default constructor is automatically supplied which accepts no parameters. Variables are initialized to their default values. • If one constructor is explicitly defined, the automatic default constructor is no longer available. In such case, if you want a no parameter constructor, you must define it yourself. Evan Korth New York University
Road Map • Dealing with multiple files • modifiers • Static variables Evan Korth New York University
review • What is meant by the term encapsulation? • What are the default values for data members? • What does it mean to instantiate an object? • What does this statement do? Integer i; Evan Korth New York University
Review • Given: Integer i; What does the following statement do? i = new Integer(100); • Generally, what should a constructor do? • What is a default constructor? Evan Korth New York University
Modifiers • Java provides us with several keywords used to modify the accessibility of variables, methods and classes. • Visibility modifiers • public • private • protected • (None) • others • static • final • abstract Evan Korth New York University
Principle of least privilege • You should pick the modifier that allows the least privilege for other classes while allowing your code to do what it needs to do. • This helps reduce debugging time by localizing potential problem areas. Evan Korth New York University
Data member modifiers • No modifier (default) means the data is visible in the package in which it is declared. • public means the data is visible to everything. • private means the data is visible only within the class in which it is defined. • Trying to access private data from another class will result in a compile time error. • final means the variable cannot be changed. • There are two other modifiers applicable to variables: • static : We will discuss in a moment • protected: We will discuss later in the semester. Evan Korth New York University
Accessor methods • When a data member is declared to be private, we still need a way to refer to that data. A method used to change or retrieve a private data item is referred to as an accessor method. • Two kinds of accessor methods are the get method and the set method. Evan Korth New York University
Get methods • A method that is used to retrieve the value of a data object is referred to as a get method. • Also known as a getter. • Get method header should look like this: public returnType getPropertyName () • It may just return a data field or it may calculate the value. Remember information hiding. Evan Korth New York University
Predicate methods • A get method that returns a Boolean value should have a header like this: public boolean isProperty () • It can simply return a Boolean data field or it can use a Boolean formula to calculate it’s data. Remember, information hiding! Evan Korth New York University
Set methods • Methods used to set or change the value of a data method are referred to as set methods. • Also known as setters and mutators. • Header of set method will look like this: public void setProp (propType var) Evan Korth New York University
Data modifiers (cont) • A data member can be either an instance variable or a static variable (also known as a class variable). Evan Korth New York University
Static variable (AKA class variable) • A static variable has only one value no matter how many objects are instantiated from a class. The value is shared by all instances of the class. • A static variable does not need an instance of the class in order to be accessed. • You can access a static variable either with ClassName.varName (better style), or objectReference.varName notation. • For static variables, every object of the class refers to the same memory location. • Static variables can be accessed by static methods OR instance methods. • The memory for a static variable is allocated when the class is loaded into memory. Evan Korth New York University
Instance variables • An instance variable has a unique value for each object of that class. • This does not mean that two objects cannot have the same value; it does mean that those values will be stored separately in memory. • You can access an instance variable only with objectReference.varName notation. • No memory is allocated until an object is instantiated. • Can be accessed by instance methods only (not static methods -- we will talk about static methods in just a moment). (i.e. not by static methods) Evan Korth New York University
Scope of data members • Whether a data member is a class variable or an instance variable, it’s scope is the entire class. It does not matter where in the class, the variable is declared. • Remember, if they are not initialized, data members are assigned a default value. Evan Korth New York University
Local method variables • Do not automatically get initialized. • Using them without initializing them is a compilation error. • Cannot have visibility modifiers. • The scope of a local method variable starts where it is declared. It ends at the end of the block where it was declared. Evan Korth New York University
Method members • Methods are used to define the behaviors of an object. • They can be overloaded. • Having more than one method in a class with the same name is referred to as method overloading. • Each of the methods must have a different method signature. That is, they must have different argument lists. Evan Korth New York University
Method modifiers • No modifier means the method is visible in the package in which it is declared. • public means the method is visible to everything. • private means the method is visible only within the class in which it is defined. • Trying to call a private method from another class will result in a compile time error. • static means it is a static method. Static methods can use other modifiers as well. • There are three others (final, protected and abstract) which we will discuss later in the semester. • There are still others which we will not discuss this semester. Evan Korth New York University
Static methods (AKA class methods) • Can be called without an instance of the method. • All the methods in the Math class are static methods which is why we can call them without a Math object. In fact, we cannot instantiate an object of the Math class. • You can call a static method either with ClassName.method (args) (better style), or objectReference.method (args) notation. Evan Korth New York University
Instance methods • Can only be called after an object is instantiated. • You can call an instance method only with the objectReference.method (args) notation. • An instance method acts on the specific instance for which it has been called. Evan Korth New York University
Road Map • Class modifiers • Garbage collection • Naming conflicts • this • Reference members Evan Korth New York University
review • What does encapsulation mean? • What is a data member? • What is a method member? • What is the difference between an object and a class? • What does the following line of code do? • Integer i; • What is i above? • What happens if you make a class without a constructor? Evan Korth New York University
Review (cont) • What do the following modifiers mean when applied to a data member? • final • static • public • private • What if there is no modifier? • What is the principle of least privilege? Evan Korth New York University
Review (cont) • What data type does a set method usually return? • What parameter does a get method usually take? • A class has 3 objects instantiated, it also has a static variable called x and an instance variable called y. • How many x values are stored in memory? • How many y values are stored in memory? • What is the scope of an instance variable? • Can you call an instance method without an instance of the class? Evan Korth New York University
Class modifiers • No modifier (default) means the class is visible in the package in which it is declared. • public means it is visible to everything. • There are two others (final and abstract) which we will discuss later in the semester. Evan Korth New York University
Garbage collection • When an object is no longer referenced by any reference variable, that object is referred to as garbage. • Java automatically tracks garbage objects and frees its memory when the garbage collector runs. • We do not have direct control over when the garbage is collected. • We can suggest to the compiler to collect garbage but it is not guaranteed that it will run. • To suggest garbage collection we make the following method call: • System.gc(); Evan Korth New York University
Anonymous objects • An object without a reference is called an anonymous object. • It is created, used and immediately marked as garbage. Evan Korth New York University
Variable name conflicts • It is possible to have a variable name in a method with the same name as a data member in a class. • In such case, the local method variable “hides” the data member variable. Evan Korth New York University
Keyword this • The keyword this is used within a class to refer to the specific instance of the class that is being used. • A variable in a class’ method that has the same name as a field will “shadow” the field. You can access the field using the this keyword. • You cannot use the this keyword in static methods. (why?) Evan Korth New York University
Another use for this • this (args) in a constructor will invoke another constructor of that class. • If you call another constructor from a constructor, it must be the first line in the calling constructor. • This is useful when you overload your constructors. In general, a constructor with fewer parameters should call a constructor with more parameters. Evan Korth New York University
Composition • The term composition refers to the practice of having an object as a data member within another object. • What is actually stored is a reference to the member object. (therefore we can have self referential objects) • The default value for a reference variable is null. Evan Korth New York University
Passing reference variables to methods • All variables in Java are passed using call by value. However, since object variables are really references to objects, passing an object is simulated pass by reference. • Objects passed to a method and modified by that method will have the changes reflected in the calling method. • Primitive variables passed to a method and modified by that method will NOT have the changes reflected in the calling method. Evan Korth New York University