Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSS446 Spring 2014 Nan Wang.  To learn how to choose appropriate classes for a given problem  To understand the concept of cohesion  To minimize dependencies.

Similar presentations


Presentation on theme: "CSS446 Spring 2014 Nan Wang.  To learn how to choose appropriate classes for a given problem  To understand the concept of cohesion  To minimize dependencies."— Presentation transcript:

1 CSS446 Spring 2014 Nan Wang

2  To learn how to choose appropriate classes for a given problem  To understand the concept of cohesion  To minimize dependencies and side effects  To learn how to find a data representation for a class  To understand static methods and variables  To learn about packages 2

3  A class should represent a single concept from a problem domain.  E.g.  Point  Rectangle  Ellipse ◦ Other classes are abstractions of real-life entities:  BankAccount  CashRegister  Card Game 3

4  The name for such a class should be a noun that describes the concept. In fact, a simple rule of thumb for getting started with class design is to look for nouns in the problem description.  Card  DeckOfCards 4

5  Objects of an actor class carry out certain tasks for you  A Scanner Object: scans a stream for numbers and strings.  A Random object: generates random numbers. It is a good idea to choose class names for actors that end in “-er” or “-or”. (A better name for the Random class might be RandomNumberGenerator.)  E.g.  Random myRandomNumberGenerator = new Random(); 5

6  Utility class has no objects, but it contains a collection of related static methods and constants.  E.g. ◦ Math Class ◦ Arrays Class  import java.util.Arrays 6

7  Their sole purpose is to start a program.  DeckOfCardsTest.java 7

8  What is a simple rule of thumb for finding classes?  Your job is to write a program that plays chess. Might ChessBoard be an appropriate class? How about MovePiece?  What classes will be in your card game? 8

9  Providing a Cohesive public interface  A class should represent a single concept. All interface features should be closely related to the single concept that the class represents.  Such a public interface is said to be cohesive. 9 The members of a cohesive team have a common goal.

10  What methods are needed in Card Class  What are in DeckOfCards? 10

11 11

12 12

13  A mutator method changes the state of an object. ◦ setFace()  An accessor method asks an object to compute a result, without changing the state. ◦ getFace() 13

14  Designed to have only accessor methods and no mutator methods at all.  E.g String Class ◦ String name = "John Q. Public"; ◦ String uppercased = name.toUpperCase(); // name is not changed  An immutable class has a major advantage: It is safe to give out references to its objects freely. If no method can change the object’s value, then no code can modify the object at an unexpected time. 14

15 15

16 16 In Java, a method can never change the contents of a variable that is passed to a method.

17  A value properly belongs to a class, not to any object of the class.  We want to assign bank account numbers sequentially. That is, we want the bank account constructor to construct the first account with number 1001, the next with number 1002, and so on. To solve this problem, we need to have a single value of lastAssigned­Number that is a property of the class, not any object of the class. 17

18 but all objects share a single copy of the lastAssignedNumber variable  Every BankAccount object has its own balance and accountNumber instance variables, but all objects share a single copy of the lastAssignedNumber variable. 18

19 19 private static final String[] faces = { "Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" }; private static final String[] suits = { "Hearts", "Diamonds", "Clubs", "Spades" };

20 20 private static final int ONEPAIR = 2; private static final int TWOPAIR = 4; private static final int THREEKIND = 6; private static final int STRAIGHT = 8; private static final int FULLHOUSE = 10; private static final int FLUSH = 12; private static final int FOURKIND = 14; private static final int STRAIGHTFLUSH = 16;

21  A class defines methods that are not invoked on an object.  the sqrt method in the Math class. Because numbers aren’t objects, you can’t invoke methods on them. For example, if x is a number, then the call x.sqrt() is not legal in Java. Therefore, the Math class provides a static method that is invoked as Math.sqrt(x). No object of the Math class is constructed. The Math qualifier simply tells the compiler where to find the sqrt method. 21

22 22

23 23

24 24 public static void main( String[] args ) { DeckOfCards myDeckOfCards = new DeckOfCards(); myDeckOfCards.shuffle(); // place Cards in random order Card[] hand1 = new Card[ 5 ]; // store first hand Card[] hand2 = new Card[ 5 ]; // store second hand … }

25 25

26 26  Due Date: 1/23/14 (Next Thursday)  Submit your zipped package to usm.java@gmail.com usm.java@gmail.com  Grading: ◦ 100 points for implementation of simple rules  E.g. if there are same pairs in both hands, they tie with out continuing comparison of next card. ◦ 50 bonus points for implementation of complete rules.  Do not tell me you do not know how to play card game, I do not believe it

27 27


Download ppt "CSS446 Spring 2014 Nan Wang.  To learn how to choose appropriate classes for a given problem  To understand the concept of cohesion  To minimize dependencies."

Similar presentations


Ads by Google