BCS 503 Java Programming and The Internet Notes Unit 2
BCS 503 Java Programming and The Internet Notes Unit 2
Course-BCS
Subject: Java Programming and Internet
Subject Code – BCS503 Sem-5th
UNIT II
• Object oriented programming has taken a completely different direction and will place an
emphasis on object s and information. With object oriented programming, a problem will
be broken down into a number of units .these are called objects .The foundation of oop is
the fact that it will place an emphasis on objects and classes. There are number of
advantages to be found with using the oop paradigm, and some of these are oop paradigm
• Object oriented programming is a concept that was created because of the need to
overcome the problems that were found with using structured programming techniques.
While structured programming uses an approach which is top down, oop uses an
approach which is bottom up.
219
• A program in a procedural paradigm is an active agent that uses passive objects that we
refer to as data or data items.
• The basic unit of code is the class which is a template for creating run-time objects.
• Classes can be composed from other classes. For example, Clocks can be constructed as
an aggregate of Counters.
• The object-oriented paradigm deals with active objects instead of passive objects. We
encounter many active objects in our daily life: a vehicle, an automatic door, a
dishwasher and so on. The actions to be performed on these objects are included in the
object: the objects need only to receive the appropriate stimulus from outside to perform
one of the actions.
deleting and so on. The program in this paradigm just sends the corresponding request to
the object
• Java provides automatic garbage collection, relieving the programmer of the need to
ensure that unreferenced memory is regularly deallocated.
• Encapsulation
• Abstraction
• Inheritance
• Polymorphis
• The word agent has found its way into a number of technologies. It has been applied to
aspects of artificial intelligence research and to constructs developed for improving the
experience provided by collaborative online social environments (MUDS, MOOs, and the
220
like). It is a branch on the tree of distributed computing. There are agent development
toolkits and agent programming languages.
• The Agent Identity class defines agent identity. An instance of this class uniquely
identifies an agent. Agents use this information to identify the agents with whom they are
interested in collaborating.
• The Agent Host class defines the agent host. An instance of this class keeps track of
every agent executing in the system. It works with other hosts in order to transfer agents.
• The Agent class defines the agent. An instance of this class exists for each agent
executing on a given agent host.
• Object-oriented programming organizes a program around its data (that is, objects) and a
set of well-defined interfaces to that data.
Responsibility
• Each processing object contains logic that defines the types of command objects that it
can handle; the rest are passed to the next processing object in the chain. A mechanism
also exists for adding new processing objects to the end of this chain.
• Primary motivation is the need for a platform-independent (that is, architecture- neutral)
language that could be used to create software to be embedded in various consumer
electronic devices, such as microwave ovens and remote controls.
• If you can't state the purpose of a class in a single, clear sentence, then perhaps your class
structure needs some thought.
221
• In object-oriented programming, the single responsibility principle states that every
class should have a single responsibility, and that responsibility should be entirely
encapsulated by the class. All its services should be narrowly aligned with that
responsibility.
Messages
• Message implements the Part interface. Message contains a set of attributes and a
"content".
• Message objects are obtained either from a Folder or by constructing a new Message
object of the appropriate subclass. Messages that have been received are normally
retrieved from a folder named "INBOX".
• A Message object obtained from a folder is just a lightweight reference to the actual
message. The Message is 'lazily' filled up (on demand) when each item is requested from
the message.
• Note that certain folder implementations may return Message objects that are pre-filled
with certain user-specified items. To send a message, an appropriate subclass of Message
(e.g., Mime Message) is instantiated, the attributes and content are filled in, and the
message is sent using the Transport. Send method.
• We all like to use programs that let us know what's going on. Programs that keep us
informed often do so by displaying status and error messages.
• These messages need to be translated so they can be understood by end users around the
world.
• The Section discusses translatable text messages. Usually, you're done after you move a
message String into a Resource Bundle.
• If you've embedded variable data in a message, you'll have to take some extra steps to
prepare it for translation.
Methods
• The only required elements of a method declaration are the method's return type, name,
a pair of parentheses, (), and a body between braces, {}.
• Two of the components of a method declaration comprise the method signature—the
method's name and the parameter types.
• More generally, method declarations have six components, in order:
222
• Modifiers—such as public, private, and others you will learn about later.
223
• The return type—the data type of the value returned by the method, or void if the method
does not return a value.
• The method name—the rules for field names apply to method names as well, but the
convention is a little different.
• The method body, enclosed between braces—the method's code, including the
declaration of local variables, goes here.
Naming a Method
Although a method name can be any legal identifier, code conventions restrict method
names. By convention, method names should be a verb in lowercase or a multi-word
name that begins with a verb in lowercase, followed by adjectives, nouns, etc. In multi-
word names, the first letter of each of the second and following words should be
capitalized. Here are some examples:
run
224
Typically, a method has a unique name within its class. However, a method might have
the same name as other methods due to method overloading.
Overloading Methods
• The Java programming language supports overloading methods, and Java can distinguish
between methods with different method signatures. This means that methods within a
class can have the same name if they have different parameter lists (there are some
qualifications to this that will be discussed in the lesson titled "Interfaces and
Inheritance").
225
• In the Java programming language, you can use the same name for all the drawing
methods but pass a different argument list to each method. Thus, the data drawing class
might declare four methods named draw, each of which has a different parameter list.
• Overloaded methods are differentiated by the number and the type of the arguments
passed into the method.
• You cannot declare more than one method with the same name and the same number and
type of arguments, because the compiler cannot tell them apart.
• The compiler does not consider return type when differentiating methods, so you cannot
declare two methods with the same signature even if they have a different return type.
• Overloaded methods should be used sparingly, as they can make code much less
readable.
Classes
• In object-oriented terms, we say that your bicycle is an instance of the class of objects
known as bicycles. A class is the blueprint from which individual objects are created.
• Java classes contain fields and methods. A field is like a C++ data member, and a method
is like a C++ member function. In Java, each class will be in its own .java file.
• protected: accessible only in this package and in all subclasses of this class
• Public: class objects can be declared and manipulated by code in any package.
226
• Object: Object-oriented programming involves inheritance. In Java, all classes (built-in
or user-defined) are (implicitly) subclasses of Object. Using an array of Object in the List
class allows any kind of Object (an instance of any class) to be stored in the list.
However, primitive types (int, char, etc) cannot be stored in the list.
• A method should be made static when it does not access any of the non-static fields of the
class, and does not call any non-static methods.
• Java class objects exhibit the properties and behaviors defined by its class. A class can
contain fields and methods to describe the behavior of an object. Current states of a
class‘s corresponding object are stored in the object‘s instance variables.
• Creating a class:
227
A class is created in the following way
• An object is a software bundle of related state and behavior. Software objects are often
used to model the real-world objects that you find in everyday life. This lesson explains
how state and behavior are represented within an object, introduces the concept of data
encapsulation, and explains the benefits of designing your software in this manner.
• We use class variables also know as Static fields when we want to share characteristics
across all objectswithin a class. When you declare a field to be static, only a single
instance of the associated variable is created common to all the objects of that class.
Hence when one object changes the value of a class variable, it affects all objects of the
class. We can access a class variable by using the name of the class, and not necessarily
using a reference to an individual object within the class. Static variables can be accessed
even though no objects of that class exist. It is declared using static keyword.
Class methods, similar to Class variables can be invoked without having an instance of
the class. Class methods are often used to provide global functions for Java programs. For
example, methods in the java.lang.Math package are class methods. You cannot call non-
static methods from inside a static method.
Bundling code into individual software objects provides a number of benefits, including:
• Modularity: The source code for an object can be written and maintained independently
of the source code for other objects. Once created, an object can be easily passed around
inside the system.
228
• Code re-use: If an object already exists (perhaps written by another software developer),
you can use that object in your program. This allows specialists to implement/test/debug
complex, task-specific objects, which you can then trust to run in your own code.
• Pluggability and debugging ease: If a particular object turns out to be problematic, you
can simply remove it from your application and plug in a different object as its
replacement. This is analogous to fixing mechanical problems in the real world. If a bolt
breaks, you replace it, not the entire machine.
An instance or an object for a class is created in the following way <class name>
<object name>=new <constructor>();
229
Encapsulation:
• Encapsulation is the mechanism that binds together code and the data it manipulates, and
keeps both safe from outside interference and misuse.
• One way to think about encapsulation is as a protective wrapper that prevents the code
and data from being arbitrarily accessed by other code defined outside the wrapper.
• Access to the code and data inside the wrapper is tightly controlled through a well-
defined interface.
• To relate this to the real world, consider the automatic transmission on an automobile.
• It encapsulates hundreds of bits of information about your engine, such as how much we
are accelerating, the pitch of the surface we are on, and the position of the shift.
• The power of encapsulated code is that everyone knows how to access it and thus can use
it regardless of the implementation details—and without fear of unexpected side effects.
Polymorphism:
Polymorphism (from the Greek, meaning ―many forms) is a feature that allows one
interface to be used for a general class of actions.
• The specific action is determined by the exact nature of the situation. Consider a stack
(which is a last-in, first-out list). We might have a program that requires three types of
stacks. One stack is used for integer values, one for floating-point values, and one for
characters. The algorithm that implements each stack is the same, even though the data
being stored differs.
• In Java we can specify a general set of stack routines that all share the same names.
More generally, the concept of polymorphism is often expressed by the phrase ―one
interface, multiple methods.‖This means that it is possible to design a generic interface to
a group of related activities.
• This helps reduce complexity by allowing the same interface to be used to specify a
general class of action.
230
• Object-oriented programming allows classes to inherit commonly used state and behavior
from other classes. Different kinds of objects often have a certain amount in common
with each other.
• In the Java programming language, each class is allowed to have one direct superclass,
and each superclass has the potential for an unlimited number of subclasses:
• Mountain bikes, road bikes, and tandem bikes, for example, all share the characteristics
of bicycles (current speed, current pedal cadence, current gear). Yet each also defines
additional features that make them different: tandem bicycles have two seats and two sets
of handlebars; road bikes have drop handlebars; some mountain bikes have an additional
chain ring, giving them a lower gear ratio. In this example, Bicycle now becomes the
super class of Mountain Bike, Road Bike, and Tandem Bike.
• The syntax for creating a subclass is simple. At the beginning of your class declaration,
use the extends keyword, followed by the name of the class to inherit from:
Method Binding:
Abstraction:
231
Abstraction in Java or Object oriented programming is a way to segregate
implementation from interface and one of the five fundamentals along with
Encapsulation, Inheritance, Polymorphism, Class and Object.
Overriding:
• In a class hierarchy when a sub class has the same name and type signature as a method
in the super class, then the method in the subclass is said to override the method in the
super class.
• When an overridden method is called from within a sub class, it will always refer to the
version of that method defined by the sub class.
• The version of the method defined by the super class will be hidden.
Exceptions:
• An exception is an abnormal condition that arises in a code sequence at run time.
• In other words an exception is a run time error.
• A java exception is an object that describes an exceptional condition that has occurred in
a piece of code.
• When an exceptional condition arises, an object representing that exception is created and
thrown in the method that caused the error.
• Now the exception is caught and processed.
232
Summary of oops concepts
•
Object-Oriented Programming – Summary of Key Terms
Term Definition
Data Type and methods (its behaviour). An object oriented language will
233
• Composition – the object is composed of other objects. This
form of aggregation is a form of code reuse. E.g. A Car is
composed of Wheels, a Chassis and an Engine
• Collection – the object contains other objects. E.g. a List
contains several Items; A Set several Members.
234
Attribute A characteristic of an object. Collectively the attributes of an
object describe its state. E.g. a Car may have attributes of
Speed, Direction, Registration Number and Driver.
Class The definition of objects of the same abstract data type. In Java
Inheritance The derivation of one class from another so that the attributes
235
code reuse. E.g. Both Motorbikes and Cars are kinds of
MotorVehicles and therefore share some common attributes
and behaviour but may add their own that are unique to that
particular type.
Interface The behaviour that a class exposes to the outside world; its
Variable
236
Object An instance of a class. Objects have
state, identity and
behaviour.
Overloading Allowing the same method name to be used for more than one
implementation. The different versions of the method vary
according to their parameter lists. If this can be determined at
compile time then static binding is used, otherwise dynamic
Primitive The basic types which are provided with a given object-
Type oriented programming language. E.g. int, float, double, char,
Boolean
237
How java different from c and C++
Introduction to C
238
C is a platform dependent language.
Introduction to C++
Introduction to Java
Programming paradigm C follows procedural C++ follows object Java follows object oriented
programming paradigm oriented programming paradigm
239
paradigm
C uses top down approach C++ uses bottom up Java uses bottom up
Programming approach
of programming approach of programming approach of programming
Number of keywords C language has 32 C++ language has 63 Java language has 50
allowed keywords keywords keywords
C supports Union and C++ supports Union and Java neither supports C nor
Union and Structure
Structure both Structure both C++
C does not have any such C++ supports various types Java supports inheritance
Concept of inheritance
concept of Inheritance except multiple inheritance
C supports use of pointer C++ also supports use of Java does not support use of
Use of Pointers
variables pointer variables pointer variables
Method of storage C uses malloc and calloc C++ uses new and delete to
Java uses garbage collector
allocation for allocating storage allocate storage.
Concept of constructors No such concept C++ supports constructors Java supports constructors
Class C does not make use of C++ makes use of classes Java makes use of classes
240
classes
C makes use of predefined C++ makes use of header Java makes use of packages
Use of header files
header files files and not header files.
C does not support use of C++ does not support use Java supports use of applets
Applets internet programming of internet programming for the purpose of internet
method such as Applet method such as Applet programming.
C makes use of #include C++ uses #include pre Java makes use of import
Including files and
pre processor directive to processor directive to statement to include other
statements
include other files include other files files.
C supports use of enum C++ supports use of enum Java does not support use of
Enumerated data type
data type data type enum data type
241
Java Basics
Java was conceived by James gosling, Patrick Naughton, chriswarth, Ed frank and
Mike Sheridan at sun Microsystems.
The original impetus for java was not internet instead primary motivation was the
need for a platform independent (i.e. Architectural neutral) independent language.
The key that allows java to solve the both security and portability problems is that the
output of a java compiler is not executable code rather it is byte code.
242
byte code. Translating a java program into byte code helps makes it
much easier to run a Program in a wide variety of environments.
The reason is straightforward: only the JVM needs to be implemented for each
platform. Once the run-time package exists for a given system, any Java program can
run on it.
No discussion of the genesis of Java is complete without a look at the Java buzzwords.
Although the fundamental forces that necessitated the invention of Java are portability
and security, other factors also played an important role in mol ding the final form of
the language. The key considerations were summed up by the Java team in the
following list of buzzwords:
• Simple
• Secure
• Portable
• Object-oriented
• Robust
• Multithreaded
• Architecture-neutral
• Interpreted
• High performance
• Distributed
• Dynamic
Simple
Java was designed to be easy for the professional programmer to learn and use
effectively. Assuming that you have some programming experience, you will not find
Java hard to master. If you already understand the basic concepts of object-oriented
programming, learning Java will be even easier. Best of all, if you are an experienced
C++ programmer, moving to Java will require very little effort. Because Java inherits
the C/C++ syntax and many of the object-oriented features of C++
Robust
To gain reliability, Java restricts you in a few key areas, to force you to find your
mistakes early in program development. At the same time, Java frees you from having
243
to worry about many of the most common causes of programming
errors. Because Java is a strictly typed language, it checks your
code at compile time. However, it also checks your code at run time. To better
understand how Java is robust, consider two of the main reasons for program failure:
memory management mistakes and mishandled exceptional conditions (that is, run-time
errors). Memory management can be a difficult, tedious task in traditional
programming environments. For example, in C/C++, the programmer must manually
allocate and free all dynamic memory. This sometimes leads to problems, because
programmers will either forget to free memory that has
been previously allocated or, worse, try to free some memory that another part of their
code is still using. Java virtually eliminates these problems by managing memory
allocation and deallocation for you. (In fact, deallocation is completely automatic,
because Java provides garbage collection for unused objects.) Exceptional conditions in
traditional environments often arise in situations such as division by zero or ―file not
found,‖ and they must be managed with clumsy and hard-to-read constructs. Java helps
in this area by providing object-oriented exception handling. In a well-written Java
program, all run-time errors can—and should—be managed by your program.
Multithreaded
Architecture-Neutral
A central issue for the Java designers was that of code longevity and portability. One of
the main problems facing programmers is that no guarantee exists that if you write a
program today, it will run tomorrow—even on the same machine. Operating system
upgrades, processor upgrades, and changes in core system resources can all combine to
make a program malfunction. The Java designers made several hard decisions in the
Java language and the Java Virtual Machine in an attempt to alter this situation. Their
goal was ―write once; run anywhere, anytime, forever.‖ To a great extent, this goal
was accomplished.
244
Java byte code was carefully designed so that it would be easy to
translate directly into native machine code for very high
performance by using a just-in-time compiler. Java run-time systems that provide this
feature lose none of the benefits of the platform-independent code. ―High-
performance cross-platform‖ is no longer an oxymoron.
Distributed
Java is designed for the distributed environment of the Internet, because it handles
TCP/IP protocols. In fact, accessing a resource using a URL is not much different from
accessing a file. The original version of Java (Oak) included features for intraaddress-
space messaging. This allowed objects on two different computers to execute
procedures remotely. Java revived these interfaces in a package called Remote Method
Invocation (RMI). This feature brings an unparalleled level of abstraction to
client/server programming.
Dynamic
Java programs carry with them substantial amounts of run-time type information that is
used to verify and resolve accesses to objects at run time. This makes it possible to
dynamically link code in a safe and expedient manner. This is crucial to the robustness
of
the applet environment, in which small fragments of byte code may be dynamically
updated on a running system.
Security
Every time that you download a ―normal‖ program, you are risking a viral infection.
Even so, most users still worried about the possibility of infecting their systems with a
virus. In addition to viruses, another type of malicious program exists that must be
guarded against. This type of program can gather private information, such as credit
card numbers, bank account balances, and passwords, by searching the contents of your
computer‘s local file system. Java answers both of these concerns by providing a
―firewall‖ between a networked application and your computer. When you use a Java-
compatible Web browser, you can safely download Java applets without fear of viral
infection or malicious intent. Java achieves this protection by confining a Java program
to the Java execution environment and not allowing it access to other parts of the
computer.
245
Portability
Many types of computers and operating systems are in use throughout the world—and
many are connected to the Internet. For programs to be dynamically downloaded to all
the various types of platforms connected to the Internet, some means of generating
portable executable code is needed. As you will soon see, the same mechanism that
helps ensure security also helps create portability.
Data Types:
Java defines eight simple types of data: byte, short, int, long, char, float, double, and
Boolean. These can be put in four groups:
• Integers this group includes byte, short, int, and long, which are for whole valued
signed numbers.
• Floating-point numbers this group includes float and double, which represent numbers
with fractional precision.
• Characters this group includes char, which represents symbols in a character set, like
letters and numbers.
• Boolean this group includes Boolean, which is a special type for representing true/false
values.
Integers:
The width and ranges of these integer types vary widely, as shown in this table:
long 64 –9,223,372,036,854,775,808 to
9,223,372,036,854,775,807
int 32 –2,147,483,648 to 2,147,483,647
short 16 –32,768 to 32,767
byte 8 –128 to 127
Floating-point:
246
There are two kinds of floating-point types, float and double,
which represent single- and double-precision numbers,
respectively. Their width and ranges are shown here:
Variables:
The variable is the basic unit of storage in a Java program. A variable is defined by the
combination of an identifier, a type, and an optional initializer. In addition, all variables
have a scope, which defines their visibility, and a lifetime. In Java, all variables must be
declared before they can be used. The basic form of a variable declaration is shown
here:
The type is one of Java‘s atomic types, or the name of a class or interface. The
identifier is the name of the variable. You can initialize the variable by specifying an
equal sign and a value. To declare more than one variable of the specified type, use a
comma-separated list.
Here are several examples of variable declarations of various types. Note that some
include an initialization.
247
All of the variables used till now have been declared at the start of
the main( ) method. However, Java allows variables to be declared
within any block. A block is begun with an opening curly brace and ended by a closing
curly brace. A block defines a scope. Thus, each time you start a new block, you are
creating Scope determines what objects are visible to other parts of your program. It
also determines the lifetime of those objects. Most other computer languages define two
general categories of scopes: global and local. The scope defined by a method begins
with its opening curly brace. However, if that method has parameters, they too are
included within the method‘s scope. variables declared inside a scope are not visible
(that is, accessible)to code that is defined outside that scope. Thus, when you declare a
variable within a scope, you are localizing that variable and protecting it from
unauthorized access and/or modification. Scopes can be nested. For example, each time
you create a block of code, you are creating a new, nested scope. When this occurs, the
outer scope encloses the inner scope. This means that
objects declared in the outer scope will be visible to code within the inner scope.
However, the reverse is not true. Objects declared within the inner scope will not be
visible outside it.
/ demonstrate block
scope. class Scope
{
public static void main(String args[])
{
int x; // known to all code within main
x = 10;
if(x == 10)
248
/ x is still known here.
System.out.println("x is " +
x);
}}
As the comments indicate, the variable x is declared at the start of main( )‘s scope and
is accessible to all subsequent code within main( ). Within the if block, y is declared.
Since a block defines a scope, y is only visible to other code within its block. This is
why outside of its block, the line y = 100; is commented out. If you remove the leading
comment symbol, a compile-time error will occur, because y is not visible outside of its
block. Within the if block, x can be used because code within a block (that is, a nested
scope) has access to variables declared by an enclosing scope.
Here is another important point to remember: variables are created when their scope is
entered and destroyed when their scope is left. This means that a variable will not hold
its value once it has gone out of scope. Therefore, variables declared within a method
will not hold their values between calls to that method. Also, a variable declared within
a block will lose its value when the block is left. Thus, the lifetime of a variable is
confined to its scope. If a variable declaration includes an initializer, then that variable
will be reinitialized each time the block in which it is declared is entered. For example,
consider the next program.
/ Demonstrate lifetime of a
variable. class Lifetime
{
public static void main(String args[])
{
int x;
249
}
y is: -1
y is now: 100
y is: -1
y is now: 100
As you can see, y is always reinitialized to –1 each time the inner for loop is entered.
Even though it is subsequently assigned the value 100, this value is lost.One last point:
Although blocks can be nested, you cannot declare a variable to have the same name as
one in an outer scope.
250