Software Component Engineering is an advanced course on
Software Engineering offered within the context of our
Computer Science Degree Program. It focuses on software development
as arrangements of configurable software components. In order to
define a systematic approach to support component-based software
development, a variety of software engineering concepts,
methodologies, techniques, and tools are explored during the
course. Depending on the audience, more emphasis can be given either
on software component construction or on tool development.
The formal requisite for this course is Data Structures. However,
students are supposed to be skilled Object-Oriented Designers and
Program (72 hours)
1 - On Software Components
2 - Software Component Engineering
3 - Development Tools
4 - Case studies
5 - Experiments
6 - Discussion
Students will have their skills to engineer software components
evaluated through a seminar and a practical work. The seminar
consists in a case study about an specific software component
development strategy, and the practical work consists in designing
and implementing a small component-based system utilizing the
software engineering techniques discussed during the course.
Students that eventually fail the ordinary evaluation will be
allowed a written exam.
William H. Harrison and Harold Ossher,
Subject-oriented Programming (a Critique of Pure Objects),
in Proceedings of the 8th Conference on Object-oriented Programming Systems, Languages and Applications, pages 411-428. Washington, U.S.A., 1993.
Ian M. Holland,
Specifying Reusable Components Using Contracts,
in Proceedings of the European Conference on Object-oriented Programming, pages 287-308. Springer, Utrecht, The Netherlands, 1992.
Ivar Jacobson, Grady Booch and James Rumbaugh,
The Unified Software Development Process,
Mehdi Jazayeri at al.,
in Report of the Dagstuhl Seminar on Generic Programming, Schlo▀ Dagstuhl, Germany, 1998.
Ralph E. Johnson,
Frameworks = (Components + Patterns),
Communications of the ACM, 40(10):39-42, 1997.
K. Kang, S.Cohen, J.Hess, W.Novak and S.Peterson,
Feature-Oriented Domain Analysis (FODA),
Software Engineering Institute, CMU/SEI-90-TR-21, 1990.
Gregor Kiczales at al.,
in Proceedings of the European Conference on Object-oriented Programming'97, pages 220-242, 1997.
Barbara Liskov and Stephen Zilles,
Programming with Abstract Data Types,
ACM SIGPLAN Notices, 9(4):50-59, 1974.
Mira Mezini and Karl Lieberherr,
Adaptive Plug-and-play Components for Evolutionary Software Developmen,
in Preceedings of the Conference on Object Oriented Programming Systems Languages and Aplications, pages 97-116, 1998.
David Lorge Parnas,
On the Design and Development of Program Families,
IEEE Transactions on Software Engineering, SE-2(1):1-9, 1976.
P. J. Plauger,
The Standard Template Library,
C/C++ Users Journal, 13(12):20-24, 1995.
Software Engineering with Reusable Components,
Yannis Smaragdakis and Don Batory,
Implementing Reusable Object-Oriented Components,
in Proceedings of the Fifth International Conference on Software Reuse, 1998.
C++ Programming Language,
IEEE Software (special issue on Multiparadigm Languages and Environments), 3(1):71-72, 1986.
The Design and Evolution of C++,
The C++ Programming Language,
Clemens Szyperski and Rudi Vernik Establishing,
System-Wide Properties of Component-Based Systems: A Case for Tiered Component Frameworks,
in Proceedings of the Workshop on Compositional Software Architectures, 1998.
Michael VanHilst and David Notkin,
Using C++ Templates to Implement Role-Based Designs,
in Proceedings of the Second International Symposium on Object Technologies for Advanced Software, pages 22-37, 1996.
Michael VanHilst and David Notkin,
Decoupling Change from Design,
ACM SIGSOFT Software Engineering Notes, 21(6):58-69, 1996.
Todd L. Veldhuizen,
Using C++ Template Metaprograms,
C++ Report, 7(4):36-43, 1995.
Classification in Object-oriented Systems,
ACM SIGPLAN Notices, 21(10):173-182, 1986.
David M. Weiss,
Software Synthesis: The FAST Process,
in Proceedings of the International Conference on Computing in High Energy Physics, 1995.
David M. Weiss and Chi Tau Robert Lai,
Software Product-line Engineering: A Family-Based Software Development Process,
Program Development with Stepwise Refinement,
Communications of the ACM, 14(4):221-227, 1971.