object oriented programminganab/teaching/remedialjava/session-2.pdfobject oriented programming all...
TRANSCRIPT
(remedial)Java
1 ABezerianos - Remedial Java - Session-2.key - 6 September 2019
ObjectOrientedProgramming
2 ABezerianos - Remedial Java - Session-2.key - 6 September 2019
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
▪ 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
▪ 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
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
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
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
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
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
▪ 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OOP–Object(5)
5.Allobjectsofthesametype(class)canreceivethesamemessages.▪ Anobjectofthetype“circle”isalsounobjectofthetype“geometricform”,soacirclecanacceptmessagesdestinedtogeometricforms.
109 ABezerianos - Remedial Java - Session-2.key - 6 September 2019