- statefull abstraction