1 / 42

CSC 1051 – Data Structures and Algorithms I

CSC 1051 – Data Structures and Algorithms I. Designing Classes – part 2. Dr. Mary-Angela Papalaskari Department of Computing Sciences Villanova University Course website: www.csc.villanova.edu/~map/1051/. Getting to know classes so far. Predefined classes from the Java API.

roy
Download Presentation

CSC 1051 – Data Structures and Algorithms I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSC 1051 – Data Structures and Algorithms I Designing Classes – part 2 Dr. Mary-Angela Papalaskari Department of Computing Sciences Villanova University Course website: www.csc.villanova.edu/~map/1051/ CSC 1051 M.A. Papalaskari, Villanova University

  2. Getting to know classes so far • Predefined classes from the Java API. • We are also defining a few classes of our own: • Account • Die • Person • Book CSC 1051 M.A. Papalaskari, Villanova University

  3. Getting to know classes so far • Predefined classes from the Java API. • We have defined a few classes of our own: • Account • Die • Person • Book • Driver classes: • Transactions • RollingDice • PeopleBeingPeople • Bookshelf (Project 6) CSC 1051 M.A. Papalaskari, Villanova University

  4. More Examples of Classes CSC 1051 M.A. Papalaskari, Villanova University

  5. Next: • Review what we learned so far • Focus on method definition • Encapsulation • UML diagrams CSC 1051 M.A. Papalaskari, Villanova University

  6. Review • driver classes //********************************************************************// Transactions.java Author: MA Papalaskari // (based on Lewis/Loftus example)// Demonstrates the creation and use of multiple Account objects.//********************************************************************publicclass Transactions1{//-----------------------------------------------------------------// Creates some bank accounts and requests various services.//-----------------------------------------------------------------publicstaticvoid main (String[] args) { Account acct1 = new Account ("Ted Murphy", 72354, 102.56); Account acct2 = new Account ("Jane Smith", 69713, 40.00); System.out.println (acct1); System.out.println (acct2); acct1.deposit (25.85); System.out.println (); System.out.println (acct1); System.out.println (acct2); }} CSC 1051 M.A. Papalaskari, Villanova University

  7. Review long acctNumber;double balance;String name; Constructor deposit() withdraw() • class declaration Data declarations Method declarations toString() CSC 1051 M.A. Papalaskari, Villanova University

  8. Review • using methods… CSC 1051 M.A. Papalaskari, Villanova University

  9. Review acct1 72354 acctNumber 102.56 balance "Ted Murphy" name Account class: Using methods acct1.deposit (25.85); CSC 1051 M.A. Papalaskari, Villanova University

  10. Review acct1 72354 acctNumber 102.56 balance "Ted Murphy" name Account class: Using methods acct1.deposit (25.85); //---------------------------------------------------// Deposits the specified amount into the account. //---------------------------------------------------publicvoid deposit (double amount){ balance = balance + amount;} CSC 1051 M.A. Papalaskari, Villanova University

  11. Review acct1 72354 acctNumber 102.56 balance "Ted Murphy" name Account class: Using methods acct1.deposit (25.85); //---------------------------------------------------// Deposits the specified amount into the account. //---------------------------------------------------publicvoid deposit (double amount){ balance = balance + amount;} CSC 1051 M.A. Papalaskari, Villanova University

  12. Review acct1 72354 acctNumber 102.56 balance "Ted Murphy" name Account class: Using methods acct1.deposit (25.85); //---------------------------------------------------// Deposits the specified amount into the account. //---------------------------------------------------publicvoid deposit (double amount){ balance = balance + amount;} CSC 1051 M.A. Papalaskari, Villanova University

  13. Review acct1 72354 acctNumber 102.56 balance "Ted Murphy" name Account class: Using methods acct1.deposit (25.85); //---------------------------------------------------// Deposits the specified amount into the account. //---------------------------------------------------publicvoid deposit (double amount){ balance = balance + amount;} CSC 1051 M.A. Papalaskari, Villanova University

  14. Review acct1 72354 acctNumber 128.41 balance "Ted Murphy" name Account class: Another Example acct1.withdraw (60,2); CSC 1051 M.A. Papalaskari, Villanova University

  15. Review acct1 72354 acctNumber 128.41 balance "Ted Murphy" name Account class: Another Example acct1.withdraw (60,2); //-------------------------------------------------------// Withdraws the specified amount from the account// and applies the fee.//-----------------------------------------------------publicvoid withdraw (double amount, double fee) { balance = balance - amount - fee; } CSC 1051 M.A. Papalaskari, Villanova University

  16. Review acct1 72354 acctNumber 66.41 balance "Ted Murphy" name Account class: Another Example acct1.withdraw (60,2); //-------------------------------------------------// Withdraws the specified amount from the account// and applies the fee.//-----------------------------------------------publicvoid withdraw (double amount, double fee){ balance = balance - amount - fee;} CSC 1051 M.A. Papalaskari, Villanova University

  17. Review acct1 72354 acctNumber 102.56 balance "Ted Murphy" name Object creation: Constructors Account acct1 = new Account ("Ted Murphy", 72354, 102.56); public Account (String owner, long account, double initial){ acctNumber = account; balance = initial; name = owner;} CSC 1051 M.A. Papalaskari, Villanova University

  18. Review acct1 72354 acctNumber 102.56 balance "Ted Murphy" name toString() method System.out.prinltn(acct1); public String toString () { NumberFormat fmt = NumberFormat.getCurrencyInstance();return (acctNumber +"\t”+ name +"\t”+ fmt.format(balance));} CSC 1051 M.A. Papalaskari, Villanova University

  19. Review Invoking methods in same class paintSnowman(page, 200, 150); public void paintSnowman(Graphics page, int x, int y) { // snowman code goes here . . . } CSC 1051 M.A. Papalaskari, Villanova University

  20. Review static methods: 1) In another class OtherClass.doSomething(); public static void doSomething() { System.out.println(" At your service. " ); } OtherClass CSC 1051 M.A. Papalaskari, Villanova University

  21. Review static methods: 2) In same class doSomething(); public static void doSomething() { System.out.println(" At your service. " ); } CSC 1051 M.A. Papalaskari, Villanova University

  22. Review char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } • Method definition • parameters • return type • return statement ch = obj.calc (25, count, "Hello"); CSC 1051 M.A. Papalaskari, Villanova University

  23. compute myMethod myMethod(); Method Control Flow • If the called method is in the same class, only the method name is needed CSC 1051 M.A. Papalaskari, Villanova University

  24. main doIt helpMe obj.doIt(); helpMe(); Method Control Flow • The called method is often part of another class or object CSC 1051 M.A. Papalaskari, Villanova University

  25. More Method Examples: • Write a method that has oneintparameter num, and prints “Happy Birthday” num times • Write a method with two doubleparamentersa and b that computes and returns the sum of squares: a2 + b2of its two int parameters • Write a method that has oneintparameter num, and returns the String “Happy Birthday” numtimes CSC 1051 M.A. Papalaskari, Villanova University

  26. Another Example: RollingDice.java (Driver) //******************************************************************** // RollingDice.java Author: Lewis/Loftus // // Demonstrates the creation and use of a user-defined class. //******************************************************************** public class RollingDice { //----------------------------------------------------------------- // Creates two Die objects and rolls them several times. //----------------------------------------------------------------- public static void main (String[] args) { Die die1, die2; intsum; die1 = new Die(); die2 = new Die(); die1.roll(); die2.roll(); System.out.println ("Die One: " + die1 + ", Die Two: " + die2); continue CSC 1051 M.A. Papalaskari, Villanova University

  27. Example: RollingDice.java(Driver) continue die1.roll(); die2.setFaceValue(4); System.out.println ("Die One: " + die1 + ", Die Two: " + die2); sum = die1.getFaceValue() + die2.getFaceValue(); System.out.println ("Sum: " + sum); sum = die1.roll() + die2.roll(); System.out.println ("Die One: " + die1 + ", Die Two: " + die2); System.out.println ("New sum: " + sum); } } CSC 1051 M.A. Papalaskari, Villanova University

  28. Example: RollingDice.java(Driver) Sample Run Die One: 5, Die Two: 2 Die One: 1, Die Two: 4 Sum: 5 Die One: 4, Die Two: 2 New sum: 6 continue die1.roll(); die2.setFaceValue(4); System.out.println ("Die One: " + die1 + ", Die Two: " + die2); sum = die1.getFaceValue() + die2.getFaceValue(); System.out.println ("Sum: " + sum); sum = die1.roll() + die2.roll(); System.out.println ("Die One: " + die1 + ", Die Two: " + die2); System.out.println ("New sum: " + sum); } } CSC 1051 M.A. Papalaskari, Villanova University

  29. 4 faceValue Example: Die.java //******************************************************************** // Die.java Author: Lewis/Loftus // // Represents one die (singular of dice) with faces showing values // between 1 and 6. //******************************************************************** public class Die { private final intMAX = 6; // maximum face value private intfaceValue; // current value showing on the die //----------------------------------------------------------------- // Constructor: Sets the initial face value. //----------------------------------------------------------------- public Die() { faceValue = 1; } CSC 1051 M.A. Papalaskari, Villanova University

  30. 4 faceValue Example: Die.java continue //----------------------------------------------------------------- // Rolls the die and returns the result. //----------------------------------------------------------------- public introll() { faceValue = (int)(Math.random() * MAX) + 1; return faceValue; } //----------------------------------------------------------------- // Face value mutator. //----------------------------------------------------------------- public void setFaceValue (intvalue) { faceValue = value; } //----------------------------------------------------------------- // Face value accessor. //----------------------------------------------------------------- public intgetFaceValue() { return faceValue; } continue CSC 1051 M.A. Papalaskari, Villanova University

  31. 4 faceValue Example: Die.java continue //----------------------------------------------------------------- // Returns a string representation of this die. //----------------------------------------------------------------- public String toString() { String result = Integer.toString(faceValue); return result; } } CSC 1051 M.A. Papalaskari, Villanova University

  32. RollingDice Die faceValue : int main (args : String[]) : void roll() : int setFaceValue (int value) : void getFaceValue() : int toString() : String UML Class Diagrams • A UML class diagram for the RollingDice program:

  33. die1 4 faceValue RollingDice Die faceValue : int main (args : String[]) : void roll() : int setFaceValue (int value) : void getFaceValue() : int toString() : String UML Class Diagrams • A UML class diagram for the RollingDice program:

  34. Methods Client Data Encapsulation • An encapsulated object can be thought of as a black box -- its inner workings are hidden from the client • The client invokes the interface methods and they manage the instance data CSC 1051 M.A. Papalaskari, Villanova University

  35. Methods Client Data Violating Encapsulation • It is possible for a class to access the instance data of another class directly CSC 1051 M.A. Papalaskari, Villanova University

  36. deposit() withdraw() addInterest() Transactions.java name acctNumber balance Violating Encapsulation - Example • It is possible for a class to access the instance data of another class directly - but don’t do this! • See Account.java (modified) • See ImInUrClassMessingUrInstanceData.java Account.java acct1.name = “Joe”; CSC 1051 M.A. Papalaskari, Villanova University

  37. Visibility Modifiers • In Java, we enforce encapsulation through the appropriate use of visibility modifiers: • public – can be referenced from other classes • private – can be referenced only within that class: • protected – involves inheritance (discussed later) • Data declared without a visibility modifier have default visibility and can be referenced by any class in the same package • An overview of all Java modifiers is presented in Appendix E CSC 1051 M.A. Papalaskari, Villanova University

  38. public constants are ok - Example Account acct1 = new Account (”Sartre", 72354, 102.56); System.out.println (acct1); System.out.println ("Interest rate = " + acct1.RATE); CSC 1051 M.A. Papalaskari, Villanova University

  39. public constants are ok - Example Account acct1 = new Account (”Sartre", 72354, 102.56); System.out.println (acct1); System.out.println ("Interest rate = " + acct1.RATE); • Normally, constants are declared as static. • If RATE had been declared as follows: final static double RATE = ; • Then the last statement in this program would have been: System.out.println ("Interest rate = " + Account.RATE); CSC 1051 M.A. Papalaskari, Villanova University

  40. public private Variables Methods Visibility Modifiers – the RULES NO (but OK for public constants) Yes Yes, for support methods only Yes CSC 1051 M.A. Papalaskari, Villanova University

  41. deposit() withdraw() addInterest() Transactions.java name acctNumber balance Encapsulation – Accessing the data • Indirect access through methods • accessors and mutators (“getters” and “setters”) • Usually named getX() and setX() Account.java Methods Example acct1.getBalance() Data CSC 1051 M.A. Papalaskari, Villanova University

  42. Encapsulation – Mutators (setters) can restrict access to the data, as appropriate • Example: Say a class has an instance variable: private int quantity; • The mutator may also work to ensure that quantity, does not become negative: public voidsetQuantity(intnum){if (num<0) {System.out.println("*Error in setQuantity()");System.out.println("negative quantity.");System.out.println("quantity not changed."); }else quantity = num;} CSC 1051 M.A. Papalaskari, Villanova University

More Related