object oriented programminganab/teaching/remedialjava/session-2.pdfobject oriented programming all...

55
(remedial) Java [email protected] 1 ABezerianos - Remedial Java - Session-2.key - 6 September 2019 Object Oriented Programming 2 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Upload: others

Post on 21-May-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

(remedial)Java

[email protected]

1 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

ObjectOrientedProgramming

2 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 2: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

ObjectOrientedProgramming

▪ Alllanguagesmakeabstractions

▪ OOPattemptstorepresenttherealworldascloseaspossible,i.e.closertotheproblemspace

▪ Useofthenotionofobjects

3 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

ObjectOrientedProgramming

▪ Representtherealworld

Car

4 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 3: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

ObjectOrientedProgramming

▪ Representtherealworld

CarMakeColor

HorsepowerMPG

ManualKilometers

5 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

ObjectOrientedProgramming

▪ Objectsgrouptogethercharacteristics:▪ Primitives(int,double,char,etc..)▪ Objects(String,etc...)

CarString MakeString Color

int Horsepowerdouble MPG

boolean Manualint Kilometers

6 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 4: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Whyuseclasses?

▪ Wecouldusejustprimitives…// my carString myCarMake;String myCarColor;int myCarHorsepower;double myCarMPG;boolean myCarManual;int myCarKilometers;

7 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Whyuseclasses?

▪ Wecouldusejustprimitives…

▪ WhatifIhad800cars…

// my carString myCarMake;String myCarColor;int myCarHorsepower;double myCarMPG;boolean myCarManual;int myCarKilometers;

// my father’s carString dadsCarMake;String dadsCarColor;int dadsCarHorsepower;double dadsCarMPG;boolean dadsCarManual;int dadsCarKilometers;

8 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 5: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Whyuseclasses?

MakeColor

HorsepowerMPG

ManualKilometers

myCar

Make=…Color=…

Horsepower=…MPG=…

Manual=…Kilometers=…

Car

9 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Whyuseclasses?

797morecars…myCar

MakeColor

HorsepowerMPG

ManualKilometers

dadsCar

MakeColor

HorsepowerMPGManual

Kilometers

momsCar

MakeColor

HorsepowerMPG

ManualKilometers

Car

10 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 6: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Whyuseclasses?

myCar dadsCar momsCar

797morecars…

puioBuilding pcriBuilding

Morebuildings

Car

Building

11 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Whyuseclasses?

myCar dadsCar momsCar

797morecars…

road

puioBuilding pcriBuilding

Morebuildings

12 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 7: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Whyuseclasses?

cars

buildings

[]

road

[]

13 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

ObjectandClass(1)

▪ Everythingisanobject.

▪ Aprogramisacollectionofobjectsthattelleachotherwhattodo(passmessages)

▪ Similarobjectsaregroupedtogetherinanobjectclass.▪ Aclassisa“patterntemplate”forcreatingsimilarobjects.

14 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 8: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

ObjectandClass(2)

▪ Withthekeywordclasswecandefineabstractdatatypes,i.e.classes(fundamentalconceptofOOP).

▪ WeusetheseabstractdatatypesinthesamewayasweusethepredefinedJavadatatypes.

▪Cancreatevariablesofthespecifictype(class),andgivethemconcretevalues(object/instance)

▪Theinstances(objects)ofaclasssharethesamecharacteristics(e.g.,allcarshaveamake,model,color,etc.).

▪Buteachobjecthasitsownstate,somycarisapinkpeugeot104,mymother’scarisagreenvolkswagenbeetle,etc.

15 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Definingclasses

16 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 9: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Let’sdeclareacarclass

public class Car {

}

17 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Let’sdeclareacarclass

public class Car {

}

fields:data/characteristics

methods:datamanipulation

msgtreatment

18 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 10: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Classfields

public class Car {

TYPE varname;TYPE varname = some_value;

}

19 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Classfields

public class Car {

String make;String color;int horsepower;double mpg;boolean manual;int kilometers = 0;

}

20 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 11: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Classfields

public class Car {

String make;String color;int horsepower;double mpg;boolean manual;int kilometers = 0;XXXX YYYY;

}

21 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Classfields

public class Car {

String make;String color;int horsepower;double mpg;boolean manual;int kilometers = 0;Car[] overtaken;

}

22 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 12: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Classmethods

public class Car {

String make;String color;int horsepower;double mpg;boolean manual;int kilometers = 0;Car[] overtaken;

void move (int speed, int time) {kilometers += speed*time;System.out.println(“Covered ” + kilometers + “km”);

}}

23 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Classoverview

public class Car {

String make;String color;int horsepower;double mpg;boolean manual;int kilometers = 0;Car[] overtaken;

void move (int speed, int time) {kilometers += speed*time;System.out.println(“Covered ” + kilometers + “km”);

}}

ClassDefinition

24 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 13: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

NoteonClassdeclaration

Injava:

▪ ClassnamesareCapitalized

▪ 1Class=1file

▪ aClasswithamainfunctioncanberun

25 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Classoverview

Car myCar = new Car();

ClassInstance

(aconcreteobjectofthatclass)

Butwhatmake,color,…?

26 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 14: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

ClassConstructor

public class CLASSNAME {

CLASSNAME ( ) {}

CLASSNAME ([ARGUMENTS]) {}

}

CLASSNAME obj1 = new CLASSNAME();CLASSNAME obj2 = new CLASSNAME([ARGUMENTS]);

27 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Carconstructorspublic class Car {

String _make;String _color;int _horsepower;double _mpg;boolean _manual;int _kilometers = 0;

public Car(String mymake, String mycolor){_make = mymake; // or this._name = myname;_color = mycolor; // or this._color = mycolor;

}

void move (int speed, int time) {_kilometers += speed*time;System.out.println(“Covered ” + _kilometers + “km”);

}}

28 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 15: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

ClassConstructorcharacteristics(1)

▪ Aconstructorisaparticularmethod

▪ Itisusedtoinitializeanobject,itinitializesfields,andguaranteesinvariantsattheobjects’creation

▪ Itisinvokedwiththekeywordnewonceperobject,anditreservesmemoryforthenewlycreatedobject

29 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

ClassConstructorcharacteristics(2)

▪ Constructorname=Classname

▪ Noreturntype,neverreturnsanything

▪ Allclassesneedatleastoneconstructor,ifnonedefinedthanJavaaddsadefaultone

CLASSNAME ( ) {}

▪ Ifaconstructorisdefined,theJavacompilernolongercreatesadefaultconstructor

30 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 16: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Inter-constructorcalls

▪ Cancalloneconstructormethodfromanotherusingthekeywordthis(morelater).Thisprocessiscalledconstructoroverloading.

▪ Thecalltotheconstructormustbethefirstcallpublic Car(){

this("nomake", "nocolor"); // I want a default value}

public Car(String myname, String mycolor){_name = myname; // or this.name = myname;_color = mycolor; // or this.color = mycolor;

}

31 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Usingclasses

32 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 17: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

ClassesandInstances

// class Definition (pattern)public class Car {

…}

// class Instances (concrete objects)Car myCar = new Car ("peugeot”, “pink”); Car momsCar = new Car (”volkswagen”, “green”);

33 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

ClassesandInstances

// class Definitionpublic class Car {

…}

// class InstancesCar myCar = new Car ("peugeot”, “pink”); Car momsCar = new Car (”volkswagen”, “green”);

▪ Eachinstance(myCar,momsCar)hastheirownvaluesfortheirfields(e.g.,differentmakeorcolor).

34 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 18: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Accessingmembersofaclass

▪ Membersofaclass(fields,methods)canbeaccessedwiththenotation“.”appliedafterthereferencetoanobject

35 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Accessingmembersofaclass

▪ Membersofaclass(fields,methods)canbeaccessedwiththenotation“.”appliedafterthereferencetoanobject

▪ ForfieldsObject.Fieldname

Car myCar = new Car ("peugeot”, “pink”); System.out.println(myCar._make); // returns peugeot

36 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 19: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Accessingmembersofaclass

▪ Membersofaclass(fields,methods)canbeaccessedwiththenotation“.”appliedafterthereferencetoanobject

▪ FormethodsObject.Methodname([ARGUMENTS ])

Car myCar = new Car ("peugeot”, “pink”);

myCar.move(85,30); // updates the variable kilometers

37 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Accessingmembersofaclass

▪ Withrespecttoclassicfunctions(e.g.inC),wechoseoneoftheobjectstoacton:▪ C:equals(o1,o2)▪ Java:o1.equals(o2)

Class Car{boolean equals (Car m){... }

}

class Main{public void todo{

Car c1 = ...Car c2 = ...if ( c1.equals(c2)){...}

}}

38 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 20: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

this

▪ this(orself,it)correspondstoareferencetotheobjectonwhichamethodiscalled

▪ Clarifiesthescopeofthevariable(ifsamename)

Herethistakesthevalueofc1andcofc2

Class Car{boolean equals (Car c){

if (this == c)return true;

}}

class Main{public void todo{

Car c1 = ...Car c2 = ...if ( c1.equals(c2)){...}

}}

39 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

thisexample

▪ Onlymethod-levelkilometersisupdated

public class Car {int kilometers = 0;

Car(){move(30);System.out.println(“Covered ” + kilometers + “km”);

}void move (int kilometers) {

kilometers += kilometers;System.out.println(“Covered ” + kilometers + “km”);

}

public static void main (String args[]){Car car1 = new Car();

}}

40 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 21: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

thisexample

▪ Object-levelkilometersisupdated

public class Car {int kilometers = 0;

Car(){move(30);System.out.println(“Covered ” + kilometers + “km”);

}void move (int kilometers) {

this.kilometers += kilometers;System.out.println(“Covered ” + kilometers + “km”);

}

public static void main (String args[]){Car car1 = new Car();

}}

41 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Exercise1-part1www.lri.fr/~anab/teaching/remedialJava/ex-session2.pdf

Hint:useBook[]insideLibrary

Reminder:

▪ Classdefinition

▪ Classuse

public class CLASSNAME {TYPE varname; // fieldTYPE varname = some_value; // initialized fieldCLASSNAME ([ARGUMENTS]) { … } // constructor methodTYPE method_name ([ARGUMENTS]) {…} // another method

}

CLASSNAME obj = new CLASSNAME([ARGUMENTS]);obj.method_name([ARGUMENTS]);

42 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 22: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

ReferencesvsValues

43 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

PrimitivesvsReferences

▪ PrimitivesarebasicJavatypes▪ int,char,double,float,long,short,boolean,byte▪ Theactualvalueisstoredinthevariable(memory)

▪ Thesearenotobjects(almosteverythingelseis)

44 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 23: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

PrimitivesvsReferences

▪ PrimitivesarebasicJavatypes▪ int,char,double,float,long,short,boolean,byte▪ Theactualvalueisstoredinthevariable(memory)

▪ Thesearenotobjects(almosteverythingelseis)

▪ Referencetypesarearraysandobjects▪ String,int[],Car,…

45 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

HowPrimitivesarestored

▪ Variablesarelikefixedsizememorybuckets

▪ Primitivesaresmallenoughtofitinthem

intdoublebooleanchar

46 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 24: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

HowObjectsarestored

▪ Objectsaretoobigtofitinavariable▪ Instead▪ Theyarestoredsomewhereelse

▪ Variablesstoreanumberthatlocatestheobject

object objectlocationobject object2

object3 object4

47 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

References

▪ Theobject’slocation(address)iscalledareference

▪ Theoperator==comparesreferences

▪ Doescar1==car2?Car car1 = new Car ("peugeot”, “pink”); Car car2 = new Car ("peugeot”, “pink”);

NO

48 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 25: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

References

▪ Theobject’slocation(address)iscalledareference

▪ Theoperator==comparesreferences

▪ Doescar1==car2?

Thisiswhyweusestring1.equals(string2)

Car car1 = new Car ("peugeot”, “pink”); Car car2 = new Car ("peugeot”, “pink”);

NO

49 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

References

Car car1 = new Car ("peugeot”, “pink”); Car car2 = new Car ("peugeot”, “pink”);

Referenceforobjectcar1

car1

Referenceforobjectcar2

car2

Object1peugeotpink

Object2peugeotpink

50 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 26: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

References

▪ Using=onafieldupdatesitsvalueontheobject

Car car1 = new Car ("peugeot”, “pink”);car1.color = “red”;

Referenceforobjectcar1

car1

Object1peugeotpink

51 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

References

Referenceforobjectcar1

car1

▪ Using=onafieldupdatesitsvalueontheobject

Car car1 = new Car ("peugeot”, “pink”);car1.color = “red”;

52 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 27: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

References

Referenceforobjectcar1

car1

Object1peugeotred

▪ Using=onafieldupdatesitsvalueontheobject

Car car1 = new Car ("peugeot”, “pink”);car1.color = “red”;

53 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

▪ Using=onanobjectvariableupdatesthereferencetotheobject

References

Referenceforobjectcar1

car1

Car car1 = new Car ("peugeot”, “pink”);Car car2 = new Car ("peugeot”, “pink”); car1= car2;

Referenceforobjectcar2

car2

Object1peugeotpink

Object2peugeotpink

54 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 28: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

▪ Using=onanobjectvariableupdatesthereferencetotheobject

References

Referenceforobjectcar1

car1

Car car1 = new Car ("peugeot”, “pink”);Car car2 = new Car ("peugeot”, “pink”); car1= car2;

Referenceforobjectcar2

car2

Object1peugeotpink

Object2peugeotpink

55 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

▪ Using=onanobjectvariableupdatesthereferencetotheobject

References

Referenceforobjectcar1

car1

Car car1 = new Car ("peugeot”, “pink”);Car car2 = new Car ("peugeot”, “pink”); car1= car2;

Referenceforobjectcar2

car2

Object1peugeotpink

Object2peugeotpink

56 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 29: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

▪ Using[]or•▪ Followsthereferencetotheobject▪Maymodifytheobject,butneverthereference

Imaginefollowingdirectionstoahouse,youcanmodifythefurnitureinside(analogoustofollowingthereferenceofanobjectandchangingitsfields)

References

57 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

MethodsandReferences

void dofoo (int x, int[] many_ints, Car c){x = 100;many_ints[0] = 100;c.make = “100”;

}

int i = 0;int[] j = {0};Car k = new Car (“peugeot”, “pink”);dofoo(i,j,k);

Whatarethevaluesofi,j,k?

58 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 30: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

MethodsandReferences

▪Primitives(int,double,boolean)

▪Theactualvalueisstoredinthevariable(memory)

▪Sothescopeofthevariableaffectsvalue(passbyvalue)

▪Referencetypes(arraysandobjects)▪Theaddress(ref)totheobjectisstoredinthevariable▪Soevenifthevariablescopechanges,anychangestotheobjectremain(asthevariablepointstotheobject)

(passbyreference)

59 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

TypeandClass

public static void main (String args[]){int x = 0; // type is int, value is 0

String s = args[0];Car k = new Car (“peugeot”, “pink”);

}

Asidenote:

▪ VariableshaveaType▪ Basictypeshaveavalue▪ ReferenceshaveaClass

Type Class

60 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 31: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Exercise1-part2&3www.lri.fr/~anab/teaching/remedialJava/ex-session2.pdf

Hint:useBook[]insideLibrary

Reminder:

▪ Classdefinition

▪ Classuse

public class CLASSNAME {TYPE varname; // fieldTYPE varname = some_value; // initialized fieldCLASSNAME ([ARGUMENTS]) { … } // constructor methodTYPE method_name ([ARGUMENTS]) {…} // another method

}

CLASSNAME obj = new CLASSNAME([ARGUMENTS]);obj.method_name([ARGUMENTS]);

61 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Car car1; // variable car1 stores a ref // that points nowhere (null)

car1 = new Car ("peugeot”, “pink”); // now it points to a new object

NullReference

Referencetonull

car1

Asidenote:null

▪ AsyoucontinuewithJavayoumaycomeacrossthekeywordnull,thisisthevalueofareferencethatisnotpointinganywhere

Referencetonull

car1

62 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 32: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Car car1; // variable car1 stores a ref // that points nowhere (null)

car1 = new Car ("peugeot”, “pink”); // now it points to a new object

NullReference

Referencetonull

car1

ObjectCarpeugeotred

Asidenote:null

▪ AsyoucontinuewithJavayoumaycomeacrossthekeywordnull,thisisthevalueofareferencethatisnotpointinganywhere

ReferencetothenewCarobject

car1

63 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Car car1; // variable car1 stores a ref // that points nowhere (null)

car1 = new Car ("peugeot”, “pink”); // now it points to a new object

NullReferenceAsidenote:null

▪ AsyoucontinuewithJavayoumaycomeacrossthekeywordnull,thisisthevalueofareferencethatisnotpointinganywhere

Youcouldtestifareferenceisnull(e.g.,if(car1==null),butthisisalastresortpractice,thereareusuallywaystowriteyourcodesothisisnotneeded

64 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 33: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Statictypesandmethods

65 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

▪ Thekeywordstaticcanbeappliedtofieldsandmethods

▪ Itstatesthatthefieldormethod:▪ Isdefinedattheclassdeclaration(nottheobject)

▪ Isnotuniqueforeachinstance(object),butissharedbetweenallobjectsoftheclass

static

66 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 34: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

static

public class Car {static int noOfCarsMade = 0;

}

Car car1 = new Car ();Car car2 = new Car (); Car.noOfCarsMade = 2;

▪Whatiscar1.noOfCarsMade?car2.noOfCarsMade?

67 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

▪ Keeptrackofcarsmade

▪WhatdidIforget?

staticexample

public class Car {int noOfCarsMade = 0;

Car() {++noOfCarsMade;

}}

68 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 35: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

▪ Keeptrackofcarsmade

staticfieldexample

public class Car {static int noOfCarsMade = 0;

Car() {++noOfCarsMade;

}}

69 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

staticmethodexample

▪ Dependingonwhetherthecallismadebyastaticmethod

public class Car {static void carColor( Car mycar){

System.out.println(mycar.color); // or this.color}

}

public class Car {void carColor(){

System.out.println(color);}

}

▪ Or…

70 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 36: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

staticmethod

public class Car {String numberPlate;static void whoami(){

System.out.println(numberPlate);}

}

▪ Non-staticmethodscanreferencestaticmethods,butnottheotherwayround,why?

71 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

main

public static void main (String[] args) {

}

▪ Whyismainstatic?

72 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 37: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

main

class Car {void move (int x){

_kilometers += x;}

public static void main (String[] args) {// I cannot call move(100); // as it needs to be static,// BUT I can run it through an object

Car c = new Car();c.move(100);

}}

▪ Whyismainstatic?

73 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

PrinciplesofOOP

74 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 38: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

PrinciplesofOOP

▪ Abstraction(classes…)▪ Groupingfunctionalityrelatedtooriginalobjects/conceptswearetryingtorepresent(hidingtheimplementationdetails,relatedtoencapsulation…)

▪ Oneobject,oneresponsibility

▪ Encapsulation

▪ Inheritance(later)

▪ Polymorphism(later)

75 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Oneobject,oneresponsibility

▪ Ifwewanttoreuse(typesof)objects,theyshouldnotholdtoomuchfunctionality

▪ 2object(types)=>2responsibilities

▪ Weusedelegation/msgpassingbetweenobjects(i.e.thefactthatobjectscancommunicate)todivideresponsibilities

76 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 39: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Oneobject,oneresponsibility(example)

▪ Wewanttocreateanapplicationthatmanagesagarage,andcalculateshowmuchmoneythegaragewouldmakeifallcarsleftthegarageatonce(i.e.expectedgain)

▪ Thepricedependsontheparkingtimeandonthecarbrand

▪ Responsibilities?

77 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Oneobject,oneresponsibility(example)

▪ 4possibleresponsibilities(so4objects)▪ Garage:storecars▪ Car:thecaritself☺

▪ Brand:thecarbrandthataffectsprice▪ BrandPricing:findingthepricebasedonthebrand,timeandamodel

78 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 40: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Oneobject,oneresponsibility(example)

▪ Aclassdiagram

Parking------------------------Car[]cars-----------------------+park(int,Car)+unpark(int):Car

BrandPricer----------------------------------------------+getPrice(Brand,time):double

Car--------------------------idPlate:String-brand:Brand-------------------------

Brand--------------------------name:String-------------------------+getName():String+setName(String)

79 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Encapsulation

▪ Theprinciplethatguaranteesthatnofieldinanobjectcanbemodified(andpossiblybecorrupted)withoutverification

▪ Thestateofafieldcanonlybechanged(ifitismodifiable),bymethodsthatverifythechanges

80 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 41: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Encapsulation

▪ Anexampleofpolarcoordinates

▪ ClassPointdoesnotguaranteeencapsulation

class oneClass{void oneMethod (Point p){

p.init(2.0,3.0);

p.rho = -1; // oh, no!!!}

}

class Point{ double rho; double theta;

void init (double x, double y) {rho = Math.hypot(x,y);theta = Math.atan2(x,y);

}}

81 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Visibility

▪ Somelanguages(likeSmaltalk)donotallowaccesstofieldsfromoutsidetheobject

▪ Others,likeC++,Java,requiresustodeterminethevisibilityoffieldsusingvisibilitymodifiers

▪ Visibilitycanensureencapsulation,byrestrictingthedirectaccesstofieldsofanobject

82 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 42: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Modifyingvisibility

▪ Thereare4visibilitymodifiers:▪ Apublicmemberisvisiblebyeveryone▪ Aprotectedmemberisvisiblebyinheritedclasses(later)andclassesinsidethesamepackage

▪ Amemberwithoutmodifier(orfriend)isvisiblebyclassesinsidethesamepackage

▪ Aprivatemember,isonlyvisibleinsideaclass

Thevisibilityorderis: private<protected<public

83 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Encapsulation

▪ Trytokeepfieldsprivate

class oneClass{void oneMethod (Point p){

p.init(2.0,3.0);System.out.println(p.theta);p.rho = -1; // last 2 lines

// do not compile}

}

class Point{ private double rho; private double theta;

public void init (double x, double y) {rho = Math.hypot(x,y);theta = Math.atan2(x,y);

}}

84 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 43: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Whymodifyvisibility

▪ Controllingaccesstoclassfieldscan:▪ Protectprivateclassinformation(sorta)andavoiderrorsinstate

▪ Clarifieshowotherscanuseyourclass▪ Keepsimplementationseparatefromclassinterface(i.e.viewtotheworld)

85 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Visibilityandmaintenance

▪ Someadvice:▪ Avoidfieldsthatarepublicorprotected(apartfromconstants)

▪ Makemethodspubliconlywhennecessary▪ Aprotectedmethodallowsustoimplementacommonserviceforsubclasses(later),ifthepackagevisibilityisnotavailable

86 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 44: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Encapsulation,aproblem

▪ Imaginewewantrhotoneverbelessthan0▪ Possibility1:controlaccesstorho

class Point{ private double rho; private double theta;

public void init (double x, double y) {…

}

public void setRho (double rho){// do some tests

}}

87 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Encapsulation,aproblem

▪ Imaginewewantrhotoneverbelessthan0▪ Possibility2:whataboutinitialization?

class Point{ private double rho; private double theta;

public void init (double x, double y) {…

}

public void setRho (double rho){// do some tests

}

public Point (double rho, double theta){setRho(rho);

}}

88 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 45: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Encapsulation,aproblem

▪ Imaginewewantrhotoneverbelessthan0▪ Possibility2b(advanced):initialization(constructor)

▪ Canmakethefieldconstant(final)andthecompilerverifiesvaluesareassignedbyeachconstructor,andcannotbechangedafter.

class Point{ private final double rho; private final double theta;

public Point (double rho, double theta){if (rho <= 0) {

throw new IllegalArgumentException ("Illegal rho" + rho); } this.rho = rho; // else will not compile this.theta = theta; // else will not compile}

89 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

DifferenttypesofmethodsClassmethodscanbe:

▪ Constructors:initializeobjectfields

▪ Mutator&Accessormethods:▪ Mutator/Setter:controlandverifychangesinafield.OftenhavetheformsetX()

▪ Accessor/Getter:returnthevalueofaprivatefield(usuallyaccompaniesasettermethod)

▪ Businessmethods:▪ …:performotherneededcalculationsandactions

90 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 46: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Setters/Gettersclass Point{ private double x; private double y;

public Point (double x, double y){this.x = x;this.y = y;

} public double getX (){

return x; } public void setX (double x){

this.x = x; } public double getY (){

return y; } public void setY (double y){

this.y = y; }}

Methodsthatallowaccessto(readandmodify)fields…

Point p = new Point (1.0,1.0);System.out.println(“%d %d\n”,

p.getX(), p.getY() );

91 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Setters/Gettersclass Point{ private double rho; private double theta;

public Point (double x, double y){init(x,y);

} private void init (double x, double y){

rho = hypot(x,y);theta = atan2(x,y);

} public double getX (){

return rho*cos(theta); } public void setX (double x){

init(x,getY()); } public double getY (){

return rho*sin(theta); } public void setY (double y){

init(getX(),y); }}

Methodsthatallowaccessto(readandmodify)fields…

Andchangetheimplementation,withoutchangingthemethodcall

Point p = new Point (1.0,1.0);System.out.println(“%d %d\n”,

p.getX(), p.getY() );

92 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 47: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Don’toverdoit

Don’tputsetters/gettersforeverything

▪ Agettermeansmorecodetomaintain,soaddthemonlywhenneededtoseeafield

▪ Asetterisonlyneededifwearesureweneedtochangethefieldofanobject

▪ Limitthenumberofobjectswithmutators,i.e.objectsthatcanchange(mutablevsimmutableobjects)

93 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Exercise2www.lri.fr/~anab/teaching/remedialJava/ex-session2.pdf

Reminder:

▪ Visibilitykeywordsprivate<protected<public

▪ Membersofaclass(fields,methods)shouldbeprivateunlessnecessary

▪ Setter/gettermethodscanhelpaccessprivatefieldsifneeded

▪ secours

▪ fkns922j

94 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 48: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Notesonstyle

95 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Somenotesonstyle

▪ Usegood/expressivenamesforvariablesString a1;int a2;double b; // BAD!!

String firstName; // GOOD String lastName; // GOOD int temperature; // GOOD

96 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 49: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Somenotesonstyle

▪ Usegood/expressivenamesforvariables▪ Differentiatefieldvariablenamesfromothervariables

public class TimeOfDay{private int _hour;private int _minute;

public TimeOfDay(int hour, int minute){_hour = hour;_minute = minute;

}}

97 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Somenotesonstyle

▪ Usegood/expressivenamesforvariables▪ Differentiatefieldvariablenamesfromothervariables

▪ Javanamingconventions:▪ Variables: Nouns, lowercase first letter, capitals separating words

e.g., x, shape, highScore, fileName

▪ Methods: Verbs, lowercase first letter e.g., getSize(), draw(), drawWithColor()

▪ Classes: Nouns, uppercase first letter e.g., Shape, WebPage, EmailAddress

98 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 50: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Somenotesonstyle

▪ Usegood/expressivenamesforvariables▪ Differentiatefieldvariablenamesfromothervariables

▪ Useindentation

▪ Usewhitespacesincomplexexpressions

99 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Somenotesonstyle

▪ Usegood/expressivenamesforvariables▪ Differentiatefieldvariablenamesfromothervariables

▪ Useindentation

▪ Usewhitespacesincomplexexpressions

▪ Donotduplicatetests

100 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 51: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Somenotesonstyle

▪ Donotduplicatetests

if (basePay < 9.0) { ...

} else if (hours > 60) { ...

} else if (basePay >= 9.0 && hours <= 60) { ...

}

101 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Somenotesonstyle

▪ Donotduplicatetests

if (basePay < 9.0) { ...

} else if (hours > 60) { ...

} else { ...

}

102 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 52: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

Exercise3-Homeworkwww.lri.fr/~anab/teaching/remedialJava/ex-session2.pdf

Reminder:▪ Considerencapsulation:privatefields(andmethodsunless

needed),useofgetter/settermethods

▪ Remembernamingconventions/styles(differentiatefield_variables,namevariablesaslowerCaseNouns,andmethodsaslowerCaseVerbs()

▪ Thestatickeywordcreatesfields/methodsthatarecommonforallobjectsofaclass

103 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

AquickOOPsummary

104 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 53: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

OOP–Object(1)1.Everythingisanobject.▪ Anobjectisanimprovedvariable:itstoresdata,wecanqueryit,requestthatitactsuponitself.

▪ Wecantakeanyconceptofaproblemwewanttosolve(abook,adog,anadministrativeservice,…)andrepresentitasanobjectintheprogram

105 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

OOP–Object(2)2.Aprogramisacollectionofobjectsthattelleachotherwhattodo,bypassingmessages.▪ Tomakearequesttoanobject,wepassitamessage.Morespecifically,arequestcanbeseenasacalltoapublicmethod/functionthatbelongstothetargetobject.

106 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 54: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

OOP–Object(3)3.Eachobjecthasitsowndedicatedmemoryspace,madeupofotherobjects(attributes)▪ Anewobjectismadeupbyotherexistingobjects(orcollectionsofthem).Thisway,thecomplexityofaprogramishiddeninthesimplicityoftheroleofeachobject.

107 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

OOP–Object(4)

4.Eachobjectisofaspecifictype.▪ InOOP,eachobjectisaninstanceofaclass(canbeconsideredasatype,orapattern).Themostimportantcharacteristicofaclassis:▪Whatmessagescanwesendtoit?

108 ABezerianos - Remedial Java - Session-2.key - 6 September 2019

Page 55: Object Oriented Programminganab/teaching/remedialJava/Session-2.pdfObject Oriented Programming All languages make abstractions OOP attempts to represent the real world as close as

OOP–Object(5)

5.Allobjectsofthesametype(class)canreceivethesamemessages.▪ Anobjectofthetype“circle”isalsounobjectofthetype“geometricform”,soacirclecanacceptmessagesdestinedtogeometricforms.

109 ABezerianos - Remedial Java - Session-2.key - 6 September 2019