[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Bedrock White Paper
- To: Info-MCL@cambridge.apple.com
- Subject: Bedrock White Paper
- From: "pierce" <pierce@at-mail-server.vitro.com>
- Date: 23 Jun 92 14:41:30 U
The Bedrock(tm) Cross-Platform Application Framework
A White Paper
I. Introduction
The Bedrock framework is a cross-platform application framework technology. It
assists application developers in (1) creating applications of high quality and
reliability, (2) quickly delivering these applications across industry standard
platforms, and (3) localizing these applications to meet the specific
requirements of each country. The Bedrock framework accomplishes these
objectives by taking advantage of object-oriented technology to provide the
developer a reusable components approach to building applications. Components
supplied by the Bedrock Framework can be used to build sophisticated Graphical
User Interface (GUI) based applications that are tuned to the specific platform
GUI. In addition, the developer may create new components which can be used
and shared among multiple development efforts. These components, built on top
of the Bedrock framework, are portable across the same platforms as the Bedrock
framework. They provide the developer a leveraged productivity tool for use in
building and maintaining new applications.
II.Background
What is an Application Framework?
Building GUI based applications on today's platforms is a difficult chore. The
small task of placing a window on the screen requires the application developer
to deal with, and coordinate, a large number of system services; the window
manager, the event manager, the memory manager, etc. The application
programming interface (API) to these systems are low level, meaning that it
takes a large effort to accomplish what seems to be a simple task. Changing
the pre-defined behavior of the standard services for an application is
difficult. And the problem is further complicated when trying to support
multiple platforms. The goal of an application framework is to provide the
developer a "structure" with functionality common to most applications. The
developer than adds to this "structure" the specific functionality required to
complete the application. Creating new types of applications is an incremental
effort.
The initial value of an application framework is in the head start it provides.
It automatically provides the structure for the application to create the
application desktop, provide default menus, and handle the interactions between
the application and the operating system. Having this initial structure
available makes it easier to create the "Hello World" in a window example.
Bedrock requires 30 lines of code, the Windows API requires over 100. Yet,
this is not where the real value of an application framework is delivered.
Because of the overhead of the application framework structure, "Hello World"
done using an application framework may be easier than using an API, but is
more costly in terms of size of the application. However, the "Hello World"
applications are not the ones that developers are building. They are building
applications with interactive graphical user interfaces. It is for these kinds
of applications that a developer uses an application framework. The framework
assists the developer in providing a way of writing application by extending
the structure. Instead of having to recreate the structure necessary for each
new feature, an application framework allows the developer to reuse the
provided structure, and extend it to implement the new feature. As
applications grow larger, this ability to extend functionality by incremental
effort lessens the complexity of the application. This makes it easier to
develop large-scale reliable applications.
MacApp, Think C Library (TCL) and ObjectWindowLibrary are all examples of
application frameworks. They are used by thousands of developers today.
Photoshop from Adobe and SoundEdit Pro from MacroMedia were developed using
MacApp. Daymaker from Pastel Development and 1-2-3 from Lotus were developed
using TCL.
What is a Cross-Platform Application Framework?
Application frameworks such as Apple's MacApp for the Macintosh are targeted at
specific platforms. Applications written in MacApp will not work on Windows,
and applications written in a Windows application framework will not work on
the Macintosh. Bedrock uses object-oriented technology to insulate the
developer from the specifics of the platform specific programming interface.
The developer works with high-level abstract components such as Documents,
Panes and Menus. The developer may have access to even higher level components
such as a drawing tool or text editing engine. The Bedrock framework then maps
those abstract objects to the platform specific functionality, thus ensuring
cross-platform performance.
The developer benefits from a cross-platform application framework in these
significant ways: (1) Less effort to deliver and maintain applications across
multiple platforms, (2) Reduced risk of choosing the wrong platform, and (3)
Providing applications tuned to the platform GUI.
What other support should an Application Framework provide?
The United States represents less than 50% of the global software market.
Companies need to deliver applications globally, and commercial developers need
to be able to easily provide common applications in many languages. In order
to accomplish this, an application framework needs complete support for
software internationalization. This should include support for different
character sets, understanding of country and language specific formatting for
date, time and currency, and proper sorting algorithms.
III. The Bedrock Foundation
The Bedrock Framework
The Bedrock framework is a cross-platform application framework technology
implemented in C++. Specific implementations are being developed today for the
Macintosh and Windows platforms, with others to follow. There are three major
elements to the Bedrock Framework: (1) the Bedrock Class Library, (2) Bedrock
Resource Information and the (3) Bedrock Utility Manager. The Bedrock Class
Library provides the developer with components to build an application.
Bedrock Resource Information provides the developer a platform independent
description of resource information, such as view positioning, dialogs, and
screen for the application. This resource information is portable across
platforms. The Bedrock Utility Manager provides the application developer
platform independent access to platform specific services such as memory
management, file management, international information, and time and date
support.
The Bedrock Class Library
The Bedrock Class Library is implemented in the industry standard C++. The
present implementation of the Bedrock Class Library consists of over 150
classes, or types of components that can be used as building blocks by the
application developer. The Bedrock framework is being implemented using the
class library approach, instead of creating a flat API to provide the developer
more flexibility. Due to the power of C++, the application developer can
create new components by refining an available component, or combining a number
of available components. For example, a ValidatedField is a component which
checks input before returning it to an application. A NumberField is a
refinement of ValidatedField. A NumberField only accepts numeric characters as
input. A DateField only accepts valid dates as input. An application
developer could create another refinement of a ValidatedField for inputting
specific format of accounts within a company. Once this new component is
developed it can be used and reused and shared among developers.
The Bedrock Class Library supplies the developer a robust set of components for
working with data structures, drawing objects, graphic tools, controls,
windows, streams. The following are example components in each area:
Functional Area Example Components
o Collections Arrays, Matrices, Sets, ...
o Draw objects Rectangle, Ellipses, Polygons, ...
o Graphics Tools Fonts, Pens, Wallpaper, ...
o Controls CheckBoxes, RadioButtons, ListBoxes, ...
o Windows Documents, Dialog Boxes, ClipboardWindows, ...
o Streams Files, MemoryStreams, TextStreams, ...
The Bedrock Class Library provides an abstraction of the platform-specific
systems functions. This abstraction frees the developer from worrying about
the specifics of each platform. The developer works with a Bedrock class, such
as SelectFileDialog. The class library handles the proper mapping of the
capability to the platform. The Bedrock Class Library includes a set of
components that handle a "chain of command" event processing in a unified way,
regardless of the underlying platform. Direct calls to the programming
interface are rarely necessary. This level of abstraction provided by the
class library ensures that the developer will not have to take a "least common
denominator" approach.
Bedrock Resource Information
Bedrock Resource Information provides a powerful definition language for
describing menus, dialogs, strings, and accelerator tables. Any visual
component may be loaded from a resource. The language also describes custom
visual information defined by the application developer. The advantage of
separating the resource information from the application code is that
application's visual components can be modified without access to the source
code of the application. Thus changes to the application's visual components
can be made without having to recompile the application, saving time and
effort.
Bedrock Resource Information provides full scripting support and templates for
data description. The compiler for the information includes a full ANSI C
preprocessor with optional C++ extensions. This allows the application
developer to create and use macros, and define conditional compilation. The
information format supports and extends Apple's Rez, including type
definitions. Types can be defined by extension, and types can be defined
recursively. Bedrock Resource Information provides support for the entire
visual aspect of user interface in a platform independent way.
The Bedrock Utility Manager
The Bedrock Utility Manager supplies a set of platform utilities in a platform
independent manner:
Virtual Memory Manager - allocates and manages memory, provides compaction,
relocation and page swapping capabilities.
File Manager - provides access to the file system including network access and
name handling from partial specifications.
String Manager - provides standard string functions, connected to the
international manager for country-specific processing. Provides conversion
routines.
Date/Time Manager - provides standard date and time manipulation, tied to the
international manager for country specific processing.
International Manager - provides complete, specific, country, language and code
page information. This includes formatting information for numbers, currency,
date and time. Provides support for single-, double-, and multiple-byte
character sets.
Validation Manager - provides string validation for numbers, date, time and
keywords and range and series validation for numbers
IV.Future Directions
The Bedrock framework is presently being used for internal application
development at Symantec. In addition, Symantec is making early versions of the
Bedrock framework available to corporate developers and Independent Software
Vendors. The information being learned from these efforts is helping Symantec
to understand the market requirements and enabling a refinement of the
technology.
In addition, we have announced a development and marketing agreement with Apple
Computer, Inc. Apple will contribute engineering resources and the Bedrock
framework will leverage the Apple MacApp object-oriented framework technology.
We are also actively seeking other partnerships that will benefit the developer
using the Bedrock framework.
The results of these partnerships will be reflected in the quality and the
robustness of the Bedrock framework and will provide the developer a standard
cross-platform application frameworks for all major desktop platforms.
Developer Support: Developer Services: Tools & Apps: Cross-Platform Framework
6-23-92