Download presentation
Presentation is loading. Please wait.
1
C OMP 110 T YPES Instructor: Jason Carter
2
2 O BJECTS VS. P RIMITIVE T YPES Instances of classes and interfaces are objects All other values are primitives Primitive types are used to construct objects ~Atoms vs. molecules
3
3 O BJECT T YPES ABMICalculator ABMISpreadsheet
4
4 P RIMITIVE T YPES intString 3 + 4 “three” + “four” 3 – 4 … “three” – “four” Overloaded operator int and String are different types
5
5 P RIMITIVE T YPES intdouble 3 / 4 = 03.0 / 4.0 = 0.75 Overloaded arithmetic operator
6
6 K INDS OF T YPES types Primitive types Object types double int String ABMICalculator ABMISpreadsheet Lower case (by convention) Upper case (by convention) AnotherBMISpreadsheet BMISpreadsheet
7
7 A BSTRACT V ALUE VS. S YNTAX 2.2 02.2 0.22+E1 LBS_IN_KGS Representing the abstract value 2.2
8
8 S YNTAX FOR I NVOKING A BSTRACT O PERATION profit - earnings - earnings Math.round(bmi) binary, infix uniary, prefix arbitrary, method invocation
9
9 T YPE R ULES R EGARDING A SSIGNMENT double height = 1.77; int weight = 70; double height = 2; int weight = 70.0; double weight = “seventy”; Type rules define which of these are legal.
10
10 P RIMITIVE T YPES Each primitive type defines: Range of abstract values of the type Constants (literals & named constants) denoting their values Operations (with invocation syntax) that can be invoked on the values of that type What types can be assigned to variables of the type
11
11 INT R ANGE & C ONSTANTS Mathematical Integers {- … + } int {-2 31 … +2 31 - 1} 32 bits Integer.MIN_VALUE Integer.MAX_VALUE 0 02 +2 2 -2 There are only 10 types of people in this world: those who read binary and those who don’t.
12
12 DOUBLE R ANGE & C ONSTANTS Mathematical Real Numbers double Double.MIN_VALUE Double.MAX_VALUE 2.2 0.22.2 02.202. 0.22E0 0.22E+1.22E1.22E-1 eXy = x*10 y mantissaexponentstandard 2 64 bits
13
13 O THER I NTEGER S UBSETS Mathematical Integers {- … + } 8 bits byte{-2 7.. 2 7 - 1} Byte.MIN_VALUEByte.MAX_VALUE 16 bits short{-2 15.. 2 15 - 1} Short.MIN_VALUEShort.MAX_VALUE 64 bits long{-2 63.. 2 63 - 1} Long.MIN_VALUELong.MAX_VALUE
14
14 FLOAT S IZE & C ONSTANTS Mathematical Real Numbers float {-2 31 … +2 31 - 1} 32 bits Float.MIN_VALUE Float.MAX_VALUE.2
15
15 M IXED A SSIGNMENT long l = 70; double d = 70.0; double d = 70; int int long Safe and automatically converted int double
16
16 C AST int i = 70.6; float f = 70.6; int double Not automatically converted float double ( int ) int i = 70; ( float ) cast
17
17 A SSIGNMENT R ULES TVTV TETE ve T E T V T E T V Narrower than Wider than Wider than v = e double d = 5; v = (T V ) e int i = ( int ) 5.7; ! (T E T V || T E T V ) v = (T V ) e bool b = ( bool ) 5;
18
18 A SSIGNMENT R ULES FOR P RIMITIVE T YPES If T1 narrower than T2 (Set of instances of T1 Set of instances of T2) Expression of type T1 can be assigned to Variable of type T2 Expression of type T2 can be assigned to Variable of type T1 with cast
19
19 A CTUAL P ARAMETER A SSIGNMENT double weight; public void setWeight( double newWeight) { weight = newWeight; } setWeight(70); double newWeight = 70.0; Implicit assignment
20
20 A CTUAL P ARAMETER A SSIGNMENT int weight; public void setWeight( int newWeight) { weight = newWeight; } setWeight(70.6); int newWeight = 70.6; Implicit assignment
21
21 A CTUAL P ARAMETER A SSIGNMENT int weight; public void setWeight( int newWeight) { weight = newWeight; } setWeight(( int )70.6);
22
22 R ETURNING A V ALUE double weight; public int getIntWeight() { return weight; }
23
23 T RANSLATED INTO A SSIGNMENT double weight; public int getIntWeight() { int getIntWeight = weight; return getIntWeight; } Internal variable
24
24 T RANSLATED INTO A SSIGNMENT double weight; public int getIntWeight() { return ( int ) weight; }
25
25 P RIMITIVE T YPES Constants (Literals & Named Constants) Assignment Rules Operations with Invocation Syntax
26
26 INT A RITHMETIC O PERATIONS NameActionOperand & Result Type (Signature) +addint, int int -subtractint, int int -negateint int *multiplyint, int int /int quotientint, int int %int remainderint, int int 5/2 25%2 1 x == (x/y)*yx == (x/y)*y + (x%y)
27
27 DOUBLE A RITHMETIC O PERATIONS NameActionOperand & Result Type (Signature) +adddouble, double double -subtractdouble, double double -negatedouble double *multiplydouble, double double /int quotientdouble, double double 5.0/2.0 2.5
28
28 O VERFLOW Integer.MAX_VALUE + 1 Integer.MAX_VALUE Integer.MIN_VALUE - 1 Integer.MIN_VALUE (double) Integer.MIN_VALUE - 1.0 (double) (Integer.MIN_VALUE - 1.0) Double.MAX_VALUE + 1 Double.MAX_VALUE Double.MIN_VALUE - 1 Double.MIN_VALUE
29
29 O VERFLOW 10/0 Exception -10/0 Exception 10.0/0 Double.POSITIVE_INFINITY -10.0/0 Double.NEGATIVE_INFINITY 0/0 Exception 0.0/0.0 Double.NaN
30
30 INT O VERFLOW
31
31 DOUBLE O VERFLOW
32
32 M IXED O PERATIONS 5/2.0 5.0/2.0 Narrower type converted int i = (int) (5/2.0) int i = (int) (5.0/2.0) int i = (int) (2.5) int i = 2 doube d = 5/(int)2.0 double d = 5/2 double d = 2 double d = 2.0
33
33 S TRONG VS. W EAK T YPING “hello” - 1 int minus Legal under weak typing “anything goes” Illegal under strong typing “strict type rules”
34
34 M ISCELLANEOUS M ATH O PERATIONS Operations (invoked on Math) Signature abs()double double, int int acos(), asin(), atan() cos(), sin(), tan() double double pow()double, double double exp(), log()double double round()double long random(), pi() double sqrt()double double Math.pi() Math.pow(5, 3) 5 3 Math.round(5.9) 6 (int) 5.9 5 int i = (int) Math.Round(5.9) 6
35
35 BOOLEAN C ONSTANTS truefalse boolean
36
36 R ELATIONAL O PERATIONS NameAction Signature of int Implementation Signature of double Implementation ==equal?int, int booleandouble, double boolean !=not equal?int, int booleandouble, double boolean >greater than?int, int booleandouble, double boolean <less than?int, int booleandouble, double boolean >= greather than or equal? int, int booleandouble, double boolean <= less than or equal? int, int booleandouble, double boolean 5 == 5 true 5 == 4 false 5 >= 4 true 5 <= 4 false 5 != 5 false 5 != 4 true
37
37 BOOLEAN O PERATIONS Name(s)ActionSignature !notboolean boolean &&, &andboolean, boolean boolean ||, |orboolean, boolean boolean !true false !false true true && true true true && false false false && true false false && false false true || true true true || false true false || true true false || false false
38
38 S HORT -C IRCUIT E VALUATION false && (9654.34/323.13 > 32.34) false true || (9654.34/323.13 > 32.34) false Second operand not evaluated Short-circuit evaluation false & (9654.34/323.13 > 32.34) false true| (9654.34/323.13 > 32.34) false Second operand evaluated Regular evaluation Name(s)ActionSignature !notboolean boolean &&, &andboolean, boolean boolean ||, |orboolean, boolean boolean
39
39 S HORT -C IRCUIT E VALUATION Name(s)ActionSignature !notboolean boolean &&, &andboolean, boolean boolean ||, |orboolean, boolean boolean false && (10/0) false false & (10/0) An error in some programming languages
40
40 C OMPLEX E XPRESSIONS false && ( 10 / 0 ) Sub-expression false && ( 10 / 0 ) Operator evaluation order?
41
41 BOOLEAN VS. N UMBER E XPRESSIONS hoursWorked > MAX_HOURS boolean overWorked = True if hoursWorked is greater than MAX_HOURS and false otherwise int earnings = hourlyWage*hoursWorked + BONUS
42
42 BOOLEAN P ROPERTY
43
43 BOOLEAN P ROPERTY C ODE public boolean isOverWeight() { }
44
44 BOOLEAN P ROPERTY C ODE (E DIT ) final double HIGH_BMI = 28; public boolean isOverWeight() { return getBMI() > HIGH_BMI; }
45
45 BOOLEAN P ROPERTY C ODE private final double HIGH_BMI = 25; public boolean isOverWeight() { return getBmi() > HIGH_BMI; }
46
46 BOOLEAN P ROPERTY C ODE // declare in interface private final double HIGH_BMI = 25; public boolean isOverWeight() { return getBmi() > HIGH_BMI; }
47
47 P REVENTING I NVALID BMI
48
48 A SSERTIONS Assert Statement can be inserted anywhere to state that some condition should be true If condition is false, Java stops program and gives error message Some products fail with message “internal assertion failed”
49
49 H OW S HOULD W E C HANGE THE C LASS ? public class ABMISpreadsheet { double height, weight; public ABMISpreadsheet( double theInitialHeight, double theInitialWeight) { setHeight ( theInitialHeight); setWeight( theInitialWeight); } public double getHeight() { return height; } public void setHeight( double newHeight) { height = newHeight; } public double getWeight() { return weight; } public void setWeight( double newWeight) { weight = newWeight; } public double getBMI() { return weight/(height*height); } }
50
50 C HECKING P RECONDITIONS public class ABMISpreadsheet { double height, weight; public ABMISpreadsheet( double theInitialHeight, double theInitialWeight) { setHeight ( theInitialHeight); setWeight( theInitialWeight); } … public boolean preGetBMI() { return weight > 0 && height > 0; } public double getBMI() { assert (preGetBMI()); return weight/(height*height); } Precondition of method M() is preM()
51
51 O BJECT E DITOR U SES P RECONDITION
52
52 O BJECT E DITOR U SES P RECONDITION
53
53 O BJECT E DITOR U SES P RECONDITION A method is disabled when its precondition not met
54
54 O RIGINAL C LASS public class ABMISpreadsheet { double height, weight; public ABMISpreadsheet( double theInitialHeight, double theInitialWeight) { setHeight ( theInitialHeight); setWeight( theInitialWeight); } … public boolean preGetBMI() { return weight > 0 && height > 0; } public double getBMI() { assert (preGetBMI()); return weight/(height*height); }
55
55 O RIGINAL C LASS (E DIT ) public class ABMISpreadsheet { double height, weight; double iH, iW; public ABMISpreadsheet( double theInitialHeight, double theInitialWeight) { setHeight ( theInitialHeight); setWeight( theInitialWeight); iH = theInitialHeight; iW = theInitialWeight; } … public boolean preGetBMI() { return weight > 0 && height > 0; } public double getBMI() { assert (preGetBMI()); return weight/(height*height); } public boolean preRestoreHeightAndWeight() { return height != iH || weight != iW; } public void restoreHeightAndWeight() { setHeight(iH); setWeight(iW); }
56
56 public class ABMISpreadsheet { double height, weight; double initialHeight, initialWeight; public ABMISpreadsheet( double theInitialHeight, double theInitialWeight) { setHeight ( theInitialHeight); setWeight( theInitialWeight); initialHeight = theInitialHeight; initialWeight = theInitialWeight; } … public boolean preGetBMI() { return weight > 0 && height > 0; } public double getBMI() { assert preGetBMI(); return weight/(height*height); } public boolean preRestoreHeightAndWeight() { return height != initialHeight || weight != initialWeight; } public void restoreHeightAndWeight() { assert preRestoreHeightAndWeight(); height = initialHeight; weight = initialWeight; } N EW C LASS
57
57 public class ABMISpreadsheet { … public double getWeight() { return weight; } public void setWeight( double newWeight) { weight = newWeight; } … } P RECONDITIONS OF O THER M ETHODS
58
58 public class ABMISpreadsheet { … public boolean preGetWeight() { return weight > 0; } public double getWeight() { return weight; } public boolean preSetWeight(double newWeight) { return newWeight > 0; } public void setWeight( double newWeight) { assert (preSetWeight(newWeight)); weight = newWeight; } … } P RECONDITIONS OF O THER M ETHODS (E DIT )
59
59 public class ABMISpreadsheet { … public double preGetWeight() { return weight > 0;} public double getWeight() { assert preGetWeight(); return weight; } public boolean preSetWeight (double newWeight) { return newWeight > 0; } public void setWeight( double newWeight) { assert preSetWeight(newWeight); weight = newWeight; } … } P RECONDITIONS OF O THER M ETHODS Prevention of getter not needed if setter and constructor prevent assignment of illegal values
60
60 E QUIVALENT C LASS public class ABMISpreadsheet { … public double getWeight() { return weight; } public boolean preSetWeight (double newWeight) { return newWeight > 0; } public void setWeight( double newWeight) { assert preSetWeight(newWeight); weight = newWeight; } … } Prevention of getter not needed if setter and constructor prevent assignment of illegal values
61
61 P RECONDITION S TYLE R ULE If there are constraints on the input of a method M(…) that may not be met, write a precondition boolean method, preM(…) for it Call the precondition method in an assert statement as the first statement of M(..) To keep examples short, preconditions will not be shown in future examples
62
62 O PERATOR P RECEDENCE ! - (T) * / & + - = == != & | && || Unary Cast false && 10 / 0 false && 10 / 0 - 5 - 4 - 5 - 4 !true && false !true && false 5 / 4 * 3 5 / 4 * 3 true || false == false || true true || false == false || true ( int ) 5 / 2.0 ( int ) 5 / 2.0
63
63 O PERATOR P RECEDENCE (E DIT ) ! - (T) * / & + - = == != & | && || Unary Cast false && 10 / 0 false && (10 / 0) - 5 - 4 (- 5) - 4 !true && false (!true) && false 5 / 4 * 3 (5 / 4) * 3 true || false == false || true true || ( false == false ) || true ( int ) 5 / 2.0 ( int ) 5 / 2.0
64
64 O PERATOR P RECEDENCE ! - (T) * / & + - = == != & | && || Unary Cast false && 10 / 0 false && ( 10 / 0 ) - 5 - 4 ( - 5 ) - 4 !true && false ( !true ) && false 5 / 4 * 3 ( 5 / 4 ) * 3 true || false == false || true true || ( false == false ) || true ( int ) 5 / 2.0 ( ( int ) 5 ) / 2.0
65
65 P RINTING A RBITRARY E XPRESSIONS System.out.println (2)Output: 2 System.out.println (2.0)Output: 2.0 System.out.println ((int) 2.0)Output: 2 System.out.println (5 > 0)Output: true
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.