Objects in Context
| Grant Braught | Tim Wahls |
This page collects and summarizes our work on laboratory assignments that require students to implement and test classes that define objets that are used in the context of a larger application. Work on this project has been funded in part by award DUE-0511264 through the NSF CCLI-A&I program.
The labs here were inspired by the realization that if the majority of software were no more complex than the programs we have traditionally asked our introductory students to create, then object oriented programming would never have been invented. Similarly, if the relatively simple objects they are asked to create are used only in isolation then there is no significant benefit to be gained by using an OO approach. These two facts often frustrate students in an Objects First course who perceive the OO approach as obtuse and unnecessarily complex for achieving the seemingly simple things that they are being asked to do.
Each of the labs below is structured such that students are asked to implement one or more fully specified classes that provide objects that are used by a larger application. These labs do not ask students to design applications or classes, but instead to code classes to meet a specification and to test that they do. The classes that students are asked to implement are cleanly separated from the remainder of the application. Students are given only stubs for the classes that they must implement. The remainder of the application is provided by scaffolding code that relies on the class(es) implemented by the student for key pieces of its functionality. The students are neither required nor expected to examine or understand any of the scaffolding code. The clean separation between the classes written by the students and the scaffolding code allows students to concentrate on programming "in the small." The hope then is that by seeing the types of things that make good objects and how doing things in an OO way allows separate pieces to be plugged together to create applications, students will develop intuition about programming "in the large." These ideas can then be explicitly addressed and reinforced in subsequent courses.
This approach is very flexible and can be tailored to address programming topics throughout an "Objects First" introductory course. The labs provided below were designed to address specific topics from Part I (Chapters 1-6) in the Third Edition of the BlueJ text. In addition, these labs were designed to be used in conjunction with the Web-CAT automatic grading system. However, we anticipate that the barriers to using these lab assignments in conjunction with other texts, without BlueJ and/or without Web-CAT support should be low.
Braught, G. & Wahls, T. (2008). Teaching Objects in Context. Journal of Computing Sciences in Colleges, 23(5), 101-109.
The Pong Lab, G. Braught. Nifty Assignments Panel at SIGCSE 2003. Reno, NV, February 19-23, 2003.
| All of our laboratory assignments may be freely adopted and/or adapted under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License. |
|
ArrayList); iteration. Reinforces material from Chapter 4 in the BlueJ text. Also touches on the idea of program interpretation. We have also created a DarwinTournament application that can be used to run a Darwin's World steel cage match that pits the student's creatures against each other in a battle of survival of the fittest. Note: This lab is an adaptation of Nick Parlante's Darwin's World assignment that appears in the Nifty Assignments Repository (1999).
ArrayList); iteration; searching. Reinforces material from Chapter 4 in the BlueJ text.
ArrayList); primitive collections (arrays); iteration; searching. Reinforces material from Chapter 4 in the BlueJ text. Also touches on the ideas of genetic algorithms and experimentation with simulations.
We would like to thank Louis Ziantz for his contributions to discussions and implementation of several of the lab assignments.
We would also like to thank Stephen Edwards, from Virginia Tech, for supporting our integration of Test-Driven-Development by hosting our courses on his Web-CAT server.
We would also like to thank all of the students who helped by completing these assignments and providing both complaints and compliments that have helped us to improve them.