throbber
A Description of the Model-View-Controller User
`Interface Paradigm in the Smalltalk-80 System
`
`Glenn E. Krasner and Stephen T. Pope
`ParcPlace Systems, Inc.
`
`1550 Plymouth Street Mountain View, CA 94043 glenn@ParcPlace.com
`
`Copyright © 1988 ParcPlace Systems. All Rights Reserved.
`
`Abstract
`This essay describes the Model-View-Controller (MVC) programming paradigm and
`methodology used in the Smalltalk-80TM programming system. MVC programming is the
`application of a three-way factoring, whereby objects of different classes take over the operations
`related to the application domain, the display of the application's state, and the user interaction
`with the model and the view. We present several extended examples of MVC implementations and
`of the layout of composite application views. The Appendices provide reference materials for the
`Smalltalk-80 programmer wishing to understand and use MVC better within the Smalltalk-80
`system.
`
`Contents
`Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
`MVC and the Issues of Reusability and Pluggability . . . . . . . . . . . . . . . . . 2
`The Model-View-Controller Metaphor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
`An Implementation of Model-View-Controller . . . . . . . . . . . . . . . . . . . . . . 5
`User Interface Component Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
`Program Development Support Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 13
`View/Controller Factoring and Pluggable Views . . . . . . . . . . . . . . . . . . . . 16
`MVC Implementation Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
`Counter View Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
`Hierarchical Text Organizer Example . . . . . . . . . . . . . . . . . . . . . . . . . . 24
`FinancialHistory Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
`Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
`Appendices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
`References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
`Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
`RPX Exhibit 1110
`RPX v. AIT
`
`1
`
`

`
`Introduction
`The user interface of the Smalltalk-80 programming environment (see references, [Goldberg,
`1983]) was developed using a particular strategy of representing information, display, and control.
`This strategy was chosen to satisfy two goals: (1) to create the special set of system components
`needed to support a highly interactive software development process, and (2) to provide a general
`set of system components that make it possible for programmers to create portable interactive
`graphical applications easily.
`
`In this essay, we assume that the reader has basic knowledge of the Smalltalk-80 language and
`programming environment. Interested readers not familiar with these are referred to [Goldberg
`and Robson, 1983] and [Goldberg, 1983] for introductory and tutorial material.
`
`MVC and the Issues of Reusability and Pluggability
`When building interactive applications, as with other programs, modularity of components has
`enormous benefits. Isolating functional units from each other as much as possible makes it easier
`for the application designer to understand and modify each particular unit, without having to
`know everything about the other units. Our experiences with the Smalltalk-76 programming
`system showed that one particular form of modularity--a three-way separation of application
`components--has payoff beyond merely making the designer's life easier. This three-way division
`of an application entails separating (1) the parts that represent the model of the underlying
`application domain from (2) the way the model is presented to the user and from (3) the way the
`user interacts with it.
`
`Model-View-Controller (MVC) programming is the application of this three-way factoring,
`whereby objects of different classes take over the operations related to the application domain (the
`model), the display of the application's state (the view), and the user interaction with the model
`and the view (the controller). In earlier Smalltalk system user interfaces, the tools that were put
`into the interface tended to consist of arrangements of four basic viewing idioms: paragraphs of
`text, lists of text (menus), choice "buttons," and graphical forms (bit- or pixel-maps). These tools
`also tended to use three basic user interaction paradigms: browsing, inspecting and editing. A goal
`of the current Smalltalk-80 system was to be able to define user interface components for
`handling these idioms and paradigms once, and share them among all the programming
`environment tools and user-written applications using the methodology of MVC programming.
`
`We also envisioned that the MVC methodology would allow programmers to write an application
`model by first defining new classes that would embody the special application domain-specific
`information. They would then design a user interface to it by laying out a composite view
`(window) for it by "plugging in" instances taken from the predefined user interface classes. This
`"pluggability" was desirable not only for viewing idioms, but also for implementing the
`controlling (editing) paradigms. Although certainly related in an interactive application, there is
`an advantage to being able to separate the functionality between how the model is displayed, and
`
`2
`
`

`
`the methods for interacting with it. The use of pop-up versus fixed menus, the meaning attached to
`keyboard and mouse/function keys, and scheduling of multiple views should be choices that can
`be made independently of the model or its view(s). They are choices that may be left up to the
`end user where appropriate.
`
`The Model-View-Controller Metaphor
`To address the issues outlined above, the Model-View-Controller metaphor and its application
`structuring paradigm for thinking about (and implementing) interactive application components
`was developed. Models are those components of the system application that actually do the work
`(simulation of the application domain). They are kept quite distinct from views, which display
`aspects of the models. Controllers are used to send messages to the model, and provide the
`interface between the model with its associated views and the interactive user interface devices
`(e.g., keyboard, mouse). Each view may be thought of as being closely associated with a
`controller, each having exactly one model, but a model may have many view/controller pairs.
`
`Models
`The model of an application is the domain-specific software simulation or implementation of the
`application's central structure. This can be as simple as an integer (as the model of a counter) or
`string (as the model of a text editor), or it can be a complex object that is an instance of a subclass
`of some Smalltalk-80 collection or other composite class. Several examples of models will be
`discussed in the following sections of this paper.
`
`Views
`In this metaphor, views deal with everything graphical; they request data from their model, and
`display the data. They contain not only the components needed for displaying but can also
`contain subviews and be contained within superviews. The superview provides ability to perform
`graphical transformations, windowing, and clipping, between the levels of this subview/superview
`hierarchy. Display messages are often passed from the top-level view (the standard system view of
`the application window) through to the subviews (the view objects used in the subviews of the tool
`view).
`
`Controllers
`Controllers contain the interface between their associated models and views and the input devices
`(keyboard, pointing device, time). Controllers also deal with scheduling interactions with other
`view-controller pairs: they track mouse movement between application views, and implement
`messages for mouse button activity and input from the input sensor. Although menus can be
`thought of as view-controller pairs, they are more typically considered input devices, and
`therefore are in the realm of controllers.
`
`3
`
`

`
`Broadcasting Change
`In the scheme described above, views and controllers have exactly one model, but a model can
`have one or several views and controllers associated with it. To maximize data encapsulation and
`thus code reusability, views and controllers need to know about their model explicitly, but models
`should not know about their views and controllers.
`
`A change in a model is often triggered by a controller connecting a user action to a message sent
`to the model. This change should be reflected in all of its views, not just the view associated with
`the controller that initiated the change.
`
`Dependents
`To manage change notification, the notion of objects as dependents was developed. Views and
`controllers of a model are registered in a list as dependents of the model, to be informed whenever
`some aspect of the model is changed. When a model has changed, a message is broadcast to notify
`all of its dependents about the change. This message can be parameterized (with arguments), so
`that there can be many types of model change messages. Each view or controller responds to the
`appropriate model changes in the appropriate manner.
`
`A Standard for the Interaction Cycle
`The standard interaction cycle in the Model-View-Controller metaphor, then, is that the user takes
`some input action and the active controller notifies the model to change itself accordingly. The
`model carries out the prescribed operations, possibly changing its state, and broadcasts to its
`dependents (views and controllers) that it has changed, possibly telling them the nature of the
`change. Views can then inquire of the model about its new state, and update their display if
`necessary. Controllers may change their method of interaction depending on the new state of the
`model. This message-sending is shown diagrammatically in Figure 1.
`
`4
`
`

`
`Figure 1: Model-View-Controller State and Message Sending
`
`An Implementation of Model-View-Controller
`The Smalltalk-80 implementation of the Model-View-Controller metaphor consists of three
`abstract superclasses named Model, View, and Controller, plus numerous concrete subclasses. The
`abstract classes hold the generic behavior and state of the three parts of MVC. The concrete
`classes hold the specific state and behavior of the application facilities and user interface
`components used in the Smalltalk-80 system. Since our primary set of user interface components
`were those needed for the system's software development tools, the most basic concrete
`subclasses of Model, View, and Controller are those that deal with scheduled views, text, lists of
`text, menus, and graphical forms and icons.
`
`Class Model
`The behavior required of models is the ability to have dependents and the ability to broadcast
`change messages to their dependents. Models hold onto a collection of their dependent objects.
`The class Model has message protocol to add and remove dependents from this collection. In
`addition, class Model contains the ability to broadcast change messages to dependents. Sending
`the message changed to a Model causes the message update to be sent to each of its dependents.
`Sending the message changed: aParameter will cause the corresponding message update:
`aParameter to be sent to each dependent.
`
`A simple yet sophisticated MVC example is the FinancialHistory view tutorial found in
`[Goldberg and Robson, 1983]. A display of a FinancialHistory is shown in Figure 2 and its
`implementation is discussed in the MVC implementation examples at the end of this essay. In it, a
`view that displays a bar chart is created as a dependent of a dictionary of tagged numerical values
`
`5
`
`

`
`(for example, rent --> $500). The composite FinancialHistoryView has two subviews, with two
`bar charts, whose models are two distinct dictionaries (incomes and expenditures). These are held
`as instance variables of the central model, an instance of class FinancialHistory.
`
`Figure 2 also shows the pop-up menu used by the FinancialHistoryController with the two items
`labeled 'spend' and 'receive' as well as the input prompter (a FillInTheBlank) querying for an
`amount to be spent on 'good times'.
`
`Figure 2: FinancialHistoryView with its BarChart subviews, the Controller's menu, and an
`interaction prompter (note that the menu and prompter are never visible at
`the same time)
`
`User action for interacting with the FinancialHistory application might be to pick an item from a
`menu to add a new amount for rent. The controller then sends a message to the model (the
`dictionary), and the model sends self changed. As a result of this, the bar chart is sent the
`message update. In response to that message, the bar chart gets the new values from the
`dictionary and displays the new bars using the display messages.
`
`A flow diagram for this MVC interaction might be:
`
`6
`
`

`
`Figure 3: Message-sending and dependency updating for an example from the
`FinancialHistory application
`
`The change messages with parameters (i.e., self changed: someAspect) are used to pass
`information from the model to its dependents about which aspect has changed, so as to minimize
`the amount of view updating needed. For example, the object householdFinances (the model
`mentioned earlier that holds onto the dictionaries of income and expenses), could have been the
`model of two bar chart views, with separate protocols for displaying expenses and income. In this
`case, the update message could contain a parameter saying which of the aspects (expenses or
`income) had changed.
`
`Depending on the application, many of the basic Smalltalk-80 system structure classes can serve as
`models of MVC systems. Views can be found in the system or user applications that use very simple
`objects (numbers or strings), collection class instances (orderedCollections, dictionaries, bitmaps or
`display-Texts) or complex composite objects (networks, databases, event lists or financial histories) as their
`underlying models.
`
`Class View
`The abstract superclass, class View, contains the generic behavior of views in the system. This
`includes model and controller interaction, subview and superview interaction, coordinate
`transformation, and display rectangle actions. The many subclasses of View implement the
`various display interaction tools used in the user interface.
`
`Every instance of a view has exactly one model and exactly one controller. The model is normally
`set explicitly. Because view and controller classes are often designed in consort, a view's
`controller is often simply initialized to an instance of the corresponding controller class. To
`support this, the message defaultControllerClass, that returns the class of the appropriate
`controller, is defined in many of the subclasses of View.
`
`7
`
`

`
`Views have the ability to have zero or more subviews, with flexible coordinate transformations
`between one view and its super- and subviews. Instances of class View have instance variables for
`their superviews and for a (possibly empty) collection of subviews, as well as for an instance of
`class WindowingTransformation which represents the transformation (translation and scaling)
`between that view's coordinate system and that of its superview. In addition, there is a default
`protocol in View for adding and removing subviews, as well as a protocol for changing the
`transformations. This allows views consisting of many subviews to be pieced together flexibly
`and simply.
`
`The third type of behavior in class View is that which relates to displaying. Because subclasses of
`View are assumed to use display objects to actually do their displaying (Forms, Pens, Lines or
`instances of other graphical classes), View only supports generic displaying behavior. In
`particular, there is no instance variable for display objects. Class View assumes that the top level
`of a subview structure displays on some medium (typically the display screen).
`
`Views therefore cache the transformation from their own internal coordinate system to the
`display's coordinate system (i.e., the composition of the view's transformation and all of its
`superviews' transformations), so that it is faster to get from a view's internal space to display
`space. View also has instance variables insetDisplayBox, the clipping rectangle within which the
`view may display without overlapping other views; borderWidth and borderColor, to define the
`(non-scaled) borders between a view and its superview, insideColor, to define the color (if any)
`with which a view colors its insetDisplayBox before actually displaying its contents; and
`boundingBox, to describe the extent of display objects within the view's coordinate system.
`
`By default, the message model: anObject, when sent to a view, initializes the view's controller to
`be a new instance of the view's default controller class. It establishes anObject as the model for
`both the view and the controller, and establishes the view as a dependent of the model. This one
`message is typically sufficient for setting up the MVC structure.
`
`The message release, used when closing a hierarchy of views (i.e., the sub-views of one top-level
`window), gives the programmer the opportunity to insert any finalization activity. By default,
`release breaks the pointer links between the view and controller. The message release also
`removes the view from its model's dependents collection, breaking reference circularities between
`them.
`
`Class Controller
`It is a controller's job to handle the control or manipulation (editing) functions of a model and a
`particular view. In particular, controllers coordinate the models and views with the input devices
`and handle scheduling tasks. The abstract superclass Controller contains three instance variables:
`model, view, and sensor, the last of which is usually an instance of class InputSensor representing
`the behavior of the input devices.
`
`8
`
`

`
`Because the interpretation of input device behavior is very dependent on the particular
`application, class Controller implements almost none of this behavior. The one such behavior that
`is implemented is the determination of whether or not the controller's view contains the cursor.
`
`Class Controller does include default scheduling behavior. It takes the point of view that only one
`controller is to be active at a time; that is, only one controller at a time mediates user input actions.
`Other views could be displaying information in parallel, but the user's actions are to be interpreted
`by a single controller. Thus, there is behavior in class Controller for determining whether a
`controller needs to receive or maintain control. In addition, there is behavior to signal initiation
`and termination of control, since many controllers will need to have special initiation and
`termination behavior.
`
`The query messages isControlWanted and isControlActive are overridden in concrete subclasses of
`Controller if they require a different behavior for determining whether to receive or maintain
`control. By default, these messages use the messages controlToNextLevel (pass it on down) and
`viewHasCursor (a query) in such a way that the controller of the lowest subview in the hierarchy
`that contains the cursor in its display box will take and retain control.
`
`Once a controller obtains control, the default behavior is to send it the messages controlInitialize,
`controlLoop, and controlTerminate. This message sequence is found in the method startUp. The
`messages controlInitialize and controlTerminate are overridden in subclasses that want specific
`behavior for starting and ending their control sequences (for example, many of the list controllers
`have a scroll bar appear to their left only when they have control). controlLoop is implemented as
`a loop that sends the message controlActivity as long as the controller retains control. This
`message is overridden in many controller classes to do the "real" work of the user interface.
`
`StandardSystemView and StandardSystemcontroller
`Subclasses of View and Controller are the various classes that implement more specific types of
`view and controller behavior. Classes StandardSystemView and StandardSystemController are the
`implementation of "window system" behavior. StandardSystemController contains the definition
`of the standard blue-button menu (normally assigned to the right-hand mouse button), used for
`accessing operations of closing, collapsing, and resizing the top-level view on the display. It also
`contains the behavior for scheduling the view as one of the active views. StandardSystemView
`contains the behavior for top-level view labels, for displaying when collapsed or not (possibly
`using icons), and for the size (minimum, maximum, changing) of the view on the display.
`Interactive applications typically exist inside system views, that is, the views and controllers for
`the application are created as subviews of a StandardSystemView (the application's top-level
`view).
`
`In addition to StandardSystemController, the system provides other abstract controller classes
`with default behavior. Instances of NoController will never take control; they are often used in
`conjunction with "read-only" views. Class MouseMenuController includes behavior for
`
`9
`
`

`
`producing pop-up menus when any of the mouse buttons is pressed. Most controllers in the user
`interface are subclasses of MouseMenuController, including StandardSystemController itself,
`because of the extensive use of pop-up menus. Another example of these abstract classes is class
`ScrollController, which implements scroll bars.
`
`Because views are often composed of parts (composite views), with one application view
`containing multiple subviews (as the FinancialHistoryView shown in Figure 2 has subviews for
`the two bar chart views), the instance variables for views have different meanings in an
`application's StandardSystemView than in their subviews. Of the many subclasses of View, some
`are meant to behave as top-level views (such as StandardSystemView), and others are meant to be
`used as subviews (single subviews within a structured view) and "plugged in" to other views as
`components (such as the SelectionInListViews used in many types of applications).
`
`Figure 4 is a schematic diagram of the state and interrelationships of the relevant MVC objects
`used in the CounterView example showing the values of some of their variables. The complete
`source code for this example is included below in the section called "MVC Implementation
`Examples." The interdependencies are shown by the arrows linking the model, view and
`controller together via instance variables and dependents.
`
`Figure 4: Instance variables of an MVC Triad for a running CounterView
`
`User Interface Component Hierarchy
`The classes View and Controller, along with the other abstract classes, provide the framework for
`views and controllers in the Smalltalk-80 implementation of the Model-View-Controller
`metaphor. The system also contains various subclasses of View and Controller that provide the
`pieces of user interface functionality required by interactive applications. These user interface
`components include menus, text, and forms. These components are pieced together to form the
`standard system views of the Smalltalk-80 application development environment, and can be
`reused or subclassed for system applications. They form the kernel of the component library of
`model-building tools and user interaction components that can be easily "pulled off the shelf" and
`"plugged" together to create interactive applications. We list some of them here, but in most cases
`
`10
`
`

`
`we only use the names of the subclasses of View; it is assumed that each is used with one or more
`appropriate Controller subclasses.
`
`SwitchView and ListView are two subclasses of View that provide static or dynamic menu
`behavior. SwitchViews are used, for example, in the instance/class switch of the system browser
`or the iconic menu of the form editor. They behave as a switch; they can either be on or off, and
`when the user clicks the mouse button on them, they will notify their model. These are typically
`used as menus of text or forms, or "buttons."
`
`A ListView is a scrolling menu of text items, such as those used in the upper four subviews of the
`system browser (shown in Figure 11). It will inform its model when the user has made a new
`selection in the list. Figure 5 shows examples of the use of subclasses of SwitchViews (in the
`iconic menu of the FormEditor, the paint program) and ListViews (in the Browser's category
`subview).
`
`Figure 5: SwitchView and ListView examples
`
`Prompters and Confirmers are simple views that can be input. They are started up by giving them
`a string for their query or prompt, and can return either a string value (in the case of Prompters) or
`a Boolean value (in the case of Confirmers).
`
`Figure 6: Examples of a Prompter and a Confirmer
`
`Because they can be considered as belonging more to the controller-sensor interface, pop-up
`menus are implemented as a special kind of MVC class. Class PopUpMenu is a subclass of
`Object and provides its own scheduling and displaying behavior. They are typically invoked by a
`MouseMenuController when the user pushes a mouse button. When invoked, PopUpMenus by
`default return a numerical value that the invoking controller uses to determine the action to
`perform. There are several subclasses of PopUpMenu, some that implement hierarchical (multi-
`level) menus and others that return symbols instead of numerical values upon item selection.
`Examples of typical menus are shown in Figure 7.
`
`11
`
`

`
`Figure 7: Examples of Simple and Hierarchical Menus
`
`A number of view/controller subclasses provide text handling components. Class
`StringHolderView and class TextView provide views of text used in Workspaces, Editors,
`Transcripts and other instances where text is displayed. The Controller subclasses
`ParagraphEditor and TextEditor have the standard text editing functionality and are used in many
`text editor subviews. The layout of a file-based text editor view is shown in Figure 8 along with
`the names of its components.
`
`Figure 8: File-based TextEditorView and Menus
`
`In addition to these view types, there are several other classes provided within the system that are
`used in building MVC user interfaces. These include the special controller classes mentioned
`earlier: MouseMenuController and NoController; and the class InputSensor that is used for
`monitoring user input. There is a global object called Sensor that is the sole instance of the class
`InputSensor. It is used to model the user's input devices such as the mouse and the keyboard. One
`can send query messages to Sensor such as anyButtonPressed, or one can wait for a user action
`with messages such as waitBlueButton. One need normally never refer to Sensor, since it is used
`in the implementation of the more basic controller classes, but many types of special user
`interface components, especially those that track the mouse directly (for rubber-band lines, for
`example), use it.
`
`12
`
`

`
`Program Development Support Examples
`Workspaces, inspectors, browsers, debuggers and various editors are among the system views
`provided in the Smalltalk-80 software development support environment. They serve now as
`examples of piecing together subviews from the view and controller components collection with
`appropriate models to provide useful and flexible front-ends for interactive applications.
`
`Workspaces
`The workspaces in the system are StringHolderView/StringHolderController combinations
`installed as the single subview of a StandardSystemView. Their model is an instance of
`StringHolder, which merely holds onto an instance of Text, a String with formatting information.
`The menu messages implemented by StringHolderController correspond to the basic text editing
`and Smalltalk-80 code evaluation commands as shown in the menu in Figure 9.
`
`Figure 9: Simple Workspace View and Menu
`
`Inspectors
`The inspectors in the system are implemented as two views. A ListView contains the instance
`variable list (left side), and a TextView displays the value of the selected instance variable (right
`side). An instance of InspectorView serves as their common superview, and an instance of
`StandardSystemView serves as its superview for scheduling purposes. The model for these views
`is an instance of Inspector.
`
`Inspectors can be used to view any object. A separate class, Inspector, serves as the intermediary
`or filter for handling access to any aspects of any object. As a result, no extra protocol is needed in
`class Object. Using intermediary objects between views and "actual" models is a common way to
`further isolate the viewing behavior from the modeling application.
`
`It is possible to build a more appropriate interactive interface to composite objects by subclassing
`the inspector for use with classes such as arrays and dictionaries. There are also specialized
`inspectors for complex objects such as MVC triads themselves or application-specific classes
`such as event lists.
`
`13
`
`

`
`Figure 10: Inspector Examples - Simple, Array and Dictionary Inspectors
`
`Browsers
`As with inspectors, intermediary objects are used to model the system code browser behavior. An
`instance of class Browser is the intermediary model for each system browser, representing the
`query paths through the system class hierarchy to the class organization and the classes. As
`dependents of the Browser model, there are the four list views (for Class Categories, Classes,
`Message Protocols and Messages), a code (text) view (for the method code of the selected
`message or a class definition template), and two switch views (for selective browsing of class and
`instance messages as shown in Figure 11). Class Browser has separate protocol for each of the
`various subviews of the browsers.
`
`Figure 11: System Browser View Layout and Browser Menus
`
`Each of the subviews sends different messages to the model to query the values of an aspect of the
`system code. Each of the controllers sends different messages when the aspect should be changed.
`
`For example, when the user selects a new class in the class list subview, the controller for that
`subview sends the message className: newClassName to the Browser. The Browser sets up its
`new state accordingly. This involves sending the messages self Changed: #protocol and self
`
`14
`
`

`
`changed: #text. In response to the corresponding update: messages, the category subview, the
`class and instance switches, and the class subview do nothing. The protocol subview asks the
`Browser for the new list of protocols to display and displays it. The message list subview clears
`itself, and the text subview asks the Browser for the current text to display, which is the new class
`template. In this way, the six view/controller pairs sharing the single model work to produce the
`desired effect.
`
`There are several other types of Browser found in the Smalltalk-80 system. Note the middle group
`of menu items in the upper-right subview (the MessageList) of the System Browser shown above.
`The menu items senders, implementors and messages can be used to open new browsers (called
`Message-Set Browsers) on a small subset of the system messages-namely all the senders of the
`currently selected message, all other implementors of the same message, or all messages sent
`from within the method of the currently selected message. Other Browsers exist, for example, to
`assist in change management (ChangeSet Browsers) or system recovery (ChangeList Browsers).
`
`Debuggers
`Class Debugger is defined as a subclass of class Browser, so that it can inherit the cross-
`referencing behavior (menu messages for querying senders, implementors and messages used in a
`method). It also inherits and augments the code view behavior. The upper subview, which is a
`context list (i.e., a message-sending stack), is a list view that uses protocol defined in class
`Debugger for displaying the system's message sending context stack as a list view.
`
`Unlike the system browser, the Debugger is not the only model involved in the debugging
`application. There is a separate Inspector model for each of the two inspector subviews

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket