an oop question

Greg Ewing greg.ewing at canterbury.ac.nz
Wed Nov 2 02:10:05 EDT 2022


On 2/11/22 9:54 am, Julieta Shem wrote:
> But we've left behind a more basic requirement --- the Stack
> class wishes for all the methods already written in some class called
> Pair,

Is that *really* what you want, though?

To my way of thinking, a Stack and a Pair are quite different
data structures, each having their own characteristic operations.

Things I want to be able to do with a Stack:
- Create an empty stack
- Push an item onto the top of the stack
- Pop an item off the top of the stack

Things I want to be able to do with a Pair:
- Create a pair containing two given objects
- Get the first item
- Get the second item

I don't see any overlap between these at the conceptual level.
Possibly I might want to use Pairs as part of the *implementation*
of a stack, but that doesn't mean that any Pair methods should
appear as Stack methods.

Here's how I might do this in a functional style using Python:

class Pair:
     def __init__(self, first, second):
         self._first = first
         self._second = second
     def first(self):
         return self._first
     def second(self):
         return self._second

class Stack:
     def __init__(self):
         self._data = None
     def push(self, item):
         result = Stack()
         result._data = Pair(item, self._data)
         return result
     def pop(self):
         rest = Stack()
         rest._data = self._data.second()
         return self._data.first(), rest

Note that neither Stack nor Pair inherits from the other.

-- 
Greg



More information about the Python-list mailing list