Case studies: Outline Case Study: Noughts and Crosses

Similar documents
Design Patterns Design patterns advantages:

CSE 331. Model/View Separation and Observer Pattern

Global Gomoku Lab 4 in D0010E

The Essence of Object Oriented Programming with Java and UML. Chapter 2. The Essence of Objects. What Is an Object-Oriented System?

5.6.1 The Special Variable this

CS 15 Design Section. Design

Event-driven Programming: GUIs

What are the characteristics of Object Oriented programming language?

CS112 Lecture: Reuse, Packages, Patterns

CS 116x Winter 2015 Craig S. Kaplan. Module 03 Graphical User Interfaces. Topics

2. An implementation-ready data model needn't necessarily contain enforceable rules to guarantee the integrity of the data.

11. Abstract Classes and Interfaces

Chapter 6 Introduction to Defining Classes

M301: Software Systems & their Development. Unit 4: Inheritance, Composition and Polymorphism

Design Patterns: Part 2

CHAPTER 2: DATA MODELS

Object- Oriented Design with UML and Java Part I: Fundamentals

Cheng, CSE870. More Frameworks. Overview. Recap on OOP. Acknowledgements:

Software Service Engineering

(Refer Slide Time: 1:27)

7. Program Frameworks

The goal of the Pangaea project, as we stated it in the introduction, was to show that

Solution register itself

Object-Oriented Analysis and Design Prof. Partha Pratim Das Department of Computer Science and Engineering Indian Institute of Technology-Kharagpur

Model-View Controller IAT351

Self-review Questions

More on Inheritance. Interfaces & Abstract Classes

Object Oriented Programming

Design Patterns. CSC207 Fall 2017

We will talk about Alt-Tab from the usability perspective. Think about: - Is it learnable? - Is it efficient? - What about errors and safety?

Sri Vidya College of Engineering & Technology

CHAPTER 2: DATA MODELS

Lecture 5: The Halting Problem. Michael Beeson

CS12020 for CGVG. Practical 2. Jim Finnis

CHAPTER 5 GENERAL OOP CONCEPTS

Tutorial notes on. Object relational structural patterns

Principles of Computer Game Design and Implementation. Lecture 3

Plan. Design principles: laughing in the face of change. What kind of change? What are we trying to achieve?

CS211 Lecture: Design Patterns Last revised November 30, 2007

CIT 590 Homework 10 Battleship

Introduction. Object-Oriented Programming Spring 2015

10/17/2011. Object Oriented Software Development. Types of interface. Interfaces example

CSE 331 Software Design and Implementation. Lecture 16 Callbacks and Observers

THE CPU SPENDS ALMOST ALL of its time fetching instructions from memory

Keep Track of Your Passwords Easily

Design Process Overview. At Each Level of Abstraction. Design Phases. Design Phases James M. Bieman

Chapter 1: Object-Oriented Programming Using C++

16 Multiple Inheritance and Extending ADTs

Session 4 Starting the Air Raid Game

Design Patterns. CSC207 Winter 2017

An Introduction to Subtyping

Lecture 13: Object orientation. Object oriented programming. Introduction. Object oriented programming. OO and ADT:s. Introduction

CPS122 Lecture: Design Patterns Last revised March 20, 2012

CPS122 Lecture: Design Patterns Last revised March 7, 2017

1: Introduction to Object (1)

Unit E Step-by-Step: Programming with Python

Lecturer: Sebastian Coope Ashton Building, Room G.18 COMP 201 web-page:

Object Model. Object Orientated Analysis and Design. Benjamin Kenwright

The Design Patterns Matrix From Analysis to Implementation

PROGRAMMING LANGUAGE 2

P2: Collaborations. CSE 335, Spring 2009

CSE 331 Software Design and Implementation. Lecture 17 Events, Listeners, Callbacks

CSE 331 Software Design & Implementation

The AMIE Model. A packet has a number of properties. These are type, version, packet id, and state. It also has a list of expected replies.

Model-View-Controller (MVC) Architecture

A4 Explain how the Visitor design pattern works (4 marks)

Advanced Database Applications. Object Oriented Database Management Chapter 13 10/29/2016. Object DBMSs

Object-Oriented Software Engineering Practical Software Development using UML and Java. Chapter 2: Review of Object Orientation

Event-driven Programming, Separation of Concerns, the Observer pattern and the JavaFX Event Infrastructure

Do a domain analysis by hand-drawing three or more pictures of what the world program will look like at different stages when it is running.

OODP Session 4. Web Page: Visiting Hours: Tuesday 17:00 to 19:00

Prototyping a Swing Interface with the Netbeans IDE GUI Editor

Tomasz Szumlak WFiIS AGH 23/10/2017, Kraków

Adobe illustrator Introduction

Animations involving numbers

Model-View-Controller

CS 160: Interactive Programming

CS 307: Software Engineering. Lecture 10: Software Design and Architecture

Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #43. Multidimensional Arrays

DBMS (FYCS) Unit - 1. A database management system stores data in such a way that it becomes easier to retrieve, manipulate, and produce information.

6 The MVC model. Main concepts to be covered. Pattern structure. Using design patterns. Design pattern: Observer. Observers

School of Computer Science CPS109 Course Notes Set 7 Alexander Ferworn Updated Fall 15 CPS109 Course Notes 7

Introduction to Events

About This Lecture. Data Abstraction - Interfaces and Implementations. Outline. Object Concepts. Object Class, Protocol and State.

Composite Pattern Diagram. Explanation. JavaFX Subclass Hierarchy, cont. JavaFX: Node. JavaFX Layout Classes. Top-Level Containers 10/12/2018

Storing Data in Objects

Design patterns for graphical user interface applications

Introduction to GUIs. Principles of Software Construction: Objects, Design, and Concurrency. Jonathan Aldrich and Charlie Garrod Fall 2014

Plan. Design principles: laughing in the face of change. What kind of change? What are we trying to achieve?

JavaScript: the language of browser interactions. Claudia Hauff TI1506: Web and Database Technology

GUI Program Organization. Sequential vs. Event-driven Programming. Sequential Programming. Outline

Construction: High quality code for programming in the large

Inheritance and Interfaces

Database Applications

Object-Oriented Software Engineering. Chapter 2: Review of Object Orientation

CS112 Lecture: Extending Classes and Defining Methods

Some (semi-)advanced tips for LibreOffice

CSC148H Week 3. Sadia Sharmin. May 24, /20

CS 4300 Computer Graphics

Software Design. Levels in Design Process. Design Methodologies. Levels..

Transcription:

I. Automated Banking System Case studies: Outline Case Study: Noughts and Crosses II. III. Library Noughts and Crosses Definition of the problem Game played on a 3x3 square board between two players. The first player chooses a square on the board and places an X token on it. The other player then chooses an empty square and puts an O token on it. Thereafter, the players alternate placing X and O tokens respectively in empty squares. 1. use case: Make the first move a. introducing MVC modelling 2. use case: Make an arbitrary move a. a more detailed MVC model 3. Design patterns The winner is the first player to complete a straight line (horizontal, vertical or diagonal) of three of their tokens. If the board is filled without either player achieving this, the game is drawn. Design a system to support the game. The system will receive inputs representing moves, will show the current game position and will report when a game has been won or drawn. Once a game is over, the board can be cleared and a new game started. 79 80 Case Study: Noughts and Crosses Use cases Where do we start? Even with a fairly simple system like this, it is far from obvious. Let us therefore try to get a better hold on what is required by considering use cases. We could identify nouns: game, board, player, square, nought, make the first move cross, move, current game position A player inputs a position. BUT, that does not seem to get us too far... The system displays a board with a cross in the chosen square. The system reports that the game is not finished. How has this helped us? Not too clear what other classes are required and how they relate to each other. 81 82

Modelling user interaction Considerations on GUIs It seems to emerge that user interaction, e.g. user's moves, and the rendering of information, e.g. the rendering of the board, play a relevant part in our system. We discussed earlier the benefits of separation of concerns (modularity) as far as GUI are considered: concentrate on modelling the underlying software system, the GUI will be supplied separately. We would benefit from a framework that can enable us to deal with GUIs, but allows us to keep them separate from the underlying main software application. GUIs can be very complex to program. Modern OO languages give a lot of support - Visual C++, Delphi, Java. Advantage: Possible to create GUIs relatively easily and quickly. Disadvantages: A lot of what is going on is hidden from the user and the level of abstraction is language dependent making it difficult to produce a language independent design. Business logic can also get tied up in GUI logic, making it difficult to transfer system to new GUIs/methods of interaction. 83 84 Considerations on GUIs Considerations on GUIs In Java, for example, the event loop is hidden. To be able to handle events, an object must be declared to be an EventListener An EventListener object contains the definition of an appropriate event handler. Interface EventListener public interface EventListener The actual interaction that takes place as the result of pressing a button is not made explicit. The EventListener interface is the primary method for handling events. Users implement the EventListener interface and register their listener on an EventTarget using the AddEventListener method. The users should also remove their EventListener from its EventTarget after they have completed using the listener. from Java Class Library Documentation and must register itself with the graphical objects that can generate the events in which it is interested. 85 86

Model-View-Controller Model-View-Controller A framework enabling us to deal with GUIs separately from the underlying main software application should The Model-View-Controller framework consists of three main components: define a suitable interface between GUIs and the rest of the system, and define the interaction protocol between the various components. The Model-View-Controller (MVC) framework provides such a neat separation between GUIs and the rest of the system, specifying a clear interaction protocol. Model: View: The underlying system. Graphical representation of the model's state (i.e. the output from the system). Controller: Graphical components used to interact with the environment (i.e. the input to the system). MVC, or architecture first, was developed with Smalltalk, and now is widely used in many GUI environments, e.g. Windows, OS X. 87 88 Use case Scenario We are going to use the Model-View-Control architecture for our Noughts and Crosses system. The use case shows us that class Board and Square (and the Cross token if it is a class) are part of the View. The Board view class merely displays the current state. We will rename it BoardView. To help us identify the required objects, let us now sketch out a scenario to see how this behaviour can be achieved by objects sending messages to each other, i.e. let us use a sequence diagram. The Controller will handle the input of the position. But what about the Model? It must keep track of the state of the game, i.e. it must hold the state of the board. 89 90

Scenario The Controller receives an input and passes this information to the Model. As that will cause the Model state to be changed, the Controller then causes the View to be updated. State information Remember that the Controller and the View objects have no state information, i.e. no memory (no "permanent" information) except perhaps details like their current position on the screen. It is the Model object that keeps (ideally) all the internal information about the current state of the game. Note how the purpose of a View object is simply to obtain information from the Model and decide how that information is to be displayed to the user. Hence, each Square object has to interrogate the Model (using getval to determine the value to be displayed). 91 92 State information I. Automated Banking System Case studies: Outline The Model object has no knowledge of, or control over, how information is to be displayed. It does not even know that there are view objects. II. III. Library Noughts and Crosses Modularity/separation of concerns: fundamental in computer science. Definition of the problem E.g. updates and changes in the Viewer do not affect the Model. Dealing even with this very simple behaviour has helped us understand what is required: - we provide support to user input (Controller activity), - we maintain a state coherently - e.g. by dealing with concurrent 1. use case: Make the first move a. introducing MVC modelling 2. use case: Make an arbitrary move a. a more detailed MVC model 3. Design patterns access - (Model activity), and - we display things (View activity). 93 94

Scenario Scenario Let us now consider a slightly more complex scenario: Reasoning about this scenario: make an arbitrary move the system can keep track of whether the next move is an X or an O; it does not have to be part of the user input; A player inputs a position. The system checks that the position is empty and that the game is not already finished. The system reports if that is the case and if so, ignores the input. the Model that will check whether or not a move is valid (e.g. if the chosen square is empty); If the move is valid, the system adds an X or O as appropriate to (the representation of) the board. The board is then displayed. the Model consists of two objects: MoveHandler to deal with the current move, and BoardState to remember the state of the game. The system reports whether the game has been won, drawn or is not yet finished. The MoveHandler interacts with BoardState to check that a move is valid (the current state of the board is needed for that). 95 96 Scenario Let us now represent the scenario where we make a successful arbitrary move as a sequence diagram. Scenario The BoardView object will call each of the 9 Square objects in turn to display each of them. Optimisation: could it call only the updated square? Yes, as it knows the current move, BUT remember, as a general principle, that it is better to keep BoardView as much decoupled as possible from Model, i.e. better not to duplicate the state representations [BoardView would need one], which then have to be kept consistent. 97 98

Class diagram Summary What have we learnt? The class structure was not obvious. Again, use cases and interaction diagrams can be of real help in understanding requirements and identifying classes. The MVC architecture imposes a standard structure on our solution (for a given class of systems, e.g. useless for systems without a display/control kind of interface). MVC? Three view classes: Reporter, BoardView and Square. Two model classes: MoveHandler - a control object, and An alternative architecture would have been for the BoardView and Square classes to have held state information as well as displaying that information. BoardState - an entity object. 99 100 Summary I. Automated Banking System Case studies: Outline Must emphasise: there is no such thing as the correct solution; there are lots of possibilities. II. III. Library Noughts and Crosses Definition of the problem Advantage of MVC is that it leads to a separation of concerns; the resulting model should therefore be easier to understand, modify and maintain. 1. use case: Make the first move a. introducing MVC modelling 2. use case: Make an arbitrary move a. a more detailed MVC model 3. Design patterns 101 102

I. Automated Banking System II. Library Case studies: Outline Low level design X and O: we have not said anything about how each position is input. III. Noughts and Crosses That is the best approach during analysis and high level design. Definition of the problem In low level design, we can make a decision. 1. use case: Make the first move a. introducing MVC modelling 2. use case: Make an arbitrary move a. a more detailed MVC model 3. Low level design 4. Design patterns Two obvious alternatives: Have text boxes to receive the required square position. Select the required square with the mouse. In low level design, we may know the target language. For example, if it is Java, the Reporter class can be a TextField. [exercise: what is a TextField?] 103 104 Low level design Separation of concerns Let us assume that we select the required field with the mouse. The relevant part of the In Java, we can pick up the mousepressed event (in the Controller), get the co-ordinates of where the mouse was pressed and then query the BoardView object to find the corresponding row and column position of the square. sequence diagram is: The Controller then sends this information to MoveHandler (the Model) to do internal processing. As the applet or main class of an application is the Controller, we can give it a more meaningful name, such as XandO. Note that the Model is unaffected by how the position is input. It receives the relevant row and column number of the Square from the Controller, but does not need to know how that was obtained. 105 106

Separation of concerns Separation of concerns Review of the advantages of the MVC architecture: By separating the GUI from the underlying application (the Model), each part can be developed separately. The application has no knowledge of how it is to be displayed; it could for example have several Views. One problem is how does the View know that it should update the graphical representation. In our example, we cheat. The mousepressed event is handled by the Controller and causes the Model state to be updated. One View could present the information in an application as a table while another could present it as a graph. The Controller then tells the View that it should update itself. That choice would be part of the GUI and be independent of the Model. However, the Controller will not always know when the model has been updated, e.g. when the application generates a move. The purpose of the View is purely to display the data it obtains from the model. The only component that definitely knows it is the Model. The View does not know what the data means. 107 108 Introducing Design Patterns The MVC framework is a classic design pattern, i.e. a structure and a kind of interaction, whose relevance goes far beyond the XandO game. It actually encodes a general schema that can be applied anytime a user interacts (C) with a system updating the information embedded in the state of the system (M), and when a form of presentation of such information through an interface is in place (V). To understand patterns we represent them using class and sequence diagrams. The class diagram on this slide represents the support to the an MVC pattern, from a Java perspective. Following the principle of reuse, it would be wise to be able to precisely describe such a pattern, or better, a well-tested and commonly agreed version of such a pattern, so as to be able to easily recognise when it can be applied to a given scenario, and to straightforwardly apply it to our system design. The abstract superclass Observable and the interface Observer are defined in the Java library. More in general it would be desirable to have a library of such design patterns. http://download.oracle.com/javase/6/docs/api/java/util/observable.html 109 110

Let us look at the main components of this pattern. Model is a concrete class that maintains Observable is an abstract superclass the state that is of interest to its observers. It inherits the methods addobserver, notifyobservers and setchanged. that has the methods + addobserver - notifyobservers - setchanged and maintains a list of its registered observers. Observer is an interface offering the operation update. When an object of class Model is modified, it calls its inherited setchanged and notifyobservers methods. When we write the Model subclass all we need to do is add a call of setchanged and notifyobservers, specifically for the case at hand. 111 112 View is a concrete class that implements the Observer interface by defining an update method. It registers with a Model object by calling its addobserver method and when it subsequently receives a call of its update service, it goes and gets new information from the Model object. Note that all the work of maintaining the list of observers and notifying them is defined in the Observable superclass. A Model class can be a subclass of the abstract class Observable. A View class can register itself with an observable model component. When the observable Model class changes, it can call notifyobservers to inform the registered View classes that a change has occurred. The View classes can then redraw their display. Note that this is very language dependent with lots occurring under the bonnet. It is therefore very difficult to model in a language independent way as we do not know how much we are gong to get for free from a language. This is a good argument for separation of Model from the View and Controller; we can have one Model and several sets of Views and Controllers for different languages. 113 114

For our Noughts and Crosses program, the class diagram is: The class diagram shows the static structure. To understand behaviour, we need to think in terms of objects and deal with sequence diagrams. The first thing to be clear about is that there are only two objects: BoardState that offers the public operations addobserver and getval and the private operations notifyobservers and setchanged BoardView that offers the public operation update. 115 116 There are two different parts to the behaviour: Such flow of control is summarised by the following sequence diagrams: Registration: The BoardView object registers with the BoardState object by calling the addobserver() operation of BoardState. Register: Update (Control is missing): Updating: When the state of the board changes, the BoardState object calls its own private operations: setchanged(); notifyobservers(); Execution of notifyobservers() by BoardState causes the update()operation of BoardView to be called. Execution of update()by BoardView causes a callback (e.g. a call of getval()) to get the required new information from BoardState. 117 118