CSci 490-1 (Special Topics) / Engr 596-6 (Special Projects)
Software Design and Scala Programming
Spring 2010
Syllabus


Locations

The spring semester 2010 class meets in 235 Weir Hall at 2:30 p.m. to 3:45 p.m. on Tuesdays and Thursdays.

The class is taught by Prof. Conrad Cunningham, whose office is in 203 Weir Hall. The official office hours for this class are 1:00 to 2:30 on Mondays and Wednesdays and by appointment at other times.

Prof. Cunningham's voice telephone number is (662) 915-5358 and fax number is (662) 915-5623. His WWW home page is http://www.cs.olemiss.edu/~hcc/ and his email address is cunningham AT cs DOT olemiss DOT edu.

The WWW home page for this class is http://www.cs.olemiss.edu/~hcc/softwareDesign/ .

The final examination for this class is scheduled for Thursday, 6 May, at 4:00 p.m.

Student Disabilities Services Statement

"It is the responsibility of any student with a disability who requests a reasonable accommodation to contact the Office of Disability Services (915-7128). Contact will then be made by that office through the student to the instructor of this class. The instructor will then be happy to work with the student so that a reasonable accommodation of any disability can be made."

Course Description

Official catalog description for CSci 490: Study of topics in computer science according to the interests of the instructor and students.

Description of a new course similar to this planned study: Study of advanced concepts and methods for the systematic, pattern-oriented design and implementation of software systems using contemporary languages and technologies. Topics of interest include software specification, software architecture, process and design patterns, and the appropriate use of advanced programming language capabilities.

Prerequisites

The catalog states the official prerequisites for CSci 490 as "CSci 211 and CSci 223".

Anyone who does not have a mature understanding of programming in an object-oriented language (e.g., Java or C++), of basic algorithms and data structures (e.g., sorting, searching, lists, stacks, queues, and binary trees), and of basic discrete mathematics (e.g., sets, relations, functions, graphs, and induction) should contact the instructor before enrolling in the course. Successful completion of CSci 111, 112, and 211 and Math 301 should give sufficient background.

Course Outcomes/Objectives

Upon successful completion of the course, the students:

  1. know and understand the advanced concepts and features of contemporary object-oriented programming (OOP) languages, including abstract data types, single and multiple inheritance, various forms of polymorphism, composition, and reflection,
  2. can analyze a design problem and apply the OOP principles effectively in the design and implementation of a nontrivial program to solve the problem,
  3. know and understand fundamental architectural and design patterns and their appropriate uses,
  4. can analyze a design problem and apply architectural and design patterns effectively in the development of a software system to solve the problem,
  5. can evaluate a design problem or an existing software system and identify abstractions that can make the software more robust with respect to change, flexible, and better supporting reuse of design or code,
  6. can apply knowledge of the Scala language to develop non-trivial programs.

Source Materials

Textbooks:
Martin Odersky, Lex Spoon, and Bill Venners. Programming in Scala: A Comprehensive Step-By-Step Guide, Artima, Inc., 2008.

Software:
Scala 2.7.7 distribution, available from http://www.scala-lang.org. This has been installed in the Adler Lab and on Turing.

Eclipse IDE users may want to use the Scala plugin for Eclipse. We may use other tools as the semester progresses.

Readings:
Various journal and conference articles, research reports, Web documents, and book excerpts as appropriate. For example, see the Scala website http://www.scala-lang.org.

Course Topics

The plan is to cover the following topics:

  1. Scala language syntax and semantics.
  2. Specification of abstract data types. Preconditions, postconditions, and invariants.
  3. Understanding inheritance.
  4. Mechanisms for software reuse. Composition and inheritance.
  5. Implications of inheritance.
  6. Multiple inheritance.
  7. Understanding polymorphism. Forms of polymorphism.
  8. Reflection and introspection.
  9. Introduction to patterns.
  10. Design patterns.
  11. Architectural patterns.
  12. Designing with patterns.
  13. Student presentations on patterns or tools.

Professional Conduct

As a student in CSci 490-1/Engr 596-6, you are expected to conduct yourself in a professional manner according to the Honor Code of the School of Engineering, the Information Technology Appropriate Use Policy, the M Book, and any other relevant policies.

Limited Collaboration Policy. Unless otherwise indicated, any homework assignment or programming exercise given in this class will be an individual assignment. The work you submit is to reflect the knowledge, understanding, and skill that you have attained as an individual. However, the instructor does want to encourage the development of a community of scholars who are actively engaged in discussion of the ideas related to this course. With this in mind, you are allowed to discuss solutions of the homework and programming problems with other students if done so according to the following guidelines:

Grading

The grading scale for this class is A [90..100], B [80..90), C [70..80), D [60..70), and F [0..60).

Sixty percent of the semester grade will come from the exam average and forty percent from the homework assignment/project average.

Assignments and Projects

Examinations


UP to CSci 490-1/Engr 596-6 root document?


Copyright © 2010, H. Conrad Cunningham
Last modified: Thu 21 Jan 2010