Software Frameworks

Software Frameworks Seminar report
Framework is a set of reusable software program that forms the basis for an application. With the help of framework, programmers build the application quickly. A software framework is a universal, reusable software platform used to develop applications, products and solutions.Software Frameworks include support programs, compilers, code libraries, an application programming interface (API) and tool sets that bring together all the different components to enable development of a project or solution.In earlier days,it was very difficult to develop complex web applications.But nowadays it is very easy to develop such applications using different kinds of frameworks such as struts, struts 2, hibernate, JSF, Tapestry, JUnit, Log4j and Spring. In Java technology there are so many frameworks that helps the programmers to build applications easily. We can easily determine the frameworks needed for a particular application.

A software framework in computer programming, is defined as an abstraction in which software providing generic functionality can be selectively changed by additional user written code, and thus providing application specific software. In computer system,frameworks occur as a layered structure including layers of actual programs specifying programming interface or offer programming tools for using the frameworks. A framework can be used for a set of functions in a system, with in the layers of an operating system, with in the layers of an application subsystem. It also specify how to correlate at some level of network. Also a framework is more comprehensive than a protocol and more prescriptive than a structure.

Frameworks contain various key distinguishing features:inversion of control-The framework completely controls the flow of the programs while in libraries, the caller or user controls the flow the programs not the libraries, default behavior-A framework has a default behavior. This default behavior must actually be some useful behavior and not a series of no-ops, extensibility - A framework can be extended by the user usually by selective overriding or specialized by user code to provide specific functionality, non-modifiable framework code - The framework code is rigid and not allowed to be modified, excepting extensibility. Users can extend the framework, but not modify its code.

Framework architecture contains the basic components- frozen spots and hot spots a virtual name.The frozen spots define the overall architecture of a software system while hot spots represent those parts where the programmers add their own code to add the functionality specific to their own projects using framework.For a concrete software system development, developers use hot spots according to the specific needs and requirements of the user defined classes in the system.They receive messages from predefined framework classes.All these are done by implementing super class abstract methods.

In an object-oriented environment, a framework consists of abstract and concrete classes. Instantiation of such a framework consists of composing and sub classing the existing classes. They act as a promising technology for proven software designs and implementations in order to reduce the cost and improve the software quality. In contrast to earlier OO reuse techniques based on class libraries, frameworks are targeted for particular business units such as data processing or cellular communications and application domains such as user interfaces or real-time avionics.

The software framework take less time and energy in developing any software that adds an advantage for its demand. Also it gives a standard working system through which any user can develop the desired module of application or complete application instead of developing lower level details. With the help of these frameworks,the developers can devote more time in developing the software requirement, not in preparing the environment and tools of application development. The disadvantage is that for a new user it is too complicate to use the framework quickly as it is big and complex abstract. The user has to spend more time in assessing the concept, function and its uses in developing the program. It enhances the development but after learning how to use it efficiently, it becomes easier and quicker to develop any program, and any module of application. Another disadvantage is that a generic one-size-fits-all does not work so efficiently for any specific software. There is need to extend framework with specific code to develop any specific software. Software frameworks support and enhance the efficiency and productivity of the application development but it faces some problems in some specific domains. These include artistic drawing, music composition, and mechanical CAD; compilers for different programming languages and target machines; financial modeling applications; earth system modeling applications; decision support systems; media playback and authoring,web applications and middle ware.

Software Frameworks are designed to facilitate the development process by allowing designers and programmers to spend more time on meeting software requirements rather than dealing with the more standard low level details of providing a working system. Thus it reduces overall development time.For example, a team using a web application framework to develop a banking web-site can focus on writing code particular to banking rather than the mechanics of request handling and state management. It allow developers to spend less time in coding,developing and debugging.On the other side it demands more time on value added development and concentrating on the specific business problems. It avoid time usage in plumbing code behind it,thus making faster to reach the hands of clients.

A phenomenon called code bloat add to the program size. With customer demands,products made from competing and complementary frameworks. But due to the complexity in their API's the reduction in development time is not achieved. Because developers spend more time in learning to use the framework. It is usual in case of a special or new framework.But if that framework is not used in subsequent job tasking, time invested in learning adds more than the purpose written code. Keeping copies of the framework will satisfy common needs. Once a framework is learned,projects are faster and too easy to complete. The concept of a framework is to make a one-size-fits-all solution set, and with familiarity,code production should logically rise. The software is a compiler-object linker making a tight small, wholly controlled, and specified executable module. For general purposes it has been found that using the common code refactoring than the generic framework usage.

A framework is a reusable and semi-complete application that can be specialized to produce custom applications.Thus creating a framework is elegant,versus one that merely solves a problem is still an art rather than a science. In creating software, software elegance is too important. Software elegance means clarity,conciseness or little waste and extra or extraneous functionality, much of which is user defined. Elegance implies in the creation of code that is clean and comprehensible to a reasonably knowledgeable programmer and readily modifiable, versus one that merely generates correct code.The best frameworks have been able to evolve gracefully as the underlying technology on which they were built advanced.

The good news is that framework are becoming mainstream and developers at all levels are increasingly adopting and succeeding with framework technologies. However,OO application frameworks are ultimately only as good as the people who build and use them. Creating robust, efficient and reusable application frameworks requires development teams with a wide range of skills.Expert analysts and designers who have mastered patterns, software architectures, and protocols in order to alleviate the inherent and accidental complexities of complex software are required.Also there is a for expert middle ware developers who can implement these patterns, architectures, and protocols within reusable frameworks. In addition,application programmers who have the motivation, skills,and training to learn how to use these frameworks effectively are also needed. By getting involved with others and working with them on frameworks by attending conferences, participating in online mailing lists and newsgroups, and thus it will contribute a lot to each one's insight and experience in framework development.

References:
http://en.wikipedia.org/wiki/Software_framework
http://c2.com/cgi/wiki?SoftwareFramework
http://www.cs.wustl.edu/~schmidt/patterns.html