Presentation is loading. Please wait.

Presentation is loading. Please wait.

Arrays –Collections (Set, Database, History) Inheritance –inheriting ancestor’s traits –inheriting benefactor’s assets –inheriting instance members( methods/variables)

Similar presentations


Presentation on theme: "Arrays –Collections (Set, Database, History) Inheritance –inheriting ancestor’s traits –inheriting benefactor’s assets –inheriting instance members( methods/variables)"— Presentation transcript:

1 Arrays –Collections (Set, Database, History) Inheritance –inheriting ancestor’s traits –inheriting benefactor’s assets –inheriting instance members( methods/variables) IS-A Relationship –human IS-A Mammal –salmon IS-A Fish –“Joe Doe” IS-A Student –ALoan IS-A Loan

2 Strings = Char Sequences JohnF.Kenndye hello String{sequences of characters} 143l0

3 Other Sequences as Predefined Types 100989910090 604050 {sequences of integers} 80 JFKFDR {sequence of Strings} JCBCRRGB 3.83.1 {sequences of doubles} 3.73.13.63.9 IntSequence DoubleSequence StringSequence

4 Sequences of Programmer-Defined Type loan1loan2 {sequence of loans} loan3 temperature1 {sequence of temperatures} temperature2temperature3 temperature1temperature2 TemperatureSequence LoanSequenceLoan[] Temperature[] Array Types Arrays Array Element

5 Other Sequences as Array Types 100989910090 604050 {sequences of integers} 80 {sequence of strings} 3.83.1 {sequences of doubles} 3.73.13.63.9 int[] double[] String[] JFKFDRJCBCRRGB

6 Initializing Array Declarations 10098991009080 int[] assignmentScores = {100, 98, 99, 80}; 3.83.13.73.13.63.9 double[] gpas = {3.8, 3.1, 3.7, 3.1, 3.6, 3.9};String[] initials = {“JFK”, “FDR”, “JC”, “BC”, “GW”, “WW”}; JFKFDRJCBCGWWW assignmentScores Array Type Element Type Array Literal Array Variable

7 Initializing Array Declaration [] = {, …, } Loan [] loans = {new ALoan(100000), new AnotherLoan (100)};

8 Array Operations String[] initials = {“JFK”, “FDR”, “JC”, “BC”, “GW”, “WW”}; JFKFDRJCBCGWWW initials.length  6 initials[0] initials[initials.length - 1] initials[initials.length]  ArrayIndexOutOfBoundsException public named constant initials[0] = “HT” HT initials[initials.length] = “HT”  ArrayIndexOutOfBoundsException Array Instance Size Fixed

9 Array Types have Variable-Size 100989910090 604050 80 int[] 10098991009080 int[] assignmentScores = {100, 98, 99, 100, 99, 80}; assignmentScores assignmentScores = {60, 40, 50}; assignmentScores 604050

10 Uninitializing Array Declaration int[] assignmentScores; assignmentScores null assignmentScores = {60, 40, 50}; assignmentScores 604050

11 Array Elements Uninitialized int[] assignmentScores = new int[3]; assignmentScores 000

12 Object Array Elements Uninitialized String[] initials = new String[3]; initials null

13 Uninitialized Array Vs Element String[] initials = new String[3]; initials null String[] initials; initials null initials[0]  null initials[0] initials[0].charAt(0)  StringIndexOutOfBounds  ArrayIndexOutOfBoundsException

14 Example

15 getStrings() static String[] getStrings() { System.out.println("Number of Strings:"); int numElements = Keyboard.readInt(); System.out.println("Please enter " + numElements + " strings"); String[] strings = new String[numElements]; for (int elementNum = 0; elementNum < numElements; elementNum++) strings[elementNum] = Keyboard.readLine(); return strings; } variable

16 print() static void print(String[] strings) { System.out.println("******************"); for ( int elementNum = 0; elementNum < strings.length; elementNum++) System.out.println(strings[elementNum]); System.out.println("******************"); } String array of arbitrary dimension (size)

17 main() public static void main(String[] args){ String[] names = getStrings(); while (true) { String command = Keyboard.readLine(); if (command.length > 0 && command.charAt(0) == 'q') break; if (command.length > 0 && command.charAt(0) == 'p') print(names); }

18 main()

19 Variable-Size Collection filled part unfilled part current size maximum size

20 3 James Dean Joe Doe Jane Smith sizearray Variable-Size Collection filled part unfilled part current size maximum size

21 Variable-Size Collection public class { … final static int A_MAX_SIZE = 50; String[] a = new String [MAX_SIZE]; int aSize = 0; … //process a for (int index = 0; index < aSize; index++) System.out.println(a[index]); … final int B_MAX_SIZE = 50; String[] b = new String [MAX_SIZE]; int bSize = 0; //process b … }

22 Special Type public class {... AVariableSizeCollection a = new AVariableSizeCollection();... for (int index = 0; index < a.size; index++) System.out.println(a.contents[index]); … AVariableSizeCollection b = new AVariableSizeCollection();... } public class AVariableSizeCollection { public static final int MAX_SIZE = 50; public String[] contents = new String [MAX_SIZE]; public int size = 0; } No encapsulation! a.contents[a.size] = Keyboard.readString(); Size not updated

23 Supporting Encapsulation public interface …. { public static final int MAX_SIZE = 50; } public void addElement (String element); public void print (); Implementation specific User specific

24 History public interface StringHistory { } public void addElement (String element); public int size(); public String elementAt (int index);

25 Implementing a History public class AStringHistory implements StringHistory { public final int MAX_SIZE = 50; String[] contents = new String[MAX_SIZE]; int size = 0; public int size() { return size;} public String elementAt (int index) { return contents[index]; } boolean isFull() { return size == MAX_SIZE; } public void addElement(String element) { if (isFull()) System.out.println("Adding item to a full history"); else { contents[size] = element; size++; }

26 Using a History public static void main(String[] args) { StringHistory names = new AStringHistory(); while (true) { String input = Keyboard.readLine(); if (input.length > 0) if (input.charAt(0) == 'q') break; else if (input.charAt(0) == 'p' ) print(names); else names.addElement(input); }

27 Printing a History static void print(StringHistory strings) { System.out.println("******************"); for ( int elementNum = 0; elementNum < strings.size(); elementNum++) System.out.println(strings.elementAt(elementNum)); }

28 Database

29 public interface StringDatabase { //from history public int size(); public void addElement (String element); public String elementAt (int index); //additional methods } public void member (String element); public void deleteElement(String element); public void clear();

30 deleteElement (String element) 4 James Dean Joe Doe Jane Smith sizearray John Smith deleteElement(“Joe Doe”); public void deleteElement (String element) { contents[indexOf(element)] = contents[size - 1]; size--; } John Smith 3 Elements out of order!

31 deleteElement (String element) 4 James Dean Joe Doe Jane Smith sizearray John Smith deleteElement(“Joe Doe”); public void deleteElement (String element) { shiftUp(indexOf(element)); } 1 index

32 Multi-element window 4 James Dean Joe Doe Jane Smith sizearray John Smith deleteElement(“Joe Doe”); public void deleteElement (String element) { shiftUp(indexOf(element)); } Jane Smith 1 index contents[index] = contents[index + 1];

33 deleteElement (String element) 4 James Dean Joe Doe Jane Smith sizearray John Smith deleteElement(“Joe Doe”); public void deleteElement (String element) { shiftUp(indexOf(element)); } Jane Smith John Smith 3 void shiftUp (int startIndex) { for (int index = startIndex ; index + 1 < size; index++) contents[index] = contents[index + 1]; size--; } 2 index

34 indexOf (String element) 4 James Dean Joe Doe Jane Smith sizearray John Smith indexOf(“Joe Doe”); 0 index

35 indexOf (String element) 4 James Dean Joe Doe Jane Smith sizearray John Smith deleteElement(“Joe Doe”); 1 index public int indexOf (String element) { for ( index = 0; index < size && !element.equals(contents[index]; index++) ; return index; }

36 public boolean member(String element) 4 James Dean Joe Doe Jane Smith sizearray John Smith member(“Joe Doe”); public int indexOf (String element) { for ( index = 0; index < size && !element.equals(contents[index]; index++) ; return index; } public boolean member (String element) { } return indexOf (element) < size;

37 public void clear() 4 James Dean Joe Doe Jane Smith sizearray John Smith clear() public void clear() { while ( size > 0) deleteElement(size -1); } 3210

38 public void clear() 4 James Dean Joe Doe Jane Smith sizearray John Smith clear() public void clear() { size = 0; } 0

39 addElement(“Mary Doe”) 4 Mary Doe Joe Doe Jane Smith sizearray John Smith 1

40 Logical but not Physical Extensions clear( ) elementAt( ) size( ) member( ) deleteElement( ) addElement( ) String Database String History size( ) elementAt( ) addElement( ) IMPLEMENTS elementAt( ) member( ) deleteElement( ) indexOf( ) size( ) addElement( ) shiftUp( ) size contents MAX_SIZE AString Database clear( ) MAX_SIZE size contents size( ) addElement( ) elementAt( ) AString History isFull( )

41 Database public interface StringDatabase { //from history public int size(); public void addElement (String element); public String elementAt (int index); //additional methods } public void member (String element); public void deleteElement(String element); public void clear();

42 Physical and Logical Extensions String History size( ) elementAt( ) addElement( ) EXTENDS member( ) deleteElement( ) String Database clear( ) member( ) deleteElement( ) indexOf( ) shiftUp( ) AString Database clear( ) IMPLEMENTS EXTENDS Supertype Subtype MAX_SIZE size contents size( ) addElement( ) elementAt( ) AString History isFull( ) Superclass Subclass

43 Extending an Interface public interface StringDatabase extends StringHistory { } public void member (String element); public void deleteElement(String element); public void clear(); public interface StringHistory { } public void addElement (String element); public int size(); public String elementAt (int index); extends/ inherits from Inherited members

44 Extending a Class public class AStringDatabase extends AStringHistory implements StringDatabase { public void deleteElement (String element) { … } int indexOf (String element) { … } void shiftUp (int startIndex) { … } public boolean member(String element) { } public void clear() { } }

45 Physical and Computer Inheritance Human AStringDatabase Physical Object Animal Mammal Primate AStringHistory String Object Implicit extension Regular Accord Deluxe Accord Car Vehicle StringDatabase StringHistory

46 No Explicit Extension public class AStringHistory implements StringHistory { public final int MAX_SIZE = 50; String[] contents = new String[MAX_SIZE]; int size = 0; public int size() { return size;} public String elementAt (int index) { return contents[index]; } boolean isFull() { return size == MAX_SIZE; } public void addElement(String element) { if (isFull()) System.out.println("Adding item to a full history"); else { contents[size] = element; size++; }

47 Equivalent Class Definition public class AStringHistory extends Object implements StringHistory { public final int MAX_SIZE = 50; String[] contents = new String[MAX_SIZE]; int size = 0; public int size() { return size;} public String elementAt (int index) { return contents[index]; } boolean isFull() { return size == MAX_SIZE; } public void addElement(String element) { if (isFull()) System.out.println("Adding item to a full history"); else { contents[size] = element; size++; }

48 Some Methods of Class Object MAX_SIZE size contents size( ) addElement( ) elementAt( ) member( ) deleteElement( ) indexOf( ) shiftUp( ) AString Database AString History EXTENDS clear( ) isFull( ) Object EXTENDS toString( ) equals( ) clone( ) (new AStringHistory()).toString() (new AStringDatabase()).toString() (new ALoan()).toString() “hello”.toString() ‘h’.toString() 5.toString() Used by println()

49 IS-A Relationships Object StringHistoryAStringHistoryString AStringDatabaseStringDatabase implementsextends

50 IS-A & Polymorphism public static Loan add(Loan loan1, Loan loan2) { return new ALoan(loan1.getPrincipal() + loan2.getPrincipal())); } AnotherLoan Instance ALoan Instance Actual Parameters of different types IS-A

51 Printing a History static void print(StringHistory strings) { System.out.println("******************"); for ( int elementNum = 0; elementNum < strings.size(); elementNum++) System.out.println(strings.elementAt(elementNum)); } AStringHistory Instance AStringDatabase Instance AStringHistory IS-A StringHistory AStringDatabase IS-A AStringHistory AStringDatabase IS-A StringHistory

52 Assignment Rules for Primitive Types If T1 narrower than T2 (Set of instances of T1  Set of instances of T2) Expression of type T1 can be assigned to Variable of type T2 Expression of type T2 can be assigned to Variable of type T1 with cast.

53 Assignment Rules for Object Types If T1 IS-A T2 Expression of type T1 can be assigned to Variable of type T2 Expression of type T2 can be assigned to Variable of type T1 with cast.

54 IS-A Definition Implements: T1 implements T2 => T1 IS-A T2 Extends: T1 extends T2 => T1 IS-A T2 Transitive: –T1 IS-A T2 –T2 IS-A T3 –=> T1 IS-A T3 Reflexive: –T1 == T2 => T1 IS-A T2

55 Type Checking Examples StringHistory stringHistory = new AStringDatabase(); StringDatabase stringDatabase = new AStringHistory();

56 Getting an Upgrade Regular Model Requested ARegularModel myCar = new ADeluxeModel (); ((ADeluxeModel) myCar). setCity(“Raleigh”); Deluxe Model Assigned myCar.steer(); Navigation System myCar. setCity(“Raleigh”);

57 Getting a Downgrade Deluxe Model Requested ADeluxeModel myCar = new ARegularModel (); Regular Model Assigned myCar.steer(); myCar. setCity(“Raleigh”);

58 Type Checking Examples StringHistory stringHistory = new AStringDatabase(); stringHistory.size() stringDatabase.clear() ((StringDatabase) stringHistory).clear() StringDatabase stringDatabase = new AStringHistory(); stringHistory.clear()

59 Type Checking Examples Object[] objects = { “Joe Doe”, new AStringDatabase(), new AStringHistory()}; String[] strings = { “Joe Doe”, new Object()};

60 Database

61 Set

62 Overriding Inherited Methods MAX_SIZE size contents size( ) addElement( ) elementAt( ) member( ) deleteElement( ) indexOf( ) shiftUp( ) AString Database AString History EXTENDS clear( ) isFull( ) Object EXTENDS toString( ) equals( ) clone( ) AString Set addElement( ) Overriden Method Overriding Method

63 Overriding addElement() public void addElement(String element) { if (isFull()) System.out.println("Adding item to a full history"); else { contents[size] = element; size++; } public void addElement(String element) { if (member(element)) return; if (isFull()) System.out.println("Adding item to a full history"); else { contents[size] = element; size++; }

64 super public void addElement(String element) { if (isFull()) System.out.println("Adding item to a full history"); else { contents[size] = element; size++; } public void addElement(String element) { if (member(element)) return; super.addElement(); } inherited addElement()

65 Omitting Super public void addElement(String element) { if (isFull()) System.out.println("Adding item to a full history"); else { contents[size] = element; size++; } public void addElement(String element) { if (member(element)) return; addElement(); } Recursive call

66 More Overriding MAX_SIZE size contents size( ) addElement( ) elementAt( ) member( ) deleteElement( ) indexOf( ) shiftUp( ) AString Database AString History EXTENDS clear( ) isFull( ) Object EXTENDS toString( ) equals( ) clone( ) AString Set addElement( ) Overriden Method Overriding Method toString( )

67 More Overriding public String toString() { String retVal = “”; for (int i = 0; i < size; i++) retVal += “:” + contents[i]; return retVal; } stringSet.toString()  “AStringSet@1eed58” stringSet.toString()  “James Dean:John Smith”

68 Motivation for Switch public static void main(String args[]) { StringDatabase names = new AStringDatabase(); while (true) { String input = Keyboard.readLine(); if (!(input.length() == 0)) if (input.charAt(0) == 'q') break; else if (input.charAt(0) == 'p') print(names); else if (input.charAt(0) == 'd') names.deleteElement(input.substring(2, input.length())); else if (input.charAt(0) == 'm') System.out.println(names.member(input.substring(2, input.length()))); else if (input.charAt(0) == 'c') names.clear(); else names.addElement(input); }

69 Main with Switch public static void main(String args[]) { StringDatabase names = new AStringDatabase(); while (true) { String input = Keyboard.readLine(); if (!(input.length() == 0)) if (input.charAt(0) == 'q') break; else switch (input.charAt(0)) { case 'p': print(names); break; case 'd': names.deleteElement(input.substring(2, input.length())); break; case 'm': System.out.println(names.member(input.substring(2, input.length()))); break; case 'c': names.clear(); break; default: names.addElement(input); } Breaks out of the loop Breaks out of the switch Switch expression Switch arm Switch case (value of switch expressiuon)

70 Multi-case arms public static void main(String args[]) { StringDatabase names = new AStringDatabase(); while (true) { String input = Keyboard.readLine(); if (!(input.length() == 0)) if (input.charAt(0) == 'q') break; else switch (input.charAt(0)) { case 'p’, ‘P’: print(names); break; case 'd’, ‘D’: names.deleteElement(input.substring(2, input.length())); break; case 'm’, ‘M’: System.out.println(names.member(input.substring(2, input.length()))); break; case 'c’, ‘C’: names.clear(); break; default: names.addElement(input); }

71 Omitting break public static void main(String args[]) { StringDatabase names = new AStringDatabase(); while (true) { String input = Keyboard.readLine(); if (!(input.length() == 0)) if (input.charAt(0) == 'q') break; else switch (input.charAt(0)) { case 'p’, ‘P’: print(names); case 'd’, ‘D’: names.deleteElement(input.substring(2, input.length())); case 'm’, ‘M’: System.out.println(names.member(input.substring(2, input.length()))); case 'c’, ‘C’: names.clear(); default: names.addElement(input); }

72 Illegal Switch switch (input ){ case “print”: print(names); case “clear”: names.clear(); default: names.addElement(input); } Type of switch expression must be ordinal type

73 Ordinal Type Values of type are ordered. Each value has a unique successor and predecessor intcharStringdouble


Download ppt "Arrays –Collections (Set, Database, History) Inheritance –inheriting ancestor’s traits –inheriting benefactor’s assets –inheriting instance members( methods/variables)"

Similar presentations


Ads by Google