CS 535 Object-Oriented Programming Spring Semester, 2003 Classes Part 1 |
||
---|---|---|
© 2003, All Rights Reserved, SDSU & Roger Whitney San Diego State University -- This page last updated 27-Jan-03 |
Procedural Paradigm
Programs consists of data and procedures
Procedures manipulate data passed to them
Programs organized by
Object-Oriented Paradigm
Program consists of objects interacting
Objects:
Software Development & Modeling
Each stage of software development is modeling
Modeling & Objects
Base system design on structure of problem
Objects are the bases of OO design
Example Problem
A refrigerator has a motor, a temperature sensor, a light and a door. The motor turns on and off primarily as prescribed by the temperature sensor. However, the motor stops when the door is opened. The motor restarts when the door is closed if the temperature is too high. The light is turned on when the door opens and is turned off when the door is closed.
What are some objects?
What are some relationships between objects?
What are some attributes of the objects?
What are some behaviors of the objects?
Two Views of Objects & Classes
Model View verses Language Syntax View
Object - Modeling Perspective
Abstraction in the domain with both
VisualWorks Tools & Windows
Smalltalk classes are created and viewed with a class browser. As we cover Smalltalk class syntax it will be useful for you to work with a browser. So we will first cover some aspects of the browser, then we will look at the language details. There is a chicken-and-egg problem here. To understand what the browser is showing, you need to know the language details. It helps to use the browser to understand the language details.
Launcher
The Launcher is the window (see below) in VisualWorks used to open (launch) tools. Don’t close the Launcher window.
Viewing a Class
In most languages, source code is stored in a flat file and viewed with a text editor. Smalltalk provides a browser to view and edit classes. We will look at some of the features of the system browser using the Point class as an example.
System Browser
The System Browser is used to view, manage and create code in VisualWorks. Open a System Browser by:
Selecting the “System” item of the “Browse” menu in the Launcher or
Clicking on the “System Browser” icon in the icon bar of the Launcher
We will look at the Point class. In the Find window enter Point and hit the return key. You should get something like:
Point Definition Partially Explained
Smalltalk.Core defineClass: #Point superclass: #{Core.ArithmeticValue} indexedType: #none private: false instanceVariableNames: 'x y ' classInstanceVariableNames: '' imports: '' category: 'Graphics-Geometry'
Smalltalk.Core
Using Point
Open a workspace by clicking on the workspace in the launcher.
In a workspace type:
| a b | a := Point "x:y: is a class method that creates a point object" x: 1 y: 1. b := Point x: 3 y: -1. c := a + b. Transcript show: a x printString; cr; show: b x printString. cr; show: c printString.Now select the all the text and execute it. You execute text by:
Right clicking in the workspace and selecting “Do it” in the popup menu or
Clicking on the Do it icon or
Control-d
Viewing Point Methods
If you click on a category of methods the browser shows all methods in that category. If you click on a method, the bottom pane will display the source code of the method. Instance methods are methods that you send to an instance of the class.
Using Part of a Class Name
In the find window you can type in only part of the class name. The browser will find all matches for the partial name. If there is only one match the browser will show that class. If there are multiple matches the browser will give a list to select from. When I give the name: Poi
I get the following list of classes:
Viewing Inherited Methods
The view of the Point class only shows the methods defined in the Point class. However Point class inherits methods from its parent class. We can view these methods by viewing the Parent classes or by setting the visibility for the browser. To set the visibility of the browser select the “Visibility” item in the “Method” menu of the browser. The bottom of the popup menu shows the inheritance hierarchy of the class. You can select how high in the hierarchy you are interested in. Below I select to show all methods in the classes Magnitude, ArithmeticValue and Point.
Now the name of Point methods will indicate if they are defined in a parent class.
Viewing the Class Hierarchy
If you select the “Hierarchy” tab in the browser you will see the inheritance hierarchy. Now by selecting a class you can look at the methods and instance variables defined in the class.
Viewing Methods that Use Instance Variables
There are several ways to find methods that access an instance variable defined in a class. The first method is to select the “Instance Variable” tab.
When you do this the third list pane from the left contains a list of the instance variables of the class, in this case x & y. When you select one of the variables the fourth pane lists all the methods in the current class that access that variable.
Viewing Methods in all classes that Read or Write Instance Variables
Select the “Instance Variables” item in the Class menu of the browser. The submenu will allow you select all methods that access an instance variable, read a variable or write to a variable. When you select an option you will be asked to select one variable from a list of instance variables. You will then get a list of methods in the class inheritance hierarchy that access, read or write to the variable.
Finding Methods
In the find field of the System browser you can type the name of a method. If the method is not a keyword method you will be asked if you wish to look for a method. If there is more than one implementation of the method you will be give a list to select from. This does not work well for non-keyword methods, as the browser will first try to find a match with a class first.
Often one is looking at a source code and comes across a method you would like to look up. For example go to the Point class and in the arithmetic category (or protocol) of methods find the abs method. The source of this method is:
abs "Answer a new Point whose x and y are the absolute values of the receiver's x and y." ^x abs @ y abs
What is this @ message? To find out more about it we would like to see its implementation. To see the implementations of the @ message select the “@” item in the “Implementators” item of the “Method” menu of the system browser. A new browser will open listing all the classes that implement @.
Note that right clicking in the forth list pane from the left will also produce the Method menu.
Viewing Class Methods
To view the class methods click on the class radio button in the browser.
Class Comments
When you select a class in the browser (without selecting a method category). The code pane at the bottom of the browser has five tabs. Select the “Comment” tab to view the class comment.
Code Critic The code pane at the bottom of the browser has a code critic tab. Select the types of problems want the code critic to examine, then click the “Check” button. The code critic will examine the currently selected code unit. That is you just select a category of classes, all classes in that category are checked. If you also select a class, only that class will be checked. If you also select a category of methods, only the methods in that category will be checked. By the way I do use the code critic to help me grade student assignments!
Defining a New Class
We will go through the steps of creating a new class called SimpleCircle.
Creating a Category
First we will create a category to keep our classes separate from the system classes.
Open a system browser by clicking on the "System Browser" icon in the Launcher. Select the “New...” menu item from the Category menu in the System Browser. (You could instead right-click in the category pane.)
You get a dialog window, in which to enter the new category.
Creating a Class in the new Category
Select the CS535 category in the left most pane. Now select the "New" item in "Class" menu of the browser.
In the lower pane you will the template:
Core defineClass: #NameOfClass
superclass: #{NameOfSuperclass}
indexedType: #none
private: false
instanceVariableNames: 'instVarName1 instVarName2'
classInstanceVariableNames: ''
imports: ''
category: 'CS535'
Edit the template to look like:
Core defineClass: #SimpleCircle superclass: #{Object} indexedType: #none private: false instanceVariableNames: 'origin radius ' classInstanceVariableNames: '' imports: '' category: 'Course-Examples'
Accept the changes by either:
Right-clicking in the lower pane and selecting the "Accept" item in the popup menu.
Or use control-s keyboard short cut
When you do this, you will see the class listed in one of the upper level panes.
Using the Class
The class SimpleCircle does not do much, but we can still create an instance. In a workspace evaluate the following code with "Print it". What happens? Evaluate the code with "Inspect it". What happens?
SimpleCircle new
Adding Methods
Now to add a method to the class. Make sure the class is selected in the browser. Select the "New..." item in the Protocol menu.
You will be prompted to enter a category name. Enter "accessing". Once this is done the lower pane will contain the template:
message selector and argument names "comment stating purpose of message" | temporary variable names | statements
Edit this code to be:
radius: aNumber radius := aNumber
Accept these changes. (Right-click and select “Accept” or use control-s). After accepting these changes select all the text in the lower pane and replace it with:
area ^radius * radius * Float pi
Accept these changes (right-click or control-s). Your class now has two methods: area and radius.
In a workspace evaluate the following code with "Print it". Is your result reasonable?
| circle | circle := SimpleCircle new. circle radius: 2.0. circle area
You may wish to save your image so you do not lose these changes. To save your image click on the save icon in the launcher . If you use a different name for the image, remember to start that image next time you run VisualWorks.
Versions of Methods
In the browser select the area method in the SimpleCircle class. Change it to be:
area ^radius + radius + Float pi
Save the changes and try running the above program to compute the area of a circle. You should get the wrong answer.
Now to browse the different versions of the method. With the area method selected in the method list pane (the right most list pane in the browser) select the “Browse Versions” item in the Method menu of the System Browser.
You will get a new window that lists the versions of the method. In this window you can view the source of each version. Select a version and use the “Replay” menu to replay a version, making it the current version. Select the “Show Conflicts” item in the “Show” menu then select a version of the method. In two panes at the bottom of the window you will see how the selected method differs from the current version of the method.
Copyright ©, All rights reserved.
2003 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA.
OpenContent license defines the copyright on this document.
Previous    visitors since 27-Jan-03    Next