Object Oriented Programming

Similar documents
Object Oriented Programming

CS1150 Principles of Computer Science Objects and Classes

Chapter 15: Object Oriented Programming

AP Computer Science Chapter 10 Implementing and Using Classes Study Guide

STUDENT LESSON A5 Designing and Using Classes

CHAPTER 7 OBJECTS AND CLASSES

Principles of Object Oriented Programming. Lecture 4

Inheritance and Polymorphism

Lecture 5: Methods CS2301

Chapter 4 Defining Classes I

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

Programming II (CS300)

Overview of OOP. Dr. Zhang COSC 1436 Summer, /18/2017

Chapter 4: Writing Classes


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

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

Recitation 3 Class and Objects

ECOM 2324 COMPUTER PROGRAMMING II

CHAPTER 7 OBJECTS AND CLASSES

Java and OOP. Part 2 Classes and objects

CS112 Lecture: Defining Instantiable Classes

Java Bytecode (binary file)

Chapter 6 Introduction to Defining Classes

Classes. Classes as Code Libraries. Classes as Data Structures

Chapter 4. Defining Classes I

COMSC-051 Java Programming Part 1. Part-Time Instructor: Joenil Mistal

Lecture 2: Java & Javadoc

Object Oriented Programming in C#

Table of Contents Date(s) Title/Topic Page #s. Chapter 4: Writing Classes 4.1 Objects Revisited

Computer Science II. OO Programming Classes Scott C Johnson Rochester Institute of Technology

Anatomy of a Class Encapsulation Anatomy of a Method

MIDTERM REVIEW. midterminformation.htm

CS 251 Intermediate Programming Methods and Classes

CS 251 Intermediate Programming Methods and More

Object-Oriented Programming Concepts

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

Chapter 4. Defining Classes I

HST 952. Computing for Biomedical Scientists Lecture 5

COMP-202 Unit 8: Defining Your Own Classes. CONTENTS: Class Definitions Attributes Methods and Constructors Access Modifiers and Encapsulation

Weiss Chapter 1 terminology (parenthesized numbers are page numbers)

Programming I. Course 9 Introduction to programming

JAVA: A Primer. By: Amrita Rajagopal

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

Handout 7. Defining Classes part 1. Instance variables and instance methods.

PART 1. Eclipse IDE Tutorial. 1. What is Eclipse? Eclipse Java IDE

Java Object Oriented Design. CSC207 Fall 2014

A A B U n i v e r s i t y

Object-Oriented Programming

CSE 142 Su 04 Computer Programming 1 - Java. Objects

CS304 Object Oriented Programming Final Term

SOAPScript For squeaky-clean code, use SOAPScript Language Summary Bob Nisco Version 0.5 β

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

Inheritance (Part 5) Odds and ends

Chapter 11: Create Your Own Objects

( &% class MyClass { }

EECS168 Exam 3 Review

Programming II (CS300)

Abstraction in Software Development

CIS 110: Introduction to Computer Programming

Outline. CIS 110: Introduction to Computer Programming. Any questions? My life story. A horrible incident. The awful truth

Methods and Data (Savitch, Chapter 5)

Lecture 6 Introduction to Objects and Classes

Software and Programming 1

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

ENCAPSULATION AND POLYMORPHISM

TypeScript. Types. CS144: Web Applications

OO Programming Concepts. Classes. Objects. Chapter 8 User-Defined Classes and ADTs

3 ADT Implementation in Java

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

COMP 401 Spring 2014 Midterm 1

CS 231 Data Structures and Algorithms, Fall 2016

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

Chapter 7 Classes & Objects, Part B

Java Classes and Objects

Chapter 9 Objects and Classes. Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved.

Object Oriented Design

Cpt S 122 Data Structures. Introduction to C++ Part II

Object-Oriented Design Lecture 3 CSU 370 Fall 2007 (Pucella) Friday, Sep 14, 2007

CS/ENGRD 2110 FALL Lecture 5: Local vars; Inside-out rule; constructors

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

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

Defining Classes and Methods

Defining Classes and Methods. Objectives. Objectives 6/27/2014. Chapter 5

User Defined Types. Babes-Bolyai University Lecture 06. Lect Phd. Arthur Molnar. User defined types. Python scope and namespace

class objects instances Fields Constructors Methods static

Java How to Program, 10/e. Copyright by Pearson Education, Inc. All Rights Reserved.

JAVA PROGRAMMING LAB. ABSTRACT In this Lab you will learn to define and invoke void and return java methods

Introduction to Classes and Objects. David Greenstein Monta Vista High School

Announcements. PS 3 is due Thursday, 10/6. Midterm Exam 1: 10/14 (Fri), 9:00am-10:53am

CS 112 Introduction to Computing II. Wayne Snyder Computer Science Department Boston University

Software and Programming 1

Unit E Step-by-Step: Programming with Python

Object-oriented programming in...

Object Oriented Programming COP3330 / CGS5409

Introduction to Visual Basic and Visual C++ Introduction to Java. JDK Editions. Overview. Lesson 13. Overview

Classes. Classes. Classes. Class Circle with methods. Class Circle with fields. Classes and Objects in Java. Introduce to classes and objects in Java.

What will this print?

CSCE 156 Computer Science II

Chapter 9 Objects and Classes. Liang, Introduction to Java Programming, Eleventh Edition, (c) 2017 Pearson Education, Inc. All rights reserved.

Transcription:

Object Oriented Programming

Objectives To review the concepts and terminology of object-oriented programming To discuss some features of objectoriented design 1-2

Review: Objects In Java and other Object-Oriented Programming (OOP) languages, the focus is on objects Objects are entities that can do actions or be acted upon in a Java program All objects have Properties These are the data about an object In Java we call them attributes or fields or instance variables Behaviours (actions) In Java they are implemented as methods (more specifically, instance methods) 1-3

Review: Objects and Classes Every object belongs to a specific class Objects that belong to the same class have the same properties and can perform the same actions We can think of a class as being a template or pattern or model or definition for objects of that class 1-4

Review: Object-Oriented Programming Object-oriented programs consist of interacting objects Objects are defined by classes Objects are created by objects of other classes (client classes) which use them in implementing a programming solution to a problem 1-5

Example: Social Networking Suppose we want to keep track of social contact information for our friends / relatives We wish to write a program that allows us to add contact information of a friend to our list of friends, remove a contact from the list, and print information about all our contacts. 1-6

Example: Social Networking Part of OOP design is deciding on what classes we will need for our problem Let's start with a class called Person, that will model the information about one person in our social network 1-7

Review: Class Definition A class definition consists of Attribute declarations (also known as fields or instance variables) Constructor definitions Method definitions A class definition is stored in a file With the same name as the class With a.java extension on the file 1-8

Example: Person Class Attributes (instance variables, fields) What kind of information do we want to have about a person? Let s keep it short for now Person's name Email address What type should each of these be? A name can be a string An email address can be a string 1-9

Example Python: Person Class class Person: def init (self, firstname=, lastname,= email= ): self.firstname = firstname self.lastname = lastname self.email = email Note in Python we can assign default values to the attributes in this case we used an empty string 1-10

Example Java: Person Class public class Person{ /* Attribute declarations */ private String lastname; private String firstname; private String email; Why are the attributes private? Note that the instance variables are just being declared here (not explicitly assigned values) 1-11

Review: Constructors A constructor is a special method that is called automatically when an object is created with the new operator Its purpose is to initialize the attributes of an object when the object is created In Python we use the special method init to do the job of a constructor In Java a constructor has the same name as the class name 1-12

Example: Person class /** * Constructor initializes the person's name * and email address */ public Person(String firstname, String lastname,string email) { this.lastname = lastname; this.firstname = firstname; this.email = email; } Compared to Python, in Java one must EXPLICITLY give types to the attributes. Also note the difference between the keyword this vs Python s self. 1-13

Review: Terminology Keyword this similar to self in Python Scope of variables Scope refers to the parts of the code in which those variables can be used Scope of instance variables? Formal parameters What is their scope? 1-14

Example: Person Class What methods might we want to have? accessor methods (aka getters) modifier methods (aka setters) tostring method (in Python this is repr or str equals method ( in Python this is eq ) two Person objects are the same if they have the same first name and same last name 1-15

Java /** * setemail method sets the person's email address * @param email */ public void setemail (String email) { } this.email = email; Example: Person class Python """ setemail method sets the person's email address. :param email: email address to set """ def setemail(self,email): self.email=email Note that Python uses WHITESPACE to tie blocks of code together Java uses BRACES and SEMICOLONS (you should still code with whitespace as well) What is this @param? Javadoc documentation (we will do it in Lab 2) 1-16

Python Example: Person class def repr (self): s = self.firstname +" " self.lastname + \t + self.email return s Java /** * tostring method returns a string representation of the person * @return string with first name and last name, email address */ public String tostring() { } String s = this.firstname + " " + this.lastname + "\t" + this.email ; return s; 1-17

Discussion What is the return type of this method? What is \t? What kind of variable is s? A reference variable of type String What is its scope? It is a local variable 1-18

Python def equals(self, other): if self.firstname == other.getfirstname() and self.lastname == other.getlastname() : return True else : Java /** * equals determines whether two persons have the same name * @param other other Person object that this is compared to * @return true if they have the same first and last name, false otherwise */ public boolean equals(person other) { if (this.firstname.equals(other.firstname) && this.lastname.equals(other.lastname)) else } return False return true; return false; What is this.firstname? other.firstname? Where is the equals method that is used in the code? 1-19

Example: SocialNetwork Class We are now ready to provide a class that allows us to keep track of our social contacts What attributes might it have? A list of Person objects We'll use an array as our data structure (this is similar to the notation of a list in Python) A count of the number of friends currently in the list Why is this not necessarily the same as the size of the array? 1-20

Example: SocialNetwork Class Python: from Person import Person class SocialNetwork: def init (self,num=0): self.friends =[] self.numfriends =num Java: /* Attribute declarations */ // array of persons (list of friends) private Person[] friendlist; //current number of friends in list private int numfriends; /* Constant definition */ private final int DEFAULT_MAX_FRIENDS = 10; Notice in Python we declare the attributes in the constructor itself 1-21

Review: Terminology Keyword final (no such thing in Python, by convention we used all capitalized words to represent a constant) Array declaration [] (array s and python lists do NOT always act the same) 1-22

Example: SocialNetwork Class Constructors: One that creates an array of default size One that takes the size of the array as a parameter What do we call it when there is more than one constructor? overloading In Python we do this by setting defaults in the method 1-23

Python: from Person import Person class SocialNetwork: def init (self,num=0): self.friends =[] self.numfriends =num Notice how there is only one constructor for Python but it uses default values to allow for different uses of it. Also note than in Java arrays must MUST have an specified size; lists can grow dynamically in Python. Java: /** * Constructor creates Person array of default size */ public SocialNetwork () { friendlist = new Person[DEFAULT_MAX_FRIENDS]; numfriends = 0; } /** * Constructor creates Person array of specified size * @param max maximum size of array */ public SocialNetwork(int max) { friendlist = new Person[max]; numfriends = 0; }

Discussion What is stored in the friendlist array after the following is executed? friendlist = new Person[DEFAULT_MAX_FRIENDS]; How does this differ from Python? self.friends =[] 1-25

Example: SocialNetwork Object contacts = new SocialNetwork(5); contacts numfriends 0 friendlist 1-26

Example: SocialNetwork Class Instance methods: let's start with methods to add a person to the list remove a specified person from the list clear the list, i.e. remove all persons return how many persons are in the list tostring (we will add other methods later) 1-27

Python: def add(afriend): self.friends.append(afriend) self.numfriends = len(self.friends) Add method Java: /** * add method adds a person to the list * @param firstname * @param lastname * @param email */ public void add (Person friend) { // add it to the array of friends // but, what if array is not big enough? // double its capacity automatically if (numfriends == friendlist.length) expandcapacity(); // add reference to friend at first free spot in array } friendlist [numfriends] = friend; numfriends++;

Example: SocialNetwork Object contacts = new SocialNetwork(5); After 3 friends are added it will look like this: contacts numfriends 3 friendlist P1 P2 P3 3 Person objects Note that numfriends also acts as the index of the first free spot in the array! 1-29

Review: Arrays An array has a particular number of cells when it is created (its capacity) What happens when an array is full and we try to store past the last element in the array? An exception is thrown What happens then? We can instead automatically expand the capacity of the array in our code! 1-30

/** * expandcapacity method is a helper method * that creates a new array to store friends, with twice * the capacity of the existing one */ private void expandcapacity() { Person[] largerlist = new Person[friendList.length * 2]; for (int i = 0; i < friendlist.length; i++) largerlist [i] = friendlist [i]; } friendlist = largerlist; Note in Python we did not have to do this as lists can grow dynamically 1-31

Review: Terminology Helper method Array length Scope of variables: what is the scope of each of the following variables? friendlist largerlist i 1-32

Python def repr (self): s = "" for element in self.friends: s = s + "\n" + element.getfriend() return s tostring Java /** * tostring method returns a string representation of all persons in the list * @return string representation of list */ public String tostring() { String s = ""; for (int i = 0; i < this.numfriends; i++){ s = s + friendlist[i].tostring() + "\n" ; } return s; } What is ""? "\n"? 1-33

Class SocialNetwork contains a method for removing a data item from the array. To remove a data item, say target, from the array we first need to find the position of such an item in the array. A simple way of looking for target in array friendlist is to take the data items stored in the array one by one starting at the data item stored in index 0 and compare each one of them with target until either target is found, or all data items have been examined and target is not found The above algorithm for looking for a data item in a list is called linear search. Once item target has been found in the array we can remove it by replacing it with the last item in the array. Pseudocode for removing a data item from the array follows.

Algorithm remove(target) Input: data item to be removed Output: true if target was removed from the array; false if target was not found in the array i = 0 while (i < numfriends) and (friendlist[i] not equal target) do i = i+1 if i = numfriends then return false else { friendlist[i] = friendlist[numfriends-1] friendlist[numfriends-1] = null numfriends = numfriends -1 return true }

The advantage of writing an algorithm in pseudocode is that we can concentrate on designing the steps that the algorithm needs to perform to achieve the desired task without having to think about how to express the algorithm in correct java syntax. Once we have designed a correct algorithm for a problem in pseudocode, translating it into java is a somewhat mechanical process. Writing algorithms in pseudocode and then translating them into java makes it easier to design programs.

The beauty of pseudocode is that there is no fixed syntax or rigid rules for it. Pseudocode is a mixture of English and programming-like statements. Each programmer comes up with their own version of pseudocode. The programmer just needs to ensure that pseudocode is understandable to other people and that it is detailed enough that translation into java or other programming language is simple. There should be an (almost) one-to-one correspondence between lines of pseudocode and lines of java. The java version for the remove algorithm follows.

public boolean remove(person target) { // search the list for the specified friend int i = 0; while ((i < numfriends) &&!friendlist[i].equals(target)) i++; } if (i == numfriends) return false; else { // person found, remove by replacing with last one friendlist[i] = friendlist[numfriends - 1]; friendlist[numfriends - 1] = null; numfriends --; return true;

Example: SocialNetwork Object Suppose the target person to be removed was the first one (P1) ; after it is removed, we will have: contacts numfriends 2 friendlist P3 P2 2 Person objects 1-39

Discussion The search in the remove method is called a linear search It starts at the beginning and continues in a sequential manner Where is the equals method of the line friendlist [i].equals(target) defined? 1-40

Discussion Why is it OK to replace the reference to the found Person with the last one in the list? 1-41

Exercises Write getnumfriends Write clearfriends 1-42

Example: Using the SocialNetwork Class Python: def main(): from SocialNetwork import SocialNetwork from Person import Person contacts = SocialNetwork(); contacts.add("snoopy","dog","snoopy@uwo.ca"); contacts.add("felix","cat","felix@uwo.ca"); contacts.add("mickey","mouse","mickey@uwo.ca"); print(contacts) print( I have, contacts.getnumfriends(), friends in my contact list ) main() Java: public class MyFriends { public static void main (String args[]) { SocialNetwork contacts = new SocialNetwork(); contacts.add("snoopy", "Dog", "snoopy@uwo.ca"); contacts.add("felix", "Cat", "felix@uwo.ca"); contacts.add("mickey", "Mouse", mickey@uwo.ca); } System.out.println(contacts.toString()); System.out.println("I have " + contacts.getnumfriends() + " friends in my contact list."); } 1-43

Discussion Note that if we had System.out.println(contacts); then Java would automatically invoke the tostring method of the class that contacts belongs to How many friends could you add to your list of friends, in an application program that uses our SocialNetwork class? 1-44

The second line in the above java class: public static void main (String[] args) { states that method main, when invoked can receive any number of arguments. Java will create an array of the correct size to store the arguments. Java was designed so that the first method that is executed in any java program is main. The arguments that are passed to this method are called the program arguments or command line arguments. The keyword static tells the java compiler that when the program is executed a special object, sometimes called a static object, needs to be created. Static objects are different from other objects in that they are not created by the programmer with the new statement. Since to run a java program, objects need to be created first, this solves the issue of how to create the very first object of a program.

Exercise: Expand the SocialNetwork Class The SocialNetwork class could use some more methods in order to be useful! A method that writes the list to a file A method that reads the list from a file A method that searches for a particular friend in the list, and returns the email address Others? 1-46

Review: Passing Parameters Why are methods written with parameter lists? So that the methods can be more general We can use methods with different values passed in as parameters 1-47

Review: Passing Parameters How are parameters actually passed? The variable in the parameter list in the method definition is known as a formal parameter When we invoke a method with a parameter, that is known as an actual parameter 1-48

Passing Parameters: How it Works public class MyFriends { { public static void main(string[] args) { contacts.add("felix", "Cat", "felix@uwo.ca");. public class SocialNetwork { public void add (String firstname, String lastname, String email) { actual parameters are provided by the calling program when it invokes the method formal parameters are part of the method definition When the add method is executed, the value of each actual parameter is passed by value to the corresponding formal parameter variable 1-49

Aspects of Object-Oriented Design Modularity Information Hiding Encapsulation 1-50

Aspects of Program Design: Modularity Modularity refers to subdividing a large problem into smaller components, or modules, to make the design of a solution easier Modules should be as independent from each other as possible Each module should perform one welldefined task 1-51

Aspects of Program Design: Information Hiding Information hiding refers to making implementation details inaccessible To users of a program (they do not need to know about implementation details) To other modules in a program (they cannot see nor change the hidden details) Example: attributes (instance variables) in a class definition are private What parts of a program can access instance variables directly? 1-52

Aspects of OOP Design: Encapsulation Object-oriented Design produces modular solutions We identify the components involved within the problem: the objects An object has data: characteristics (attributes) And behaviours (operations) Combining the data and the operations on the data is called encapsulation They are combined in the class definition 1-53