﻿<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="../../webpages/courses.xsl" ?>
<!--
/////////////////////////////////////////////////////////////////////////////
//  DesignNote1.xml - Synopsis of a Design Principle                       //
//                                                                         //
//  Jim Fawcett, CST 2-187, Syracuse University, jfawcett@twcny.rr.com     //
/////////////////////////////////////////////////////////////////////////////
-->

<courses name="Fawcett">

  <btitle>Design Note #0</btitle>
  <theme src="../../webpages/CodeTheme.css" />

  <visible>
  <title>Design Note #0 - KISS Principle</title>
  <revised>32 January 2007</revised>
  
  <hilight>
    <ifile title="Home">../../webpages/FawcettHome.xml</ifile>&#32;
    <ifile title="Courses">../../Courses.xml</ifile>&#32;
    <ifile title="Code">../../Code.xml</ifile>&#32;
    <ifile title="Books">../../Books.xml</ifile>&#32;
    <ilink title="Handouts">www.ecs.syr.edu/faculty/fawcett/handouts</ilink>&#32;
    <ifile title="Research">../../research.xml</ifile>&#32;
    <ifile title="SWDev">../../swdev.xml</ifile>&#32;
    <ifile title="WebDev">../../webdev.xml</ifile>&#32;
    <ifile title="News">../../news.xml</ifile>&#32;
    <ifile title="OtherLinks">../../OtherLinks.xml</ifile>&#32;
    <ifile title="SiteDesign">../../SiteDesign.xml</ifile>
  </hilight>

  <hilight>
    <ifile title="CSE681-SWMA">../../CSE681/CSE681Code.xml</ifile>&#32;
    <ifile title="CSE687-OOD">../../CSE687/CSE687Code.xml</ifile>&#32;
    <ifile title="CSE691-IP">../../CSE691/CSE691Code.xml</ifile>&#32;
    <ifile title="CSE775-DO">../../CSE775/CSE775Code.xml</ifile>&#32;
    <ifile title="CSE776-DP">../../CSE776/CSE776Code.xml</ifile>&#32;
    <ifile title="CSE778-AWP">../../CSE778/CSE778Code.xml</ifile>&#32;
    <ifile title="CSE784-SWS">../../CSE784/CSE784Code.xml</ifile>
  </hilight>
  
  <hilight>
    <ifile title="SG - Design">StudyGuideDesign.xml</ifile>&#32;
  </hilight>
  
  <br/>
  <section title="Prime Directives:">
    <block>
      <html><u>Keep It Small and Simple (KISS)</u></html>  ==> need to partition into modules.
      <ind>Divide and Conquer</ind>
      <p/>
      Strive for <html><u>High Cohesiveness</u></html> in each module ==> focus on a single activity.
      <ind>Public processing model should be simple even though there may be complex internal details.</ind>
      <p/>
      Strive for <html><u>loose coupling</u></html> ==> refer to abstractions, not implementations.
      <ind>Use Interfaces to support plug-in instances of any class derived from the interface.</ind>
    </block>
  </section>
  
  <section title="Examples:">
    <olist>
      <litem>
        The <ifile title="Tokenizer module">../code/Project1HelpS06/Tokenizer.h</ifile>, in 
        <ifile title="Parser folder">../code/Parser/</ifile> collects tokens 
        for analysis of grammatical constructs found in a source code file.
        <ind>
           It supports cohesiveness by hiding complex character manipulations in a 
           private helper functions.
        </ind>
      </litem>
      <litem>
        The <ifile title="Parser module">../code/Parser/Parser.h</ifile>, in
        <ifile title="Parser folder">../code/Parser/</ifile> illustrates how binding
        to interfaces, Rule and Action, allows any instance of a class, derived from the interface, Rule for example,
        to be plugged into an instance of Parser, modifying the way it carries out its work.
      </litem>
    </olist>
  </section>
  
  </visible>
</courses>
