Lab 1: Object-Oriented Programming Refresher allows students to (re)-familiarize themselves with some of the fundamental aspects of the object-oriented programming paradigm. We will also learn how to test Java classes, visualize heap-resident Java objects, and perform input and output.
Lab 2: Empirical Evaluation of the Performance of Iteration and Recursion enables student to explore the implementation of recursive and iterative algorithms for calculating the numbers in the Fibonacci sequence and to understand the bit depths that are associated with the primitive types in the Java programming language.
Lab 3: Understanding Inheritance and Polymorphism allows students to investigate two fundamental concepts of the object-oriented programming paradigm. In particular, students will explore how to produce inheritance hierarchies and to create polymorphism in the Java programming language.
Lab 4: Empirical Analysis of Sorting Algorithms enables students to familiarize themselves with the empirical analysis of algorithms. Specifically, to investigate the time overhead of five sorting algorithms on different data sets. Also, to continue to learn how to use the Profiler application developed by Mike Clark to perform an empirical analysis of a software system.
Lab 5: Experimental Evaluation of Compression Algorithms allows students to continue to familiarize themselves with the measurement of time and space overhead. In particular, to examine techniques that can be used to compress archives of Java class files and directories of files. To refine your ability to conduct experiments and analyze data sets. Finally, to learn how to calculate the percent reduction (or, percent change) in a measured variable.
Lab 6: Using the Stack Abstract Data Type will allow students to familiarize themselves with the usage of the Stack abstract data type to implement a primitive stack-based interpreter and language. Students will also have the opportunity to write test cases for the Stack abstract data type.