Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
CS 115 OBJECT ORIENTED PROGRAMMING I LECTURE 4_1 GEORGE KOUTSOGIANNAKIS Copyright: 2015 Illinois Institute of TechnologyGeorge Koutsogiannakis 1 Previous Lecture Topics • • • • • • • Data Types. Variables. Constants. Type casting of Data Types. Expressions. Arithmetic Operators. Precedence of Operators. 2 Lecture 4 Topics • • • • • • • Mixed Type Arithmetic Typecasting-Implicit/Explicit Structure of a Java program Classes – What is a class? What is an object of a class? How do we create objects of a class? Constructors 3 Arithmetic Operators • In Programming arithmetic expressions we use the following symbols. Each symbol is called an arithmetic operator: – / forward slash is used for division i.e 4/3 – * asterisk is used for multiplication – +, - used for addition and subtraction. Notice that the + operator is also used a symbol with a different meaning sometimes (this is called operator overloading). – % modulus operator. Gives the remainder of a division. – ( , ) opening and closing parentheses. 4 Review of Precedence of Operators • Suppose we have the expression: 3*4/2+(6-3*2/2-1*(2+3-2*5/2)) What is the result? How does the system (java run time system in the computer) calculate the result? Answer: – First anything within a parenthesis gets calculated, starting with the innermost parethensis. Parentheses are given priority. Each parenthesis is calculated by itself. Within a parenthesis the precedence of operators is followed i.e. multiplication and division first then addition and subtraction: 2+3-2*5/2 • multiplication and division have equal precedence and they get applied before + or – • therefore we apply the leftmost of the equal precedence operators first. 5 Review of Precedence of Operators • 2*5=10 first , then 10/2=5 • Next we apply the + and then the - (+, - are of equal precedence but + comes first because it is the leftmost of the two in the expression). • 2+3-5=0 (result of inner most parenthesis). – Now let us calculate the next parenthesis (6-3*2/2-1*0) • Again multiplication is first ( multiplication and division come before addition and subtraction) starting left to right and covering all operators of equal precedence. 6-6/2-1*0 Next the division 6-3-1*0 Next the last multiplication 6-3-0= 3 – Now the remainder of the expression 3*4/2+3 First the multiplication 3*4=12 then 12/2=6 and finally the subtraction FINAL RESULT: 6+3=9 6 Modulus Operator When two integers are divided: – the quotient is an integer data type – any fractional part is truncated (discarded) • To get the remainder, use the modulus operator with the same operands: % i.e 10%3=1 because the remainder of the division is 1 7 Division by Zero • Integer division by 0: Example: int result = 4 / 0; At run time, the Java Runtime System generates an ArithmeticException and the program stops executing. Division by zero is not allowed. • Floating-point division by 0: – If the dividend is not 0 as an integer, then the result is Infinity --i.e. 4.3/0.0=infinity. – If the dividend and divisor are both 0, the result is NaN (not a number) ---i.e. 0/0=NaN 8 Operands • Consider the following Expression: 2+3-5 – An operator operates on Operands – + , –, *, / operators require 2 operands each. – + operator has the Operands 2 and 3 in our example. 9 Mixed-Type Arithmetic– Conversions of Data Types • There is a concern with data types when the operands of an operator are not of the same data type. i.e. 2 * 2.3 WHERE SHOULD THE SYSTEM STORE THE RESULT IN MEMORY? As an int memory space (4 bytes) or as a double memory space (8 bytes)? • Even if the data types of the operands are the same we could still have an issue as to the data type of the result i.e. 3/2 • Therefore rules are needed in the programming language (Java in this case) to handle the results of this type of operations. 10 Mixed-Type Arithmetic– Conversions of Data Types Implicit Type Casting • By “Implicit Type Casting” we mean that the Java Runtime System changes a particular data type implicitly: in other words the programmer did NOT program the change to the data type with an explicit programming instruction. • PROMOTION RULE – When performing calculations with operands of different data types in an expression: • Lower-precision operands are promoted automatically (implicitly) to higher-precision data types, then the operation is performed. That conversion of the data type is called Numeric Promotion. 11 Mixed-Type Arithmetic– Conversions of Data Types Implicit Type Casting – Promotion is effective only for expression evaluation; not a permanent change. In other words the operand after the calculation returns to its original data type. – This is called implicit type casting because it is done by the syatem and not by the programmer. • For example: any expression involving a floatingpoint operand will have a floating-point result. 12 Promotion • Therefore the term numeric promotion refers to changing a data type variable (which has already been declared) in an expression from a lower precision to higher precision at compile time (in other words the compiler automatically adjusts the data types). – Promotion takes place, for instance, when we have an arithmetic expression to be evaluated like the one below: Operand1 Operator Operand2 3 + 4.2 (as an example) 13 Promotion – Thus, the first operand will be promoted (remember the promotion is temporary) so that we now have: 3.0 + 4.2 After the expression is calculated 3.0 returns to its original value 3 (an int data type) 14 Promotion – Another example: int x=3; double y=4.0; double z=0; z= x+y; In this case the variable x is temporarily promoted to a double (only for the duration of the calculation of the expression by the program). The result is a double which is saved in identifier z. Notice that after the expression is calculated the identifier x remains an int holding the value 3 (not 3.0). • Question: explain the meaning of the phrase “the variable x is temporarily promoted to a double “ in terms of memory spaces in the computer. 15 Rules of Promotion The compiler applies the first of these rules that fits: 1. If either operand is a double, the other operand is converted to a double. 2. If either operand is a float, the other operand is converted to a float. 3. If either operand is a long, the other operand is converted to a long. 4. If either operand is an int, the other operand is promoted to an int 5. If neither operand is a double, float, long, or an int, both operands are promoted to int. 16 Assignment Conversion • The equal sign = is not called equal in programming languages. It is instead called the assignment operator. • It is used to indicate that one variable’s value (one identifier’s value) is transferred from its memory space to the other variables memory space i.e int c= 2/3+(3*25%2) means: calculate the expression and then assign its result (store the result) in the memory space identified by the symbol c if type int (4 byte sreserved) i.e int d =5; int c=d In this case we want the value stored in the identifier d (memory spaced of 4 bytes) to ALSO be stored (assigned) in the memory space identified as c (also 4 bytes) 17 Assignment Conversion • Assignment conversion takes place when we are trying to assign one particular data type identifier to another data type identifier. – For example – int x=3; – double y=0; – y=x; • In other words take the value of x and assign it to the identifier y • or another way of saying the same thing is: – Take the contents of memory location identified by x and place it in the memory location identified by y. • The above is valid conversion because a lower precision can be assigned to a higher precision identifier (the inverse is not true). – Remember that y is 8 bytes and x is 4 bytes. We can take 4 bytes of data and put it in a memory space of 8 bytes but not the other way around. 18 Example Of Implicit Type casting public class TestPromotion { public static void main(String[] args) { double taxRate=0.5345; float salesTax=0.5f; //demotion is allowed. Therefore the following is allowed //where taxRate accepts a float; taxRate=salesTax; //The following is not allowed. Compiler will produce a warning //Possible loss of precision message Identifier salesTax can not be promoted to a double salesTax=0.9f; salesTax=taxRate; } } 19 Example Of Implicit Type casting • In this example salesTax represents a float (which takes 4 bytes of memory) and taxRate a double (which takes 8 bytes of memory). • It is O.K. to try to store a float into a memory area greater than the float memory area. • It is NOT O.K. to try to store a double (8 bytes) into a memory area less that 8 bytes ( a float has 4 bytes). 20 Another Example of Implicit Type Casting public class TestPromotion1 { public static void main(String[] args) { double taxRate=0.5345; float salesTax=0.5f; double result=taxRate+salesTax; System.out.println(“Thre result is”+result); } } • Here float data type salesTax is implicitly type casted to a double temporarily so that the expression taxRate+salesTaxc an be evaluated. • Output: • The result is:1.0345 21 Another Example of Implicit Type Casting public class TestPromotion1 { public static void main(String[] args) { double taxRate=0.5345; int salesTax=2; double result=taxRate+salesTax; System.out.println(“Thre result is”+result); } } Output: The result is:2.5345 The int data type salesTax was implicitly (without us asking for it via an instruction) type casted to a double in order to be added with the double data type taxRate. 22 Type Casting -Explicit • The programmer can write a programming instruction to explicitly ask that a data type be converted to a different data type. This is called explicit type casting. • Explicit type casting is done by enclosing the new data type name in parenthesis in front of the data type that w eare changing i.e. – int a=(int)4.324; Or double d=4.324; int a=(int)d; 23 Structure of a Java program public class NameOfClass { //instance variables or attributes of the class are declared here int a=0; char c=‘v’; double anotherd=3.64; // next the methods of the class public void firstMethod( ) { //code for this method } public int secondMethod() { //code for second method } } //end of class 24 Class-what is a class • A class is a category. – i.e Student is a class. It represents a category of people that share common characteristics – We call those common characteristics: attributes • For example, every student has: – A first name. – A last name – A student Id – Is registered at a school – Takes certain courses etc. – Those are some of the attributes that we can come up. There are other of course that we can add to the list. 25 Class-what is a class • In Java we create classes as they are needed. That is why we start a Java program by declaring a class name: • i.e public class Student { //we declare the attributes // we write methods for the class } 26 Class-what is a class • The attributes make up the data of the class • The methods manipulate the data. • Suppose someone says: “The student earns grades”. Come up with the data and the methods for a class. • The noun in the sentence is the class name, the verb is a method. The attribute is: grade. • i.e public class Student { char grade=‘ ‘; public void setGrade(char agrade) { grade=agrade; } } 27 Object-Oriented Programming • Classes combine data and the methods (code) to manipulate the data • Classes are a template used to create specific objects. – An object is a specific instance of a class – i.e In the class Student we may have a specific student (an object of class Student) with specific values for the attributes that we gave to the class: • • • • First Name is John Last Name is Doe Grade is A Etc. • All Java programs consist of at least one class. • Object Oriented Programming (OOP) refers to the usage of classes in our programs. 28 Why Use Classes? • • • • Usually, the data for a program is not simply one item. Often we need to manage entities like students, books, flights, etc. We need to be able to manipulate such entities as a unit. Classes allow us to separate the data for each object, while using common code to manipulate each object. • Student class – Data: name, year, and grade point average – Methods: store/get the value of the data, promote to next year, etc. • Student object Object name: student1 Data: Maria Gonzales, Sophomore, 3.5 29 Class Members • Members of a class – the class's fields and methods. Fields is another name for attributes. • Fields – instance variables and static variables (we'll define static later) – Instance variables • variables defined in the class and given a value in each object fields can be: – any primitive data type (int, double, etc.) – objects of the same or another class • Methods – the code to manipulate the object data 30 Encapsulation • Instance variables are usually declared to be private, which means that they cannot be accessed directly outside the class. • Users (clients) of the class must reference the private data of an object by calling methods of the class. • Thus the methods provide a protective shell around the data. We call this encapsulation. • Benefit: the class’ methods can ensure that the object data is always valid 31 Objects • Object reference – an identifier of the object • Instantiating an object – creating an object of a class; assigns initial values to the object data – Objects need to be instantiated before being used • Instance of the class – an object after instantiation 32 Naming Conventions • Class names: start with a capital letter • Object references: start with a lowercase letter • In both cases, internal words start with a capital letter • Example: class: Student, PetAnimal objects: marcusAustin, myBoaConstrictor 33 Example of a Class public class Student { //let us declare 4 attributes (fields) and initialize them String firstName=“ “; String lastName=“ “; int studentID=0; double gradeAverage=0.0; // next we create a method called the constructor method. public Student(String fn, String ln, int id, double gradaver) { firstName=fn; lastName=ln; studentID=id; gradeAverage=gradaver; } // The constructor initializes the attributes (or some of the attributes) to specific values requested by a user. The constructor in the above example is called a non default constructor. We will show later another type of constructor method called default constuctor. 34 Example of a Class public String getFirstName() { return firstName; } //The above method is called an Accessor method because it accesses the value of an attribute public void setfirstName(String finam) { firstName=finam; } //The above method is called a Mutator method because it can change the value of an attribute. 35 Example of a Class • The previous class is called a template class. It is a template of Student category (class). • Notice that it ha sno main method although it has other methods such as – Constructor methods – Accessor methods – Mutator methods • Another Java program called the client program can utilize this class. 36 Reusability of Classes • Reuse – class code is already written and tested – you build a new application faster – the application will be more reliable Example: A Date class could be used in a calendar program, appointment-scheduling program, online shopping program, etc 37 How to Reuse a Class • You don't need to know how the class is written or see the code of the class • You do need to know the application programming interface (API) of the class • The API is published and tells you: – how to create objects – what methods are available – how to call the methods 38 API • Documentation of the Java API is available on the Internet by going to site: http://java.sun.com/javase/6/docs/api 39 Client Class • Suppose we have written the program for the class Student. • Another class, let us call it: StudentClient, needs to use the student class. public class StudentClient { // This class is going to have a main method // inside the main method we are going to create a Student class object (the term is: instantiate a student class object // The student object will allow us to manipulate the data of the class (the values of the attributes) by using the accessor and mutator methods of the template class Student. } 40 Back to Student Template Class public class Student { //let us declare 2 attributes (fields) and initialize them String lastName=“ “; int studentID=0; // next we create a method called the default constructor method. public Student() { lastName=Joe; studentID=10; } public Student(String ln, int id) { lastName=ln; studentID=id; } 41 Back to Student Template Class public String getLastName() { return lastName; } public void setLastName(String ln) { lastName=ln; } public int getStudentID() { return studentID; } public void setStudentID() { return studentID; } THERE ARE TWO ERRORS IN THE LAST METHOD!! IDENTIFY THE ERRORS. 42 Constructors • Initialize the fields (attributes) • A class can have a number of different constructors. • Two types: – Default constructor takes no arguments. Initializes the fields to specific values. – Non Default constructor takes arguments. Initializes the fields to what values the arguments have. 43 Constructors • Notice that constructors MUST HAVE THE SAME NAME AS THE CLASS • Notice that constructors do not return any data type, NOT EVEN VOID. 44 Study Guide • Chapter 2 – All of section 2.4 • Chapter 3 – 3.1, 3.2 45