COMP1100: Introduction to Programming and Algorithms
(6 units) Group A
First Semester
Thirty one-hour lectures and
nine two-hour tutorial/laboratory sessions
Lecturer: Dr Peter Strazdins and Dr Henry Gardner
Assumed Prior Knowledge
Students are assumed to have achieved a level of knowledge of
mathematics comparable to at least ACT Advanced maths major or
NSW 2 unit maths or equivalent.
Syllabus
This course is an introduction to the basic principles of programming
from an object-oriented perspective. These principles are applied in
a study of straightforward algorithms for searching and sorting. It
provides a foundation for studies in computer science, information
systems and software engineering.
The following topics are covered: basic concepts of programming
(data types, assignment, control structures, the procedural
abstraction), basic concepts of object-oriented programming
(class, object, attributes, routines), library classes
for basic datatypes, straightforward algorithms for search and
searching, object-oriented methods (class inheritance, assertions on
routines, design by contract).
The course has a strong practical emphasis, with required attendance
at laboratory sessions.
Description
This course provides an introduction to the basic principles of
programming from an object-oriented perspective. Specifically, it
studies the following basic concepts of object-oriented programming
through their implementation in the Java programming language:
class (static) and object (dynamic),
class features (attributes and routines), basic attribute types
(booleans, integers, characters and reals), routine bodies (local
attributes, statements (assignment, conditional, loop, routine call)),
routine parameters, run-time structures (object store (heap),
activation stack), class inheritance.
The course uses the ``consumer before producer'' viewpoint, in which the
student programmer is a consumer of existing software (studying
exemplar programs, and using library classes) before
moving to be a producer of software components (first by extending and
modifying existing classes).
Rationale
This is the first course in the curriculum for the BInfTech and BSEng
degrees, and in the study of the computing discipline in the BSc
degree. It is based on the conviction that modern object-oriented
methods can deliver software systems that are extensible, reusable and
reliable, across a wide range of problem domains. The object-oriented
perspective, then, is taken from the very start.
It is the first of a sequence of courses (COMP1100, COMP1110, COMP2100)
with a primary focus on the object-oriented approach to the
implementation of software systems. The development of an
object-oriented approach to design and then to analysis is carried out
in subsequent courses.
Ideas
This course carries the main responsibility for the
introduction of the following ideas and skills:
- the basic concepts of an imperative programming language (data
structures and algorithms) and the execution of programs in that
language (run-time structures),
- the main concepts of an object-oriented programming language
and their implementation in that language,
- program maintenance and development using an editor
(Emacs) and compiler in the context of a conventional
operating system (Unix), and
- the systematic use of an agreed programming style (layout, name
convention, documentation).
This course shares the responsibility for the introduction of the
following ideas and skills:
- an appreciation of the main concepts in modern computing,
- data structures and algorithms, and
- the engineering of software systems (analysis, design,
implementation and testing).
Topics
The following topics will be covered:
- the basic concepts of imperative programming: data types,
basic instructions (assignment, routine call), basic control
structures (sequence, conditional, loop),
- the basic concepts of an object-oriented programming language
(class, object, attributes, routines (functions and procedures)),
- library classes representing basic data types
(booleans, integers, characters, floating point)
and aggregate data types (strings, arrays),
- the run-time structures of an OO language (object store (heap),
activation stack, current object, memory management),
- elements of algorithms (techniques using iteration,
loop invariants, simple solutions to search and sort problems),
- abstraction mechanisms (design by contract,
assertions) and extendibility
mechanisms (class inheritance, generic classes).
Objectives
Upon completion of this course, the student will be able to do the following.
- Describe the concepts of an object-oriented
programming language.
- Given the specification of a simple task, write a
program to perform that task.
- Explain the essentials of straightforward algorithms for
searching and sorting.
- In the context of a program involving several
programmer-written classes and several library classes:
- systematically determine program properties such as class
relationships (client diagram, inheritance diagram) and flow
properties (control flow diagram, data flow diagram),
- systematically determine the run-time behaviour of the
program, and
- write a narrative description of selected program
properties.
- Given an appropriate specification, modify the behaviour of a
given program within its design and architecture by such
techniques as
- changing relevant program parameters,
- modification of relevant routine bodies,
- class extension, and
- construction of new classes.
Technical Skills
Upon completion of the course the student will be able to use a
modern GUI-based computer system (Unix, KDE) to perform the
following tasks:
- find and utilize resources on the world-wide web using a modern
browser (Mozilla),
- read and send e-mail,
- selectively read web-based forums,
- construct directory subsystems to support laboratory and
assignment tasks,
- use a modern editor system to write simple text
documents,
- use a modern Integrated Developemnt Environment (DrJava) to write, compile and execute
programs.
The student will be able to use a command interface (shell) to perform
basic tasks.
Recommended Reading
- Jon Lewis and William Lofus.
The Object of Java.
Addison-Wesley, 4th edition, 2005.
- David D. Riley.
The Object of Java.
Addison-Wesley, 2002.
- Lesley Ann Robertson.
Simple Program Design.
Nelson Thomson Learning, 3rd edition, 2000.
Peter Strazdins
2005-03-10