Object Oriented Programming
What is a class?
A class is a user-defined data type which can be used when primitive/basic data types (such as int or char) are not enough to satisfy the needs of the program. It allows the programmer to combine multiple primitive or user-defined data types into one single data type.
What is an object?
An object is an instance of a class. Think of the class as the “blueprint” for the object. The class defines what types of data are going to be stored in the object.
Example: Baby
class Baby:
String name
float length
Date birthdate
To store the baby’s birthdate, we will declare a separate class Date
class Date:
int year
int month
int day
A sample Baby object would look like:
name: "Sally"
length: 20.1
birthdate: Date (year: 2021, month: 12, day: 25)
Syntax for the Baby class in Java or Processing would look like:
class Baby {
private String name;
private float length;
private Date birthdate;
public Baby(String name0, float length0, Date birthdate0) {
name = name0;
length = length0;
birthdate = birthdate0;
}
}
The Date class would look like:
class Date {
private int year;
private int month;
private int day;
public Baby(String year0, float month0, Date day0) {
year = year0;
month = month0;
day = day0;
}
}
To create a Baby object (an instance of the Baby class):
Date birthdate = new Date(2021, 12, 25);
Baby myBaby = new Baby("Sally", 20.1, birthdate);
To access or modify the fields of an object in Java, you must either create “getter” and “setter” methods or declare the fields as public or protected to allow use of the . operator (not recommended since any class will be able to freely access the fields).
class Baby {
private String name; // Alternatively, you can declare these as public/protected instead of private
private float length;
private Date birthdate;
public Baby(String name0, float length0, Date birthdate0) {
name = name0;
length = length0;
birthdate = birthdate0;
}
// Gets the current name
public String getName() {
return name;
}
// Sets the name to a new name
public void setName(String newName) {
name = newName;
}
// Do this for any other fields that need accessing ...
}
public class Main {
public static void main(String[] args) {
Baby myBaby = new Baby("Sally", 20.1, new Date(2021, 12, 25));
System.out.println("My baby's name is " + myBaby.getName());
myBaby.setName("Samantha"); // Set a new name
System.out.println("My baby's name is " + myBaby.getName());
}
}
Documentation for classes and objects in Python can be found here.
Sample implementation of the Baby and Date classes in Python. Remember that all Python instance methods must contain the parameter self.
class Baby:
# Any instance methods must contain the parameter "self"
def __init__(self, name, length, birthdate):
self.name = name
self.length = length
self.birthdate = birthdate
class Date:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
Getting and setting fields in Python can be done using the . operator.
myBaby = Baby("Sally", 20.1, Date(2021, 12, 25))
print("My baby's name is", myBaby.name)
print("My baby's birth year is", myBaby.birthdate.year)
print("My baby is", myBaby.length, "inches long.")
myBaby.length += 1 # Baby grew by an inch
print("My baby is", myBaby.length, "inches long.")
Python has instance methods for classes as well. Here’s an example:
class Baby:
# Any instance methods must contain the parameter "self"
def __init__(self, name, length, birthdate):
self.name = name
self.length = length
self.birthdate = birthdate
# Display info about the baby
def showOff(self):
print("My name is", self.name + ". I am", self.length, "inches long, and I was born on", self.birthdate.to_string())
class Date:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
# Convert the date to a readable string and return it
def to_string(self):
return str(self.year) + "-" + str(self.month) + "-" + str(self.day)
myBaby = Baby("Sally", 20.1, Date(2021, 12, 25))
myBaby.showOff()
Sample code can be found in the resource package.