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:
- 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,
- can analyze a design problem and apply the OOP principles
effectively in the design and implementation of a nontrivial program
to solve the problem,
- know and understand fundamental architectural and design
patterns and their appropriate uses,
- can analyze a design problem and apply architectural and design
patterns effectively in the development of a software system to solve
the problem,
- 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,
- 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:
- Scala language syntax and semantics.
- Specification of abstract data types. Preconditions,
postconditions, and invariants.
- Understanding inheritance.
- Mechanisms for software reuse. Composition and inheritance.
- Implications of inheritance.
- Multiple inheritance.
- Understanding polymorphism. Forms of polymorphism.
- Reflection and introspection.
- Introduction to patterns.
- Design patterns.
- Architectural patterns.
- Designing with patterns.
- 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:
- You may discuss ideas for homework and
programming assignments with your classmates. However, you
cannot collaborate on writing the solution or the
program code. That is, you can talk about the problems and
ideas for solving them, but you cannot write things down with anyone
else. You are, of course, prohibited from copying or seeing another
student's written solution, and you are not allowed to show your work
to anyone else. Similarly, you are not allowed to copy text or
program code from a book or a page on the Web unless explicitly
authorized to do so by the instructor.
- You should accept help with care. If you work
too closely with another student, you might mislead yourself into
believing that you understand the concepts and techniques better than
you actually do. Don't forget that the instructor has office hours
and can probably give you hints or suggestions to get you started.
- You should give help with care. Do not help
anyone too much. When you have solved a problem, it is tempting to
just tell other students how you solved it. Instead, try to allow
them to come to the solution on their own. Maybe give them a hint to
help them get "over a hump." Remember that helping someone too much
will hurt them in the long term if they can't work through problems on
the exams by themselves. So avoid the temptation to do so. If you
can't help other students without giving away the whole solution,
direct them to see the instructor (who may or may not have a way to
"edge" them toward the solution).
- You are not obligated to help anyone. If you
feel uncomfortable helping another student for any reason, please
direct them to see the instructor.
- Except as described above, all work in this class is
covered by the School of Engineering's Honor Code statement on
plagiarism. It is plagiarism "to knowingly deceive, copy,
paraphrase, or otherwise misrepresent your work in a manner
inconsistent with professional conduct".
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
- All students are expected to study the relevant portions of the
textbook and handouts in conjunction with our class discussions (i.e.,
before coming to class). Explicit reading assignments will
not always be given.
- Approximately four homework assignments are planned for the
semester. Some of the assignments may be called "projects" and have
more credit than the "regular" assignments.
- Unless otherwise stated in the assignment description, an
assignment is to be carried out by each individual student without
inappropriate collaboration with others. See the section on
Professional Conduct.
- In preparing and submitting homework assignments make sure that:
- your name, the course number or name, the assignment identifier,
and individual exercises are clearly indicated in the content of the
file or on the paper. (If it is a group assignment, give the group
identifier and the names of all members.)
- for any handwritten portions, you write legibly on only one side
of the paper in a black or blue pen or dark pencil. Do NOT use red or
green ink! Some of the assignments may require that materials be
generated with a word processor and/or other tools.
- your pages are stapled together in the upper left corner when
viewed from the front.
- Several programs will be assigned during the semester. We will
use the multiparadigm programming language Scala, unless otherwise
directed.
For these exercises, you will need to submit appropriate design
documentation, a listing of your program code, and appropriate printed
output from your program testing. Make sure that you clearly label
the assignment as described above.
You will also be asked to submit your program source code in
electronic form using Blackboard.
- As appropriate, there may be a few in-class assignments or quizzes
that count toward the assignment/project portion of the grade.
- The programs and other assignments given to students enrolled in
the course for graduate credit will often differ from the ones given
to undergraduates. In particular, the assignments will often include
components that are required for graduate students but optional for
undergraduates.
- All students are expected to complete their homework assignments
by their due dates. If an assignment is submitted late, a
penalty of 10 percent of that assignment's grade will
be assessed for each day it is late. A homework
paper will not be accepted after graded papers have been
returned, after a solution has been distributed, or after the final
examination.
Examinations
- There will be three examinations, including the final. The final
examination is optional and can replace one of the other examinations.
- The examination portion of the semester grade will be calculated
by averaging the two best examination grades.
- The first exam will be given at mid-term and the second near
the end of the semester.
- The final examination will be given during the final
examination period. Please do not ask to take the final examination
earlier than the time set for the entire class.
- Each exam will cover all topics studied to that point.
- Each exam may consist of a combination of in-class and take-home
components.
- If you cannot take an examination at the scheduled time because
of an illness or other special circumstances, please notify
Prof. Cunningham in advance. Without advance notification, it may not
be possible to give a make-up examination.
UP to CSci 490-1/Engr 596-6 root document?
Copyright © 2010, H. Conrad Cunningham
Last modified: Thu 21 Jan 2010