Languages in Depth Series: Java Programming
- Prof. Dr. Bertrand Meyer
Chair of Software Engineering
Exercise Session 3 Todays Exercise Session Assignment 2 - - PowerPoint PPT Presentation
Chair of Software Engineering Languages in Depth Series: Java Programming Prof. Dr. Bertrand Meyer Exercise Session 3 Todays Exercise Session Assignment 2 Walkthrough the master solution (your solutions) Questions Pattern of
Chair of Software Engineering
2
Languages in Depth series: Java Programming
3
Languages in Depth series: Java Programming
4
Languages in Depth series: Java Programming
5
Languages in Depth series: Java Programming
6
Languages in Depth series: Java Programming
// “Context” public public class class SortedList { private private ArrayList<String> list = new ArrayList<String>(); private private SortStrategy sortStrategy; void void setSortStrategy(SortStrategy s) { this this.sortStrategy = s; } public public void void add(String name) { list.add(name); } public public void void sort() { sortStrategy.sort(list); } } // "Strategy" public interface public interface SortStrategy { void void sort(ArrayList<String> list); }
7
Languages in Depth series: Java Programming
public public class class QuickSort implements SortStrategy { public public void sort(ArrayList<String> list) { //Quick-sorting list... } } public public class class ShellSort implements SortStrategy { public public void sort(ArrayList<String> list) { //Shell-sorting list... } } public public class class MergeSort implements SortStrategy { public public void sort(ArrayList<String> list) { //Shell-sorting list... } }
8
Languages in Depth series: Java Programming
public public class class SortApp { public public static void main(String[] args) { // Two contexts following different strategies SortedList studentRecords = new SortedList(); studentRecords.add("Samual"); studentRecords.add("Jimmy"); studentRecords.add("Sandra"); studentRecords.setSortStrategy(new QuickSort()); studentRecords.sort(); studentRecords.setSortStrategy(new ShellSort()); studentRecords.sort(); studentRecords.setSortStrategy(new MergeSort()); studentRecords.sort(); } }
9
Languages in Depth series: Java Programming
10
Languages in Depth series: Java Programming
11
Languages in Depth series: Java Programming
12
Languages in Depth series: Java Programming
13
Languages in Depth series: Java Programming
import import java.util.Date; package package my.products; private private class class Product { int multiply(int a, int b) { return(a * b) } abstract Date lastSell(); public static static void main(String args[ ]) { int x = 10, y = 20; System.out.println(multiply(x, y)); } }
File my/products/Products.java:
14
Languages in Depth series: Java Programming
import import java.util.Date; package package my.products; private private class class Product { int multiply(int a, int b) { return(a * b) } abstract Date lastSell(); public static static void main(String args[ ]) { int x = 10, y = 20; System.out.println(multiply(x, y)); } }
File my/products/Products.java:
1.
The filename must be equal to the class name filename must be equal to the class name
package declaration must come first
6.
A non-static method can not be invoked in a static context invoked in a static context
15
Languages in Depth series: Java Programming
import import java.util.*; class class Foo { public public Integer foo(List list) { return return null null; } public public String foo(List list) { return return null; } } class class Bar { public public Integer bar(List<Integer> integers) { return return null; } public public String bar(List<String> strings) { return return null; } }
16
Languages in Depth series: Java Programming
import import java.util.*; class class Foo { public public Integer foo(List list) { return return null null; } public public String foo(List list) { return return null; } } class class Bar { public public Integer bar(List<Integer> integers) { return return null; } public public String bar(List<String> strings) { return return null; } }
17
Languages in Depth series: Java Programming
import import java.util.*; class class Bar { public public Integer bar(List<Integer> integers) { return return null; } public public Integer bar(List<String> strings) { return return null; } }
Why does this class not compile? (Note the changed return types)
18
Languages in Depth series: Java Programming
import import java.util.*; class class Bar { public public Integer bar(List<Integer> integers) { return return null; } public public Integer bar(List<String> strings) { return return null; } }
During compilation, generic type erasure is performed: generic type parameters are replaced by their leftmost bound or ‘Object’ if no bound was specified. Two methods with the same erasure would have identical signatures in the byte code (the return type is included) and the virtual machine could not distinguish between
method if two method have the same erasure.
19
Languages in Depth series: Java Programming