Day 3. COMP 1006/1406A Summer M. Jason Hinek Carleton University

Similar documents
Lecture 3. COMP1006/1406 (the Java course) Summer M. Jason Hinek Carleton University

Day 2. COMP 1006/1406A Summer M. Jason Hinek Carleton University

Day 4. COMP1006/1406 Summer M. Jason Hinek Carleton University

Lecture 6. COMP1006/1406 (the OOP course) Summer M. Jason Hinek Carleton University

Day 5. COMP1006/1406 Summer M. Jason Hinek Carleton University

Graphical Interface and Application (I3305) Semester: 1 Academic Year: 2017/2018 Dr Antoun Yaacoub

Distributed Systems Recitation 1. Tamim Jabban

Java Object Oriented Design. CSC207 Fall 2014

Object Oriented Programming is a programming method that combines: Advantage of Object Oriented Programming

What is Inheritance?

ITI Introduction to Computing II

Object Oriented Programming in Java. Jaanus Pöial, PhD Tallinn, Estonia

CS-202 Introduction to Object Oriented Programming

Distributed Systems Recitation 1. Tamim Jabban

Computer Science II (20073) Week 1: Review and Inheritance

Carleton University COMP1406/1006, Summer 2013 Tutorial 2

ITI Introduction to Computing II

Programming II (CS300)

OOPs Concepts. 1. Data Hiding 2. Encapsulation 3. Abstraction 4. Is-A Relationship 5. Method Signature 6. Polymorphism 7. Constructors 8.

Contents. I. Classes, Superclasses, and Subclasses. Topic 04 - Inheritance

Programming II (CS300)

CSC207H: Software Design. Java + OOP. CSC207 Winter 2018

Day 6. COMP1006/1406 Summer M. Jason Hinek Carleton University

CmSc 150 Fundamentals of Computing I. Lesson 28: Introduction to Classes and Objects in Java. 1. Classes and Objects

Instance Members and Static Members

Principles of Object Oriented Programming. Lecture 4

Java Fundamentals (II)

Chapter 6 Introduction to Defining Classes

Chapter 4 Defining Classes I

C08: Inheritance and Polymorphism

C++ Important Questions with Answers

COMP 250 Winter 2011 Reading: Java background January 5, 2011

CSC207H: Software Design. Java + OOP. CSC207 Winter 2018

Inheritance. Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L

Class definition. complete definition. public public class abstract no instance can be created final class cannot be extended

Informatik II (D-ITET) Tutorial 6

Super-Classes and sub-classes

Example: Count of Points

Building custom components IAT351

Informatik II. Tutorial 6. Mihai Bâce Mihai Bâce. April 5,

CS 251 Intermediate Programming Methods and Classes

CS 251 Intermediate Programming Methods and More

Subclass Gist Example: Chess Super Keyword Shadowing Overriding Why? L10 - Polymorphism and Abstract Classes The Four Principles of Object Oriented

Inheritance and Polymorphism

Outline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring

Encapsulation. Inf1-OOP. Getters and Setters. Encapsulation Again. Inheritance Encapsulation and Inheritance. The Object Superclass

Inf1-OOP. Inheritance and Interfaces. Ewan Klein, Perdita Stevens. January 12, School of Informatics

COMP 250 Fall inheritance Nov. 17, 2017

Inf1-OP. Classes with Stuff in Common. Inheritance. Volker Seeker, adapting earlier version by Perdita Stevens and Ewan Klein.

Inheritance (Part 5) Odds and ends

Programming II (CS300)

Java Class Design. Eugeny Berkunsky, Computer Science dept., National University of Shipbuilding

Cmpt 135 Assignment 2: Solutions and Marking Rubric Feb 22 nd 2016 Due: Mar 4th 11:59pm

Inf1-OP. Inheritance. Volker Seeker, adapting earlier version by Perdita Stevens and Ewan Klein. March 12, School of Informatics

Java Magistère BFA

What are the characteristics of Object Oriented programming language?

Object Class. EX: LightSwitch Class. Basic Class Concepts: Parts. CS257 Computer Science II Kevin Sahr, PhD. Lecture 5: Writing Object Classes

CMSC 132: Object-Oriented Programming II. Inheritance

AP Computer Science Chapter 10 Implementing and Using Classes Study Guide

HAS-A Relationship. Association is a relationship where all objects have their own lifecycle and there is no owner.

Lesson 10B Class Design. By John B. Owen All rights reserved 2011, revised 2014

CS304 Object Oriented Programming Final Term

More About Objects. Zheng-Liang Lu Java Programming 255 / 282

Objects and Classes. 1 Creating Classes and Objects. CSCI-UA 101 Objects and Classes

Abstract Classes and Interfaces

Chapter 15: Object Oriented Programming

Lesson 10A OOP Fundamentals. By John B. Owen All rights reserved 2011, revised 2014

1B1b Inheritance. Inheritance. Agenda. Subclass and Superclass. Superclass. Generalisation & Specialisation. Shapes and Squares. 1B1b Lecture Slides

CMSC 132: Object-Oriented Programming II

COP 3330 Final Exam Review

Encapsulation. Administrative Stuff. September 12, Writing Classes. Quick review of last lecture. Classes. Classes and Objects

CH. 2 OBJECT-ORIENTED PROGRAMMING

1B1b Classes in Java Part I

Relationships Between Real Things. CSE 143 Java. Common Relationship Patterns. Composition: "has a" CSE143 Sp Student.

Data Structures (list, dictionary, tuples, sets, strings)

Classes. Classes as Code Libraries. Classes as Data Structures. Classes/Objects/Interfaces (Savitch, Various Chapters)

Introduction to OO Concepts

Example: Count of Points

Introduction to Programming Using Java (98-388)

Relationships Between Real Things CSC 143. Common Relationship Patterns. Composition: "has a" CSC Employee. Supervisor

CREATED BY: Muhammad Bilal Arslan Ahmad Shaad. JAVA Chapter No 5. Instructor: Muhammad Naveed

Lecture 2. COMP1406/1006 (the Java course) Fall M. Jason Hinek Carleton University

Object Oriented Programming

Programming Language Concepts Object-Oriented Programming. Janyl Jumadinova 28 February, 2017

Relationships Between Real Things CSE 143. Common Relationship Patterns. Employee. Supervisor

Informatik II Tutorial 6. Subho Shankar Basu

COMP 202. More on OO. CONTENTS: static revisited this reference class dependencies method parameters variable scope method overloading

Data Abstraction. Hwansoo Han

Binghamton University. CS-140 Fall Problem Solving. Creating a class from scratch

Classes, Objects, and OOP in Java. June 16, 2017

Basic Object-Oriented Concepts. 5-Oct-17

Java Review. Fundamentals of Computer Science

Java: introduction to object-oriented features

Goals for Today. CSE1030 Introduction to Computer Science II. CSE1030 Lecture #9. Review is-a versus has-a. Lecture #9 Inheritance I

Static, Final & Memory Management

Exercise: Singleton 1

Software Design and Analysis for Engineers

Outline. Inheritance. Abstract Classes Interfaces. Class Extension Overriding Methods Inheritance and Constructors Polymorphism.

Cloning Enums. Cloning and Enums BIU OOP

Classes. Classes as Code Libraries. Classes as Data Structures

Transcription:

Day 3 COMP 1006/1406A Summer 2016 M. Jason Hinek Carleton University

today s agenda assignments 1 was due before class 2 is posted (be sure to read early!) a quick look back testing test cases for arrays object oriented programming (OOP) OOP intro classes and objects constructors encapsulation the Object class inheritance and method overriding inheritance and constructors class attributes 2

announcements Office Hours Tuesday 8-9pm after the tutorial (2 TAs) Wednesday 1-3pm in Jason s office Thursday 8-9pm after the tutorial (2 TAs) Friday 2-4pm Friday 6-8pm 3

announcements Office Hours Tuesday 8-9pm after the tutorial (2 TAs) or 5-6pm and 8-9pm with 1 TA each? Wednesday 1-3pm in Jason s office Thursday 8-9pm after the tutorial (2 TAs) or 5-6pm and 8-9pm with 1 TA each? Friday 2-4pm Friday 6-8pm 3

last time... Black box testing test the interface (contract) use the pre-conditions and post-conditions no knowledge of the algorithm/code is known White box testing test the algorithms/code you have (some) knowledge of the code Pay attention to border cases near border cases extreme cases typical casses 4

test cases for arrays public int foo(int[] input); // input: an array of integers // output: find the biggest number of the input how many valid inputs are there to this method? 5

test cases for arrays public int foo(int[] input); // input: an array of integers // output: find the biggest number of the input how many valid inputs are there to this method? [ ] {{ 1 5

test cases for arrays public int foo(int[] input); // input: an array of integers // output: find the biggest number of the input how many valid inputs are there to this method? [ ] + [x 1 ] {{{{ 1 2 32 5

test cases for arrays public int foo(int[] input); // input: an array of integers // output: find the biggest number of the input how many valid inputs are there to this method? [ ] + [x 1 ] +[x 1,x 2 ] {{{{{{ 1 2 32 2 64 5

test cases for arrays public int foo(int[] input); // input: an array of integers // output: find the biggest number of the input how many valid inputs are there to this method? [ ] + [x 1 ] +[x 1,x 2 ] + +[x 1,x 2,...,x {{{{{{{{ 232] 1 2 32 2 64 2 137,438,953,472 5

test cases for arrays public int foo(int[] input); // input: an array of integers // output: find the biggest number of the input how many valid inputs are there to this method? [ ] + [x 1 ] +[x 1,x 2 ] + +[x 1,x 2,...,x {{{{{{{{ 232] 1 2 32 2 64 there is about 2 25 seconds in a year 2 137,438,953,472 5

test cases for arrays public int foo(int[] input); // input: an array of integers // output: find the biggest number of the input how many valid inputs are there to this method? [ ] + [x 1 ] +[x 1,x 2 ] + +[x 1,x 2,...,x {{{{{{{{ 232] 1 2 32 2 64 there is about 2 25 seconds in a year 2 137,438,953,472 it is estimated that there are about 2 84 atoms in a 70kg person 5

test cases for arrays public int foo(int[] input); // input: an array of integers // output: find the biggest number of the input how many valid inputs are there to this method? [ ] + [x 1 ] +[x 1,x 2 ] + +[x 1,x 2,...,x {{{{{{{{ 232] 1 2 32 2 64 there is about 2 25 seconds in a year 2 137,438,953,472 it is estimated that there are about 2 84 atoms in a 70kg person it is estimated that there are about 2 272 atoms in the observable universe 5

test cases for arrays public int foo(string[] input); // input: an array of strings // output: the total number of characters in all // strings in the array that are not // whitespace what black box test cases do we write for this method? 6

test cases for arrays public int foo(string[] input); // input: an array of strings // output: the total number of characters in all // strings in the array that are not // whitespace what black box test cases do we write for this method? empty array border case for size of array base case (recursion) 6

test cases for arrays public int foo(string[] input); // input: an array of strings // output: the total number of characters in all // strings in the array that are not // whitespace what black box test cases do we write for this method? empty array border case for size of array base case (recursion) array with single elements near border case first recursive case 6

test cases for arrays public int foo(string[] input); // input: an array of strings // output: the total number of characters in all // strings in the array that are not // whitespace what black box test cases do we write for this method? empty array border case for size of array base case (recursion) array with single elements near border case first recursive case array with several elements typical cases several recursive calls 5, 10, 50, 100, 5000 6

test cases for arrays public int foo(string[] input); // input: an array of strings // output: the total number of characters in all // strings in the array that are not // whitespace what black box test cases do we write for this method? empty array border case for size of array base case (recursion) array with single elements near border case first recursive case array with several elements typical cases several recursive calls 5, 10, 50, 100, 5000 large arrays extreme cases many recursive calls 100000, 1000000, 100000000 6

test cases for arrays black box test cases for arrays two dimensions to test now the size of the array the data inside the array test cases for array size smallest valid size (typically empty or singleton array) next smallest valid size typical sizes extreme sizes test cases for data in array multiple tests for each array size use black box test cases for the data depends on the given pre/postconditions 7

test cases for arrays black box test cases for arrays two dimensions to test now the size of the array the data inside the array test cases for array size smallest valid size (typically empty or singleton array) next smallest valid size typical sizes extreme sizes test cases for data in array multiple tests for each array size use black box test cases for the data depends on the given pre/postconditions gets messy really quickly... corner cases! 7

let s take a break... for 5 minutes 8

9

software engineering There is no one single best way of writing code 10

software engineering There is no one single best way of writing code small program (HelloWorld) 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) modular programming 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) modular programming break up program into modules each has independent functionality 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) modular programming break up program into modules each has independent functionality procedural programming 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) modular programming break up program into modules each has independent functionality procedural programming a sequence of procedure calls that modify the state Basic, Pascal, Fotran, C 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) modular programming break up program into modules each has independent functionality procedural programming a sequence of procedure calls that modify the state Basic, Pascal, Fotran, C, Java, C++ 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) modular programming break up program into modules each has independent functionality procedural programming a sequence of procedure calls that modify the state Basic, Pascal, Fotran, C, Java, C++ object oriented programming 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) modular programming break up program into modules (classes in Java) each has independent functionality procedural programming a sequence of procedure calls that modify the state Basic, Pascal, Fotran, C, Java, C++ object oriented programming a collection of interacting objects 10

software engineering There is no one single best way of writing code small program (HelloWorld) main method sequence of statements bigger programs reduce duplicate code with methods (functions) collect data together (arrays) modular programming break up program into modules (classes in Java) each has independent functionality procedural programming a sequence of procedure calls that modify the state Basic, Pascal, Fotran, C, Java, C++ object oriented programming a collection of interacting objects objects have both state and behaviour 10

software engineering large projects are very complex 11

software engineering large projects are very complex humans are not perfect... 11

software engineering large projects are very complex humans are not perfect... we make mistakes when solving complex problems 11

software engineering large projects are very complex humans are not perfect... we make mistakes when solving complex problems we make mistakes because we are lazy 11

software engineering large projects are very complex humans are not perfect... we make mistakes when solving complex problems we make mistakes because we are lazy we cheat when we can 11

software engineering large projects are very complex humans are not perfect... we make mistakes when solving complex problems we make mistakes because we are lazy we cheat when we can how can we reduce the impacts humans have on code? 11

software engineering large projects are very complex humans are not perfect... we make mistakes when solving complex problems we make mistakes because we are lazy we cheat when we can how can we reduce the impacts humans have on code? write less code 11

software engineering large projects are very complex humans are not perfect... we make mistakes when solving complex problems we make mistakes because we are lazy we cheat when we can how can we reduce the impacts humans have on code? write less code prevent cheating 11

software engineering large projects are very complex humans are not perfect... we make mistakes when solving complex problems we make mistakes because we are lazy we cheat when we can how can we reduce the impacts humans have on code? write less code prevent cheating simplify the complexity (abstraction) 11

procedural programming data structures hold data (state of the program) a main method provides coarse-grain control flow for program program is a sequence of procedure calls that modify the state each procedure should do one thing (modularization) 12

procedural programming data structures hold data (state of the program) a main method provides coarse-grain control flow for program program is a sequence of procedure calls that modify the state each procedure should do one thing (modularization) why might we want to program like this? 12

procedural programming data structures hold data (state of the program) a main method provides coarse-grain control flow for program program is a sequence of procedure calls that modify the state each procedure should do one thing (modularization) why might we want to program like this? code is easier for us to read 12

procedural programming data structures hold data (state of the program) a main method provides coarse-grain control flow for program program is a sequence of procedure calls that modify the state each procedure should do one thing (modularization) why might we want to program like this? code is easier for us to read code is easier to test/debug 12

procedural programming data structures hold data (state of the program) a main method provides coarse-grain control flow for program program is a sequence of procedure calls that modify the state each procedure should do one thing (modularization) why might we want to program like this? code is easier for us to read code is easier to test/debug code is easier for others to read 12

procedural programming data structures hold data (state of the program) a main method provides coarse-grain control flow for program program is a sequence of procedure calls that modify the state each procedure should do one thing (modularization) why might we want to program like this? code is easier for us to read saves us time developing/maintaining/upgrading code code is easier to test/debug saves us time developing/maintaining/upgrading code code is easier for others to read saves us time developing/maintaining/upgrading code 12

procedural programming data structures hold data (state of the program) a main method provides coarse-grain control flow for program program is a sequence of procedure calls that modify the state each procedure should do one thing (modularization) why might we want to program like this? code is easier for us to read saves us time developing/maintaining/upgrading code saves us money, time and our sanity code is easier to test/debug saves us time developing/maintaining/upgrading code saves us money, time and our sanity code is easier for others to read saves us time developing/maintaining/upgrading code saves us money, time and our sanity 12

object oriented programming (OOP) a different approach to programming that focuses on objects interacting with each other (passing messages to each other) Four main principles of object oriented programming: abstraction - allows us use manage complexity - allows us to use objects without knowing exactly how they work encapsulation - allows us to model very complex real-world problems nicely - is a mechanism to allow for abstraction inheritance - promotes code sharing and re-usability (write less code!) - allows us to exploit natural hierarchical structure polymorphism - simplifies code understanding - allows us to standardize method names 13

object oriented programming (OOP) abstraction classes implement abstract data types (ADTs) classes have an interface and an implementation encapsulation encapsulation has two meanings 1) objects have both state and behaviour 2) objects hide their internal structure (information hiding) inheritance classes are able to inherit state and behaviour from other classes polymorphism objects can act like other objects. dynamic binding allows objects to determine which methods to use at runtime. methods can have the same name. early binding determines which method should be executed (overloading) Note: OOP shines in BIG projects (don t be discouraged if it seems like a lot of work at first) 14

classes and objects data type is a set of values and a set of operations defined on those values 15

classes and objects data type is a set of values and a set of operations defined on those values int the integers 2,147,483,648 2,147,483,647 +, -, *, /, %, <, >, <=,... 15

classes and objects data type is a set of values and a set of operations defined on those values int the integers 2,147,483,648 2,147,483,647 +, -, *, /, %, <, >, <=,... String sequence of zero or more characters + (concatenation), toupper(), etc 15

classes and objects data type is a set of values and a set of operations defined on those values int the integers 2,147,483,648 2,147,483,647 +, -, *, /, %, <, >, <=,... String sequence of zero or more characters + (concatenation), toupper(), etc Java has 8 primitive data types 15

classes and objects data type is a set of values and a set of operations defined on those values int the integers 2,147,483,648 2,147,483,647 +, -, *, /, %, <, >, <=,... String sequence of zero or more characters + (concatenation), toupper(), etc Java has 8 primitive data types Many non-primitive data types are available (String, Date, etc) 15

classes and objects data type is a set of values and a set of operations defined on those values int the integers 2,147,483,648 2,147,483,647 +, -, *, /, %, <, >, <=,... String sequence of zero or more characters + (concatenation), toupper(), etc Java has 8 primitive data types Many non-primitive data types are available (String, Date, etc) Java allows us to make our own data types each class is a new data type specifies data and operations on the data 15

classes and objects data type is a set of values and a set of operations defined on those values a class is a data type (the cookie cutter) specifies what data can be stored instance attributes defines operations on that data instance methods 16

classes and objects data type is a set of values and a set of operations defined on those values a class is a data type (the cookie cutter) specifies what data can be stored instance attributes defines operations on that data instance methods can have its own data (how many cookies made?) class attributes / static attributes / class fields 16

classes and objects data type is a set of values and a set of operations defined on those values a class is a data type (the cookie cutter) specifies what data can be stored instance attributes defines operations on that data instance methods can have its own data (how many cookies made?) class attributes / static attributes / class fields can have its own functionality (bottle opener?) class methods / static methods (functions) 16

classes and objects data type is a set of values and a set of operations defined on those values a class is a data type (the cookie cutter) specifies what data can be stored instance attributes defines operations on that data instance methods can have its own data (how many cookies made?) class attributes / static attributes / class fields can have its own functionality (bottle opener?) class methods / static methods (functions) an object is an instantiation of a class (the cookie) holds data (the state of the object) instance attributes has operations built-in to it (the bahaviour of the object) instance methods 16

anatomy of a class public class MyClass{ /* class attributes */ public static int count; public static final double PI = 3.145; /* instance attributes */ public int a; private String s; /* constructors */ public MyClass(){... public MyClass(int x){... /* instance methods */ public int addone(){... /* class methods */ public static void main(string[] args){... 17

anatomy of a class public class MyClass{ /* class attributes */ defines the STATE public static int count; of the class public static final double PI = 3.145; /* instance attributes */ defines the STATE public int a; of each object private String s; /* constructors */ initialization code public MyClass(){... when creating an object public MyClass(int x){... /* instance methods */ defines the BEHAVIOUR public int addone(){... of objects /* class methods */ defines the BEHAVIOUR public static void main(string[] args){... of the class 17

class as a container public class Student{ /* instance attributes */ public String name; public int id; 18

class as a container public class Student{ /* instance attributes */ public String name; public int id; simple aggregation of data (a container) you should have seen this in 1005/1405 data stored can be different types array was good for collecting together data of the same type (doesn t work for different data though) this is essentially a record in Pascal or a struct in C 18

class as a container public class Student{ /* instance attributes */ public String name; public int id; declare variable of type Student like any other variable Student s; instantiate the actual object with new operator and constructor s = new Student(); access attributes with dot operator and name of attribute s.name = "fig"; in an array you access the data by its position (index) in the array names[2] = "date"; 19

constructors a constructor contains code that is executed when an object of the class is instantiated (created) for example, int the declaration Student s = new Student(); Student() is a constructor for the Student class we can think of constructors as creation or initialization methods, but constructors must have the same name as the class constructors have no return value (not even void) constructors can only be called with the new operator (and one other time that we will see soon) constructors are NOT methods (although they are similar) 20

constructors public class Student{ public String name; public int id; /* constructor */ public Student(){ name = "none"; id = -1; an example of a simple constructor 21

constructors public class Student{ public String name; public int id; /* constructor */ public Student(String name, int id){ name = name; id = id; constructors can have input parameters 22

constructors public class Student{ public String name; public int id; /* constructor */ public Student(String name, int id){ this.name = name; this.id = id; constructors can have input parameters Java keyword this a reference to the current object used in constructors and instance methods has other uses we ll discuss soon this is needed here because attributes name and id are not in scope (the input parameters name and id are in scope) 22

constructors public class Student{ public String name; public int id; /* constructor */ public Student(String nameinit, int idinit){ name = nameinit; id = idinit; this is not needed here 23

constructors public class Student{ public String name; public int id; /* constructor */ public Student(String nameinit, int idinit){ this.name = nameinit; this.id = idinit; this is not needed here you can still use it though! I will often include it in constructors for this course 23

constructors public class Student{ public String name; public int id; /* constructors */ public Student(String nameinit, int idinit){ this.name = nameinit; this.id = idinit; public Student(String nameinit){ this.name = nameinit; this.id = -1; Java allows method and constructor overloading can have as many constructors as is useful 24

signatures and overloading A method or constructor signature consists of the name of the method or constructor the input parameters of the method or constructor (number, type and order) Java identifies methods and constructors by their signatures. This allows for method and constructor overloading. overloading allows multiple methods/constructors to have the same name as long as their signatures are different (return types do not matter!) this is very useful! Consider the println method https://docs.oracle.com/javase/8/docs/api/java/io/printstream.html 25

constructors public class Student{ public String name; public int id; public static void main(string[] args){ Student s = new Student(); A class does not need to have a specified constructor to work. 26

constructors public class Student{ public String name; public int id; public Student(){ public static void main(string[] args){ Student s = new Student(); A class does not need to have a specified constructor to work. Java automatically provides a zero argument default constructor if none are specified 26

constructors public class Student{ public String name; public int id; public Student(){ public static void main(string[] args){ Student s = new Student(); A class does not need to have a specified constructor to work. Java automatically provides a zero argument default constructor if none are specified Java only does this if NO constructors are specified we need to be careful! dangers to come... 26

constructor chaining a constructor can only be called in two situations in Java when instantiating an object with new House h = new House("123 Sesame Street"); from within a constructor of the same class calling a constructor from within another constructor of the same class is called constructor chaining the keyword this can also be used to call constructors 27

constructor chaining calling a constructor from within another constructor of the same class is called constructor chaining consider three constructors public Ball() // initialize ball at x=y=0 with speed dx=dy=0 public Ball(int x, int y) // initialize ball with given x,y and speed dx=dy=0 public Ball(int x, int y, int dx, int dy) // initialize ball with given coordinates and speed 28

constructor chaining public Ball(){ this.x = 0; this.y = 0; this.dx = 0; this.dy = 0; public Ball(int x, int y){ this.x = x; this.y = y; this.dx = 0; this.dy = 0; public Ball(int x, int y, int dx, int dy){ this.x = x; this.y = y; this.dx = dx; this.dy = dy; 29

constructor chaining public Ball(){ this.x = 0; this.y = 0; this.dx = 0; this.dy = 0; public Ball(int x, int y){ this(x,y,0,0); public Ball(int x, int y, int dx, int dy){ this.x = x; this.y = y; this.dx = dx; this.dy = dy; 29

constructor chaining public Ball(){ this(0,0,0,0); // or this(0,0); public Ball(int x, int y){ this(x,y,0,0); public Ball(int x, int y, int dx, int dy){ this.x = x; this.y = y; this.dx = dx; this.dy = dy; 29

constructor chaining when using this to call another constructor from within a constructor, it must be the very first line of the constructor you can have more code after the call if needed public Ball(){ this(0,0,0,0); // or this(0,0); System.out.println("zero argument constructor"); public Ball(int x, int y){ this(x,y,0,0); System.out.println("two argument constructor"); public Ball(int x, int y, int dx, int dy){ this.x = x; this.y = y; this.dx = dx; this.dy = dy; System.out.println("four argument constructor"); 30

let s take a break... for 5 minutes 31

encapsulation encapsulation refers to two ideas classes and objects have both state and behaviour the internal details of the data is hidden We ll look at the second idea more now often called information hiding related to idea of separation of concerns actual code and how you use the code are independent access to data is restricted getter or accessor allows us to see the data setter or mutator allows us to change the data not all data will be visible and not all data will be allowed to be modified why would we want to do this? 32

encapsulation encapsulation refers to two ideas classes and objects have both state and behaviour the internal details of the data is hidden We ll look at the second idea more now often called information hiding related to idea of separation of concerns actual code and how you use the code are independent access to data is restricted getter or accessor allows us to see the data setter or mutator allows us to change the data not all data will be visible and not all data will be allowed to be modified why would we want to do this? what happens if you change how you store your data? if someone has access to a variable, will they modify it? 32

encapsulation public class Student{ public String name; public int id; anyone can access/modify these attributes public Student(String name, int id) {this.name = name; this.id = id; 33

encapsulation public class Student{ private String name; private int id; attributes can only be accessed from within the class public Student(String name, int id) {this.name = name; this.id = id; 34

encapsulation public class Student{ private String name; private int id; attributes can only be accessed from within the class /* getter - accessor */ public String getname() {return this.name; /* setter - mutator */ public void setname(string newname) {this.name = newname; return void public Student(String name, int id) {this.name = name; this.id = id; Would we also have a getid() and setid(int id)? 35

encapsulation public class Student{ private String name; private int id; /* getter - accessor */ public String getname() {return this.name; /* setter - mutator */ public String setname(string newname) { String old = this.name; this.name = newname; return old; return String public Student(String name, int id) {this.name = name; this.id = id; Might return the old value 36

encapsulation public class Student{ private String name; private int id; /* getter - accessor */ public String getname() {return this.name; /* setter - mutator */ public Student setname(string newname) { this.name = newname; return this; return self public Student(String name, int id) {this.name = name; this.id = id; Why would we return this? 37

method chaining calling a method on the returned object of another method call is called method chaining for example, consider the getter/setter from the last slide public String getname() { return this.name; public Student setname(string newname) { this.name = newname; return this; The following would be valid Student s = new Student("Cat", 2); char c = s.setname("galadriel").getname().tolowercase().charat(4); 38

Java s Object class public class Object{ /* no attributes */ /* single constructor */ public Object(){ /* 11 methods */ public String tostring(){... public int hashcode(){... public boolean equals(object obj){...... java.lang.object this is Java s root class (its basic non-primitive type) 39

inheritance Let s run the following simple class; public class Student { /* attributes */ public String name; public int id; public static void main(string[] args){ Student s = new Student(); System.out.println(s); System.out.println(s.toString()); System.out.println(s.hashCode); System.out.println(s.equals(s)); 40

inheritance Let s run the following simple class; public class Student { /* attributes */ public String name; public int id; public static void main(string[] args){ Student s = new Student(); System.out.println(s); System.out.println(s.toString()); System.out.println(s.hashCode); System.out.println(s.equals(s)); Why does this work? 40

inheritance public class Student{ /* attributes */ public String name; public int id;... when you compile this class it is automatically modified to inherit from the Object class public class Student extends Object{ /* attributes */ public String name; public int id;... 41

inheritance public class Student extends Object{ /* attributes */ public String name; public int id;... Java keyword extends used for inheritance when we inherit from a class we get all public attributes from the parent class we get all public methods from the parent class we get none of the constructors 42

inheritance public class Student extends Object{ /* attributes */ public String name; public int id;... Java keyword extends used for inheritance when we inherit from a class we get all public attributes from the parent class we get all public methods from the parent class we get none of the constructors we say that Student is an Object this is the is-a relationship we say that Student has a String this is the has-a relationship this is class composition (not inheritance) 42

inheritance public class Student extends Object{ /* attributes */ public String name; public int id;... a class can only have one parent class every class, except Object, has exactly one parent class we get a hierarchy of classes a family tree of classes 43

inheritance public class Student extends Object{ /* attributes */ public String name; public int id;... we say that Student is a child class of Object Student is a subclass of Object Student is a derived class of Object Student is a descendent of Object we say that Object is a parent class of Student Object is a super class of Student Object is a ancestor of Student 44

inheritance public class Student extends Object{ /* attributes */ public String name; public int id;... what do we get from Object? tostring() hashcode() equals(object o) eight other methods that we will most likely not use Are these useful? 45

Object s equals method public boolean equals(object obj) checks if both this and obj are the same returns this == obj this is almost certainly not what we want! (why?) 46

inheritance - method overriding public class Student extends Object{ /* attributes */ public String name; public int id; @Override @Override is an annotation public String tostring(){ return this.name + ", " + this.id; method overriding allows us to redefine a parent s (or grandparent s) method definition. which method is executed? Java first looks in current class if method is not defined, look at parent class if method is not defined, look at parent class... get method from Object 47

inheritance - method overriding rules for method overriding signature must be identical return type must be the same or more restrictive same if primitive more restrictive related type of object (inheritance) modifiers must be the same or less restrictive 48

inheritance - method overriding let s see some examples... 49

inheritance and constructors by default, the first thing that any constructor we write does is call the zero argument constructor of its parent class if want another constructor called from the parent we need to explicitly call it using the super keyword we cannot call both super and this in a constructor (as each of them must be on the very first line of they are explicitly used) 50

inheritance and constructors let s see some examples... 51

let s take a break... for 5 minutes 52

class attributes and methods things that are static belong to the class and not objects public class Box{ private static int secret; public static int xstatic; what can we say about static attributes? they exist even if an object of the class does not (think of Math) public attributes can be accessed/modified by any object or class in the program usually not a good idea unless they are constants (final) final is tricky though... must be careful with it private attributes are are only accessible within the class (information hiding!) 53

the final modifier things that are final cannot be changed once they are defined public final int x = 3; public final String str = "cat"; public final Student s = new Student("dog", 4); public final int[] numbers = {1,3,5,7,9; Which are valid/invalid? System.out.println(x); x = 4; str = "dog"; s.setname("eel"); numbers[2] = 100; 54

the final modifier things that are final cannot be changed once they are defined public final int x = 3; public final String str = "cat"; public final Student s = new Student("dog", 4); public final int[] numbers = {1,3,5,7,9; Which are valid/invalid? System.out.println(x); x = 4; str = "dog"; s.setname("eel"); numbers[2] = 100; Remember that ONLY the value in the variable is held constant. Final primitive data types and strings are constants. For reference data types, the data may change. 54

class attributes and methods things that are static belong to the class and not objects public class Box{ public static int xstatic; public int x; what can we say about static methods? 55

class attributes and methods things that are static belong to the class and not objects public class Box{ public static int xstatic; public int x; what can we say about static methods? what if they are public? what if they are private? what if they are final? to come... 55