Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.