java & oo basics - fall 2018 · java & oo basics tuesday, october 2 1. announcements sprint...
TRANSCRIPT
![Page 1: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/1.jpg)
Java & OO basicsTuesday, October 2
1
![Page 2: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/2.jpg)
Announcements
Sprint 0 grades have been posted
Contact your team members
2
![Page 3: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/3.jpg)
JavaObject oriented, statically typed, imperative language
With a few functional constructs
Syntax influenced heavily by C++
Compiles to bytecode, that is then executed by a virtual machine (JVM)
Platform independent (as long as you have a JVM)
3
![Page 4: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/4.jpg)
Decomposing programs
In many languages (e.g. C), programs are decomposed into functions, that operate on common data structures.
This is called functional decomposition
4
![Page 5: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/5.jpg)
Functional decomposition
Pros:
Easy to add new functions or features
Cons:
Modern systems perform more than one function
Systems evolve, their functions change
5
![Page 6: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/6.jpg)
Object Oriented Decomposition
A system is decomposed according to the objects a system is supposed to manipulate.
Objects communicate through well defined interfaces.
6
![Page 7: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/7.jpg)
OO Concepts
There are 3 core concept at the heart of OO:
1. Encapsulation
2. Inheritance
3. Polymorphism
7
![Page 8: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/8.jpg)
Encapsulation
Group together data (variables) and methods (functions) in one unit.
Also, all variables should be hidden (private) and only accessible by the methods in the class.
8
![Page 9: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/9.jpg)
Classes
A class is a template for creating objects.
Example: a car
it has two attributes: brand name and fuel level
and two methods: drive and refuel
9
![Page 10: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/10.jpg)
public class Car {
private String brandName; private double fuelLevel;
public Car(String brandName) { this.brandName = brandName; fuelLevel = 10; }
public void drive() { fuelLevel = fuelLevel - 1; } public void refuel() { fuelLevel = 10; } }
10
![Page 11: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/11.jpg)
public class Car {
private String brandName; private double fuelLevel;
public Car(String brandName) { this.brandName = brandName; fuelLevel = 10; }
public void drive() { fuelLevel = fuelLevel - 1; } public void refuel() { fuelLevel = 10; } }
10
These an attribute of the class.
In Java, attributes are known as fields.
The private keyword specifies that the attribute is only accessible by the method of that class.
![Page 12: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/12.jpg)
public class Car {
private String brandName; private double fuelLevel;
public Car(String brandName) { this.brandName = brandName; fuelLevel = 10; }
public void drive() { fuelLevel = fuelLevel - 1; } public void refuel() { fuelLevel = 10; } }
11
![Page 13: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/13.jpg)
public class Car {
private String brandName; private double fuelLevel;
public Car(String brandName) { this.brandName = brandName; fuelLevel = 10; }
public void drive() { fuelLevel = fuelLevel - 1; } public void refuel() { fuelLevel = 10; } }
11
This is the constructor.
It is used for creating objects, with the new keyword
The this keyword disambiguates between the field and parameter.
![Page 14: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/14.jpg)
public class Car {
private String brandName; private double fuelLevel;
public Car(String brandName) { this.brandName = brandName; fuelLevel = 10; }
public void drive() { fuelLevel = fuelLevel - 1; } public void refuel() { fuelLevel = 10; } }
12
![Page 15: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/15.jpg)
public class Car {
private String brandName; private double fuelLevel;
public Car(String brandName) { this.brandName = brandName; fuelLevel = 10; }
public void drive() { fuelLevel = fuelLevel - 1; } public void refuel() { fuelLevel = 10; } }
12
These are methods.
Methods are operations that this object can perform
![Page 16: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/16.jpg)
public class Car {
private String brandName; private double fuelLevel;
public Car(String brandName) { this.brandName = brandName; fuelLevel = 10; }
public void drive() { fuelLevel = fuelLevel - 1; } public void refuel() { fuelLevel = 10; } }
12
![Page 17: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/17.jpg)
public - anybody can access (same as C++)
protected - only code in subclasses can access (same as C++) & code in the same package
default (package) - only code in the same package can access
private - only code in the same class can access (same as C++)
Access modifiers
13
![Page 18: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/18.jpg)
Information hidingThe private keyword is used to keep all data hidden
But what if I want to access, or to change, the value outside of a class?
We define special methods, getters and setters
Only define getters and setters if you need them!
14
![Page 19: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/19.jpg)
public double getFuelLevel() { return fuelLevel; }
public void setBrandName(String brandName) { this.brandName = brandName; }
15
![Page 20: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/20.jpg)
Creating objects
Objects are created with the new keyword
Car car = new Car("Ford");
This invokes the constructor with the right parameters.
16
![Page 21: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/21.jpg)
Type inference
17
You omit the variable type and write
var car = new Car("Ford");
The compiler will infer that car is of type Car
Method parameters must have a type
public Car(val brandName){…} will not compile
![Page 22: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/22.jpg)
Inheritance
Also known as subclassing or subtyping
Classes can inherit fields and methods from other classes with the extends keyword.
We want to model a Sedan, that has all the fields and methods of a car.
Defines a "is-a" relationship between classes.
18
![Page 23: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/23.jpg)
public class Sedan extends Car {
private int noOfDoors = 4;
public Sedan(String name) { super(name); } }
19
![Page 24: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/24.jpg)
public class Sedan extends Car {
private int noOfDoors = 4;
public Sedan(String name) { super(name); } }
19
The class declaration now contains the extends declaration
![Page 25: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/25.jpg)
public class Sedan extends Car {
private int noOfDoors = 4;
public Sedan(String name) { super(name); } }
20
public Car(String brandName) { super(brandName); }
![Page 26: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/26.jpg)
public class Sedan extends Car {
private int noOfDoors = 4;
public Sedan(String name) { super(name); } }
20
The constructor now contains the super keyword. This passes the parameters to Car's constructor.
public Car(String brandName) { super(brandName); }
![Page 27: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/27.jpg)
Inheritance
Sedan now inherits Car's attributes and method:
Sedan s = new Sedan("Ford"); s.drive();
21
![Page 28: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/28.jpg)
Inheritance
Java only supports single inheritance (you can only extend one class)
All classes, by default, extend Object.
22
![Page 29: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/29.jpg)
Polymorphism
Polymorphism means taking different forms
In Java, this refers to the fact that a subclass can always be used instead of a parent class.
e.g. You can use a Sedan object, even if a Car is required:
Car c = new Sedan("Ford");
23
![Page 30: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/30.jpg)
Class hierarchies
We want to model a boat. It has a brand name, a fuel level, but it cannot drive.
We can create an abstract class, Vehicle, from which we can extend for Car and Boat
24
![Page 31: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/31.jpg)
public class Vehicle {
private String brandName; protected double fuelLevel;
public Vehicle(String brandName) { fuelLevel = 10; this.brandName = brandName; }
public void refuel() { fuelLevel = 10; }
public double getFuelLevel() { return fuelLevel; }
public void setBrandName(String brandName) { this.brandName = brandName; } }
25
![Page 32: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/32.jpg)
public class Vehicle {
private String brandName; protected double fuelLevel;
public Vehicle(String brandName) { fuelLevel = 10; this.brandName = brandName; }
public void refuel() { fuelLevel = 10; }
public double getFuelLevel() { return fuelLevel; }
public void setBrandName(String brandName) { this.brandName = brandName; } }
25
The protected keyword allows subclasses to access this field
![Page 33: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/33.jpg)
public class Vehicle {
private String brandName; protected double fuelLevel;
public Vehicle(String brandName) { fuelLevel = 10; this.brandName = brandName; }
public void refuel() { fuelLevel = 10; }
public double getFuelLevel() { return fuelLevel; }
public void setBrandName(String brandName) { this.brandName = brandName; } }
25
We extracted all the common functionality between Car and Boat (the name and the fuel) into it's own class
The protected keyword allows subclasses to access this field
![Page 34: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/34.jpg)
public class Car extends Vehicle {
public Car(String brandName) { super(brandName); }
public void drive() { fuelLevel = fuelLevel - 1; // some other code that "drives" the car }
}
26
![Page 35: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/35.jpg)
public class Car extends Vehicle {
public Car(String brandName) { super(brandName); }
public void drive() { fuelLevel = fuelLevel - 1; // some other code that "drives" the car }
}
26
We access the protected field in Vehicle
![Page 36: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/36.jpg)
public class Boat extends Vehicle {
public Boat(String name) { super(name); }
public void sail() { fuelLevel = fuelLevel - 1; // some code relating to sailing } }
27
![Page 37: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/37.jpg)
public class Boat extends Vehicle {
public Boat(String name) { super(name); }
public void sail() { fuelLevel = fuelLevel - 1; // some code relating to sailing } }
27
The class Boat now has to deal only with Boat specific stuff
![Page 38: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/38.jpg)
Abstract Classes & MethodsYou can define abstract classes, that cannot be instantiated
public abstract class Vehicle {…}
val v = new Vehicle(); will not compile
Abstract methods have no implementation, and can only be declared in abstract classes
public abstract void drive();
28
![Page 39: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/39.jpg)
InterfacesAn interface is abstract type, like an abstract class, that only contains method signatures and fields (static of final).
public interface Driveable { public void drive(); }
Like abstract classes, you can not instantiate interfaces.
29
![Page 40: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/40.jpg)
Interfaces
A class can extend an interface using the implements keyword
public class Car implements Drivable { … }
A class can implement more than one interface
30
![Page 41: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/41.jpg)
What's the advantage?
It allows us to write code that is more generic public void refuel(Vehicle v) { v.refuel(); }
This will work with any vehicle.
It keeps the code clean, and easy to maintain.
31
![Page 42: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/42.jpg)
What's the advantage?
It allows us to write code that is more generic public void refuel(Vehicle v) { v.refuel(); }
This will work with any vehicle.
It keeps the code clean, and easy to maintain.
31
Dynamic polymorphism
![Page 43: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/43.jpg)
Method overloading
In Java, multiple methods can have the same name, as long they have different parameters (type and/or numbers) public void refuel() { fuelLevel = 10; }
public void refuel(int x) { fuelLevel = x; }
32
![Page 44: Java & OO basics - Fall 2018 · Java & OO basics Tuesday, October 2 1. Announcements Sprint 0 grades have been posted Contact your team members 2. Java Object oriented, statically](https://reader033.vdocument.in/reader033/viewer/2022050116/5f4d669f3fb5be277f6134a9/html5/thumbnails/44.jpg)
Method overloading
In Java, multiple methods can have the same name, as long they have different parameters (type and/or numbers) public void refuel() { fuelLevel = 10; }
public void refuel(int x) { fuelLevel = x; }
32
Static polymorphism