Andries van Dam  2015 10/01/15 1/38 Initial Questionnaire – The Results Are In! 56% of all students in CS15 have no prior coding experience! 81% of all.

Slides:



Advertisements
Similar presentations
OO Programming in Java Objectives for today: Overriding the toString() method Polymorphism & Dynamic Binding Interfaces Packages and Class Path.
Advertisements

Module 8 “Polymorphism and Inheritance”. Outline Understanding Inheritance Inheritance Diagrams Constructors in Derived Classes Type Compatibility Polymorphism.
Lecture 2 Calling and Defining Methods in Java. Introduction ●Calling and defining methods ●Declaring and defining a class ●Instances of a class ●The.
CS 106 Introduction to Computer Science I 04 / 11 / 2008 Instructor: Michael Eckmann.
Inheritance Inheritance Reserved word protected Reserved word super
SE-1020 Dr. Mark L. Hornick 1 Inheritance and Polymorphism: Abstract Classes The “not quite” classes.
Pet-able! Lecture 6 Interfaces 1 of 58. Inheritance - Review (Part I) ●Review of Inheritance o a method of modeling similar capabilities among similar.
CS 106 Introduction to Computer Science I 11 / 26 / 2007 Instructor: Michael Eckmann.
Inheritance and Class Hierarchies Chapter 3. Chapter 3: Inheritance and Class Hierarchies2 Chapter Objectives To understand inheritance and how it facilitates.
Encapsulation, Inheritance & Interfaces CSE 115 Spring 2006 February 27, March 1 & 3, 2006.
CS 106 Introduction to Computer Science I 11 / 20 / 2006 Instructor: Michael Eckmann.
CS 106 Introduction to Computer Science I 04 / 16 / 2010 Instructor: Michael Eckmann.
CS 106 Introduction to Computer Science I 11 / 15 / 2006 Instructor: Michael Eckmann.
Aalborg Media Lab 23-Jun-15 Inheritance Lecture 10 Chapter 8.
CS 106 Introduction to Computer Science I 04 / 21 / 2008 Instructor: Michael Eckmann.
CS 106 Introduction to Computer Science I 04 / 28 / 2010 Instructor: Michael Eckmann.
(c) University of Washington03-1 CSC 143 Java Inheritance Reading: Ch. 10.
LECTURE 07 Programming using C# Inheritance
Lecture 7 Polymorphism. Review: Constructors ●Parenthesis after constructor, not in class declaration ●The constructor makes the SamBot – do not “ new.
Inheritance using Java
CSE 331 Software Design & Implementation Hal Perkins Autumn 2012 Java Classes, Interfaces, and Types 1.
Chapter 6 Class Inheritance F Superclasses and Subclasses F Keywords: super F Overriding methods F The Object Class F Modifiers: protected, final and abstract.
C++ Object Oriented 1. Class and Object The main purpose of C++ programming is to add object orientation to the C programming language and classes are.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Taken from slides of Starting Out with C++ Early Objects Seventh Edition.
MIT AITI 2002 Abstract Classes, Interfaces. Abstract Classes What is an abstract class? An abstract class is a class in which one or more methods is declared,
Polymorphism & Interfaces
CISC6795: Spring Object-Oriented Programming: Polymorphism.
(C) 2010 Pearson Education, Inc. All rights reserved. Java™ How to Program, 8/e.
Inheritance. Recall the plant that we defined earlier… class Plant { public: Plant( double theHeight ) : hasLeaves( true ), height (theHeight) { } Plant(
Chapter 11 Introduction to Classes Intro to Computer Science CS1510, Section 2 Dr. Sarah Diesburg.
0/60 Andries van Dam  /24/15. 1/60 Andries van Dam  /24/15 Review: Instance Variable Initialization ●Split up declaration and assignment.
Specialization and Inheritance Chapter 8. 8 Specialization Specialized classes inherit the properties and methods of the parent or base class. A dog is.
CMSC 202 Generics. Nov Generalized Code One goal of OOP is to provide the ability to write reusable, generalized code. Polymorphic code using.
Method Overriding Remember inheritance: when a child class inherits methods, variables, etc from a parent class. Example: public class Dictionary extends.
1/62 Andries van Dam  /17/15 ●Lecture slides are posted online and are available before class ●Use these during class and outside of class! ●If.
1/38 Andries van Dam  /29/15 Pet-able! Lecture 6 Interfaces.
The Factory Patterns SE-2811 Dr. Mark L. Hornick 1.
Object-Oriented Design CSC 212. Announcements This course is speeding up and we are starting new material. Please see me if you feel this is going too.
CS 106 Introduction to Computer Science I 04 / 23 / 2010 Instructor: Michael Eckmann.
© 2006 Pearson Education Inheritance 1 of 31 INHERITANCE Class Hierarchies Extending Objects Abstract Methods Abstract Classes Overriding Methods protected.
1/43 Andries van Dam  /15/15 Lecture 2 Calling and Defining Methods in Java.
8. Inheritance “Is-a” Relationship. Topics Creating Subclasses Overriding Methods Class Hierarchies Abstract Class Inheritance and GUIs The Timer Class.
Review Class Inheritance, Abstract, Interfaces, Polymorphism, GUI (MVC)
Inheritance CSI 1101 Nour El Kadri. OOP  We have seen that object-oriented programming (OOP) helps organizing and maintaining large software systems.
CS 106 Introduction to Computer Science I 04 / 18 / 2008 Instructor: Michael Eckmann.
Types, Implementing, Extending, Interfaces, Superclasses, Subclasses, Casting, and Access Modifiers.
© 2006 Pearson EducationPolymorphism 1 of 22 POLYMORPHISM Polymorphism Partial Overriding OOP Review.
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 9.1 – 9.4.
Method Overriding Remember inheritance: when a child class inherits methods, variables, etc from a parent class. Example: public class Dictionary extends.
Interfaces and Polymorphism CS 162 (Summer 2009).
Inheritance and Class Hierarchies Chapter 3. Chapter 3: Inheritance and Class Hierarchies2 Chapter Objectives To understand inheritance and how it facilitates.
Inheritance and Class Hierarchies Chapter 3. Chapter Objectives  To understand inheritance and how it facilitates code reuse  To understand how Java.
Subclassing, pt. 2 Method overriding, virtual methods, abstract classes/methods COMP 401, Fall 2014 Lecture 9 9/16/2014.
CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with  methods  classes.
POLYMORPHISM Chapter 6. Chapter Polymorphism  Polymorphism concept  Abstract classes and methods  Method overriding  Concrete sub classes and.
©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Interfaces Are used to model weak inheritance relationships Object-inheritance.
 Description of Inheritance  Base Class Object  Subclass, Subtype, and Substitutability  Forms of Inheritance  Modifiers and Inheritance  The Benefits.
Inheritance & Method Overriding BCIS 3680 Enterprise Programming.
Notices Assn 2 is due tomorrow, 7pm. Moodle quiz next week – written in the lab as before. Everything up to and including today’s lecture: Big Topics are.
BY:- TOPS Technologies
Lecture 6:Interfaces and Abstract Classes Michael Hsu CSULA.
Comp1004: Object Oriented Design I Abstract Classes and Interfaces.
CSE 143 Lecture 13 Inheritance slides created by Ethan Apter
Inheritance a subclass extends the functionality of a superclass a subclass inherits all the functionality of a superclass don't reinvent the wheel – "stand.
Inheritance Modern object-oriented (OO) programming languages provide 3 capabilities: encapsulation inheritance polymorphism which can improve the design,
Polymorphism in Methods
Lecture 12 Inheritance.
POLYMORPHISM Polymorphism Partial Overriding OOP Review.
Week 6 Object-Oriented Programming (2): Polymorphism
Fundaments of Game Design
Presentation transcript:

Andries van Dam  /01/15 1/38 Initial Questionnaire – The Results Are In! 56% of all students in CS15 have no prior coding experience! 81% of all students in CS15 were not yet comfortable using Java at the beginning of the course Only 1% have used the JavaFX graphics library (which you will learn about next week) some programming experience a lot of programming experience no prior coding experience

Andries van Dam  /01/15 2/38 Review: Constructors ●Parentheses after constructor, not in class declaration ●The constructor (called by another instance) makes the SamBot – do not “ new ” an object of the same class in the constructor public class SamBot { private int _numsteps; public SamBot() { _numsteps = 5; } public class SamBot() { private int _numsteps; public SamBot{ _numsteps = 5; new SamBot(); } public class SamBot { private int _numsteps; public SamBot(new SamBot()) { _numsteps = 5; } Correct Incorrect ●Constructor could take in parameters – but not a new SamBot

Andries van Dam  /01/15 3/38 Review: Assigning Variables What is the output of this program? Remember: in Java, = is an operator for variable assignment o This is different from the mathematical notion of equality! public class NumberPrinter { public NumberPrinter(){ this.printNumbers(); } public void printNumbers(){ int a = 1; int b = 10; a = b; b = 50; System.out.println(a); System.out.println(b); }

Andries van Dam  /01/15 4/38 Review: Parameter Passing public class DogGroomer { public DogGroomer() { // this is the constructor! } public void groom(Dog shaggyDog) { // code that grooms shaggyDog } public class PetShop { /* This is the constructor! */ public PetShop() { Dog dogE = new Dog(); DogGroomer groomer = new DogGroomer(); groomer.groom(dogE); } ● DogGroomer ’s groom method is defined here, and takes in a parameter of type Dog ● shaggyDog is the name used by groom to reference the Dog that is passed in ●Calling the groom method requires passing in an existing Dog as argument ●Existing Dog is dogE, and Java will substitute dogE for shaggyDog every place the groom method refers to it

Andries van Dam  /01/15 5/38 Review: Method Signatures ●The same signature can occur in multiple classes (e.g., Cat and Dog ) without ambiguity – the type of the instance on which the call will be made lets Java disambiguate ●If a class is a subclass of another, and both have the same method signature(s), then overriding occurs – method resolution disambiguates ●If there is no inheritance relationship between the classes with the same signature, there is no overriding, and the methods each work independently ●This applies to methods in support code classes as well! public class Dog extends Animal { public Dog() { } public void eat(Food f){ this.wolfItDown(f); } public class Cat extends Animal { public Cat() { } public void eat(Food f){ this.eatDelicately(f); this.WipePaws(); } public abstract class Animal { public Animal() { } public abstract void eat(Food f); }

Andries van Dam  /01/15 6/38 Review: Types of Variables Type of Variable:InstanceLocalNo Variable When to use it:If you need to refer to it throughout the class If you only need to refer to it inside of a method When you never need to refer to it in the future after construction within the scope of the class in which it was created (i.e., created and passed as an argument) Syntax:_variablevariable Somewhere in andy.teach(){ … _andy.takeWater(new H2OBottle()); … } Note: The underscore notation is only a CS15 style convention for instance variables – it doesn’t affect how Java interprets your code

Andries van Dam  /01/15 7/38 Lecture 7 Polymorphism

Andries van Dam  /01/15 8/38 Introduction ●Inheritance review ●What is polymorphism? ●Advantages of polymorphism ●Polymorphism with interfaces ●Limitations of polymorphism

Andries van Dam  /01/15 9/38 Coding Generically ●We’ve seen this abstraction pattern over and over so far… o classes and instances: factor out common capabilities of instances into a class o parameters: write a generic method that behaves differently based on input o inheritance: factor out common capabilities of similar classes into superclass o interfaces: factor out common capabilities of dissimilar classes into interface ●This lecture: Polymorphism! Generic coding to the max

Andries van Dam  /01/15 10/38 Inheritance Review ● Convertible, CS15Mobile, and Van are all subclasses of Vehicle ●Subclasses inherit properties and capabilities from their superclass ●Subclass may choose to override a method declared in the superclass to further specialize that capability ●Thus, subclasses may all respond to the same method call differently (e.g., move in their own way) Vehicle Convertible CS15Mobile Van Inheritance Diagram

Andries van Dam  /01/15 11/38 Polymorphism (1/6) ●Polymorphism is a fancy word for “multiple forms” ●The big idea: we can refer to an instance of a subclass as if it were an instance of its superclass

Andries van Dam  /01/15 12/38 Polymorphism (2/6) ●Here we have a Racetrack class. It’s going to set up races between three Vehicle s ●We want our Racetrack to be generic, so that any kind of Vehicle can race ●We declare our three Vehicle s with type Vehicle public class Racetrack { private Vehicle _vehicle1; private Vehicle _vehicle2; private Vehicle _vehicle3; public Racetrack() { _vehicle1 = new Van(); _vehicle2 = new Convertible(); _vehicle3 = new CS15Mobile(); }

Andries van Dam  /01/15 13/38 Polymorphism (3/6) ●In the constructor of Racetrack, we instantiate our Vehicle s ● Vehicle is an abstract class-- cannot instantiate it directly ●Instead, we instantiate a Van, a Convertible, and a CS15Mobile, and assign them to _vehicle1, _vehicle2, and _vehicle3 ● Vehicle thus takes on three different forms: instances of its subclasses public class Racetrack { private Vehicle _vehicle1; private Vehicle _vehicle2; private Vehicle _vehicle3; public Racetrack() { _vehicle1 = new Van(); _vehicle2 = new Convertible(); _vehicle3 = new CS15Mobile(); }

Andries van Dam  /01/15 14/38 Polymorphism (4/6) ●In this example, declared type of _vehicle1, _vehicle2, and _vehicle3 is Vehicle ●But _vehicle1 ’s actual type is Van, _vehicle2 ’s actual type is Convertible, and _vehicle3 ’s actual type is CS15Mobile ●Thus, _vehicle1 is an instance of Van, but we’re referring to it as if it were just a generic Vehicle public class Racetrack { private Vehicle _vehicle1; private Vehicle _vehicle2; private Vehicle _vehicle3; public Racetrack() { _vehicle1 = new Van(); _vehicle2 = new Convertible(); _vehicle3 = new CS15Mobile(); }

Andries van Dam  /01/15 15/38 Polymorphism (5/6) ●Now we’ve written a race method. When called, it tells each Vehicle to move ●What happens? o _vehicle1 is a Van, so it moves slowly o _vehicle2 is a Convertible, so it moves fast o _vehicle3 is a CS15Mobile, so it moves at moderate speed public class Racetrack { private Vehicle _vehicle1; private Vehicle _vehicle2; private Vehicle _vehicle3; public Racetrack() { _vehicle1 = new Van(); _vehicle2 = new Convertible(); _vehicle3 = new CS15Mobile(); } public void race() { _vehicle1.move(); _vehicle2.move(); _vehicle3.move(); } }

Andries van Dam  /01/15 16/38 Polymorphism (6/6) ●Each object responds to method calls as specified by its actual type – method resolution ● race doesn’t care what types of Vehicle it’s dealing with ●If we wanted to race different types of Vehicle, we would only have to modify the constructor ●Good generic programming, but not that impressive... ●The real power of polymorphism is still to come! public class Racetrack { private Vehicle _vehicle1; private Vehicle _vehicle2; private Vehicle _vehicle3; public Racetrack() { _vehicle1 = new Van(); _vehicle2 = new Convertible(); _vehicle3 = new CS15Mobile(); } public void race() { _vehicle1.move(); _vehicle2.move(); _vehicle3.move(); }

Andries van Dam  /01/15 17/38 Without Polymorphism (1/2) ●Here’s a Driver class ●All Driver s have the ability to drive a Convertible ●But there are other kinds of Vehicle s out there… We want Driver s to be able to drive Van s and CS15Mobile s too! ●Let’s tackle the problem without using polymorphism public class Driver { // constructor elided public void driveConvertible(Convertible c) { c.move(); }

Andries van Dam  /01/15 18/38 Without Polymorphism (2/2) ●This works! We just wrote a different method for each kind of Vehicle ●But what if we want to introduce more kinds of Vehicle, like Truck s and SUV s? ●Would need to keep writing new methods for each type of Vehicle we might ever want a Driver to drive! public class Driver { // constructor elided public void driveConvertible(Convertible c) { c.move(); } public void driveCS15Mobile(CS15Mobile cm) { cm.move(); } public void driveVan(Van v) { v.move(); } }

Andries van Dam  /01/15 19/38 With Polymorphism! (1/3) ●This is exactly the problem polymorphism was designed to solve ●Instead of declaring many different methods, each with a parameter of a different declared type, can use single method that takes in any Vehicle ! public class Driver { // constructor elided public void drive(Vehicle vehicle) { vehicle.move(); }

Andries van Dam  /01/15 20/38 With Polymorphism! (2/3) ●In a generic drive(), specify that the declared type of the parameter is Vehicle ●Caller will pass in an instance of a specific subclass (like CS15Mobile ) as argument ●subclass type is actual type, a subtype of the declared type ●Thus, generic method refers to instance of subclass as if it were an instance of its superclass…if you pass in a CS15Mobile, its specific move() method will be called – polymorphic parameter passing! public class Driver { // constructor elided public void drive(Vehicle vehicle) { vehicle.move(); }

Andries van Dam  /01/15 21/38 With Polymorphism! (3/3) ●Here’s an example of calling the drive method, passing in a different type of Vehicle as an argument each time ●Can pass in an instance of any subclass of Vehicle ! ●And method resolution will invoke the method for the subclass! ●Relaxation of ultra-strict type matching public class DriversEdApp { Driver _studentDriver; public DriversEdApp() { _studentDriver = new Driver(); } public void startDrivingTest() { _studentDriver.drive(new Convertible()); _studentDriver.drive(new CS15Mobile()); _studentDriver.drive(new Van()); }

Andries van Dam  /01/15 22/38 Polymorphism has to be used carefully... ●Consider the Zookeeper class, which has the method feedLion ● feedLion can take in any Lion ●Let’s say we have the following code in another class: Cat cat = new Lion(); ●What is the declared type? The actual type? ●Can we pass cat into the feedLion method? o no! public class Zookeeper { // constructor elided public void feedLion(Lion lion) { // implementation elided }

Andries van Dam  /01/15 23/38 Polymorphism is Tricky... ● feedLion will only accept an argument of type Lion, and can call any Lion methods on its parameter ● cat is declared as type Cat - as far as Java knows, could be any kind of Cat ! ( Tiger, Panther, etc.), and Cats won’t know all Lion methods ! ●The argument’s declared type must be the same class, or a subclass, of the parameter’s declared type ●What‘s an easy fix (if you didn’t actually use any Lion -specific methods? public class Zookeeper { // constructor elided public void feedLion(Lion lion) { // implementation elided } }

Andries van Dam  /01/15 24/38 Polymorphism With Interfaces (1/4) ●Polymorphism with interfaces looks much the same as it does with classes ●Imagine that the classes CS15Mobile and Watch both implement the Repairable interface public interface Repairable { public void repair(); }

Andries van Dam  /01/15 25/38 Polymorphism With Interfaces (2/4) ●Let’s say we have a RepairShop class ●The RepairShop has the method fix, which takes in any object that implements the interface Repairable public class RepairShop { // constructor elided public void fix(Repairable brokenThing) { brokenThing.repair(); }

Andries van Dam  /01/15 26/38 Polymorphism With Interfaces (3/4) ●Notice that we use the interface name as the declared type of the parameter ●Interfaces can be used as types of variables and parameters, just like classes can! public class RepairShop { // constructor elided public void fix(Repairable brokenThing) { brokenThing.repair(); }

Andries van Dam  /01/15 27/38 Polymorphism With Interfaces (4/4) ●Just like with superclasses and subclasses, object passed in will respond to method call specifically based on its actual type ●With polymorphism, interfaces are truly useful-- can write a single method to deal with any object that fulfills a certain contract public class RepairShop { // constructor elided public void fix(Repairable brokenThing) { brokenThing.repair(); }

Andries van Dam  /01/15 28/38 Limitations of Polymorphism (1/2) ●Let’s go back to the Racetrack example ●We know that _vehicle2 is actually a Convertible ●Let’s say that Convertible s have a method called putTopDown ●Not all Vehicle s can do this, but Convertible s can ●Is race() allowed to call “ _vehicle2.putTopDown(); ”? public class Racetrack { private Vehicle _vehicle1; private Vehicle _vehicle2; private Vehicle _vehicle3; public Racetrack() { _vehicle1 = new Van(); _vehicle2 = new Convertible(); _vehicle3 = new CS15Mobile(); } public void race() { _vehicle1.move(); _vehicle2.move(); _vehicle3.move(); }

Andries van Dam  /01/15 29/38 Limitations of Polymorphism (2/2) ●No! ●Can only call methods that are defined in (or inherited by) the declared type of the object ●We’re referring to _vehicle2 as a generic Vehicle - can only tell it to do things that all Vehicle s know how to do ●Same premise applies with interfaces - if declared type is an interface, can only call methods defined in that interface public class Racetrack { private Vehicle _vehicle1; private Vehicle _vehicle2; private Vehicle _vehicle3; public Racetrack() { _vehicle1 = new Van(); _vehicle2 = new Convertible(); _vehicle3 = new CS15Mobile(); } public void race() { _vehicle1.move(); _vehicle2.move(); _vehicle3.move(); }

Andries van Dam  /01/15 30/38 Is This Code Correct? (1/7) ●Let’s say that FordVan is a subclass of Van, and both are concrete classes ●Will this code compile? ●No! public class CarDealership { private FordVan _myFordVan; public CarDealership() { _myFordVan = new Van(); }

Andries van Dam  /01/15 31/38 ●Polymorphism doesn’t work backwards! ●Since FordVan is the declared type of _myFordVan, we should be able to call any of FordVan ’s methods on it ●A generic Van wouldn’t know how to respond to FordVan ’s specialized methods! ●A FordVan “is a” Van, but a Van is typically not a FordVan public class CarDealership { private FordVan _myFordVan; public CarDealership() { _myFordVan = new Van(); } Is This Code Correct? (2/7)

Andries van Dam  /01/15 32/38 ●Assume that Cat and Bird are both subclasses of Animal ●Will this code compile? ●No! public class Cat extends Animal { // constructor elided public void catchBird(Bird unluckyBird) { // implementation elided } public class BirdCatchingApp { public BirdCatchingApp() { Cat sylvester = new Cat(); Animal tweety = new Bird(); sylvester.catchBird(tweety); } Is This Code Correct? (3/7)

Andries van Dam  /01/15 33/38 ●The Cat ’s catchBird method takes in a Bird as a parameter ●But we’ve declared tweety as an Animal, meaning we must refer to tweety as only an Animal ● catchBird is declared to allow calls to Bird -specific methods on whatever argument is passed in, but we can only allow methods that are common to all Animals to be called on tweety public class Cat extends Animal { // constructor elided public void catchBird(Bird unluckyBird) { // implementation elided } public class BirdCatchingApp { public BirdCatchingApp() { Cat sylvester = new Cat(); Animal tweety = new Bird(); sylvester.catchBird(tweety); } Is This Code Correct? (4/7)

Andries van Dam  /01/15 34/38 ●We can fix this by just declaring tweety as a Bird ! public class Cat extends Animal { // constructor elided public void catchBird(Bird unluckyBird) { // implementation elided } public class BirdCatchingApp { public BirdCatchingApp() { Cat sylvester = new Cat(); Bird tweety = new Bird(); sylvester.catchBird(tweety); } Is This Code Correct? (5/7)

Andries van Dam  /01/15 35/38 public class Zoo { private Monkey _monkey; public Zoo() { _monkey = new Monkey(); Fruit mango = new Mango(); Apple apple = new Apple(); _monkey.eat(mango); _monkey.eat(apple); _monkey.eat(new Banana()); } public class Monkey { // constructor elided public void eat(Fruit fruit) { fruit.beDigested(); } ●Assume that Mango, Apple and Banana are subclasses of Fruit Is This Code Correct? (6/7)

Andries van Dam  /01/15 36/38 public class Zoo { private Monkey _monkey; public Zoo() { _monkey = new Monkey(); Fruit mango = new Mango(); Apple apple = new Apple(); _monkey.eat(mango); _monkey.eat(apple); _monkey.eat(new Banana()); } public class Monkey { // constructor elided public void eat(Fruit fruit) { fruit.beDigested(); } Yes, this code works! Is This Code Correct? (7/7)

Andries van Dam  /01/15 37/38 That’s It! ●Polymorphism is the ultimate tool for coding generically! o method takes in a parameter of type or (e.g. Vehicle or Repairable ) o result: can pass instance of any subclass into that method! ●Limitation: When calling methods on an object, can only ever call methods of its declared type! o if myCar is declared as a Vehicle, can’t call putTopDown on it, even if it’s actually a Convertible ●Polymorphism thus lets instances of subclasses and interface-implementing classes become “multiple forms” of the generic parameter or variable

Andries van Dam  /01/15 38/38 Announcements ●LiteBrite on-time handin is tonight at 11:59PM o Late handin is Saturday 10/3 at 10pm ●TA SafeHouse is released today o Design questions are due Sunday 10/4 2PM ●Today is the last day to get checked off for lab 1 at TA hours