\documentclass[10pt,oneside]{memoir}
\usepackage{soul}
\usepackage[xetex]{hyperref}
\usepackage[table,usenames]{xcolor}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{xltxtra}
\usepackage{fontspec}
\usepackage{textcomp}
\usepackage{enumerate}
\usepackage{enumitem}

\usepackage[margin=0.85in]{geometry}
\usepackage{hyperref}
\usepackage{listings}
\usepackage{makecell}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{cancel}
% compact itemized and then enumerated
\setlist{leftmargin=*,
  noitemsep,
  topsep=5pt,
  parsep=0pt,
  partopsep=0pt,
}

\setlist[enumerate]{leftmargin=*,
  itemsep=2pt,
  topsep=0pt,
  parsep=0pt,
  partopsep=0pt,
}

\usepackage{pstricks}

% ----- Fonts -----
\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{Gentium Book Basic}
\setmonofont{Comic Code}
\setsansfont{Arial}
% ----- Fonts -----

\newfontfamily\lstlistingfamily{Comic Code}
\lstset{
  basicstyle=\lstlistingfamily,
}

\setstocksize{11in}{8.5in}
\settrimmedsize{11in}{8.5in}{*}
\setlrmarginsandblock{0.75in}{0.75in}{*}
\setulmarginsandblock{0.75in}{0.75in}{*}
%\setlength{\topskip}{1.6\topskip}
\checkandfixthelayout
\sloppybottom

% classname
\newcommand\className{Computer Science III}
\newcommand\classNumber{CIS~205}
\newcommand\classFullName{\classNumber~\className}
\newcommand\semester{Spring 2024}
\newcommand\semesterNumber{202309}
% /classname

\begin{document}
\section*{Mapping}

\begin{tabular}{|c|c|l|}\hline
  1&&\makecell{Implied. Part of every programming project.}\\\hline
  2&\textbf{OOP}&\makecell{Part of every multi-class programming project.}\\\hline
  3&\textbf{OOP}&\makecell{\lstinline{Pizza} or similar.}\\\hline
  4&\textbf{OOP}&\makecell{Review -- recursive linked-list, BST, heap.}\\\hline
  5&\textbf{OOP}&\makecell{\lstinline{BST<T>}.}\\\hline
  6&\textbf{Data Structures}&\makecell{}\\\hline
  7&&\makecell{Implied. Heapsort, Quicksort as recursive methods.}\\\hline
  8&\textbf{Data Structures}&\makecell{BST runtimes. Structure overhead.}\\\hline
  9&&\makecell{Implied. Or part of \textbf{Data Structures}.}\\\hline
  10&\textbf{OOP}&\makecell{Higher-level of abstraction. Programmed.}\\\hline
  11&\textbf{OOP}&\makecell{}\\\hline
  12&\textbf{OOP}&\makecell{Included in \textbf{Theory}, too.}\\\hline
  13&\textbf{Data Structures}&\makecell{Overhead. Reading structured files.}\\\hline
  14&\textbf{Tools}&\makecell{Teach \lstinline{JUnit},
                     \lstinline{diff}, etc.}\\\hline
  15&\textbf{Tools}&\makecell{Teach \lstinline{git},
                     \lstinline{gradle}}\\\hline
  16&&\makecell{}\\\hline
\end{tabular}

\section*{Student Learning Outcomes}
\lstinline{Computer Science III} deepens and broadens students
\emph{knowledge} and \emph{skills} through hands-on development of
increasingly complex computer programs. Upon finishing this course,
students should be able to:

\hspace{0.5\baselineskip}

\begin{enumerate}
\item \textbf{OOP}. \emph{Implement} computer programs to solve
  increasingly complex problems, using
  object-oriented programming techniques, \emph{i.e.}
  \textbf{polymorphism}/\textbf{inheritance}/\textbf{interfaces},
  \textbf{encapsulation}, and data \textbf{abstraction}. (Synthesize)

\item \textbf{Data Structures}. \emph{Use} sequential, singly-linked,
  and \textbf{multiply-linked} data structures, along with appropriate
  iterative and \textbf{recursive} methods to implement efficient
  programmed solutions. (Synthesize)

\item \textbf{Tools}. \emph{Use} modern software engineering
  tools/techniques, \emph{i.e.} \textbf{build tools}, \textbf{version
    control}, \textbf{iterative development}, and \textbf{automated
    testing}, to improve their own programming efficacy. (Use)

\item \textbf{Theory}. \emph{Apply} algorithm analysis and logic tools
  to discuss the \emph{correctness} and \emph{resource usage} of
  computer programs. (Use)
\end{enumerate}

\paragraph{Note:} It would be a \emph{very} good idea to review this section
of the syllabus before exams (especially the final). You can also use
it when filling out course evaluations to review what the class taught
and what it was expected to teach.

\subsection*{The Parts}

\begin{enumerate}
\item \emph{Implement} classes [\textbf{OOP}, \textbf{Data
    Structures}]
  \begin{enumerate}
  \item Stand-alone classes.
  \item Implement classes against an \lstinline{interface}
    (\lstinline{implements}).
  \item Implement a \emph{hierarchy} of classes (\lstinline{extends}).
  \item Implement containers (lists, trees) of user-defined classes.
  \item Implement \emph{generic} containers
    (\lstinline{MyList<SomeType>}).
  \end{enumerate}
\item \emph{Read}/\emph{write} \textbf{structured} text
  files. [\textbf{Data Structures}]
\item \emph{Trace} and \emph{apply} recursion. [\textbf{OOP},
  \textbf{Theory}]
  \begin{enumerate}
  \item Trace recursive code like \lstinline{fibonacci}.
  \item Trace A/B recursion like \lstinline{isEven}/\lstinline{isOdd}.
  \item Implement a fully \emph{recursive} linked-list
  \item Implement binary search tree and heap.
  \item Implement/trace quicksort and heapsort.
  \end{enumerate}
\item \emph{Apply} higher levels of abstraction to coding and data
  structures. [\textbf{OOP}, \textbf{Data Structures}]
  \begin{enumerate}
  \item Identify/apply \emph{simple} design patterns: \emph{factory},
    \emph{decorator}.
  \item Define and apply \emph{abstract data types}:

    Polymorphism

    Stack -- including calling stack
  \end{enumerate}
\item \textbf{Understand} and \textbf{diagram} internal data
  representation [\textbf{Data Structures}, \textbf{Theory}]
  \begin{enumerate}
  \item Describe what a \textbf{bit} and \textbf{byte} are.
  \item Describe how \lstinline{char} and \lstinline{char[]} are
    stored.
  \item Explain (and diagram) how an array, a linked-list, and a
    binary search tree \emph{containing} the same type
    differ. Calculate the memory overhead.
  \item Explain the differences in \emph{running time} for arrays,
    linked-lists, and BST containing the same data.
  \end{enumerate}
\item \emph{Document} every computer program turned in. [\textbf{OOP},
  \textbf{Tools}]
  \begin{enumerate}
  \item In-line documentation: header comments, in-line comments.
  \item \lstinline{README}: \textbf{Testing Plan}, problem statement.
  \end{enumerate}
\item \emph{Use} \lstinline{git}, \lstinline{gradle},
  \lstinline{JUnit}. [\textbf{Tools}]
\end{enumerate}

\subsection*{Computer Science Program Student Learning Objectives}

The Computer Science department has adopted five \textbf{program}
learning objectives for students completing any undergraduate major in
the department [See the Departmental
\href{http://cs.potsdam.edu}{website} for the complete list.]

\lstinline{Computer Science III} addresses PSLO \#2 and \#3.

\noindent
Students graduating from the Computer Science department at SUNY
Potsdam are expected to be able to

\begin{quote}
  2. \emph{Solve problems through analysis and implementation of
    tested programs that use data structures and algorithms.}

  \textbf{OOP} and \textbf{Data Structures} are focused on problem
  solving through program implementation. \textbf{Tools} is about
  \emph{supporting} the programmer in doing this.

  3. \emph{Program the multiple layers (e.g., compiler, operating
  system, network, assembly language) between a high-level programming
  language and the underlying hardware.}

  \textbf{OOP} is all about layers of abstraction and
  \lstinline{Theory} includes bit-level logic and encoding.
\end{quote}

\end{document}
