Modularization and Abstraction in Object-Oriented Programming

 
Objectives
introduce modularization and abstraction
explain how an object uses other objects
4. Object Interaction
 
DIN61-222 Adv. Prog. (Java)
 
Semester 1, 2019-2020
 
1
 
1.  Modularization and Abstraction
 
Modularization
 divides a problem into
simpler sub-parts, which can be built separately, and
which interact in simple ways.
 
2
 
move down
to a lower
level
 
Abstraction
 is the ability to combine low level details
of a problem into higher levels.
 
3
 
move up
to a higher
level
 
Use in Programming
 
Use 
modularization
 to split a programming
problem into sub-parts (modules).
implement the modules
 
The implementation of the complete program will
be easier, since 
abstraction
 can be used to write
software in terms of the modules.
 
4
 
Example: Robot Software
 
5
 
modularization
 
?
 
Code as Modules
 
Modules
("black
boxes")
 
Abstraction
"links" the
modules
together
using their
visible
interfaces.
 
6
 
Use in OOP
 
Use modularization to split the Robot programming
problem into 
objects
.
Implement the 
classes
 for the objects.
 
The implementation of the Robot class will be easier,
since it will be coded using the smaller classes (e.g.
Audio, Vision, Sensor).
 
7
 
e.g. Airport Control System
 
8
Passenger
Plane1
Plane2
Gate1
Gate2
Gate3
Luggage1
Passenger1
Passenger2
 
modularize
into objects
(things)
 
abstract into
classes
 
abstract (combine)
into 
class for problem
Airport
 
Objects to Classes
 
Consider what an object does (i.e. its interface)
e.g what can a 
Plane object
 do?
take-off, land, connect-to-gate, load-passengers,
unload-passengers, load-luggage, unload-luggage
These become the public methods of the 
Plane class
:
void takeOff();   void land();
void connect(Gate g);
void load(Passenger p); void load(Luggage l);
void unload(Passenger p); void unload(Luggage l);
The class will implement these methods.
 
9
 
2.  A Digital Clock
 
Implement a digital clock display, which shows the
hours (0-23) and minutes (0-59).
 
10
 
Modularizing the Clock Display
 
Divide the clock display problem into two parts
how to display the hours
how to display the minutes
We need two number display objects
We need a NumberDisplay class
 
two
NumberDisplay
objects
 
11
 
ClockDisplay object
 
NumberDisplay Interface
 
What public methods are needed for a NumberDisplay
class?
get and set the number
return the number as a string
useful for printing
increment the number
the number will 'loop'
e.g. 0, 1, 2, ..., 59, 
0
, 1, ... for the minutes display
e.g. 0, 1, 2, ..., 22, 23, 
0
, 1, ... for the hours display
 
12
 
The NumberDisplay Class
 
public class NumberDisplay
{
  private int currValue;
  private int maxValue;
   // number at which currValue goes back to 0
 
 
  public NumberDisplay(int max)
  { maxValue = max;
    currValue = 0;
  }
 
continued
 
13
 
  public void setValue(int newValue)
  /* Set currValue to the new value.
   If the new value is less than
   zero or over maxValue, don't set it.
  */
  { if ((newValue >= 0) && (newValue < maxValue))
      currValue = newValue;
  }
 
 
  public int getValue()
  {  return currValue; }
 
continued
 
14
 
  public String getDisplayValue()
  // return currValue as a string
  {
    if (currValue < 10)
      return "0" + currValue;  //pad string with leading 0
    else
      return "" + currValue;
  }
 
 
  public void increment()
  /* Increment currValue, rolling over to zero if the
     maxValue is reached. */
  {  currValue = (currValue + 1) % maxValue; }
 
}  // end of NumberDisplay class
 
15
 
ClockDisplay Interface
 
What public methods are needed for a ClockDisplay
class?
initialize the clock and set the time
return the current time as a string
useful for printing
increment the time by one minute
 
The time will be displayed using two NumberDisplay
objects.
 
16
 
The ClockDisplay Class
 
public class ClockDisplay
{
  private NumberDisplay 
hours
;
  private NumberDisplay 
minutes
;
  private String currTimeString;
          // the current time as a string
 
  public ClockDisplay()
  // intialize the clock to 00:00
  {
    hours = new NumberDisplay(24);
    minutes = new NumberDisplay(60);
    
setTimeString
();
  }
two private
NumberDisplay
fields
create two
NumberDisplay
objects
 
continued
 
17
 
   
private
 
void setTimeString()
  /* store the current time as a string
   of the form "hours:minutes"  */
  {
  currTimeString = hours.getDisplayValue() +
                   ":" +
                   minutes.getDisplayValue();
}
a private method is
one that only other
methods in the class
can call
 
continued
method calling
in NumberDisplay
objects
 
18
 
  public void setTime(int hour, int minute)
  // set time to the specified hour and minute
  {
    hours.setValue(hour);
    minutes.setValue(minute);
    
setTimeString
();
  }  // end of setTime()
 
 
  public String getTime()
  // return the current time as a string
  { return currTimeString; }
 
continued
method calling
in NumberDisplay
objects
 
19
 
  public void minIncrement()
  // increment the clock by one minute;
  // hour increments when minutes roll over to 0
  {
    minutes.increment();
    if (minutes.getValue() == 0) // mins rolled
      hours.increment();
    
setTimeString
();
  }  // end of minIncrement()
 
 
}  // end of ClockDisplay class
 
20
 
uses
 
21
 
Classes Diagram
 
3.  Using ClockDisplay
 
public class ClockDemo
{
  public static void main(String[] args)
  {
    ClockDisplay clock = new ClockDisplay();
    clock.setTime(14, 10);  // set time to 14:10
 
    while(true) {
      clock.minIncrement();
      System.out.println(" tick...");
      System.out.println("Current time: "+clock.getTime());
 
      
wait
(100);   // slow down the looping
    }
  }  // end of main()
 
22
 
  private 
static
 void wait(int milliseconds)
  /* stop execution for milliseconds
   amount of time */
  {
    try {
      Thread.sleep(milliseconds);
    }
    catch (Exception e) { }
  }  // end of wait()
 
 
} // end of ClockDemo class
sleep() is a method
in Java's Thread class
wait() is a static method
so it can be called by main()
without main() having to create
an object first.
 
23
 
Compilation and Execution
 
 
$ javac *.java
Compile 
all
 java file
 
I typed ctrl-c to
stop the looping.
 
24
 
Objects Diagram for ClocksDemo
 
hours
 
m
inutes
 
currTimeString
 
clock
 
ClockDisplay object
 
currValue
 
m
axValue
 
NumberDisplay object
 
24
 
14
 
currValue
 
m
axValue
 
NumberDisplay object
 
60
 
19
14:19
 
String object
 
25
 
4.  A More Graphical Clock
 
Michael Kölling and Bruce Quig write a Canvas class
for displaying text and shapes in a window.
 
We can use their Canvas to display the changing clock
display instead of using stdout.
 
Note: I do not care how Canvas is implemented; I only
care about its interface (i.e. its public methods)
 
26
 
Canvas
C
lass
Diagram
 
Only showing the
public methods
(the interface).
 
To use Canvas, we only
need to understand its
interface.
 
I don't care how it is
implemented.
 
27
 
ClockCanvasDemo
 
public class ClockCanvasDemo
{
  public static void main(String[] args)
  {
    
Canvas canvas = new Canvas("Clock Demo",300,150, Color.white);
    
canvas
.setVisible(true);
    
canvas
.setFont( new Font("Dialog", Font.PLAIN, 96));
 
    ClockDisplay clock = new ClockDisplay();
    clock.setTime(14, 10);  // set time to 14:10
    while(true) {
      clock.minIncrement();
      
canvas
.erase();      // clear the canvas
      
canvas
.drawString( clock.getTime(), 30, 100);
      
canvas
.wait(100);    // slow down the looping
    }
  }  // end of main()
} // end of ClockCanvasDemo class
Using Canvas
(compare to
slide 22)
 
28
 
Compilation and Execution
 
$ javac *.java
$ java ClockCanvasDemo
Compilation  now includes
ClockCanvasDemo.java and
Canvas.java
 
29
 
5. Drawing the Clock with StdLib
 
The "Programming in Java" website
(
https://introcs.cs.princeton.edu/java/home/
) by
Robert Sedgewick and Kevin Wayne includes a JAR file
called 
stdlib.jar
https://introcs.cs.princeton.edu/java/
                         stdlib/stdlib.jar
 
The JAR file acts like a "package" containing multiple
classes.
 
 
30
 
Stdlib.jar Classes
 
StdDraw.java 
         
 
draw geometric shapes in a window
 
StdIn.java         
  
read numbers and text from stdin
StdOut.java 
  
write numbers and text to stdout
 
StdAudio.java     
 
create, play, and manipulate sound
 
StdRandom.java 
 
generate random numbers
 
StdStats.java 
  
compute statistics
 
StdArrayIO.java 
 
read and write 1D and 2D arrays
 
In.java 
  
read numbers and text from files and URLs
Out.java 
  
write numbers and text to files
 
continued
Docs at https://introcs.cs.princeton.edu/java/stdlib/
 
31
 
Draw.java 
   
draw geometric shapes
DrawListener.java 
  
support keyboard and mouse
events in Draw
Picture.java 
  
process color images
GrayscalePicture.java 
 
process grayscale images
 
Stopwatch.java 
  
measure running time
StopwatchCPU.java 
 
measure running time (CPU)
 
BinaryStdIn.java 
  
read bits from standard input
BinaryStdOut.java 
 
write bits to standard output
BinaryIn.java 
  
read bits from files and URLs
BinaryOut.java 
  
write bits to files
 
 
32
 
33
 
StdDraw Class
 
continued
https://introcs.cs.princeton.edu/java/stdlib/StdDraw.java.html
 
34
 
Implementation vs Interface
 
I do not care how the StdDraw class is implemented. I
only need to know the interface (i.e. its public
methods).
 
35
 
ClockDraw.java
 
public class ClockDraw
{
  public static void main(String[] args)
  {
    
StdDraw
.setFont( new Font("Dialog", Font.PLAIN, 96));
    ClockDisplay clock = new ClockDisplay();
    clock.setTime(14, 10);
    while (true) {
      clock.minIncrement();
      
StdDraw
.clear();
      
StdDraw
.text(0.5, 0.5, clock.getTime()); // (x,y) is center
      
StdDraw
.show();
      
StdDraw
.pause(100);
    }
  } // end of main()
} // end of ClockDraw class
 
36
 
Compilation and Execution
 
$ javac -classpath 
.;stdlib.jar
 ClockDraw.java
 
$ java  -classpath 
.;stdlib.jar
 ClockDraw
Tell Java to load the stdlib.jar
JAR file
 
37
 
Looking Inside JAR Files
 
A JAR file is just a zipped directory of compiled Java
classes, with optional source code.
Using 7-zip (or similar), you can look inside the JAR:
 
38
 
6. Self-study from java9fp
 
Read Chapters 4 
and
 5 (Control Statements)
C-like: if, while, for, switch
 
Download, compile, and run some of the examples
from the chapters.
 
39
Slide Note
Embed
Share

Modularization in programming involves breaking down complex problems into simpler sub-parts, while abstraction allows combining low-level details into higher levels. By using modules and abstract classes, software development becomes more manageable and efficient, especially in object-oriented programming like Java. This concept is illustrated through examples such as robot software and airport control systems, where objects are represented as classes with specific functionalities.

  • Modularization
  • Abstraction
  • Object-Oriented Programming
  • Software Development
  • Java

Uploaded on Aug 17, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. DIN61-222 Adv. Prog. (Java) Semester 1, 2019-2020 4. Object Interaction Objectives introduce modularization and abstraction explain how an object uses other objects 1

  2. 1. Modularization and Abstraction Modularization divides a problem into simpler sub-parts, which can be built separately, and which interact in simple ways. move down to a lower level 2

  3. Abstraction is the ability to combine low level details of a problem into higher levels. move up to a higher level 3

  4. Use in Programming Use modularization to split a programming problem into sub-parts (modules). implement the modules The implementation of the complete program will be easier, since abstraction can be used to write software in terms of the modules. 4

  5. Example: Robot Software ? modularization 5

  6. Code as Modules Modules ("black boxes") Abstraction "links" the modules together using their visible interfaces. 6

  7. Use in OOP Use modularization to split the Robot programming problem into objects. Implement the classes for the objects. The implementation of the Robot class will be easier, since it will be coded using the smaller classes (e.g. Audio, Vision, Sensor). 7

  8. e.g. Airport Control System modularize into objects (things) Plane2 Passenger1 Plane1 Gate2 Luggage1 Gate1 Gate3 Passenger2 abstract into classes Plane Gate Airport Passenger Luggage abstract (combine) into class for problem 8

  9. Objects to Classes Consider what an object does (i.e. its interface) e.g what can a Plane object do? take-off, land, connect-to-gate, load-passengers, unload-passengers, load-luggage, unload-luggage These become the public methods of the Plane class: void takeOff(); void land(); void connect(Gate g); void load(Passenger p); void load(Luggage l); void unload(Passenger p); void unload(Luggage l); The class will implement these methods. 9

  10. 2. A Digital Clock Implement a digital clock display, which shows the hours (0-23) and minutes (0-59). 10

  11. Modularizing the Clock Display Divide the clock display problem into two parts how to display the hours how to display the minutes We need two number display objects We need a NumberDisplay class ClockDisplay object two NumberDisplay objects 11

  12. NumberDisplay Interface What public methods are needed for a NumberDisplay class? get and set the number return the number as a string useful for printing increment the number the number will 'loop' e.g. 0, 1, 2, ..., 59, 0, 1, ... for the minutes display e.g. 0, 1, 2, ..., 22, 23, 0, 1, ... for the hours display 12

  13. The NumberDisplay Class public class NumberDisplay { private int currValue; private int maxValue; // number at which currValue goes back to 0 public NumberDisplay(int max) { maxValue = max; currValue = 0; } continued 13

  14. public void setValue(int newValue) /* Set currValue to the new value. If the new value is less than zero or over maxValue, don't set it. */ { if ((newValue >= 0) && (newValue < maxValue)) currValue = newValue; } public int getValue() { return currValue; } continued 14

  15. public String getDisplayValue() // return currValue as a string { if (currValue < 10) return "0" + currValue; //pad string with leading 0 else return "" + currValue; } public void increment() /* Increment currValue, rolling over to zero if the maxValue is reached. */ { currValue = (currValue + 1) % maxValue; } } // end of NumberDisplay class 15

  16. ClockDisplay Interface What public methods are needed for a ClockDisplay class? initialize the clock and set the time return the current time as a string useful for printing increment the time by one minute The time will be displayed using two NumberDisplay objects. 16

  17. The ClockDisplay Class public class ClockDisplay { private NumberDisplay hours; private NumberDisplay minutes; private String currTimeString; // the current time as a string two private NumberDisplay fields public ClockDisplay() // intialize the clock to 00:00 { hours = new NumberDisplay(24); minutes = new NumberDisplay(60); setTimeString(); } create two NumberDisplay objects continued 17

  18. a private method is one that only other methods in the class can call private void setTimeString() /* store the current time as a string of the form "hours:minutes" */ { currTimeString = hours.getDisplayValue() + ":" + minutes.getDisplayValue(); } method calling in NumberDisplay objects continued 18

  19. public void setTime(int hour, int minute) // set time to the specified hour and minute { hours.setValue(hour); minutes.setValue(minute); setTimeString(); } // end of setTime() method calling in NumberDisplay objects public String getTime() // return the current time as a string { return currTimeString; } continued 19

  20. public void minIncrement() // increment the clock by one minute; // hour increments when minutes roll over to 0 { minutes.increment(); if (minutes.getValue() == 0) // mins rolled hours.increment(); setTimeString(); } // end of minIncrement() } // end of ClockDisplay class 20

  21. Classes Diagram uses 21

  22. 3. Using ClockDisplay public class ClockDemo { public static void main(String[] args) { ClockDisplay clock = new ClockDisplay(); clock.setTime(14, 10); // set time to 14:10 while(true) { clock.minIncrement(); System.out.println(" tick..."); System.out.println("Current time: "+clock.getTime()); wait(100); // slow down the looping } } // end of main() 22

  23. wait() is a static method so it can be called by main() without main() having to create an object first. private static void wait(int milliseconds) /* stop execution for milliseconds amount of time */ { try { Thread.sleep(milliseconds); } catch (Exception e) { } } // end of wait() sleep() is a method in Java's Thread class } // end of ClockDemo class 23

  24. Compilation and Execution Compile all java file $ javac *.java I typed ctrl-c to stop the looping. 24

  25. Objects Diagram for ClocksDemo NumberDisplay object ClockDisplay object clock currValue 14 hours 24 maxValue minutes currTimeString NumberDisplay object currValue 19 60 maxValue 14:19 String object 25

  26. 4. A More Graphical Clock Michael K lling and Bruce Quig write a Canvas class for displaying text and shapes in a window. We can use their Canvas to display the changing clock display instead of using stdout. Note: I do not care how Canvas is implemented; I only care about its interface (i.e. its public methods) 26

  27. Canvas Class Diagram Only showing the public methods (the interface). To use Canvas, we only need to understand its interface. I don't care how it is implemented. 27

  28. ClockCanvasDemo public class ClockCanvasDemo { public static void main(String[] args) { Canvas canvas = new Canvas("Clock Demo",300,150, Color.white); canvas.setVisible(true); canvas.setFont( new Font("Dialog", Font.PLAIN, 96)); Using Canvas (compare to slide 22) ClockDisplay clock = new ClockDisplay(); clock.setTime(14, 10); // set time to 14:10 while(true) { clock.minIncrement(); canvas.erase(); // clear the canvas canvas.drawString( clock.getTime(), 30, 100); canvas.wait(100); // slow down the looping } } // end of main() } // end of ClockCanvasDemo class 28

  29. Compilation and Execution Compilation now includes ClockCanvasDemo.java and Canvas.java $ javac *.java $ java ClockCanvasDemo 29

  30. 5. Drawing the Clock with StdLib The "Programming in Java" website (https://introcs.cs.princeton.edu/java/home/) by Robert Sedgewick and Kevin Wayne includes a JAR file called stdlib.jar https://introcs.cs.princeton.edu/java/ stdlib/stdlib.jar The JAR file acts like a "package" containing multiple classes. 30

  31. Docs at https://introcs.cs.princeton.edu/java/stdlib/ Stdlib.jar Classes StdDraw.java draw geometric shapes in a window StdIn.java StdOut.java read numbers and text from stdin write numbers and text to stdout StdAudio.java create, play, and manipulate sound StdRandom.java generate random numbers StdStats.java compute statistics StdArrayIO.java read and write 1D and 2D arrays In.java Out.java read numbers and text from files and URLs write numbers and text to files continued 31

  32. Draw.java DrawListener.java events in Draw Picture.java GrayscalePicture.java draw geometric shapes support keyboard and mouse process color images process grayscale images Stopwatch.java StopwatchCPU.java measure running time measure running time (CPU) BinaryStdIn.java BinaryStdOut.java BinaryIn.java BinaryOut.java read bits from standard input write bits to standard output read bits from files and URLs write bits to files 32

  33. https://introcs.cs.princeton.edu/java/stdlib/StdDraw.java.htmlhttps://introcs.cs.princeton.edu/java/stdlib/StdDraw.java.html StdDraw Class continued 33

  34. 34

  35. Implementation vs Interface I do not care how the StdDraw class is implemented. I only need to know the interface (i.e. its public methods). 35

  36. ClockDraw.java public class ClockDraw { public static void main(String[] args) { StdDraw.setFont( new Font("Dialog", Font.PLAIN, 96)); ClockDisplay clock = new ClockDisplay(); clock.setTime(14, 10); while (true) { clock.minIncrement(); StdDraw.clear(); StdDraw.text(0.5, 0.5, clock.getTime()); // (x,y) is center StdDraw.show(); StdDraw.pause(100); } } // end of main() } // end of ClockDraw class 36

  37. Compilation and Execution $ javac -classpath .;stdlib.jar ClockDraw.java $ java -classpath .;stdlib.jar ClockDraw Tell Java to load the stdlib.jar JAR file 37

  38. Looking Inside JAR Files A JAR file is just a zipped directory of compiled Java classes, with optional source code. Using 7-zip (or similar), you can look inside the JAR: 38

  39. 6. Self-study from java9fp Read Chapters 4 and 5 (Control Statements) C-like: if, while, for, switch Download, compile, and run some of the examples from the chapters. 39

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#