One of the most pragmatically influential changes in software development, since the late eighties, was the introduction of several object-oriented frameworks, in different programming languages. This article will provide a short overview of their impact in the software engineering field.
Application Frameworks - Definition
According to Wikipedia,
In computer programming, an application framework is a term usually used to refer to a set of libraries or classes that are used to implement the standard structure of an application for a specific operating system. By bundling a large amount of reusable code into a framework, much time is saved for the developer, since he/she is saved the task of rewriting large amounts of standard code for each new application that is developed.
Moreover, Booch describes application frameworks as
At the high end of the food chain, we have frameworks. A framework is a collection of classes that provide a set of services for a particular domain; a framework thus exports a number of individual classes and mechanisms which clients can use or adapt. As we will discuss in Chapter 9, frameworks represent reuse in the large.
(Booch, 1994, page 166)
The primary benefits of OO application frameworks stem from the modularity, reusability, extensibility, and inversion of control they provide to developers
(Fayad & Schmidt, 1997)
Characteristics and Advantages
Frameworks usually consist of a large number (thousands) of classes, organized into packages, libraries or namespaces, which application developers can use in the same way as a child uses Lego bricks while playing. This way, application frameworks provide a high level of reuse thanks to:
- Ad-hoc standardization: some frameworks, such as Java or .NET became de facto standards thanks to the spread of their usage
- Speed of development: frameworks provide easy solutions and APIs (Application Programming Interfaces) to common problems, such as memory management, string manipulation, networking, I/O, etc, which are useful to a large range of applications
- Lower costs and easier maintenance: third-party frameworks are created and maintained by specialized companies, and updates are distributed usually without charge to customers, which means less maintenance costs for the industry as a whole.
The first object-oriented frameworks to be considered as such are the MVC (Model View Controller) for Smalltalk and the MacApp for Apple applications. Other important frameworks from this initial phase were ET++[Weinand et al., 1989] and Interviews. It is interesting to note that most of the seminal frameworks were related to designing user interfaces. In the framework history, it is also important to cite the name of the Taligent company, a joint venture of Apple Computer, IBM and Hewlett-Packard. They developed a set of tools for rapid application development under the name of ``Common Point'' that consist on more than a hundred OO frameworks.
Another important step in the historical evolution of frameworks was the NeXTSTEP platform, which strongly influenced Java:
When I left Sun to go to NeXT, I thought Objective-C was the coolest thing since sliced bread, and I hated C++. So, naturally when I stayed to start the (eventually) Java project, Obj-C had a big influence. James Gosling, being much older than I was, he had lots of experience with SmallTalk and Simula68, which we also borrowed from liberally.
The similarities between NeXTSTEP (later known as Cocoa when Apple and NeXT merged) and Java have made possible for Apple engineers to create a “bridge” that allows the Java language to access native Cocoa objects.
Some current examples of generic object-oriented frameworks include:
- Microsoft .NET (C#, VB.NET, C++, many others): http://msdn.microsoft.com/netframework/
- Cocoa (Objective-C, Java, Ruby, others): http://developer.apple.com/cocoa/
- Ruby on Rails (Ruby): http://www.rubyonrails.org/
- Java SDK and runtime: http://java.sun.com/
- Apache Struts (Java): http://struts.apache.org/
- Tapestry (Java): http://tapestry.apache.org/
- Webobjects (Java): http://www.apple.com/webobjects/
- Spring (Java and .NET): http://www.springframework.org/ and http://www.springframework.net/
- Zend (PHP): http://framework.zend.com/
- CakePHP: http://www.cakephp.org/
- Seagull (PHP): http://seagullproject.org/
- Prado (PHP): http://www.xisc.com/
- Zoop (PHP): http://zoopframework.com/
- Django (Python): http://www.djangoproject.com/
- Catalyst (Perl): http://www.catalystframework.org/
- wxWidgets (C++, Ruby and others): http://www.wxwidgets.org/
- Qt (C++): http://www.trolltech.com/products/qt
- Seaside (Smalltalk): http://www.seaside.st/
The “Application Framework Project” of OpenOffice.org (http://framework.openoffice.org/) shows a good example of an application framework designed to serve a specific set of functionality, to a limited set of well-known clients.
Application frameworks provide a complete set of functionality that can be used “off the box” to solve software problems, achieving an extremely high level of reuse, and reaching standardization at the level of a whole industry.
Amatriain, Xavier; University of California Santa Barbara, “An Object-Oriented Metamodel for Digital Signal Processing”, October 2004 [Internet] http://www.create.ucsb.edu/~xavier/Thesis/ (Accessed July 22nd, 2006)
Booch, Grady, “Object Oriented Analysis and Design With Applications, Second Edition”, Addison Wesley, 1994, ISBN 0-8053-5340-2
Fayad, Mohamed & Schmidt, Douglas C., “Object-Oriented Application Frameworks”, 1997 [Internet] http://www.cs.wustl.edu/~schmidt/CACM-frameworks.html (Accessed July 22nd, 2006)
Naughton, Patrick, “Java Was Strongly Influenced by Objective-C” [Internet] http://www.cs.umd.edu/~seanl/stuff/java-objc.html (Accessed July 22nd, 2006)
Wikipedia, “Application Framework”, [Internet] http://en.wikipedia.org/wiki/Application_framework (Accessed July 22nd, 2006)