Misplaced Pages

Visual Smalltalk Enterprise

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.

Visual Smalltalk Enterprise (VSE) is a Smalltalk dialect that runs only on Microsoft Windows, and is the last in a long line of Smalltalk implementations first produced by Digitalk and now available through Cincom.

#225774

65-454: Active development has stopped since late 1997 and VSE is now only available as a version called VSE 2000, and only to licensed users of previous VSE versions. VSE has had a complicated history which starts with a product called Digitalk Smalltalk/V that ran from a DOS prompt and provided a windowing environment. Before Smalltalk/V, the first commercial Smalltalk product from Digitalk was Digitalk Methods released in 1983. The windowing interface

130-467: A constructor and a destructor . An object expresses data type as an interface – the type of each member variable and the signature of each member function (method). A class defines an implementation of an interface, and instantiating the class results in an object that exposes the implementation via the interface. In the terms of type theory, a class is an implementation‍—‌a concrete data structure and collection of subroutines‍—‌while

195-592: A UITableView is a UIScrollView is a UIView is a UIResponder is an NSObject. In object-oriented analysis and in Unified Modelling Language (UML), an association between two classes represents a collaboration between the classes or their corresponding instances. Associations have direction; for example, a bi-directional association between two classes indicates that both of the classes are aware of their relationship. Associations may be labeled according to their name or purpose. An association role

260-445: A button, and all the buttons together compose the interface (other television sets that are the same model as yours would have the same interface). In its most common form, an interface is a specification of a group of related methods without any associated implementation of the methods. A television set also has a myriad of attributes , such as size and whether it supports color, which together comprise its structure. A class represents

325-405: A class from its interface: the internal structure is made private, while public accessor methods can be used to inspect or alter such private data. Access specifiers do not necessarily control visibility , in that even private members may be visible to client external code. In some languages, an inaccessible but visible member may be referred to at runtime (for example, by a pointer returned from

390-422: A collection of objects, such as instances of Body , Engine , Tires , etc. Object modeling languages such as UML include capabilities to model various aspects of "part of" and other kinds of relations – data such as the cardinality of the objects, constraints on input and output values, etc. This information can be utilized by developer tools to generate additional code besides the basic data definitions for

455-501: A concrete sub class. An abstract class is either labeled as such explicitly or it may simply specify abstract methods (or virtual methods ). An abstract class may provide implementations of some methods, and may also specify virtual methods via signatures that are to be implemented by direct or indirect descendants of the abstract class. Before a class derived from an abstract class can be instantiated, all abstract methods of its parent classes must be implemented by some class in

520-415: A controller on the server, and the controller communicates with the appropriate model objects. The Django framework (July 2005, for Python ) put forward a similar "model template view" (MTV) take on the pattern, in which a view retrieves data from models and passes it to templates for display. Both Rails and Django debuted with a strong emphasis on rapid deployment, which increased MVC's popularity outside

585-727: A general " programming paradigm and methodology" for Smalltalk-80 developers. However, their scheme differed from both Reenskaug et al.'s and that presented by the Smalltalk-80 reference books. They defined a view as covering any graphical concern, with a controller being a more abstract, generally invisible object that receives user input and interacts with one or many views and only one model. The MVC pattern subsequently evolved, giving rise to variants such as hierarchical model–view–controller (HMVC), model–view–adapter (MVA), model–view–presenter (MVP), model–view–viewmodel (MVVM), and others that adapted MVC to different contexts. The use of

650-500: A member function), but an attempt to use it by referring to the name of the member from the client code will be prevented by the type checker. The various object-oriented programming languages enforce member accessibility and visibility to various degrees, and depending on the language's type system and compilation policies, enforced at either compile time or runtime . For example, the Java language does not allow client code that accesses

715-501: A particular object or with all objects of that class. Object state can differ between each instance of the class whereas the class state is shared by all of them. The object methods include access to the object state (via an implicit or explicit parameter that references the object) whereas class methods do not. If the language supports inheritance , a class can be defined based on another class with all of its state and behavior plus additional state and behavior that further specializes

SECTION 10

#1733086179226

780-419: A pattern that could be used to structure any program where users interact with a large, convoluted data set . His design initially had four parts: Model , view, thing, and editor. After discussing it with the other Smalltalk developers , he and the rest of the group settled on model, view, and controller instead. In their final design, a model represents some part of the program purely and intuitively. A view

845-461: A pattern where an "input controller" receives a request, sends the appropriate messages to a model object, takes a response from the model object, and passes the response to the appropriate view for display. This is close to the approach taken by the Ruby on Rails web application framework (August 2004), which has the client send requests to the server via an in- browser view, these requests are handled by

910-405: A response using a view. Conventionally, each view has an associated controller; for example, if the application had a client view, it would typically have an associated Clients controller as well. However, developers are free to make other kinds of controllers if they wish. Django calls the object playing this role a "view" instead of a controller. A Django view is a function that receives

975-403: A specialized kind of controller used to modify a particular view, and which is created through that view. Smalltalk-80 supports a version of MVC that evolved from this one. It provides abstract view and controller classes as well as various concrete subclasses of each that represent different generic widgets . In this scheme, a View represents some way of displaying information to

1040-421: A superclass of Rectangle and Ellipse , while Square would be a subclass of Rectangle . These are all subset relations in set theory as well, i.e., all squares are rectangles but not all rectangles are squares. A common conceptual error is to mistake a part of relation with a subclass. For example, a car and truck are both kinds of vehicles and it would be appropriate to model them as subclasses of

1105-420: A table in the application's database . The model is essential for keeping the data organized and consistent. It ensures that the application's data behaves according to the defined rules and logic. Any representation of information such as a chart , diagram or table. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants . In Smalltalk-80,

1170-601: A type is an interface . Different (concrete) classes can produce objects of the same (abstract) type (depending on type system). For example, the type (interface) Stack might be implemented by SmallStack that is fast for small stacks but scales poorly and ScalableStack that scales well but has high overhead for small stacks. A class contains data field descriptions (or properties , fields , data members , or attributes ). These are usually field types and names that will be associated with state variables at program run time; these state variables either belong to

1235-488: A vehicle class. However, it would be an error to model the parts of the car as subclass relations. For example, a car is composed of an engine and body, but it would not be appropriate to model an engine or body as a subclass of a car. In object-oriented modeling these kinds of relations are typically modeled as object properties. In this example, the Car class would have a property called parts . parts would be typed to hold

1300-417: A view is just a visual representation of a model, and does not handle user input. With WebObjects, a view represents a complete user interface element such as a menu or button, and does receive input from the user. In both Smalltalk-80 and WebObjects, however, views are meant to be general-purpose and composable . With Rails and Django, the role of the view is played by HTML templates, so in their scheme

1365-427: A view specifies an in-browser user interface rather than representing a user interface widget directly. (Django opts to call this kind of object a "template" in light of this. ) This approach puts relatively less emphasis on small, composable views; a typical Rails view has a one-to-one relationship with a controller action. Smalltalk-80 views communicate with both a model and a controller, whereas with WebObjects,

SECTION 20

#1733086179226

1430-500: A view talks only to a controller, which then talks to a model. With Rails and Django, a view/template is used by a controller/view when preparing a response to the client. Accepts input and converts it to commands for the model or view. A Smalltalk-80 controller handles user input events, such as button presses or mouse movement. At any given time, each controller has one associated view and model, although one model object may hear from many different controllers. Only one controller,

1495-503: A web request and returns a web response. It may use templates to create the response. In addition to dividing the application into a model, a view and a controller component, the MVC design pattern defines the interactions between these three components : As with other software patterns, MVC expresses the "core of the solution" to a problem while allowing it to be adapted for each system. Particular MVC designs can vary significantly from

1560-407: Is a common set of access specifiers : Although many object-oriented languages support the above access specifiers,their semantics may differ. Object-oriented design uses the access specifiers in conjunction with careful design of public method implementations to enforce class invariants—constraints on the state of the objects. A common usage of access specifiers is to separate the internal data of

1625-410: Is a visual representation of a model, retrieving data from the model to display to the user and passing requests back and forth between the user and the model. A controller is an organizational part of the user interface that lays out and coordinates multiple Views on the screen, and which receives user input and sends the appropriate messages to its underlying Views. This design also includes an Editor as

1690-417: Is also commonly known as a has-a relationship. For example, a class "Car" could be composed of and contain a class "Engine". Therefore, a Car has an Engine. One aspect of composition is containment, which is the enclosure of component instances by the instance that has them. If an enclosing object contains component instances by value, the components and their enclosing object have a similar lifetime . If

1755-542: Is called a pure abstract base class (or pure ABC ) in C++ and is also known as an interface by users of the language. Other languages, notably Java and C#, support a variant of abstract classes called an interface via a keyword in the language. In these languages, multiple inheritance is not allowed, but a class can implement multiple interfaces. Such a class can only contain abstract publicly accessible methods. In some languages, classes can be declared in scopes other than

1820-405: Is given end of an association and describes the role of the corresponding class. For example, a "subscriber" role describes the way instances of the class "Person" participate in a "subscribes-to" association with the class "Magazine". Also, a "Magazine" has the "subscribed magazine" role in the same association. Association role multiplicity describes how many instances correspond to each instance of

1885-411: Is not an intrinsic aspect of classes. An object-based language (i.e. Classic Visual Basic ) supports classes yet does not support inheritance. A programming language may support various class relationship features. Classes can be composed of other classes, thereby establishing a compositional relationship between the enclosing class and its embedded classes. Compositional relationship between classes

1950-409: The client and server . Early MVC frameworks took a thin client approach that placed almost the entire model, view and controller logic on the server. In this approach, the client sends hyperlink requests or form submissions to the controller and then receives a complete and updated web page (or other document) from the view; the model exists entirely on the server. Later frameworks have allowed

2015-409: The "active" controller, receives user input at any given time; a global window manager object is responsible for setting the current active controller. If user input prompts a change in a model, the controller will signal the model to change, but the model is then responsible for telling its views to update. In WebObjects, the views handle user input, and the controller mediates between the views and

Visual Smalltalk Enterprise - Misplaced Pages Continue

2080-587: The Internet requires this level of flexibility and the technology standards such as the Web Ontology Language (OWL) are designed to support it. A similar issue is whether or not the class hierarchy can be modified at run time. Languages such as Flavors, CLOS, and Smalltalk all support this feature as part of their meta-object protocols . Since classes are themselves first-class objects, it is possible to have them dynamically alter their structure by sending them

2145-427: The MVC components to execute partly on the client, using Ajax to synchronize data. Class (computer programming) In object-oriented programming , a class defines the shared aspects of objects created from the class. The capabilities of a class differ between programming languages , but generally the shared aspects consist of state ( variables ) and behavior ( methods ) that are each either associated with

2210-699: The MVC pattern in web applications grew after the introduction of NeXT 's WebObjects in 1996, which was originally written in Objective-C (that borrowed heavily from Smalltalk) and helped enforce MVC principles. Later, the MVC pattern became popular with Java developers when WebObjects was ported to Java . Later frameworks for Java, such as Spring (released in October 2002), continued the strong bond between Java and MVC. In 2003, Martin Fowler published Patterns of Enterprise Application Architecture , which presented MVC as

2275-522: The PARTS Workbench has many features that are not in modern Smalltalks. It has an immediacy that makes it very good for introductory teaching and for rapidly implementing programs with visual interfaces. A result of the complex history is that the copyright and licensing situation is unclear and a typical recent VSE development environment is made up of many elements many of which were developed by third parties and sold separately but are now included with

2340-405: The advantages of Smalltalk-80-style MVC as: Although originally developed for desktop computing , MVC has been widely adopted as a design for World Wide Web applications in major programming languages . Several web frameworks have been created that enforce the pattern. These software frameworks vary in their interpretations, mainly in the way that the MVC responsibilities are divided between

2405-507: The appropriate messages. Other languages that focus more on strong typing such as Java and C++ do not allow the class hierarchy to be modified at run time. Semantic web objects have the capability for run time changes to classes. The rationale is similar to the justification for allowing multiple superclasses, that the Internet is so dynamic and flexible that dynamic changes to the hierarchy are required to manage this volatility. Although many class-based languages support inheritance, inheritance

2470-410: The class from outside the enclosing class. A related concept is inner types , also known as inner data type or nested type , which is a generalization of the concept of inner classes. C++ is an example of a language that supports both inner classes and inner types (via typedef declarations). A local class is a class defined within a procedure or function. Such structure limits references to

2535-431: The class name to within the scope where the class is declared. Depending on the semantic rules of the language, there may be additional restrictions on local classes compared to non-local ones. One common restriction is to disallow local class methods to access local variables of the enclosing function. For example, in C++, a local class may refer to static variables declared within its enclosing function, but may not access

2600-461: The class or specific instances of the class. In most languages, the structure defined by the class determines the layout of the memory used by its instances. Other implementations are possible: for example, objects in Python use associative key-value containers. Some programming languages such as Eiffel support specification of invariants as part of the definition of the class, and enforce them through

2665-453: The class. The specialized class is a sub-class , and the class it is based on is its superclass . As an instance of a class, an object is constructed from a class via instantiation . Memory is allocated and initialized for the object state and a reference to the object is provided to consuming code. The object is usable until it is destroyed – its state memory is de-allocated. Most languages allow for custom logic at lifecycle events via

Visual Smalltalk Enterprise - Misplaced Pages Continue

2730-597: The classes that they are derived from. For example, if "class A" inherits from "class B" and if "class B" implements the interface "interface B" then "class A" also inherits the functionality(constants and methods declaration) provided by "interface B". In languages that support access specifiers , the interface of a class is considered to be the set of public members of the class, including both methods and attributes (via implicit getter and setter methods ); any private members or internal data structures are not intended to be depended on by external code and thus are not part of

2795-406: The company announced it was moving away from Smalltalk and focus towards Java. Visual Smalltalk Enterprise usually comes with another sub-system called the PARTS Workbench. This system allows the layout of components, which can then be connected using a visual representation of event-message links. Programmers can add scripts to particular components and build nested-components. They can also enhance

2860-496: The components are contained by reference, they may not have a similar lifetime. For example, in Objective-C 2.0: This Car class has an instance of NSString (a string object), Engine , and NSArray (an array object). Classes can be derived from one or more existing classes, thereby establishing a hierarchical relationship between the derived-from classes ( base classes , parent classes or superclasses ) and

2925-474: The derivation chain. Most object-oriented programming languages allow the programmer to specify which classes are considered abstract and will not allow these to be instantiated. For example, in Java , C# and PHP , the keyword abstract is used. In C++ , an abstract class is a class having at least one abstract method given by the appropriate syntax in that language (a pure virtual function in C++ parlance). A class consisting of only pure virtual methods

2990-624: The derived class ( child class or subclass ) . The relationship of the derived class to the derived-from classes is commonly known as an is-a relationship. For example, a class 'Button' could be derived from a class 'Control'. Therefore, a Button is a Control. Structural and behavioral members of the parent classes are inherited by the child class. Derived classes can define additional structural members (data fields) and behavioral members (methods) in addition to those that they inherit and are therefore specializations of their superclasses. Also, derived classes can override inherited methods if

3055-600: The distribution. The situation with the most recent release (VSE 2000) is: A partial list of people that worked at Digitalk/ParcPlace on VSE: Model%E2%80%93View%E2%80%93Controller Model–view–controller ( MVC ) is a software design pattern commonly used for developing user interfaces that divides the related program logic into three interconnected elements. These elements are: Traditionally used for desktop graphical user interfaces (GUIs), this pattern became popular for designing web applications . Popular programming languages have MVC frameworks that facilitate

3120-431: The full description of a television, including its attributes (structure) and buttons (interface). Getting the total number of televisions manufactured could be a static method of the television class. This method is associated with the class, yet is outside the domain of each instance of the class. A static method that finds a particular instance out of the set of all television objects is another example. The following

3185-593: The functionality of the main VSE Smalltalk system and use that within the PARTS Workbench. Although the PARTS Workbench allows very easy development of small systems (somewhat after the style of Visual Basic) it is argued that it encourages fragmentary development. The natural style of using this system tends to lead to many links and scripts - it is not based around the idea of 'model' (as used in ' Model–View–Controller ' approaches common in many Smalltalks as well as in other languages). However, as an 'HCI' for programmers,

3250-446: The global scope. There are various types of such classes. An inner class is a class defined within another class. The relationship between an inner class and its containing class can also be treated as another type of class association. An inner class is typically neither associated with instances of the enclosing class nor instantiated along with its enclosing class. Depending on the language, it may or may not be possible to refer to

3315-487: The implementation of the pattern. One of the seminal insights in the early development of graphical user interfaces, MVC became one of the first approaches to describe and implement software constructs in terms of their responsibilities . Trygve Reenskaug created MVC while working on Smalltalk -79 as a visiting scientist at the Xerox Palo Alto Research Center (PARC) in the late 1970s. He wanted

SECTION 50

#1733086179226

3380-432: The interface. Object-oriented programming methodology dictates that the operations of any interface of a class are to be independent of each other. It results in a layered design where clients of an interface use the methods declared in the interface. An interface places no requirements for clients to invoke the operations of one interface in any particular order. This approach has the benefit that client code can assume that

3445-623: The language allows. Not all languages support multiple inheritance. For example, Java allows a class to implement multiple interfaces, but only inherit from one class. If multiple inheritance is allowed, the hierarchy is a directed acyclic graph (or DAG for short), otherwise it is a tree . The hierarchy has classes as nodes and inheritance relationships as links. Classes in the same level are more likely to be associated than classes in different levels. The levels of this hierarchy are called layers or levels of abstraction. Example (Simplified Objective-C 2.0 code, from iPhone SDK): In this example,

3510-441: The models. There may be only one controller per application, or one controller per window. Much of the application-specific logic is found in the controller. In Rails, requests arriving at the on-server application from the client are sent to a " router ", which maps the request to a specific method of a specific controller. Within that method, the controller interacts with the request data and any relevant model objects and prepares

3575-667: The object-oriented community consider antithetical to the goals of using object classes in the first place. Understanding which class will be responsible for handling a message can get complex when dealing with more than one superclass. If used carelessly this feature can introduce some of the same system complexity and ambiguity classes were designed to avoid. Most modern object-oriented languages such as Smalltalk and Java require single inheritance at run time. For these languages, multiple inheritance may be useful for modeling but not for an implementation. However, semantic web application objects do have multiple superclasses. The volatility of

3640-473: The objects, such as error checking on get and set methods . One important question when modeling and implementing a system of object classes is whether a class can have one or more superclasses. In the real world with actual sets, it would be rare to find sets that did not intersect with more than one other set. However, while some systems such as Flavors and CLOS provide a capability for more than one parent to do so at run time introduces complexity that many in

3705-405: The operations of an interface are available for use whenever the client has access to the object. The buttons on the front of your television set are the interface between you and the electrical wiring on the other side of its plastic casing. You press the "power" button to toggle the television on and off. In this example, your particular television is the instance, each method is represented by

3770-507: The other class of the association. Common multiplicities are "0..1", "1..1", "1..*" and "0..*", where the "*" specifies any number of instances. There are many categories of classes, some of which overlap. In a language that supports inheritance, an abstract class , or abstract base class ( ABC ), is a class that cannot be directly instantiated. By contrast, a concrete class is a class that can be directly instantiated. Instantiation of an abstract class can occur only indirectly, via

3835-458: The private data of a class to compile. In the C++ language, private methods are visible, but not accessible in the interface; however, they may be made invisible by explicitly declaring fully abstract classes that represent the interfaces of the class. Some languages feature other accessibility schemes: Conceptually, a superclass is a superset of its subclasses. For example, GraphicObject could be

3900-766: The programmer to define and call these special methods. Every class implements (or realizes ) an interface by providing structure and behavior. Structure consists of data and state, and behavior consists of code that specifies how methods are implemented. There is a distinction between the definition of an interface and the implementation of that interface; however, this line is blurred in many programming languages because class declarations both define and implement an interface. Some languages, however, provide features that separate interface and implementation. For example, an abstract class can define an interface without providing an implementation. Languages that support class inheritance also allow classes to inherit interfaces from

3965-600: The traditional description here. As Alan Kay wrote in 2003, the original motivation behind the MVC was to allow creation of a graphical interface for any object. That was outlined in detail in Richard Pawson's book Naked Objects . Trygve Reenskaug, originator of MVC at PARC, has written that "MVC was conceived as a general solution to the problem of users controlling a large and complex data set." In their 1991 guide Inside Smalltalk , Carleton University computer science professors Wilf LaLonde and John Pugh described

SECTION 60

#1733086179226

4030-417: The traditional enterprise environment in which it has long been popular. The central component of the pattern. It is the application's dynamic data structure , independent of the user interface. It directly manages the data, logic and rules of the application. In Smalltalk-80, the design of a model type is left entirely to the programmer. With WebObjects, Rails, and Django, a model type typically represents

4095-653: The type system. Encapsulation of state is necessary for being able to enforce the invariants of the class. The behavior of a class or its instances is defined using methods . Methods are subroutines with the ability to operate on objects or classes. These operations may alter the state of an object or simply provide ways of accessing it. Many kinds of methods exist, but support for them varies across languages. Some types of methods are created and called by programmer code, while other special methods—such as constructors, destructors, and conversion operators—are created and called by compiler-generated code. A language may also allow

4160-539: The user, and a controller represents some way for the user to interact with a view . A view is also coupled to a model object, but the structure of that object is left up to the application programmer . The Smalltalk-80 environment also includes an "MVC Inspector", a development tool for viewing the structure of a given model, view, and controller side-by-side. In 1988, an article in The Journal of Object Technology (JOT) by two ex-PARC employees presented MVC as

4225-480: Was not graphically based - instead it drew its windows using special symbols stored in a character format. Further, it predated the use of a mouse to drive the interface. There have also been versions of Smalltalk/V for the Apple Macintosh and IBM OS/2 operating systems. A version for OS/2 was also available for VSE. In July 1995 ParcPlace and Digitalk merged, later renaming the company to ObjectShare, and in 1997

#225774