Presentation is loading. Please wait.

Presentation is loading. Please wait.

Week 1 - Friday.  What did we talk about last time?  Basic programming model  Other Java stuff  References  Static  Inner classes  Exceptions.

Similar presentations


Presentation on theme: "Week 1 - Friday.  What did we talk about last time?  Basic programming model  Other Java stuff  References  Static  Inner classes  Exceptions."— Presentation transcript:

1 Week 1 - Friday

2  What did we talk about last time?  Basic programming model  Other Java stuff  References  Static  Inner classes  Exceptions

3

4

5  Java handles errors with exceptions  Code that goes wrong throws an exception  The exception propagates back up through the call stack until it is caught  If the exception is never caught, it crashes the thread it's running on, often crashing the program

6  There are two kinds of exceptions:  Checked  Unchecked  Checked exceptions can only be thrown if the throwing code is:  Surrounded by a try block with a catch block matching the kind of exception, or  Inside a method that is marked with the keyword throws as throwing the exception in question  Unchecked exceptions can be thrown at any time (and usually indicate unrecoverable runtime errors)

7  Checked exceptions  FileNotFoundException  IOException  InterruptedException  Any exception you write that extends Exception  Unchecked exceptions  ArrayIndexOutOfBoundsException  NullPointerException  ArithmeticException  Any exception you write that extends Error or RuntimeException

8 Scanner in = null; try { in = new Scanner( file ); while( in.hasNextInt() ) process( in.nextInt() ); } catch( FileNotFoundException e ) { System.out.println ("File " + file.getName () + " not found !"); } finally { if( in != null ) in.close (); } Scanner in = null; try { in = new Scanner( file ); while( in.hasNextInt() ) process( in.nextInt() ); } catch( FileNotFoundException e ) { System.out.println ("File " + file.getName () + " not found !"); } finally { if( in != null ) in.close (); }

9

10  In Java, concurrency and parallelism are achieved primarily through threads  A thread is a path of code execution that runs independently of others  But threads can share memory with each other  Some other languages use message passing semantics and no direct memory sharing

11  To create a customized thread in Java, there are two routes:  Create a class which is a subclass of Thread  Create a class which implements the Runnable interface  If you subclass Thread, you can't subclass some other object  If you implement Runnable, there's an extra bit of syntax to create a new thread

12 public class Summer extends Thread { private double[] array; private int start; private int end; private double result = 0.0; public Summer(double[] array, int start, int end) { this.array = array; this.start = start; this.end = end; } public void run() { for( int i = start; i < end; i++ ) result += array[i]; } public double getResult() { return result; } } public class Summer extends Thread { private double[] array; private int start; private int end; private double result = 0.0; public Summer(double[] array, int start, int end) { this.array = array; this.start = start; this.end = end; } public void run() { for( int i = start; i < end; i++ ) result += array[i]; } public double getResult() { return result; } }

13 public double findSum( double[] array, int threads ) throws InterruptedException { Summer[] summers = new Summer[threads]; double result = 0.0; int step = array.length / threads; if( array.length % threads > 0 ) step++; for( int i = 0; i < threads; i++ ) { summers[i] = new Summer(array, i*step, Math.min((i+1)*step, array.length)); summers[i].start(); } for( int i = 0; i < threads; i++ ) { summers[i].join(); result += summers[i].getResult(); } return result; } public double findSum( double[] array, int threads ) throws InterruptedException { Summer[] summers = new Summer[threads]; double result = 0.0; int step = array.length / threads; if( array.length % threads > 0 ) step++; for( int i = 0; i < threads; i++ ) { summers[i] = new Summer(array, i*step, Math.min((i+1)*step, array.length)); summers[i].start(); } for( int i = 0; i < threads; i++ ) { summers[i].join(); result += summers[i].getResult(); } return result; }

14  Keep it simple  Do not share data via static variables  Be careful with load balancing  If the work is not evenly divisible by n (the number of threads), give the first n – 1 threads one extra piece of work  Why?  Be aware that threading out a program will not necessarily make it faster

15

16  Members  Methods  Why are they useful? Monolitihic main() function Code and data together Work divided into functions Code separated, but data shared Objects Code and data separated

17  A template or prototype for an object Class: Human Object: David Bowie Object: Barack Obama Class: Company Object: Microsoft Object: Boeing

18  Encapsulation  Dynamic dispatch  Polymorphism  Inheritance  Self-reference

19  Information hiding  We want to bind operations and data tightly together  Consequently, we don't want you to touch our privates  Encapsulation in Java is provided by the private and protected keywords (and also by default, package level access)  Hardcore OOP people think that all data should be private and most methods should be public

20 public class A { private int a; public int getA() { return a; } public void setA(int value) { a = value; } public class A { private int a; public int getA() { return a; } public void setA(int value) { a = value; }

21  Allows code reuse  Is thought of as an is-a relationship  Java does not allow multiple inheritance, but some languages do  Deriving a subclass usually means creating a "refined" or "more specific" version of a superclass

22 public class B extends A { //has member and methods from A } public class C extends A { //has A stuff and more private int c; public int getC(){ return c; } void increment() { c++; } } public class B extends A { //has member and methods from A } public class C extends A { //has A stuff and more private int c; public int getC(){ return c; } void increment() { c++; } }

23  A confusing word whose underlying concept many programmers misunderstand  Polymorphism is when code is designed for a superclass but can be used with a subclass  If BMW235i is a subtype of Car, then you can use an BMW235i anywhere you could use a Car

24 //defined somewhere public void drive( Car car ) { … } public class BMW235i extends Car { … } Car car = new Car(); BMW235i bimmer = new BMW235i(); drive( bimmer ); //okay drive( car ); //okay //defined somewhere public void drive( Car car ) { … } public class BMW235i extends Car { … } Car car = new Car(); BMW235i bimmer = new BMW235i(); drive( bimmer ); //okay drive( car ); //okay

25  Polymorphism can be used to extend the functionality of an existing method using dynamic dispatch  In dynamic dispatch, the method that is actually called is not known until run time

26 public class A { public void print(){ System.out.println("A"); } public class B extends A { public void print() { System.out.println("B"); } public class A { public void print(){ System.out.println("A"); } public class B extends A { public void print() { System.out.println("B"); }

27 A a = new A(); B b = new B(); // B extends A A c; a.print(); // A b.print(); // B c = a; c.print(); // A c = b; c.print(); // B A a = new A(); B b = new B(); // B extends A A c; a.print(); // A b.print(); // B c = a; c.print(); // A c = b; c.print(); // B

28  Objects are able to refer to themselves  This can be used to explicitly reference variables in the class  Or, it can be used to provide the object itself as an argument to other methods

29 public class Stuff { private int things; public void setThings(int things) { this.things = things; } public class Stuff { private int things; public void setThings(int things) { this.things = things; }

30 public class SelfAdder { publicvoid addToList(List list) { list.add(this); } public class SelfAdder { publicvoid addToList(List list) { list.add(this); }

31  Java provides syntax that allows you to call another constructor from the current class or specify which superclass constructor you want to call  The first line of a constructor is a call to the superclass constructor  If neither a this() or a super() constructor are the first line, an implicit default super() constructor is called

32 public class A { private double half; public A(int value){ half = value / 2.0; } public class B extends A { public B(int input) { super(input); // calls super constructor } public B() { this(5); // calls other constructor } public class A { private double half; public A(int value){ half = value / 2.0; } public class B extends A { public B(int input) { super(input); // calls super constructor } public B() { this(5); // calls other constructor }

33

34  An interface is a set of methods which a class must have  Implementing an interface means making a promise to define each of the listed methods  It can do what it wants inside the body of each method, but it must have them to compile  Unlike superclasses, a class can implement as many interfaces as it wants

35  An interface looks a lot like a class, but all its methods are empty  Interfaces have no members except for ( static final ) constants public interface Guitarist { void strumChord(Chord chord); void playMelody(Melody notes); } public interface Guitarist { void strumChord(Chord chord); void playMelody(Melody notes); }

36 public class RockGuitarist extends RockMusician implements Guitarist { public void strumChord( Chord chord ) { System.out.print( "Totally wails on that " + chord.getName() + " chord!"); } public void playMelody( Melody notes ) { System.out.print( "Burns through the notes " + notes.toString() + " like Jimmy Page!" ); } public class RockGuitarist extends RockMusician implements Guitarist { public void strumChord( Chord chord ) { System.out.print( "Totally wails on that " + chord.getName() + " chord!"); } public void playMelody( Melody notes ) { System.out.print( "Burns through the notes " + notes.toString() + " like Jimmy Page!" ); }

37  A class has an is-a relationship with interfaces it implements, just like a superclass it extends  Code that specifies a particular interface can use any class that implements it public static void perform(Guitarist guitarist, Chord chord, Melody notes) { System.out.println("Give it up " + "for the next guitarist!"); guitarist.strumChord( chord ); guitarist.playMelody( notes ); } public static void perform(Guitarist guitarist, Chord chord, Melody notes) { System.out.println("Give it up " + "for the next guitarist!"); guitarist.strumChord( chord ); guitarist.playMelody( notes ); }

38

39  Allow classes, interfaces, and methods to be written with a generic type parameter, then bound later  Java does the type checking (e.g. making sure that you only put String objects into a List )  After typechecking, it erases the generic type parameter  This works because all classes extend Object in Java  Appears to function like templates in C++, but works very differently under the covers  Most of the time you will use generics, not create them

40  You can make a class using generics  The most common use for these is for container classes  e.g. you want a List class that can be a list of anything  JCF is filled with such generics

41 public class Pair { private T x; private T y; public Pair(T a, T b ) { x = a; y = b; } public T getX() { return x; } public T getY() { return y; } public void swap() { T temp = x; x = y; y = temp; } public String toString() { return "( " + x + ", " + y + " )"; } public class Pair { private T x; private T y; public Pair(T a, T b ) { x = a; y = b; } public T getX() { return x; } public T getY() { return y; } public void swap() { T temp = x; x = y; y = temp; } public String toString() { return "( " + x + ", " + y + " )"; }

42 public class Test { public static void main(String[] args) { Pair pair1 = new Pair ("ham", "eggs"); Pair pair2 = new Pair ( 5, 7 ); pair1.swap(); System.out.println( pair1 ); System.out.println( pair2 ); } public class Test { public static void main(String[] args) { Pair pair1 = new Pair ("ham", "eggs"); Pair pair2 = new Pair ( 5, 7 ); pair1.swap(); System.out.println( pair1 ); System.out.println( pair2 ); }

43 Java Collections Framework

44  Collection  Iterable  List  Queue  Set  SortedSet  Map  SortedMap

45  LinkedList  ArrayList  Stack  Vector  HashSet  TreeSet  HashMap  TreeMap

46  Collections  sort()  max()  min()  replaceAll()  reverse()  Arrays  binarySearch()  sort()

47

48  Computational complexity  Read section 1.4

49  Work on Assignment 1  Due next Friday by 11:59pm  Start on Project 1


Download ppt "Week 1 - Friday.  What did we talk about last time?  Basic programming model  Other Java stuff  References  Static  Inner classes  Exceptions."

Similar presentations


Ads by Google