55:182/22C:182

Software Engineering Languages and Tools

Spring, 2005

Instructor:

Professor Jon Kuhl

Department of Electrical and Computer Engineering,

The University of Iowa

Office: 4016A SC

Phone: (319) 335-5958

e-mail: kuhl@engineering.uiowa.edu

Meeting Time and Place:

3:30-4:20 p.m. M.W.F., 2229 SC

Course Summary:

Object-oriented and component-based software represents the maturation of software engineering practice to enable the effective reuse of software artifacts, amortization of development effort over multiple projects, and rapid development of complex systems from standard frameworks and building blocks. The concept of a software component extends the traditional notions of objects and modules. A software component is an independently deployable unit of functionality, with standard interfaces, that can be composed with other components to build more complex systems. In a sense, a software component is analogous to an integrated circuit chip in a hardware design.

Object oriented design is based upon three fundamental concepts: inheritence, polymorphism, and encapsulation.  Although these concepts are straightforward at a broad conceptual level, closer study reveals many nuances and complexities that must be understood to effectively exploit the advantages of object-oriented design. In practice effectve use of software components also requires mastery of a number of theoretical issues and practical considerations including: the use of formal contracts for interface specification; the complete implications of polymorphism and inheritance; use of architectural and design patterns; and standard component frameworks such as CORBA, COM/DCOM, and Java foundation classes.

This course will introduce the basic foundations and principles of object-oreinted and component-based software, review the use of patterns and frameworks to design and implement component systems, and present an extended case-study that illustrates the evolution of a component-based software system from conceptual modeling through detailed design. Students will participate actively in this process through group projects that will investigate various design, analysis, and reuse issues.

 

Required Standing and Expected Background:

This course is open to graduate students and senior-level undergraduate students from computer-related disciplines such as computer science, computer engineering, or electrical engineering. A previous course or practical experience in the fundamentals of software engineering (e.g. 55:180/22C:180) is a prerequisite. Students are expected to have a basic understanding and working knowledge of object-oriented analysis and design and programming experience in C++, Java, or another OO language.

 

Required Texts:

Object Oriented Software Construction, Second Edition, by Bertrand Meyer, Prentice Hall PTR 1997. ISBN: 0-13-629155-4
UML Distilled--A Brief Guide to the Standard Object Modeling Language, Third Edition, by Martin Fowler, Addison Wesely, 2004.  ISBN: 0-321-19368-7

Supplemental Texts (partial list):

Software Reuse, Architecture, Process, and Organization for Business Success, by Ivar Jacobson, Martin Griss, and Patrik Jonsson, Addison Wesley, 1997. ISBN: 0-201-92476-5

Component Software—Beyond Object-Oriented Programming,, by Clemens Szyperski, Addison Wesley1998. ISBN: 0-201-17888-5

Software Architecture—Perspectives on an Emerging Discipline, by Mary Shaw and David Garlan, Prentice Hall, 1996. ISBN: 0-13-182957-2

Design Patterns--Elements of Reusable Object-Oriented Software, by Erich Gamma, et al, Addison Wesley, 1995. ISBN: 0-121-63361-2

Pattern-Oriented Software Architecture--A System of Patterns, by Frank Buschmann, et al, John Wiley and Sons, 1996 ISBN: 0-471-95869-7

Object-Oriented Methods--Principles and Practice, Third Edition, by Ian Graham, Addison Wesley, 2001. ISBN 0-201-61913-X