Workshop for Programming And Systems Management Teachers Chapter 3 Introduction to Media Computation, Java, and DrJava Georgia Institute of Technology Learning Goals • Understand at a conceptual level – What can computers do? – What is DrJava? – What are Java math and conditional operators? – What can computers do better than humans? – What can humans do better than computers? – What is media computation? – How do digital pictures work? – How do digital sounds work? Georgia Institute of Technology What Can Computers Do? • Basically they can – Add, subtract, multiply, divide – Compare values – Move data • They are amazingly fast – Millions to billions of instructions per second • They can store a huge amount of data – Entire movies, photo albums, dictionaries, encyclopedias, complex games • They keep getting faster, cheaper, and smaller Georgia Institute of Technology Math Operators in Java (+ * / - %) • Addition 3+4 • Multiplication 3*4 • Division 3/4 • Subtraction 3–4 • Negation -4 • Modulo (Remainder) 10 % 2 and 11 % 2 Georgia Institute of Technology Math Operators Exercise • Open DrJava and do the following in the interactions pane – – – – – – Subtract 7 from 9 Add 7 to 3 Divide 3 by 2 Divide 4.6 by 2 Multiply 5 by 10 Find the remainder when you divide 10 by 3 Georgia Institute of Technology Why is the result of 3 / 4 zero? • Java is a strongly typed language – Each value has a type associated with it – Tells the computer how to interpret the number • It is an integer, floating point, letter, etc • The compiler determines the type if it isn’t specified (literals) – 3 is an integer – 3.0 is a floating point number (has a fractional part) • The result of an operation is in the same type as the operands – 3 and 4 are integers so the answer is an integer 0 Georgia Institute of Technology Casting • There are other ways to solve the problem of 3 / 4 has a result of 0 • You can make one of the values floating point by adding .0 – 3.0 / 4 – 3 / 4.0 • The result type will then be floating point • Or you can cast one of the values to the primitive types: float or double – (double) 3 / 4 – 3 / (float) 4 Georgia Institute of Technology Casting Exercise • Use casting to get the values right for a temperature conversion from Fahrenheit to Celsius – Celsius is 5/9 * (Fahrenheit – 32) • Try it first with a calculator • Try it in DrJava without casting • Try it in DrJava with casting Georgia Institute of Technology Java Primitive Types – Integers (numbers without fractional parts) are represented by • The types: int or short or long • 235, -2, 33992093, etc – Floating point numbers (numbers with fractional parts) are represented by • The types: double or float • 3.233038983 -423.9, etc – A single character is represented by • The type: char • ‘a’ ‘b’ ‘A’ etc – True and false values are represented by • The type: boolean • true or false Georgia Institute of Technology Why so Many Different Types? • They take up different amounts of space • They have different precisions • Usually use int, double, and boolean – byte uses 8 bits (1 byte) 2’s compliment – short uses 16 bits (2 bytes) 2’s compliment – int uses 32 bits (4 bytes) 2’s compliment – long uses 64 bits (8 bytes) 2’s compliment – float uses 32 bits (4 bytes) IEEE 754 – double uses 64 bits (8 bytes) IEEE 754 – char uses 16 bits (2 bytes) Unicode format Georgia Institute of Technology Sizes of Primitive Types byte 8 bits short 8 bits 8 bits int 8 bits 8 bits 8 bits 8 bits long 8 bits 8 bits 8 bits 8 bits float 8 bits 8 bits 8 bits 8 bits double 8 bits 8 bits 8 bits 8 bits char 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits Georgia Institute of Technology Floating Point Numbers • Numbers with a fractional part – 6170.20389 • Stored as binary numbers in scientific notation -52.202 is -.52202 x 102 – The sign (1 bit) – The digits in the number (mantissa) – The exponent (8 bits) • Two types – float – 6-7 significant digits accuracy – double – 14-15 significant digits accuracy Georgia Institute of Technology Operator Order • The default evaluation order is – Negation – Multiplication * – Division / – Modulo (remainder) % – Addition + – Subtraction - • The default order can be changed – By using parenthesis – (3 + 4) * 2 versus 3 + 4 * 2 Georgia Institute of Technology Math Operator Order Exercise • Try 2 + 3 * 4 + 5 • Add parentheses to make it clear what is happening first • How do you change it so that 2 + 3 happens first? • How do you change it so that it multiplies the result of 2 + 3 and the result of 4 + 5? Georgia Institute of Technology Printing Output to the Console • One of the things you often want to do in a program is output the value of something • In Java the way to print to the console is to use – System.out.println(thing to be printed); • To print the thing in the parentheses and a new line – System.out.print(thing to be printed); • To print just the thing in the parentheses Georgia Institute of Technology Console Output Exercise • Use System.out.println() to print the results of expression to the console – System.out.println(3 * 28) – System.out.println(14 – 7) – System.out.println(10 / 2) – System.out.println(128 + 234) – System.out.println(“Hi “ + “There”); • Try using System.out.print() instead – What is the difference? Georgia Institute of Technology Strings • Java has a type called: String • A string is an object that has a sequence of characters in Unicode – It can have no characters (the null string “”) – It can have many characters • “This is one long string with spaces in it.” • Java knows how to add strings – It returns a new string with the characters of the second string after the characters of the first Georgia Institute of Technology Methods • Classes in Java define methods – Recipes or functions f(x) = x2 – May take input – May produce an output • Two Types – Object method • Sent as a message to an object • Implicitly passed the current object – Class method • Sent as a message to a class Georgia Institute of Technology Method Exercise • In DrJava’s interaction pane try these – Object methods • "HI".toLowerCase() • "This is a string".indexOf("is") • " This is ".trim() – Class methods • • • • Math.abs(13) Math.abs(-13) Math.min(3,4) Character.getNumericValue('A') Georgia Institute of Technology Common Errors • Did you make any mistakes when you typed in the examples? – If you use the wrong case it won’t work > math.abs(-3) Error: Undefined class 'math‘ – If you misspell something it won’t work > Mat.abs(-3) Error: Undefined class 'Mat‘ > Math.ab(-3) Error: No 'ab' method in 'java.lang.Math' Georgia Institute of Technology “Hi” is a String Object • The compiler turns literal strings into string objects – Objects of the String class • Object methods are invoked by sending a message – with the same name as the method – the same type, number, and order of input parameters – to the object Georgia Institute of Technology API Exercise • The Classes defined as part of the Java language are documented in the API – http://java.sun.com/j2se/1.4.2/docs/api/ • Find the documentation for the following classes – String and Math – Find documentation for the methods used in the previous exercise – Try out some other methods for these classes Georgia Institute of Technology Java Packages • Java groups related classes into packages • Common Packages – java.lang • Contains basic classes for the language – System, Math, Object, … – java.io • Contains classes for input and output – java.awt • Contains basic user interface classes – javax.swing • Contains more advanced user interface classes Georgia Institute of Technology Class Methods versus Object Methods • In the API documentation how can you tell which are class methods and which are object methods? – Look for the keyword static on the method – If it has the keyword static then it is a class method – If there is no keyword static then it is an object method Georgia Institute of Technology What do Objects Look Like? • Objects are created with space for their data • Objects have a reference to the object that represents the class – Object of the class “Class” Fries: Food Waffles: Food Name = “Fries” Name =“Waffles” Price = 1.99 Price = 2.99 Food : Class Name = Food Fields = Name, Price Methods = getName, setName, getPrice, setPrice, getCalories Georgia Institute of Technology Java is Case Sensitive • Some programming languages are case sensitive – Meaning that double isn’t the same as Double – Or string isn’t the same as String • In Java primitive types are all lowercase – double, float, int, • Class names start with an uppercase letter – So String and System are the names of classes Georgia Institute of Technology Java Naming Conventions • In Java only Class names start with an uppercase letter – System, BufferedImage, Picture • All other names start with lowercase letters but uppercase the first letter of each additional word – picture, fileName, thisIsALongName Georgia Institute of Technology A Semicolon (;) ends a Statement • Java programs are made up of statements – Like sentences in English • Java statements end in a semicolon not a period – The period is used to send a message to an object • System.out.println() – Or access data in the object • System.out.println() • DrJava prints the result of statements without a semicolon – but not the result of statements with a semicolon • Use System.out.println(); to force output Georgia Institute of Technology Message Always Have Parenthesis • You can tell that out.println() is sending a message – Because of the () • Messages always have () – Even if there are no parameters (arguments) • If you are sending data along with a message it goes inside the parentheses – Separated by commas – Math.min(3,4); Georgia Institute of Technology Comparison (Relational) Operators • Greater than > – 4 > 3 is true – 3 > 3 is false – 3 > 4 is false • Less than < – 2 < 3 is true – 3 < 2 is false • Equal == • Greater than or equal >= – 3 >= 4 is true – 3 >= 3 is true – 2 >= 4 is false • Less than or equal <= – 2 <= 3 is true – 2 <= 2 is true – 4 <= 2 is false – 3 == 3 is true – 3 == 4 is false • Not equal != – 3 != 4 is true – 3 != 3 is false Georgia Institute of Technology Comparison Operators Exercise • In DrJava – Try out the comparison operators in the interactions pane • with numbers – – – – 3<4 4 <= 4 5<4 6 == 6.0 • with characters (single alphabet letter) – – – – Put single quote around a character ‘a’ < ‘b’ ‘b’ < ‘a’ ‘a’ == ‘a’ Georgia Institute of Technology Why Do Computers Keep Getting Cheaper? • The number of transistors (a major component of processors) at the same price doubles every 18 months – making computers faster, smaller, and cheaper over time • This notion is know as Moore’s Law – For Gordon Moore, a founder of Intel • This “Law” has held true for decades – And is predicted to hold true at least one more Georgia Institute of Technology What are Computers Good At? • Producing the same answer every time – Like calculating the sum of hundreds of numbers • Computer don’t tire of tedious tasks • Storing information – They don’t forget information • Looking up information quickly – Search through a phone book to find the customer name for a phone number Georgia Institute of Technology What are People Good At? • Being Creative – Computers can only do what they are programmed to do • Doing Visual Processing – Reading someone else’s handwriting – Recognizing a face very quickly • Understanding Natural Language – Understanding a variety of speakers • Even if I never heard them speak before Georgia Institute of Technology What is Media Computation? • Processing millions to billions of – picture elements – sound fragments – movie frames • The speed and storage capacity of modern computers makes this possible – Even for beginning students just learning to program Georgia Institute of Technology How Does Color Vision Work? • Our eyes and brain work together to make sense of what we see • The cones in our eyes are what allow us to see in color • The rods allow us to see black, white, and shades of gray • Our cones are sensitive to red, green, and blue light – All other colors are combinations of these Georgia Institute of Technology Red, Green and Blue Light • White light is a combination of red, green, and blue – Full intensity red, green, and blue combined • Black is the absence of all light – No red, green or blue light • All other colors are combinations – Of red, green, and blue – Of different intensities Georgia Institute of Technology Color Exercise • Start DrJava – In the interactions pane type – ColorChooser.pickACo lor(); – Click on the RGB tab and move the sliders to change the intensity of red, green, and blue – Make white, black, red, blue, green, yellow, violet, and orange Georgia Institute of Technology How do Digital Cameras Work? • There are red, green, and blue filters that capture the amount of each color at a position – A part of a grid • There are many positions – picture element or pixel – 640 x 480 is low resolution – 1600 x 1200 is high resolution • The more pixels the better the picture – Can enlarge it without it looking grainy Georgia Institute of Technology How do Computer Displays Work? • A display has pixels (picture elements) • Each pixel has a red, green, and blue component • Combinations of red, green, and blue give the resulting color – Black is 0 red, 0 green and 0 blue – White is 255 red, 255 green, 255 blue Georgia Institute of Technology Pictures are made up of Pixels • Digital cameras record light at pixels • Monitors display pictures using pixels • Our limited vision acuity helps us to see the discrete pixels as a smooth picture – If we blow up the picture we can see the pixels Georgia Institute of Technology Digital Pictures • Capture the intensity of the red, green, and blue colors at each pixel • Stored as a bunch of numbers – 8 bits for red, 8 bits for green, 8 bits for blue – Need nearly 1 million bytes to store a 640 x 480 picture – Need 3 million bytes to store an image from a 1 megapixel (million pixel) camera • Displayed as red, green, and blue colors on the computer display – Lots of them close together – Our brain sees a smooth color image Georgia Institute of Technology Picking a File Name • Use the class method pickAFile() on our FileChooser class to pick a file > System.out.println(FileChooser.pickAFile()) – Look for a file that holds a digital picture • .jpg or .gif – Look for a file that holds a digital sound • .wav or .aif or .aiff or .au – The result might look like • C:\intro-prog-java\mediasources\cat.jpg Georgia Institute of Technology Parts of a File Name • Path separators ‘\’ • Path – where on the hard disk the file is – C:\intro-prog-java\mediasources\ • Base file name – cat.jpg • File extension – .jpg Georgia Institute of Technology Creating Objects • Remember that a class is a factory that creates objects of that class • We ask a class to create an object by using the keyword: new ClassName • We also ask the class to initialize the object – And pass data to help initialize it Georgia Institute of Technology Creating a Picture Object • A picture needs data to use to create the picture – One way to create it is to give it the full path name of the file to read the data from – We know how to get the full path name • Using FileChooser.pickAFile() > System.out.println(new Picture(FileChooser.pickAFile())) Picture, filename C:\intro-progjava\mediasources\partFlagSmall.jpg height 217 width 139 Georgia Institute of Technology Where is the Picture? • When you printed the result of – new Picture(FileChooser.pickAFile()) • You got the file name, width, and height – So it looks like a picture object was created • But, where is the picture? – To get it to display send the picture object the message “show()” – new Picture(FileChooser.pickAFile()).show() Georgia Institute of Technology How did that work? • The expression inside the parentheses is evaluated first – FileChooser.pickAFile() – This returns the full path name of a file as a String object • “C:\intro-prog-java\mediasources\cat.jpg” • Next the Picture class was asked to create and initialize a new object – using the full path name of the file as the place to read the picture data from • new Picture(“C:\intro-prog-java\mediasources\cat.jpg”) • Then we asked the new picture object to show itself – pictureObject.show() Georgia Institute of Technology Naming the Results • Another way to do the same thing is to name each of the results – Gives us a way to refer to the result again – Makes it easier to understand • In Java we must give a type when we create a new name – This is called declaring a variable – Type name; or – Type name = something; Georgia Institute of Technology Assignment Exercise • Try some integer calculations using the assignment operator (‘=‘) int x = 3; int y =4; int z; z = x + y; // assign z to be x + y System.out.println(z); System.out.println(x); System.out.println(y); Georgia Institute of Technology Working with Variables • You must declare a variable before you can use it • Declare a variable once and only once – You will get an error if you declare it more than once • You can reuse variables – That you have declared Georgia Institute of Technology Variables are Temporary • Hold values until – Reassigned int x = 2; x = 3; – DrJava is exited – The interactions pane is reset • You can force this by clicking the “Reset” button • Or by right click and choose “Reset Interactions” • Happens automatically when you compile Georgia Institute of Technology Allowed Types in Java • The type for a variable declaration can be – A primitive type: int, double, char, or boolean – The name of a Class • in the Java language – String, JFrame, BufferedImage, etc • or the name of a class created by you or someone else – Picture, Sound, FileChooser Georgia Institute of Technology Object and Primitive Variables • Primitive variables cause space allocation for their size int a = 3 a 3 – The contents of the space is set to the variable’s value • Object type variables cause space allocation for an address – The contents of the space is the address of the referred to object – Or null if it isn’t referring to an object yet. String str =“Hi”; str Georgia Institute of Technology reference “Hi” Memory Exercise • Draw the memory used for the following: int x = 2; int y = 7; int z = x + y; • Draw the memory used for the following: String fullName; String firstName = “James”; String lastName = “Clark”; fullName = firstName + lastName; Georgia Institute of Technology Naming each Piece • First let’s pick the file name and save a reference to the resulting String object – String fileName = FileChooser.pickAFile(); • Next, let’s create the Picture object and save a reference to it. – Picture picture = new Picture(fileName); • Now send the show() message to the picture object – picture.show(); Georgia Institute of Technology Georgia Institute of Technology Show Picture Exercise • Try both ways of creating a picture object and showing it. – new Picture(FileChooser.pickAFile()).show() – And do each piece one step at a time naming the result of each method • • • • • String fileName = FileChooser.pickAFile(); System.out.println(fileName); Picture picture = new Picture(fileName); System.out.println(picture); picture.show(); Georgia Institute of Technology Substitution and Evaluation • In programming you can – Use a literal – Use a variable – Use an expression – Use the result of a method invocation • Values get substituted for variable names when expressions are evaluated Georgia Institute of Technology What is a Sound? • Any object that produces vibrations in matter will make a sound • The vibrations produce a sound wave • The pitch is based on the frequency of the cycles in the sound wave • The loudness is based on the amplitude (height) of the sound wave Georgia Institute of Technology How does Hearing Work? • The outer ear “catches” sounds • The eardrum vibrates • The inner ear translates the vibrations to nerve impulses for the brain to interpret Georgia Institute of Technology How does Recorded Sound Work? • Phonograph recordings capture sound continuously, as an analog signal • CDs and DVDs sample sounds and record numbers that represent the sound at the time of the sample – 44,100 samples per second Georgia Institute of Technology Why Digitize Sound? • High fidelity – Reproduced sound is very similar to the original • Perfect reproduction – Sounds the same every time • Easy to transmit – Download as data • Easier to manipulate on a computer – Even though there are billions of bits Georgia Institute of Technology Playing a Sound • We can create a Sound object just as we created a Picture object – Get a file name • String fileName = FileChooser.pickAFile(); – Create the sound object by asking the class to create a new Sound object and initialize it by reading data from the given file name • Sound sound = new Sound(fileName); – Play the Sound • sound.play(); Georgia Institute of Technology Play Sound Exercise • Try creating a Sound object and playing it by – Specifying it all at once – Specifying it in steps • How would you play the same sound twice? Georgia Institute of Technology Summary • Computers can do math and make logical comparisons • Computers can execute billions of instructions per second • Computers keep getting faster, smaller, and cheaper • Pictures, sounds, text and movies can be digitized • Media computation can mean processing millions to billions of bytes • The speed of modern computers makes media computation possible even for beginners Georgia Institute of Technology