Description:
Introduction to the theoretical and practical methods of object-oriented
software construction. Topics include single and multiple inheritance,
type hierarchies, polymorphism, operator overloading, object
persistence, class library design, generic classes, and design
by contract. This course is a detailed introduction to the methodology
of object-oriented software construction, one of the major areas
of software engineering practice and research. An object-oriented
program is based on classes. Instances of classes, called objects,
are created as the program runs and interact through message
passing. Messages that are acceptable to an object are defined
by the interface of the class. Use of interfaces promotes the
reuse of reliable code and can make it easier to carry out maintenance
and extension. The course will introduce the theoretical concepts
of object-oriented programming and design, and present examples
using the object-oriented programming language Eiffel. Eiffel
will be compared to other OO languages, like C++, Java, Smalltalk,
Python, and Delphi. The course will cover more OO techniques
in far more detail than in previous courses, and the students
will apply these techniques in a large group design and programming
project.
Topics to be covered in the course will include the following:
- Abstract data types as a basis for information hiding and
as a theory for OO software construction.
- Other software engineering principles such as the open-closed
principle and the single choice principle.
- Information hiding; secret vs. public vs. selectively available
information.
- Single inheritance: subtyping; substitutability; subcontracting.
- Feature adaptation: changing export status; renaming methods;
ambiguity in inheritance; overriding; redefinition of behaviour;
breaking the subtype relationship.
- Design by contract: preconditions, postconditions, class
invariants, and their use in designing software systems. Debugging
using contracts. Testing using contracts.
- Documenting OO programs; automatic documentation tools.
- Exception handling.
- Generic (parameterized) classes as a mechanism for code
reuse.
- Polymorphism, dynamic binding, and static binding.
- Type checking: static vs. dynamic checking.
- Principles for inheritance: inheritance vs. use.
- Multiple inheritance for class library design. Repeated
inheritance.
- Persistence. Linking OO programs with a database.
- Class interfaces: partial implementations vs. full implementations.
Prerequisites: general prerequisites Degree Credit Exclusion:
COSC3010A 3.0; AK/COSC3650 3.0
|