CompSci 308
Spring 2015
Software Design and Implementation

SLogo

Logo is the name for a philosophy of education and a continually evolving family of programming languages that aid in its realization. — Harold Abelson

Logo is a computer programming language designed to teach programming to children. It is a user-friendly, interpreted language, designed with a "low floor, high ceiling"; in other words, the designers of Logo intended for the language to allow novice programmers to get started quickly writing programs but also wanted the language to be powerful and extensive for more advanced users. In addition to being used to build such sophisticated programs as a compiler, Logo has also caused people to think differently about how to teach geometry and social science to programming.

In the early days, Logo was used to control a simple physical robot, called a turtle. Users could issue commands such as FORWARD 50 to make the turtle advance 50 steps, or RIGHT 90 to make it turn ninety degrees. The turtle robot carried a pen, so users could produce drawings on paper, such as the one shown to the left, by writing programs on the computer that were downloaded to the robot. The turtle, which has since moved on to the computer screen, has become one of the most familiar and important parts of the Logo language, so much so, that most modern languages and platforms have an implementation of it. For the complete history see here.

As a dialect of Lisp, Logo is a powerful language. Although most of its complexity (and power) come from other elements than those that control the turtle, it is still amazing how expressive and compact it can be. For this project you will implement a much simplified version of Logo. "Simple Logo", or SLogo, should retain the features most commonly used by beginning users so that it can be used to provide an introduction to computer programming.

Specifications

In teams, provide an integrated development environment, IDE, that supports users to write SLogo programs. Unlike IDEs such as Eclipse, which are designed around files that represent a complete program, SLogo users should be able to command the turtle interactively on a per expression basis. This is the read-eval-print loop used in environments for interpreted languages such as Python, Lisp, and Smalltalk (even the command-line shell could be considered such an environment). Thus your IDE should focus on helping users to experiment with and manage expressions, building up complex expressions from previously entered ones and keeping the visual representation of the turtle appropriately updated.

At its heart, the "back end" consists of a basic turtle graphics package and support for understanding a set of commands to control the turtle and its pen using basic programming constructs such as conditionals, loops, and procedures. The "front end", written using JavaFX, should, at the very least, include a command window and a turtle graphics window as well as other tools for supporting experimenting with commands. These two sides combine to receive, parse, and execute commands from the user, reporting any errors it encounters along the way (and not crashing!) or displaying the results of the commands in the graphics window.

SLogo differs slightly from the original Logo language to make it easier to parse (here are some example programs with this simplified syntax).

Design Goals

This assignment provides a context to begin thinking about designing an API, an overall interface that allows the program's two sides freedom to implement without regard to the internal workings of the other sub-team's code.
  1. Developing a GUI program. Many GUI-based programs are naturally divided between a Model, back-end classes, and a View, front-end User Interface classes. As such, how information is communicated between these two parts of the program must be clearly articulated.
  2. Developing a programmer's interface. An application programming interface, or API, is the public classes and methods available to other programmers. In general, APIs are minimal but complete; powerful; consistent; hard to misuse; easy to extend; and lead others to write readable code well designed code.

Working as a Team

Your team will be divided into two sub-groups, one working on the Model and one on the View. After the initial planning meetings, hopefully there will be less need for the entire team to meet together. That being said, the first sign that a project is going to fail is that meetings stop getting full attendance. You are expected to attend all team meetings, on time, and to participate in the discussion. If you are not going to be able to attend, you need to let people know in advance and work out some appropriate way to make up attendance (e.g. meet at some other time). Finally, each meeting should end with clear action items for each member of the team.

As good as your team may be, the project only moves forward when individuals (or pair programmers) sit down and get the work done. Thus, every week, you are required to develop code that implements new features. Committing broken code that does not work does not count (this includes both code that does not compile and code that has such severe bugs it doesn't do anything). Committing code late or that only works on your local system, but is incompatible with everyone else on the team does not count.

If someone on your team is not getting their work done or not attending meetings, please let the course staff know as quickly as possible. Even if it has just happened once or twice, it is better to deal with the situation early rather than having a big disaster at the end. Likewise, to make a project a success, it is often the case that someone needs to go above and beyond the call of duty to help. Sometimes you may have do another person's part because they are suddenly ill or spend several hours helping someone on another team solve a particularly nasty bug. If this is the case, definitely make sure you get credit, by having the person you helped let the course staff know of your heroism.

Stages

In order to encourage you to think about code flexibility, this project will be released in stages.

Resources

For background and more complete information about logo consult these links:

Or view these videos

Here is an in browser Logo environment and here is another.