(*
 *)
(*****************************************************************************
                  SLIDE Requirements Specification

    Written by;  Dan Stearns and CSC 590 students, Fall 1994

    Modification Record:
       10/17/94   Initial work on objects and operations 
       10/19/94   Changes from 10/19 CSC 590 class
       10/21/94   Added DEMO operation, student names, non-functional reqs 
       10/25/94   Fixed some of the links
       10/27/94   Major work on object model by UI group
       10/28/94   More work on object model by Stan and Dan
       10/31/94   More work on model by DB and UI groups

    Overview:
 *****************************************************************************)

(*  RSL OBJECT-ORIENTED SPECIFICATION *)


object ProjectLibrary has Project*;

object Project
  components:  name:string and header:Document and docNames:string*;
  description:
     (* A Project is a group of documents that has some meaning to
        the user.  For example, all of the code, data and documents
        related to a particular software development project.    *);
  operations: displayProject, editProject, loadProject, saveProject;
end Project; 

object Document
  components: name:string
              and header:string
              and slobNames:string*;
  description:
    (*  A document is a collection of SLOBs packaged together by
        the user.  The user creates and manages a document - SLIDE
        tools, except for document managers, are unaware of documents *);
  operations: annotateLinkSlob, displayDocument, linkSlob, loadDocument, saveDocument;
end Document;

object SLOB
  components:  name:string;
  description:
     (*  SLOBs are objects that retain their state between SLIDE sessions 
          Steve France  and  Todd McKinnon  Theses *);
   operations: loadSlob, saveSlob;
end SLOB;

(*  End of Database World *)

object Graphic inherits from SLOB
  components: fileName:string and graphicType;
  description: ;
  operations: viewGraphic;
end Graphic;

object graphicType;

object Drawing inherits from Graphic
  components: ;
  description: ;
end Drawing;

object Animation inherits from Graphic
  components: ;
  description: ;
end Animation;

object Video inherits from Animation
  components: ;
  description: ;
  operations: fastForward, pauseVideo, playVideo, rewindVideo, stepFrame;
end Video;

object Sound inherits from SLOB
  components: ;
  description: 
     (* An audio object that can be played by Mosaic *);
  operations: playSound;
end Sound;

object Text inherits from SLOB
  components: contents:string;
  description:
     (*  An object that can be represented on an ASCII screen *);
  operations:  countWords, displayText;
end Text;


(*  Specific Requirements objects *)
object DFD is Drawing;
object RequirementsSpec has DFD or RSLDoc:Document;
object RequirementsTrace inherits from Report;

(****  Software Design objects ****)
object OMN inherits from Drawing
  components: ;
  description: ;
end OMN;

object UI inherits from Graphic;
object DemoGeneratedUI inherits from UI;


(****  Code objects ****)
object Class is CPlusPlusCode;
object CPlusPlusProgram;
object Header is CPlusPlusCode;

object Code inherits from Text
  components: ;
  description: 
      (*  We all know what code is *) ;
  operations: editCode;
end Code;

object Program has Code* and makefile:Text;

object VisualProgram is Drawing;

(****  Run-time Debugging Objects ****)
object DebugDisplay has Heap and Stack and SymbolTable;
object Heap;
object Stack;
object SymbolTable;

(****  Test objects ****)
object CoveragePercent is number;
object Results;
object TestSet;   
object VarianceReport inherits from Report;

(****  Metrics and Project Management objects ****)
object Metrics inherits from Report has KDSI;
object KDSI is number;

(****  Primitive Objects ****)
object CPlusPlusCode;

(* A generic name for anything in the SLIDE User Interface *)
object Display;

(* A report is a formatted text string that conveys information to the user *)
object Report inherits from Text;


(*  RSL OPERATION-ORIENTED SPECIFICATION *)

(****  Software Requirements and Design Operations ****)

(*  The user can use DEMO to create a User Interface *)
(*   Sufie Seifoddini Thesis  *)
op DesignUIbyDemo () -> (u:DemoGeneratedUI);

op EditDFD (d:DFD) -> (d':DFD);
op TraceRequirements (r:RequirementsSpec, r':RequirementsSpec) -> (rp:Report);

(****  Programming Operations ****)
op BrowseProgram (p:Program) -> (r':RequirementsSpec, d':OMN, p':Program);
op EditProgram (p:Program) -> (p':Program);

(*  The user can create a OMN diagram from C++ source *)
(*  Jian Zheng Thesis  *)
op GenerateRumbaughObjectModel (p:Program) -> (d:OMN);

op InterpretProgram (p:Program) -> (r:Results);

(****  Testing Operations ****)
op RunTest (p:Program) -> (r:Results);
op GenerateMetrics (p:Program) -> (m:Metrics);
op RunCoverage inherits from RunTest
    (p:Program, ts:TestSet) -> (r:Results,c:CoveragePercent);
op RunRegression inherits from RunTest 
    (p:Program, ts:TestSet, r:Results) -> (r':Results, v:VarianceReport);

(**** Utility Operations ****)
(* The user can browse persistent SLIDE objects, independently of other tools *)
op BrowseSLOBs (p:SLOB*) -> (d:Display);

(* 
*)