Monday, 26 April 2021

Evolution of Java Programming Language

Evolution of Java:

First of all, The Java programming language and it's tools that we currenly using is not what actually expected. This language started as a project to give solutions for embedded devices, mobile phones and other portable peripherals. 

Initially, the Java was called Oak. 


Why it is Oak first..? and Why it transformed to Java..?


The team of five technocrats including Dr. James Gosling and also known as Dr. Java, together working on a project, which expected to give solutions on embedded devices, portable smart devices and TV Set top Boxes etc. at Sun Micro Systems. 

In the process of achieving this solution, at their breaktime, team used to relax with a coffee by having a glimpse on a scenery of Oak tree next to their facility. 

Once the project has come to conclusion and in the process of giving a title to it, they noticed the Oak trees [Always observing them in their break time], they named this programming language as Oak.

Oak Logo


Why it transformed to Java..?

When the first version of Oak is about to release, The trademark search revealed that Oak is already registered for Oak Technologies company. Then, Java was named to this project.

In the previous paragraph, it is told that, "team used to relax with a coffee by having a glimpse on a scenery of Oak trees next to their facility...". When one of the team members asked to barista, [Usually a coffee bar tender is called with that name] about the name of the coffee bean that she/he serves in the break..? The reply was "Coffee is made of Java Beans.."




Immediately the name of the project confirmed to be Java and first version 1.0 is released into the industry in the year 1994. Rest we know, how Java programming language was developed and evolved into the bigger scope like smart phones, Inbuild JRE into web browsers etc.

The Oracle claims that more than 1 billion devices uses JRE and millions of developers uses Java and it's tools every day.

Java Version 16  is released in March 2021.




Few of the Java products are:

  • TV Set top Boxes,
  • Android OS
  • Realtime JVMs
  • Embedded devices
  • Almost all Browsers


Java evolved almost 30 years ago since 1994 from it's first version and almost all devices used Java and it's products directly or indirectly in their daily use. Hope Java continues it's charisma infinity days and will do wonders.


Happy Coding..! :)  





Thursday, 22 April 2021

Tutorial on Java programming language and IDEs

IDE: Integrated Development Environment

Integrated development environment, in short IDE is a convenient environment to write, execute and  debug the code or programs on a single platform. IDEs support not only writing code smoothly but also provides a provision to write scripts, XML files, simple text files and build scripts like Ant, Maven are few among others.

In short IDEs are development environments to execute complete development activities using one application.


IDEs and Editors

IDEs and Editors fulfills the same purpose. That is writing code. But IDEs are glued or closely works with respective programming language's compilers, runtime environments, profilers and other language specific tools to put developer in a comfortable zone. 

Some of the features of IDE:
  1. Auto completion
  2. Syntax Highlighting
  3. Code debugger
  4. Profilers
  5. Multipage editors

Auto completion:

Auto completion feature suggests APIs [methods, classes and interfaces] and keywords etc as we start typing in the editor. This helps in not spending much time on typing APIs.




Syntax Highlighting:

Syntax is a structure of arranging APIs, operators and keywords to make computer instructions, subsequently which becomes executables.

Class names, method names, operators and Keywords are highlighted with different colors and formats to differentiate them and to increase the readability. Syntax highlighting helps importantly when single program or file has thousands of statements or lines.

Code Debugger:

Debugger is a feature to identify bugs, errors and shows intermittent results of set of programming instructions or statements and subsequently helps in correcting and developing a bug free computer programs






Profilers:

Profiler is the tool usually shipped along with JDK [if it is a Java] and helps in understanding the memory usage of a computer application graphically. These graphics includes different charts and GUI controls. 



Profilers gives information about

  •  Memory usage,
  •  details of Threads being used,
  •  Heap dumps,
  •  CPU utilization etc

Multipage Editors:

Multipage editors shows the same file content in multiple perceptions. For example XML file content can be viewed in different views. 1. Hierarchical view 2. Simple text format and 3. Graphical view etc


  


Few more notable points about IDEs and Editors:

  1. IDEs are scalable to support multiple programming languages
  2. Editors can not be glued to a programming language's compiler
  3. Editors does not support Auto completion
  4. Editors does not support code debugging
 

IDEs for Java and IDEs built using Java

Usually IDEs are developed using different programming languages where, few of them are open source and few are commercial. Few of the industry endorsed IDEs are:

  • Eclipse
  • Netbeans
The above listed IDEs are developed using Java programming language and also used to develop Java applications and programs. It is little tricky to understand for beginners. 
And both IDEs share common features like scalability, modularity, code completion etc.
You can download Eclipse and Netbeans distributions from their respective sites.


Happy Coding! :)

Saturday, 10 April 2021

Tutorial on Agile Methodology with SCRUM Framework Basics

Software development activities can be managed and taken care with different life cycle models. These life cycle models has became legacy since few years. Few of the available Software Development Life Cycle Models in short SDLC are Win-Win Model and Waterfall Model etc.

These traditional models has different phases of development. 
       1. Requirements 
       2. Analysis 
       3. Design 
       4. Implementation 
       5. Test 
       6. Documentation 
and 7. Maintenance 

In SDLC, the above stages are freezed one after the other. If developer is in Design phase and realized that there could be a possibility of change in requirements, then it is not possible to go back one phase and fix in Requirement phase. 
These scenarios and use cases has brought Agility in to existence in software development activities.  


Agility in English: 


Agility means "able to move quickly and easily".  Being agile in software development makes the development move or progressed quick enough and flexible to go back and forth through out the development phases and complete the activities on time.


Agile Methodology:



"Agility is the ability that gives better productivity..."


Agile is the ability to create and respond to change. It is a way of dealing with and ultimately succesing in an uncertain environment. Agile methodology has different subsets also called as frameworks. 
SCRUM and Kanban are few among others. These frameworks can be adapted as process solutions based upon different development needs.


SCRUM Framework:

Scrum is a process framework used to manage product development and other knowledge work.

SCRUM framework manages the development activities biweekly, 3 weeks or 4 weeks. This duration is called as Sprint. Usually it is not recommended to have more than 6 members or developers in a team.


Sprint:

Sprint is a duration of time where few backlogs are realized as tasks and completed by development team. Once the Sprint is completed these software changesets goes into release version of the application software.
Based on the need Sprint duration can be 2 or 3 or 4 weeks. But most of the Scrum experts suggest Biweekly sprints.


SCRUM and Meetings:


    1. Standup call
    2. Review Meeting
    3. Grooming Session
    4. Retrospective

Standup calls are held everyday morning that lasts for 15 minutes. And following are discussed:

    1. What is done yesterday?
    2. What is planned today?
    3. Any Roadblocks?

NOTE: It is not recommended to consider more than 15 minutes for Standup meeting

Review Meeting is held at the end of the Sprint showing different works and demos of Sprint's development activites.

Grooming Session lasts for one and half hours. During this session tasks are pulled from backlogs and discussed the following:

    1. Estimations for the Tasks
    2. Deciding the priorities
    3. Severity levels
    4. Assignments


Retrospective meetings are held after the end of Sprint and discussed about:

    What went correct..?
    What went wrong..?
And Appreciations if any...
     

Scrum framework and few notable points:

  1. All requirements are consolidated as backlogs along with its descriptions and other details.
  2. Estimations of backlogs are done with the Poker Cards
  3. Poker cards are numbered in a Fibonacci order
  4. SCRUM is managed by Certified SCRUM Master or SCRUM Coach
  5. If Standups are not held with in 15 minutes, can be considered as limitation.
  6. Virtual Boards are considered over Physical boards, if members are in remote locations 

SCRUM and Agile Supporting Tools:

  1. Microsoft Azure Boards
  2. Atlassian JIRA
  3. IBM - Rational Team Concert 


SCRUM Limitations:

  • Geographically if team members are located in different places, Agile may not be effective


Monday, 11 January 2021

Tutorial on Java API support for Exception Handling

First of all, please read below blog post to understand basics of Exception Handling in java.

Exception handling and java keywords


To continue from there, Basically Java default API has hierarchy of  java classes to support different uses cases of exceptions. 

The parent class of all Exceptions and Errors is Throwable. Please check below pictorial representation of  API Hierarchy.

Exception:

The class Exception and any subclasses that are also not subclasses of RuntimeException are checked exceptions.

And all subclasses of RuntimeException and RuntimeException class itself are Unchecked exception. Rest all are Checked exceptions

Examples of Unchecked Exceptions: 

         ArrayIndexOutOfBoundException

         NullPointerException

Error:

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.

Examples: The ThreadDeath error


Wednesday, 6 January 2021

Tutorial on Java - Swing custom components - Rounded JButton

Unlike AWT, Java Swing tool kit provides feasibilty to create custom components and containers.

To understand Java GUI toolkits more clearly, please read my other articles on Swing and AWT. 

In this article I focus more on building custom components.

Let us see how to create simple Rounded JButton. The below program demonstrates How rounded JButton can be created and added to a JFrame.

 

Program:


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class RoundedJButton extends JButton {

/**
*/
private static final long serialVersionUID = 1L;

public RoundedJButton(String title) {
super(title);
Dimension size = getPreferredSize();
size.width = size.height = Math.max(size.width, size.height);
setPreferredSize(size);

setContentAreaFilled(false);
}

@Override
protected void paintComponent(Graphics g) {
if (getModel().isArmed()) {
g.setColor(Color.lightGray);
} else {
g.setColor(getBackground());
}
g.fillOval(0, 0, getSize().width - 1, getSize().height - 1);

super.paintComponent(g);
}

@Override
protected void paintBorder(Graphics g) {
g.setColor(getForeground());
g.drawOval(0, 0, getSize().width - 1, getSize().height - 1);
}

Shape shape;

@Override
public boolean contains(int x, int y) {
if (shape == null || !shape.getBounds().equals(getBounds())) {
shape = new Ellipse2D.Float(0, 0, getWidth(), getHeight());
}
return shape.contains(x, y);
}

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {

JFrame frame = new JFrame();
frame.setTitle("It's all about Java...");
frame.setSize(150, 150);
GridLayout layout = new GridLayout();
layout.setRows(1);
layout.setHgap(10);
layout.setVgap(10);
frame.setLayout(layout);

JTextField field1 = new JTextField();
field1.setText("This is a textfield!");
frame.getContentPane().add(field1);

RoundedJButton button = new RoundedJButton("Browse");
button.setBackground(Color.gray);
button.setForeground(Color.GREEN);
frame.getContentPane().add(button);

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.pack();
frame.setVisible(true);
}
});
}
}

There are two parts in the program. First part creates RoundedJButton component by extending JButton. and second part creates JFrame and appends two components. 1. RoundedJButton and 2. JTextField

First Part:


RoundedJButton overrides paintComponent(Graphics g) and paintBorder(Graphics g) to get the circled shape to the Button. 

Second Part:

Second part contains main method which creates JFrame object and adds 2 components to JFrame dialog.

Also applies System look and feel by using following

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

I will explain clearly about pluggable look and feels also known as PLAF in future articles.

That's all for now!

Happy coding... :) 

Sunday, 9 August 2020

Tutorial on Exception handling and java keywords

Exception:

Exception in a programming language and in English language is pretty similar. Exception means being different from or not following the rules. And in programming language like Java, exception is  an event which occurs during the execution of a program that disturbs the complete flow of application or program.

When something beyond expected happens while executing a program is considered as an error. handling these errors or abnormality is called as Exception handling.


Exception Handling:

Exception handling in java is managed with the help of java keywords and java API support.. 

            1. Java Keywords

            2. Java API support


Java Keywords: 

There are 5 keywords in Java.

          1. Try

          2. catch

          3. finally

          4. throw

   and 5. throws

These five keywords used all together or combination of few keywords are used on need basis.

1. Try:

The code or set of instructions which are prone to errors or exceptions are enclosed in try block.

For example dividing a five or some number with zero [5/0]. The result of 5/0 is undefined and in Java,  this scenario is considered as exception.

2. Catch:

Usually try block is followed by a catch block. If some exception is occurred in try block, the execution control is moved to catch block instead of  continuing the execution of  try block's code. 

The purpose of catch block is, handling the exceptions that are raised in try.

There is a possibility of handling multiple scenarios in multiple catches. 

NOTE: Multiple catches can be written for single try.

Java code example:

           try{

                   ---                     // code

                } catch(OtherException e) {

                   ---                    // code

               }catch(AnotherException e) {

                }      

3. Finally:

Usually if there is an exception in try block, the rest of the lines in try are not executed and control moves on to catch block. And if there is no exception at all in try block control never moves to catch block. Then catch block is considered to be dead code. 

Then where must we write mandatory code? 

So, finally block is written after try and catch which gets executed always. 

Java code example:

            try{

                  ---

                } catch (Exception e) {

                  ---

                } finally{

                  ---              // mandatory code for execution

                } 


NOTE: Always put mandatory code in finally block. For example: closing IO resources connections like network and database connections etc

4. Throws and Throw:

Throws and throw keywords works along with Java API support. I will explain the Java API support for Exception handling in next subsequent articles. 

For now, we can understand that for every exception scenario there is one Java class(Java API). Example: Number divided by zero. [5/0]. The result is ArithmeticException

Java code example:

     try{

               int result = 5/0;

                ---        // other code

         }catch(ArithmeticException e) {

                ---        // exception of try block is handled here   

         }  

  Why there is no "throws" keyword here....?

The alternative solution for above snippet with throws and throw for checking election voting age eligibility exception is:

void votingAgeNumber() throws ArithmeticException{

                int age = 12; 

                if(age <=18) {

                           throw new ArithmeticException("Age is not sufficient to vote");

                 }

                 ---       // other code              

           }

NOTE: Sometimes "throws" keyword works as an alternative solution for try and catch blocks. The throws keyword is used instead of try and catch.

Example:

Solution with throws:

void divideNumber() throws ArithmeticException{

         int result = 5/0;

 } 

 And snippet with try and catch:        

void divideNumber(){

   try{

      int result = 5/0;

    }catch(ArithmeticException e){

     ----      // handle exception

    }

} // method end                      

         

The above both solutions are same, but with different keywords.


 Some key points:

1. There can be one try with multiple catch blocks.

2. Try block can be followed by either catch or finally block.

3. Or both can be followed

4. Throws is like warning that exception can be thrown and throw keyword is real accident took place.


I wrote here  https://www.allabtjava.com/2021/01/java-api-support-for-exception-handling.html on checked exceptions and runtime or unchecked exceptions.



Happy coding... :)





   

Sunday, 29 April 2018

Tutorial on Java and OOPS concepts

Java is an object oriented programming language which can be downloaded and installed in your local Machine from java.com


To explain java binaries and tools requires block diagram which gives clear picture. For now I brief few important tools.

  • JDK - java development toolkit
  • JVM - Java virtual machine
  • JRE - Java Run time environment
From oracle site we can download JDK which is shipped along with JVM and JRM. Mostly java programmers need the JDK. For end users JRE alone is enough.

Basic OOPS characteristics are

Inheritance

Encapsulation

Abstraction

and Polymorphism

The above concepts collectively makes application software extendable and changeable with less effort.
Also helps in Developing design patterns. Design patterns gives solutions for common challenges usually a programmer faces while development applications.
Factory design pattern, Abstract design pattern, Builder pattern etc. I explain these Design patterns in another article.

Inheritance:
Inheritance is all about reusing one class behavior and members in it's child class. In java terminology these classes are called as super class and sub class. If class B extends class A then, class A becomes super class and class B becomes class A's sub class.

public class A{
  public A(){
 }
   -------
}
public class B extends A{
   public B(){
    } 
    -------
}   
Encapsulation:
Encapsulation is a technique of putting the source code all together within a unit. Java uses class and interface as keywords to represent unit. Data Hiding is one of the buzzwords which is possible only with implementation of Encapsulation in the program.

Abstraction:
Abstraction is the concept of hiding the irrelevant data from client/user visibility. To implement this feature java uses abstract keyword. this can be be prefixed to a class and methods. Once the class is abstract class then it's object can not be created. And id one or all methods of same class are followed by abstract keyword it can not be implemented.
The point here is java programming language gives implementation freedom to the developers where ever expected.
Sometimes java program is written to a another programmer rather a end user. Usually this code is called Application programming interface in short API. When a programmer writes a program with the intention to be used by another programmer, He/She may not need all the details [line by line] instruction's description is not required. Right?
The punch line is abstraction helps in showing only relevant data to the client of our program.
One of the mostly used design pattern is abstract factory design pattern.

Polymorphism:
In generic terminology poly means many morph means forms. It means many forms of a single method names.
Polymorphism can be achieved within the class or using inheritance i.e extends keyword.

Overloading and overriding:

Overloading rules:
within the class a same method can be duplicated but accepts different arguments and returns different result
  1.       Number of arguments must be different
  2. Or  Sequence of arguments must be different
  3. Or  Type of the arguments must be different.
Uses:
Let us take a method .
     int add(int a, int b){
        return a+b;
     }

Now let us overload this method to add decimal values
 float add(float a, float b){
     return a+b;
 }
Now based on the arguments passed to the add() respect add() method will be invoked.
Overriding:
Overriding is possible only by using inheritance.For an instance super class has add(int a, int b). and sub class also needs add operation but computes differently. Then programmer simply overrides the add() of super class overrides the add() with his new implementation. 
public class SuperClass{

  int add(int a, int b){
       ....
   }
}

public Subclass extends SuperClass{
@Overrides
int add(int a, int b){
// computes his own add operation
}
} 
In next article I write about tools of JDK and JRE and internals of JVM Java Virtual Machine.

Please click the link for more good look and feel and elegant font

Happy Coding. ;-)


Tutorial on Swing Components

 Swing library and it's categorization of components and controls Basically, Swing library provides around 50+ components. These all com...