During this lab session:
This activity helps students develop the following skills, values and attitudes: ability to analyze and synthesize, capacity for identifying and solving problems, and efficient use of computer systems.
The lab activities can be developed individually or in pairs.
The lab report must be developed individually.
Create a folder called adapter
. Inside this folder, create three files called: simple_queue.rb
, queue_adapter.rb
, and test_adapter.rb
.
All three Ruby source files must start with a comment containing the lab's title, date, and the authors' personal information. For example:
# Lab 6: Adapter Pattern # Date: 28-Sep-2011 # Authors: # 456654 Anthony Stark # 1160611 Thursday Rubinstein
The content of the file simple_queue.rb
is as follows:
# File: simple_queue.rb # IMPORTANT: Do not modify the following class in any way! class SimpleQueue def initialize @info =[] end def insert(x) @info.push(x) self end def remove if empty? raise "Can't remove if queue is empty" else @info.shift end end def empty? @info.empty? end def size @info.size end def inspect @info.inspect end end
The SimpleQueue
class contains a First-In First-Out (FIFO) data structure that implements the following methods:
Method Signature | Description |
---|---|
insert(x)
|
Inserts x at the back of this queue. Returns this queue. |
remove
|
Removes and returns the element at the front of this queue. Raises an exception if this queue happens to be empty. |
empty?
|
Returns true if this queue is empty, otherwise returns false .
|
size
|
Returns the number of elements currently stored in this queue. |
Write an adapter class called QueueAdapter
(place it in the file called queue_adapter.rb
) that makes a SimpleQueue
instance (as implemented above) behave like a Last-In First-Out (LIFO) stack with the following interface:
Method Signature | Description |
---|---|
initialize(q)
|
Initializes a new stack, using q as the adaptee. |
push(x)
|
Inserts x at the top of this stack. Returns this stack. |
pop
|
Returns nil if this stack is empty, otherwise removes and returns its top element.
|
peek
|
Returns nil if this stack is empty, otherwise returns its top element without removing it. |
empty?
|
Returns true if this stack is empty, otherwise returns false.
|
size
|
Returns the number of elements currently stored in this stack. |
QueueAdapter
class. Place the test class in the test_adapter.rb
source file.
# File: test_adapter.rb require 'test/unit' require 'simple_queue' require 'queue_adapter' class QueueAdapterTest < Test::Unit::TestCase def test_queue_adapter q = SimpleQueue.new qa = QueueAdapter.new(q) assert q.empty? assert qa.empty? assert_nil qa.pop qa.push("Foo") assert_equal "Foo", qa.peek assert !q.empty? assert !qa.empty? qa.push("Bar") assert_equal "Bar", qa.peek qa.push("Baz").push("Quux") assert_equal 4, q.size assert_equal 4, qa.size assert_equal "Quux", qa.peek assert_equal "Quux", qa.pop assert_equal "Baz", qa.peek assert_equal "Baz", qa.pop assert_equal "Bar", qa.peek assert_equal "Bar", qa.pop assert_equal "Foo", qa.peek qa.push("Goo") assert_equal "Goo", qa.peek assert_equal "Goo", qa.pop assert_equal "Foo", qa.peek assert_equal 1, qa.size assert_equal "Foo", qa.pop assert_nil qa.peek assert_nil qa.pop assert q.empty? assert qa.empty? assert_equal 0, q.size assert_equal 0, qa.size end end
To hand in your individual lab work, follow these instructions.
lab6_report_A0MMMMMMM.txt
, where A0MMMMMMM
is your student ID. From your AsciiDoc source, generate the corresponding HTML file. That file should be called lab6_report_A0MMMMMMM.html
. Place these two files in the adapter
directory.
adapter
directory. Call this file adapter.tgz
. From a terminal, you can use the following command to create this file (make sure to run it at the same level where the adapter
folder resides):
tar czf adapter.tgz adapter
Due date is Tuesday, October 4.
This activity will be evaluated using the following criteria:
50% | Implementation of functional requirements. |
---|---|
50% | Lab report. |
DA | The program and/or report was plagiarized. |