Presentation is loading. Please wait.

Presentation is loading. Please wait.

C OMP 110 T YPES Instructor: Jason Carter. 2 O BJECTS VS. P RIMITIVE T YPES Instances of classes and interfaces are objects All other values are primitives.

Similar presentations


Presentation on theme: "C OMP 110 T YPES Instructor: Jason Carter. 2 O BJECTS VS. P RIMITIVE T YPES Instances of classes and interfaces are objects All other values are primitives."— Presentation transcript:

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


Download ppt "C OMP 110 T YPES Instructor: Jason Carter. 2 O BJECTS VS. P RIMITIVE T YPES Instances of classes and interfaces are objects All other values are primitives."

Similar presentations


Ads by Google