AUTHOR COPY
X. Mao et al. / A survey of agent-oriented programming from software engineering perspective 147
guages are typically defined in term of various formal
system like transition system. More AOP languages
attempt to incorporate software engineering principles
and address the programming issues resulting from
complex distributed systems, such as self -adaptation
[30,38,39], self-organization and self-management,
service-oriented computing [55,70], mobility [28], etc.
The programs written in these AOP languages are
normally executed in term of various programming
framework, platform or virtual machine. The CASE
tools of AOP languages (e.g., 2APL [50], simpAL
[56]) developed in this phase support various program-
ming activities, including editing, compiling, debug-
ging, etc. Many tools are provided to be integrated into
IDEs to enrich the engineering capabilities. In addi-
tion to traditional applications, the AOP languages de-
veloped in this phase seek some new applications, like
robots, etc.
3. Programming study in software engineering
In the process of software development, program-
ming is an important and indispensable development
activity aiming at writing programs that accurately im-
plement the expected functional and non-functional
features of software system, and can be executed cor-
rectly on target computer. Programming languages are
therefore needed to act as tool to achieve the commu-
nications between programmers and computers [67].
In the field of software engineering, program study
is an important branch whose purpose is to develop
programming theories and languages to satisfy the re-
quirements of both programmers for easily (e.g., high-
level abstraction, easy to find errors or bugs) writing
high-quality (e.g., supporting modularity, information
hiding and reuse, etc.) source codes and computers for
efficiently executing target codes. We can find many
significant researches contributions of programming in
software engineering, e.g., object encapsulation, pro-
cedure calling, exception mechanism, typed theory,
etc., which result in various programming paradigms
like structured programming, OO programming, etc.
The studies of programming and languages in soft-
ware engineering at least involve the following three
aspects.
3.1. Programming concepts and models
Any programming language should provide its dis-
tinctive understanding about what the program is and
how the program is to be constructed and run. Typi-
cally, such understanding takes form of programming
concepts underlying the design of programming lan-
guage, e.g., function and its calling in C; object, class,
inheritance in C++; agent, agent class, role in AOP.
The programming concepts, on one hand provide ab-
stractions for programmers to represent the application
problems, on the other hand they provide models for
computer to execute program. Therefore, they estab-
lish a solid and precise programming model to repre-
sent and execute program. Actually we can find differ-
ent programming paradigms and languages have their
particular programming concepts and models. For ex-
ample, in OOP language like Java, program is mod-
elled as a set of classes that encapsulate properties and
methods and can be instantiated as objects to interact
with each other in term of message sending, in some
AOP language like JAL [58], program is modelled as
a set of agents that have a number of plan, beliefset,
capability, etc.
3.2. Programming languages
Language is the main output of programming study
and the elementary tool for programmers to code the
software. The design of programming language is rig-
orously based on the programming concepts, abstrac-
tions and models. In the history of software engineer-
ing, hundreds of programming languages have been
proposed. However, only a few survive and are used
in industry to develop industry-strength software sys-
tems. Most of them are obsolete or abandoned by de-
velopers. From software engineering viewpoint, we
can find some important principles behind the suc-
cessful design of programming languages. Every pro-
gramming language has its syntax, semantics and prag-
matic. Syntax is concerned about the form of programs
in term of programming concepts, which influences
how programs are to be written by programmer and
parsed by computer. Semantics is concerned about the
meaning of a program, which influences how programs
are composed by programmers and interpreted by the
computer. The syntax and semantics of programming
languages should be formally and rigorously defined.
Moreover, a programming language should also pro-
vide ways to guide developers to use the language
in practices, i.e., pragmatics [67]. Up to now, sev-
eral programming styles have been proposed for de-
signing various programming languages, including de-
scriptive, imperative and hybrid, which will greatly in-
fluence the ways to define the syntax and semantic of