Saturday, May 1, 2010

Introduction to Enums


Ghar Builder

JAVA comes with eight built-in primitive types and a large set of types that are defined
by classes, such as String. But even this large collection of types is not sufficient
to cover all the possible situations that a programmer might have to deal with.
So, an essential part of JAVA, just like almost any other programming language, is the
ability to create new types. For the most part, this is done by defining new classes.
But we will look here at one particular case: the ability to define enums (short for
enumerated types). Enums are a recent addition to JAVA. They were only added in
Version 5.0. Many programming languages have something similar.

Technically, an enum is considered to be a special kind of class. In this section, we
will look at enums in a simplified form. In practice, most uses of enums will only need
the simplified form that is presented here.
An enum is a type that has a fixed list of possible values, which is specified
when the enum is created.
In some ways, an enum is similar to the boolean data type, which has true and false
as its only possible values. However, boolean is a primitive type, while an enum is
not.
The definition of an enum types has the (simplified) form:
enum enum−type−name { list−of−enum−values };
This definition cannot be inside a method. You can place it outside the main()
method of the program. The enum−type−name can be any simple identifier. This
identifier becomes the name of the enum type, in the same way that “boolean” is the
name of the boolean type and “String” is the name of the String type. Each value in
the list−of−enum−values must be a simple identifier, and the identifiers in the list
are separated by commas. For example, here is the definition of an enum type named
Season whose values are the names of the four seasons of the year:
enum Season { SPRING, SUMMER, AUTUMN, WINTER };
By convention, enum values are given names that are made up of upper case letters,
but that is a style guideline and not a syntax rule. Enum values are not variables.
Each value is a constant that always has the same value. In fact, the possible
values of an enum type are usually referred to as enum constants.
Note that the enum constants of type Season are considered to be “contained in”
Season, which means–following the convention that compound identifiers are used
for things that are contained in other things–the names that you actually use in your
program to refer to them are Season.SPRING, Season.SUMMER, Season.AUTUMN, and
Season.WINTER.
Once an enum type has been created, it can be used to declare variables in exactly
the same ways that other types are used. For example, you can declare a variable
named vacation of type Season with the statement:
Season vacation;
After declaring the variable, you can assign a value to it using an assignment
statement. The value on the right-hand side of the assignment can be one of the enum
constants of type Season. Remember to use the full name of the constant, including
“Season”! For example: vacation = Season.SUMMER;.
You can print an enum value with the statement: System.out.print(vacation).
The output value will be the name of the enum constant (without the “Season.”). In
this case, the output would be “SUMMER”.
Because an enum is technically a class, the enum values are technically objects.
As objects, they can contain methods. One of the methods in every enum value is
ordinal(). When used with an enum value it returns the ordinal number of the
value in the list of values of the enum. The ordinal number simply tells the position
of the value in the list. That is, Season.SPRING.ordinal() is the int value
0, Season.SUMMER.ordinal() is 1, while 2 is Season.AUTUMN.ordinal(), and 3 is
Season.WINTER.ordinal() is. You can use the ordinal() method with a variable of
type Season, such as vacation.ordinal() in our example.
You should appreciate enums as the first example of an important concept: creating
new types. Here is an example that shows enums being used in a complete
program:
public class EnumDemo {
/ / Define two enum types−−d e f i n i t i o n s go OUTSIDE The main ( ) r o u t i n e !
enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
enum Month { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }
public static void main(String[] args) {
Day tgif; / / Declare a v a r i a b l e of type Day .
Month libra; / / Declare a v a r i a b l e of type Month .
tgif = Day.FRIDAY; / / Assign a value of type Day to t g i f .
libra = Month.OCT; / / Assign a value of type Month to l i b r a .
System.out.print("My s ign i s l ibra , since I was born in ");
System.out.println(libra); / / Output value w i l l be : OCT
System.out.print(" That ’ s the ");
System.out.print( libra.ordinal() );
System.out.println("−th month of the year . ");
System.out.println(" (Counting from 0 , of course ! ) ");
System.out.print(" I sn ’ t i t nice to get to ");
System.out.println(tgif); / / Output value w i l l be : FRIDAY
System.out.println( tgif + " i s the " + tgif.ordinal()
+ "−th day of the week. "); / / Can concatenate enum values onto St r ings !
}
}

Saturday, March 20, 2010

Types

JAVA, like most programming languages classifies values and expressions into types.
For e.g. String’s and int’s are types. A type basically specifies the allowed values
and allowed operations on values of that type.
Definition: A type is a set of values together with one or more operations
that can be applied uniformly to all these values.
A type system basically gives meaning to collections of bits. Because any value
simply consists of a set of bits in a computer, the hardware makes no distinction
between memory addresses, instruction code, characters, integers and floating-point
numbers. Types inform programs and programmers how they should treat those bits.
For example the integers are a type with values in the range −2, 147, 483, 648 to +
2, 147, 483, 647 and various allowed operations that include addition, subtraction, modulus
etc.
The use of types by a programming language has several advantages:
• Safety. Use of types may allow a compiler to detect meaningless or invalid code.
For example, we can identify an expression ”Hello, World” / 3 as invalid because
one cannot divide a string literal by an integer. Strong typing offers more safety.
• Optimization. Static type-checking may provide useful information to a compiler.
The compiler may then be able to generate more efficient code.
• Documentation. Types can serve as a form of documentation, since they can
illustrate the intent of the programmer. For instance, timestamps may be a
subtype of integers – but if a programmer declares a method as returning a
timestamp rather than merely an integer, this documents part of the meaning
of the method.
• Abstraction. Types allow programmers to think about programs at a higher
level, not bothering with low-level implementation. For example, programmers
can think of strings as values instead of as a mere array of bytes.
There are fundamentally two types in JAVA: primitive types and objects types i.e.
any variable you declare are either declared to be one of the primitive types or an
object type. int, double and char are the built-in, primitive types in JAVA.
The primitive types can be used in various combinations to create other, composite
types. Every time we define a class, we are actually defining a new type. For example,
the Student class defined above introduces a new type. We can now use this type like
any other type: we can declare variables to be of this type and we can use it as a type
for parameters of methods.
Before a variable can be used, it must be declared. A declaration gives a variable
a name, a type and an initial value for e.g. int x = 8 declares x to be of type int. All
objects that we declare also have to be of a specified type—the type of an object is the
class from which it is created. Thus, when we declare objects we state the type like
so: Student st = new Student();. This statement declares the variable st to be of
type Student. This statement creates a new object of the specified type and runs the
Student constructor. The constructor’s job is to properly initialize the object.
The String type is another example of an object type. Student and String are
composite types and give us the same advantages as the built-in types. The ability to
create our own types is a very powerful idea in modern languages.
When declaring variables, we can assign initial values. If you do not specify initial
values, the compiler automatically assigns one: Instance variables of numerical
type (int, double, etc.) are automatically initialized to zero; boolean variables are
initialized to false; and char variables, to the Unicode character with code number
zero. The default initial value of object types is null.

Classes

In object-oriented software, it’s possible to have many objects of the same kind that
share characteristics: rectangles, employee records, video clips, and so on. A class is
a software blueprint for objects. A class is used to manufacture or create objects.
The class declares the instance variables necessary to contain the state of every
object. The class would also declare and provide implementations for the instance
methods necessary to operate on the state of the object.
Definition: A class is a blueprint that defines the variables and the methods
common to all objects of a certain kind.

After you’ve created the class, you can create any number of objects from that
class.
A class is a kind of factory for constructing objects. The non-static parts of the
class specify, or describe, what variables and methods the objects will contain. This
is part of the explanation of how objects differ from classes: Objects are created and
destroyed as the program runs, and there can be many objects with the same structure,
if they are created using the same class.

Messages

Software objects interact and communicate with each other by sending messages to
each other. When object A wants object B to perform one of B’s methods, object A
sends a message to object B
There are three parts of a message: The three parts for the message
System.out.println{‘‘Hello World’’}; are:
• The object to which the message is addressed (System.out)
• The name of the method to perform (println)
• Any parameters needed by the method (“Hello World!”)

Encapsulation

Object diagrams show that an object’s variables make up the center, or nucleus, of
the object. Methods surround and hide the object’s nucleus from other objects in the
program. Packaging an object’s variables within the protective custody of its methods
is called encapsulation.

Encapsulating related variables and methods into a neat software bundle is a
simple yet powerful idea that provides two benefits to software developers:
• Modularity: The source code for an object can be written and maintained independently
of the source code for other objects. Also, an object can be easily
passed around in the system. You can give your bicycle to someone else, and it
will still work.
• Information-hiding: An object has a public interface that other objects can use
to communicate with it. The object can maintain private information and methods
that can be changed at any time without affecting other objects that depend
on it.

Fundamentals of Objects and Classes

We move now from the conceptual picture of objects and classes to a discussion of
software classes and objects.4
Objects are closely related to classes. A class can contain variables and methods.
If an object is also a collection of variables and methods, how do they differ from
classes?

Objects and Classes
Objects
In object-oriented programming we create software objects that model real world objects.
Software objects are modeled after real-world objects in that they too have
state and behavior. A software object maintains its state in one or more variables. A
variable is an item of data named by an identifier. A software object implements its
behavior with methods. A method is a function associated with an object.
Definition: An object is a software bundle of variables and related methods.
An object is also known as an instance. An instance refers to a particular object.
For e.g. Karuna’s bicycle is an instance of a bicycle—It refers to a particular bicycle.
Sandile Zuma is an instance of a Student.
The variables of an object are formally known as instance variables because they
contain the state for a particular object or instance. In a running program, there
may be many instances of an object. For e.g. there may be many Student objects.
Each of these objects will have their own instance variables and each object may have
different values stored in their instance variables. For e.g. each Student object will
have a different number stored in its StudentNumber variable.

Thursday, March 11, 2010

Classes and Instances

The next important principle of object-oriented programming is
All objects are instances of a class. The method invoked by an object in
response to a message is determined by the class of the receiver. All objects
of a given class use the same method in response to similar messages.
Fred is an instance of a category or class of people i.e. Fred is an instance of a
class of florists. The term florist represents a class or category of all florists. Fred is
an object or instance of a class.
We interact with instances of a class but the class determines the behaviour of instances.
We can tell a lot about how Fred will behave by understanding how Florists
behave. We know, for example, that Fred, like all florists can arrange and deliver
flowers.
In the real world there is this distinction between classes and objects. Real-world
objects share two characteristics: They all have state and behavior. For example, dogs
have state (name, color, breed, hungry) and behavior (barking, fetching, wagging tail).
Students have state (name, student number, courses they are registered for, gender)
and behavior (take tests, attend courses, write tests, party).