sábado, 25 de agosto de 2018

Clases Abstractas, Interfaces y Herencia en Java.


Clases abstractas

Las clases abstractas ( se los indica con el modificador abstract), permiten definir un esqueleto o estructura genérica, donde se nombran  tipos de funciones . La clases abstracta actúa como una clase padre en la cual no se hace una definición precisa de las funciones , sino mas bien la descripcion de carcateristicas que seran comunes a una familia de clases hijas.  

Interfaces 

Las interfaces son parecidas a las clases abstractas, porque se nombran funciones genericas que son implementadas en las clases hijas
Una clase no puede implementar funciones de dos clases abstractas disitntas, no puede decender de dos clases diferentes. Pero si puede implementar las funciones de interfaces distintas

Clases hijas 

Las implementacion de las funciones especificas, constructores particulares, y tipos argumentos admitidos se hacen en las clases hijas. Cada clase hija indica su descendencia de la clase abstracta mediante el modificador extends  y queda obligada a  realizar una definición propia de las clases abstractas de la cual desciende 

Un constructor define que tipo de componentes se requieren para representar determinada función, pues en general existe mas de un camino para representar la funcion de acuerdo al uso que quiera darse. Por ejemplo un rectángulo puede definirse por sus cuatro vértices, o por dos de ellos.

Un método define que variables se admiten como argumento, define sentencias que procesan las variables, y  puede definir  o no algún tipo de retorno. En nuestro caso el perimetro del rectangulo es un metodo, que procesa los vertices bajo una formula y luego hace un retorno (return) del resultado 

Veamos con un ejemplo. 


Por ejemplo, creemos una familia de funciones que seran las figuras geométricas. La clase abstracta sera Geometrias Planas, que contiene dos fuciones genericas que carcaterizan a las Geometrías Planas que son su área perímetro, las que quedan sin definir aun

La clase abstracta padre: Geometrías Planas 



public abstract class GeometriasPlanas {
public abstract double perimetro();
public abstract double area();
}
// Linea1,2,3 public: Es un modificador de acceso e indica que el elemento es accesible //desde cualquier clase
// Linea 1,2,3 abstract:Esto indica que la  Geometrias Planas clase soportara herencia, //tendra clases hijas
// Linea 3  y 4 double: Indica que las funciones  genéricas  perimetro y area admite un //numero flotante 
// Linea 3 public abastract double: Indica que el metodo sera accesible desde cualquier //clase en el //paquete (public), que no sera definido aqui sino en clases hijas (abstract), //y que admitira un numero flotante con comas (double) 

Las clases hijas: Rectangulo y Circulo 

public class Rectangulo extends GeometriasPlanas {
protected double x1,y1,x2,y2;
public Rectangulo(double Cx1, double Cy1, double Cx2, double Cy2){
x1=Cx1;
y1=Cy1;
x2=Cx2;
y2=Cy2;
}
public Rectangulo(){this (0.0,0.0,1.0,1.0);}
public double perimetro(){
return 2.0*((x2-x1)+(y2-y1));
}
public double area(){
return (x2-x1)*(y2-y1);
}
}
//Linea 1: La clase Rectángulo desciende de GeometriasPlanas, lo cula se indica con //extends
//Linea 2: El modificador protected indica que las variables seran visibles en
//la clase actual y sus clases derivadas, pero no en las clases superiores
//Linea 2: x1,y1,x2 e y2 son variables, pues cada rectangulo a construirse puede tomar un valor diferente de estos parametros 
//Linea 3-8: Se define un Rectangulo en el plano cartesiano con las coordenadas
//de dos vertices P1 (x1, y1) y P2(x2,y2) estas lineas constituyen el constructor de la //clase Rectangulo, que definen  los parametros necesarios, 
// Linea 10 y 13: Es obligación para Recatangulo una definición de los métodos perímetro
// y área, por derivar de Geometrías Planas 
// Linea 11 y 14: Con return se devuelve las operaciones de area y perimetro
// a ser calculadas con los datos de las coordenadas  perimetro() y area() son conocidos //como métodos 

public class Circulo extends GeometriasPlanas {
public static final double PI=3.14;
public double x,y,r;
public Circulo(double Cx, double Cy, double R){
x=Cx;
y=Cy;
r= R;
}
public Circulo(){this (0.0, 1.0, 2.0);}
public double perimetro(){
return 2.0*PI*r;
}
public double area(){
return PI*r*r;
}
 } 
//Linea 1: La clase Circulo desciende de GeometriasPlanas, lo cula se indica con extends
//Linea 2: El modificador static indica que la misma existe sin que se defina un valor de la misma
//El modificador final indica que se trata de un valor no modificable, es decir una constante 
//Linea 4: Se define un Circulo en el plano cartesiano con las coordenadas
//del centro  (x, y) y el radio R
//Linea 10 y 13: Es obligacion para Circulo una definicion de los metodos perimetro
//y area, por derivar de Geometrias Planas 
//Linea 11 y 14: Con return se devuelve las operaciones de area  y perimetro
//a ser calculadas con los datos de las coordenadas.




El programa principal

Se copian en un nuevo projecto en el entorno   de programacion Eclipse  los scripts de la clase padre Geometrias Planas e hijas Rectangulo y Circulo, así como el programa principal 


Una vez ejecutado La salida de la consola  del programa principal es

El centro del circulo es:2.0;2.0
El radio del circulo es:3.0
El perimetro del circulo es:18.84
El area del circulo es:28.259999999999998
El perimetro del recatngulo es:20.0
El area del rectangulo es:24.0








jueves, 23 de agosto de 2018

Sentencias Repetitivas, Bucles o Iteraciones. Matrices

Sentencias Repetitivas

Las sentencias repetitivas, también llamadas iteraciones o bucles, permiten ejecutar de manera reiterada una sentencia  o mas sentencias, mientes se  cumpla una determinada condición lógica que debe ser verdadera. Se utilizan también variables que se van  aumentando o disminuyendo en cada iteracion, según sea el caso. En Java hay tres tipos diferentes de sentencias repetitivas: for, while y do-while.

 Sentencia For

Es un bucle o sentencia repetitiva que:
a)Ejecuta la sentencia de inicio.
b) Verifica la condición de término
c) Si la condicion es cierta, realiza la/s sentencia/s entre llaves,  aumenta o disminuye la variable de iteracion y  vuelve a consultar la condición de termino, repitiéndose el ciclo.
d) Si la condición es falsa, sale del bucle y continua con las demás sentencias del programa si los hay.


Sintaxis:

for ( inicio; condicion de termino; iteracion)
{
Sentencia_1;
Sentencia_2;
}

Sentencia While

Es un bucle o sentencia repetitiva que:
a) Nececita que la variable de inicio este definida previamente e iniciada, antes de la declaración del while.
b) Verifica la condición de término 
c) Si la condicion es cierta, realiza la/s sentencia/s entre llaves
d) Aumenta o disminuir la variable de iteracion  que debe ser indicado en una sentencia de iteracion,
 Luego vuelve a consultar la condición de termino, repitiéndose el ciclo.
e) Si la condición es falsa, sale del bucle y continua con las demás sentencias del programa si los hay.

Sintaxis:

inicio;
while ( condicion de termino)
{
Sentencia_1;
Sentencia_2;
iteracion; 
}

Sentencia  Do While

Es un bucle o sentencia repetitiva que:
a) Nececita que la variable de inicio este definida previamente e iniciada, antes de la declaración del 
Do.
b) Ejecuta la/s sentencia/s  entre llaves, al menos la primera vez 
c) Aumenta o disminuye la variable de iteracion  que debe ser indicado en una sentencia de iteracion
d) Verifica la condición de término, 
e) Si la condicion es cierta, vuelve a ejecutar el cuerpo con las sentencias y la iteracion. Si no es cierta sale del bucle y sigue con el programa.
,
Sintaxis:

inicio;
do
{
Sentencia_1;
Sentencia_2;
iteracion; 
}while ( condición de termino)


Cuando usamos cada uno de los Bucles 

Usamos FOR cuando conocemos de antemano las veces que debe realizare la iteracion
Usamos WHILE  cuando desconocemos cuentas veces debe realizarce la iteracion
Usamos DO WHILE cuando queremos que la/s sentencia/s del cuerpo se ejecuten al menos una vez

En algunos casos podemos utilizar cualquiera de los tres métodos para resolver el problema. 
A continuación un programa en Java que imprime la Tabla del Siete usando los tres métodos de bucles  





Matrices

Son muy útiles las matrices y tienen aplicación en muchas áreas de la vida moderna pues representan una manera practica  y bastante estudiada para agrupar datos y analizarlos: asi sirven para manipular datos de casi cualquier cosa en las ciencias, en la ingeniería y  en general en la información.

Una Matriz A

A
1    -2     3
0     2      1 
5     1      0

Vectores fila y vectores columna 

Las filas de A son en sentido vertical. y se denominan vectores fila
Fila 1: 1, -2,3  Fila 2: 0,2,1  Fila 3: 5,1,0
Las columnas de A son en sentido vertical y se denomina vectores columna
Columna 1: 1,0,5 Columna 2: -2,2  Columna 3: 3,1,0

Orden de una Matriz 

La nomenclatura:  es Nombre de la Matriz  Numero de Filas x  Numero de Columnas

La matriz A es formalmente A 3x3 , ya que como vimos tiene tres filas y tres columnas

Las matrices que tienen igual numero de columnas y filas se llaman matrices cuadradas, pero no necesariamente deben tener el mismo numero de filas y columnas

Suma y Resta de Matrices Cuadradas

Sean A y B  matrices cuadradas 3x3

A
1    -2      3
0     2      1 
5     1      0


1       1      0
2       0     -3
4        6    -2

Para obtener A+ B solo debemos sumar algebraicamente los elementos que estan en la misma posicion

A+ B 
(1+1)   (-2+1)   (3+0)
(0+2)   (2+0)     (1+-3)
(5+4)    (1+6)    (0+-2)

A+ B

2   -1    3
2    2    -2
9    7    -2

Para obtener A -B solo debemos restar algebraicamente los elementos que están en la misma posición

A- B

(1 -1 )   (-2 -1)     (3-0)
(0 -2)    (2 -0)      (1- -3)
(5-4)     ( 1- 6)     ( 0- -2)

A - B

0     -3    3
-2     2    4
1     -5    2

Multiplicación de Matrices

Para obtner la Matriz Producto es necesario multiplicar los elementos de las  filas de A por los elementos de las Columas de B 
A
1    -2      3
0     2      1 
5     1      0


1       1      0
2       0     -3
4        6    -2

AxB

Fila 1A x Columna 1B         Fila 1A x Columna 2B      Fila1 Ax Columna3 B
Fila 2A x Columna 1B         Fila 2A x Columna 2B      Fila2 Ax Columna3 B
Fila 3A x Columna 1B         Fila 3A x Columna 2B      Fila3 Ax Columna3 B

(1.1+-2.2+ 3.4)      (1.1+ -2.0 + 3.6)   (1.0 + -2.-3 + 3.-2)
(0.1 + 2.2+ 1.4)     (0.1 +2.0 + 1.6 )    (0.0+ 2.-3 + 1.-2)
(5.1 +1.2  +0.4  )    (5.1 +1.0+ 0.6  )   (5.0+ 1.-3 + 0 .-2)

AxB

15     19    0
6        6    -8
7        5    -3    

Multiplicación de Matrices en Java 

El siguiente programa en Java nos permite introducir los componentes de dos matrices y obtener el resultado
Para el efecto utilizaremos interaciones con bucles for

El programa principal main() se llama UseMultimax

public class UseMultimax {

public static void main(String[] args) {
// TODO Auto-generated method stub
Multiplicacion miobjeto=new Multiplicacion();
miobjeto.Entrada_Matriz1();
miobjeto.Entrada_Matriz2();
miobjeto.Multiplica();
miobjeto.Imprime();
}


}

Luego en el programa Multiplicación se crean los metodos que permiten crear las matices, multiplicar e imprimir los resultados, que seran convocados por el programa principal.

import java.util.Scanner;
public class Multiplicacion {
private int M=3;
private int N=3;
private int P=3;
private int Matriz1 [][]=new int[N][M];
private int Matriz2 [][]=new int[M][P];
private int Matriz3 [][]=new int[N][P];
Scanner entrada=new Scanner(System.in);

public void Entrada_Matriz1(){
System.out.printf("\n Este programa multiplica dos matrices ");
System.out.printf("\n Introduzca los valores de la primera matriz");
for(int i=0;i<N;i++)
for(int j=0;j<M;j++){
System.out.printf("\n Introduzca el valor de la %d columna y la %d fila",i+1,j+1);
Matriz1[i][j]=entrada.nextInt();
}
}
public void Entrada_Matriz2(){
System.out.printf("\n Introduzca los valores de la segunda matriz");
for(int i=0;i<M;i++)
for(int j=0;j<P;j++){
System.out.printf("\n Introduzca el valor de la %d columna y la %d fila",i+1,j+1);
Matriz2[i][j]=entrada.nextInt();
}
}
public void Multiplica(){
for(int i=0;i<N;i++)
for(int j=0;j<P;j++)
for(int k=0; k<M; k++){
Matriz3[i][j]+=Matriz1[i][k]*Matriz2[k][j];
}

}
public void Imprime(){
System.out.printf("\n Esta es la primera matriz \n");
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
System.out.printf("%3d",Matriz1[i][j]);
}
System.out.printf("\n");
}
System.out.printf("\n Esta es la segunda matriz \n");
for(int i=0;i<M;i++){
for(int j=0;j<P;j++){
System.out.printf("%3d",Matriz2[i][j]);
}
System.out.printf("\n");
}
System.out.printf("\n Esta es la matriz producto \n");
for(int i=0;i<N;i++){
for(int j=0;j<P;j++){
System.out.printf("%3d",Matriz3[i][j]);
}
System.out.printf("\n");
}
}



}








martes, 21 de agosto de 2018

Casting y Bifurcaciones

Casting

Es la acción de convertir  una variable de un tipo de dato de mayor jerarquia (  ej flotante), a otro de menor jeraquia (ej. entero)

Ejemplo float c = 3,1458;
int b;
b=(int) c;
Luego b = 3;

Las conversiones de tipos de variables son muy útiles al programar, aunque como contrapartida reducen la precisión

Bifurcaciones


Las bifurcaciones permiten dirigir el flujo del programa para ejecutar una de entre varias opciones posibles, a partir  del valor de una variable o de una expresión lógica  Existen dos bifurcaciones diferentes: if y switch.

Bifurcación if

Esta estructura permite ejecutar una o mas sentencias a partir de si es verdeara o no la expresión de comparación (se ejecuta si la expresión de comparación es verdadera).
Su forma es :

if (Expresion que debe ser verdadera) {
sentencias;
}

Las llaves {} sirven para agrupar en un bloque las sentencias que se han de ejecutar, y no son necesarias si sólo hay una sentencia dentro del if.

Bifurcación if else

Semejante a la anterior, pero permite tener dos opciones. Las sentencias incluidas en el else se llevan a cabo si no es verdadera  la expresión de comparación ,

if (Expresion que debe ser verdadera) {
sentencias X;
} else {
sentencias Y;
}

Bifurcación if elseif else

Por medio de esta estructura podemos tener mas de una expresion para comparar. Si la primera condición no se cumple, se intenta con la segunda , hasta encontrar una verdadera.  Si es que no se cumple ninguna de las expresiones se ejecutan las sentencias correspondientes al else.

if ( Expresion de Comparacion 1 ) {
sentencias 1;
} else if (Expresion de Comparacion 2) {
sentencias 2;
} else if (Expresion de Comparacion 3) {
sentencias 3 ;
} else {
sentencias 4;
}

El siguiente programa nos permite calcular el Indice de Masa Corporal, utiliza Casting y Bifurcaciones






Sentencia switch

Se aplica del mismo modo que  la bifurcación if elseif else cuando expresión  de comparación es una sola pero puede tomar con distintos valores. Su formato es :

switch (expresion de comparacion) {
case valor1: sentencias 1; break;
case valor 2: sentencias 2; break;
case valor 3: sentencias 3; break;
case valor 4: sentencias 4; break;
case valor 5: sentencias 5; break;
case valor 6: sentencias 6; break;
default: sentencia 7;
}

Las características más importantes de switch son las siguientes:

1. Cada sentencia case se corresponde con un único valor de expresion de comparacion  No se pueden establecer rangos o condiciones sino que se debe comparar con valores concretos.

2. Los valores diferentes a los case  se pueden gestionar en default, que es opcional.

3. En ausencia de break, cuando se ejecuta una sentencia case se ejecutan también todas las case que van a continuación, hasta que se llega a un break o hasta que se termina el switch.

Ejemplo: Numero Primos del 1 al 10.

int c;...
private static Scanner entrada;
......
System.out.printf(...Introduzca un numero del 1 al 10...);

c= entrada.nextInt();

switch (c) {
case  1: // Se compara con el numero 1
case  3 : // Se compara con el numero 2
case 5: // Se compara con el numero 5
case 7: // Se compara con el numero 7
System.out.println(" Es un numero primo "+ c); break;
default:
System.out.println(" No es un numero primo " + c );
}

lunes, 20 de agosto de 2018

Aplicaciones Interactivas con Java

Haciendo una aplicación interactiva 


Una característica muy utilizada en muchas aplicaciones, en especial en las de teléfonos celulares, es que sean interactivas  con el usuario.

La manera mas sencilla de hacerla interactiva es solicitar un dato o respuesta al usuario, quien lo ingresara por el teclado y luego recibirá un resultado de parte de la aplicación.

La aplicación basica que presento  y cuyas sentencias y lineas se comentan, es una que me pide ingresar el radio para calcular el área de un circulo  y se ha ha programado y probado en el entorno de programación Eclipse.



En Java se pueden utilizar muchos sub-programas ya hechos

Esta es una de las características mas poderosas de Java: poder utilizar una gran cantidad de sub-programas ya hechos que nos ayudan con tareas especificas y nos permiten obtener nuestra aplicación mucho mas rápido.
Muchos de estos sub-programas ya vienen incluidos en Java un entorno de programación como Eclipse. 
Si aun no tienes un entorno de programación, fijate en la entrada Comenzando a Programar en Java con Eclipse 

Librerías 

Una librería es el lugar donde se encuentran estos  sub-programas relacionados que hacen determinada tarea 
Para utilizar una determinado sub-programa de una librería lo importamos colocando esta sentencia import antes del inicio de la clase(class)

import java.util.Scanner

Esta sentencia nos permite acceder al sub-programa ya hecho Scanner que tiene por finalidad leer lo que ingresamos por el teclado. Esta función Scanner pertenece a la libreria util


Definición de constantes 

Se pueden crear constantes con  los diversos tipos primitivos de números enteros (int), flotantes (float), flotantes dobles (double), caracteres (char),etc

El formato general de la definición de cosntante es la siguiente: 

final Tipo de variable  Nombre = Valor permanente;

Ejemplo

final double PI = 3.14159


Se define una constante con la palabra reservada final  indicando que tipo de valor recibira con  double, denominando la constante como  PI, con su valor permanente de 3.14159, 

Definición de variables primitivas

Aplica a los diversos tipos primitivos de números enteros (int), flotantes (float), flotantes dobles (double), caracteres (char), valores logicos booleanos (boolean
El formato general de la definición de variables es la siguiente: 

Tipo de variable  Nombre = Valor inicial;

Ejemplo

float radio = 3.0


Se define una variable  float que puede portar flotantes, denominada radio, con un valor inicial de 3.0, 

A continuación presentamos una tabla de los tipos primitivos que se pueden utilizar en la definicion de variables y costantes 

Definición de variables compuestas 

El formato general de la definición de variables compuestas es la siguiente: 

Tipo de  variable  Nombre = new Tipo de función  (Argumento);

Ejemplos

Scanner entrada = new Scanner(System.in);

Se define la variable compuesta del tipo Scanner llamada entrada, lo cual se asigna con el operador new y tiene como argumento la función  entre paréntesis System.in, terminando la sentencia con ;

Tambien se puede desdoblar y escribir de este modo

Scanner entrada;

entrada = new Scanner(System.in);


Comprendiendo mejor las características Interactivas

Escribir información en Pantalla 

Para poder escribir algo en la pantalla necesitamos recurrir a un método de impresión  y  salida tal como println(), el cual lleva entre comillas el mensaje a transmitir
Se utiliza la sentencia 

System.out.println(....); 

Recibir  información desde el Teclado

Como señalamos lo primero que debemos hacer es importar  la libreria donde se encuentra el método Scanner, el cual nos permitirá tomar información desde el teclado 

import java.util.Scanner

Ahora pasamos a definir una variable especifica que use este método

Scanner entrada = new Scanner(System.in);

Ahora debemos trasladar lo que recibimos desde el teclado en la variable del tipo scanner, al tipo de variable que empleamos en el programa.

Variable Objetivo= Variable Scanner.nextTipoObjetivo();

En nuestro programa 

radio=entrada.nextFloat();




Comenzando a Programar Java con Eclipse

Descargando e Instalando el entorno Eclipse


Puedes ir a este link y descargar el entorno de programación Eclipse para Java


Descargas  Eclipse para el tipo de sistema operativo que tienes, eliges todas las opciones por defecto y tendrás una pantalla como esta, una vez instalado el programa.
Estos es lo que se conoce como el area de trabajo o workspace de Eclipse 

Contiene un área en el lado derecho que permite ver las dependencias de clases y paquetes que se denomina Package Explorer

Luego un área central donde se escriben las lineas de los programas

Y finalmente una parte inferior, donde se ven los resultados (exitosos o no) de la ejecución de comandos denominado Console  


Crear un nuevo Proeycto


Ingresamos  en File-New-Java Project



Elegimos un nombre para el proyecto en este caso Circulo y clicamos en Finish 



Crear la clase del Programa Principal


En el Proyecto Circulo ingresamos en src y en el paquete por defecto (default package) creamos una classe (class) con el nombre Circulo, el cual sera public, y albergara el programa principal main ( public static void main())


Si hemos hecho todo bien nos aparcera el programa Circulo como muestra abajo, en el cuerpo de main vedemos insertar las sentencias que harán el trabajo 


Insertando las lineas en el programa principal


En este punto ingresamos en la entrada  Comenzando con la Magia de Java  y copiamos el cuerpo del programa que calculara el area  del circulo ,  el que se encuentra entre las llaves de main (), como se ve abajo. La explicación de las sentencias esta en dicha entrada

Obs: La única sutileza es que la palabra area debe estar igual en todas partes del programa en este caso, ya que un asento indicaría otra variable




Ejecutando el programa y viendo resultados 


Finalmente debemos ejecutar el programa para ver si hace correctamente el trabajo por lo cual vamos al menu   Run - Run  



El resultado aparece en la parte inferior del area de trabajo workspace , en el área de interacccion de entrada y salida denominado Console, mostrandonos que efectivamente se calcula el área del Circulo de radio igual a 3.









sábado, 18 de agosto de 2018

Comenzando con la magia de Java

Enfoque de este blog para programar en Java 



Java es esencial para programar aplicaciones para  teléfonos celulares y para paginas web.En el momento de escribirse este blog hay mas de 3.000 millones de sistemas que usan Java.
Vamos a presentar los conceptos rápidamente, de la manera mas simple posible, enfocándonos en lo útil y practico. 
  

Datos, Clase y Objetos. Programación Orientada a Objetos 




Programar en Java es esencia "fabricar Objetos a partir de unos Datos originales, para lo cual seguimos los procesos y reglas definidos en la Clase".  
Cuando alguien le habla de Java, o de Programación Orientada a Objetos, tenga en su mente esa imagen.

Hagamos una analogía de una fabrica de harina

Datos: Los datos son en general números, caracteres, símbolos, o bien pueden ser objetos de clases previamente definidas. 

Los datos serian los insumos,entradas,elementos o materia prima, en este caso el trigo

Clase(Class): Las clases definen de que manera obtendremos el objeto, y especifica que características tendrá ese objeto. Contienen variables, constantes, constructores y métodos

La clase es la fabrica que contiene las maquinas y los procedimientos para obtener los objetos o productos. En una fabrica de harina hay molinos, cintas transportadoras, computadoras, software, procedimientos, personas, que se utilizan en conjunto para obtener el producto: paquetes de harina 

Objetos:  Los  objetos son el resultado, el producto de la clase, contienen elementos que lo vuelven único, tienen que tener los ingredientes o datos específicos.

Así un objeto es por ejemplo un paquete de harina, el cual tiene una cantidad de harina que no existe en otro paquete, un código de paquete que lo permite identificar y dar seguimiento, a pesar de ser semejante a otros paquetes de harina, al mismo tiempo es único.


Clases: Conociendo las fabrica por dentro

Paquete: (package)
Las fabricas se pueden agrupar en un parque industrial para interactuar facilmente y ahorrar tiempo y espacio. De igual manera las clases o fabricas de objetos se pueden agrupar en paquetes, relacionados por el tipo de trabajo o transformación que deben hacer Así nuestra fabrica de harinas podría estar al lado de una fabrica de plásticos que produce los envases que esta utiliza,etc

Hemos dicho que una clase contiene variables, constantes, constructores y métodos para hacer su trabajo: obtener un producto al que denominamos objeto, a partir de las entradas o materias primas a las que llamamos datos.


Variable: Es   similar a  un de contenedor, cuyo contenido puede cambiar en las partes del programa donde esta autorizado Para visualizarlo pensemos en un carrito cuya forma esta preparada para transportar determinado tipo de objetos en nuestra fabrica: por ejemplo paquetes cilíndricos, o paquetes cuadrados, o botellas, etc.

Ejemplo: int X , estas es una variable denominada X que puede contener distintos números enteros:2, 11, 100, 10.000 etc. a lo largo del programa. 
Sabemos que puede contener  solo números enteros  por que esto indica el modificador int.


Constante: Es similar a un molde, que define un elemento especifico que se utilizara en   las partes del programa donde este autorizado. Para visualizarlo pensemos en un molde que tiene un cubo de 1 kgramo. Luego cada vez que queramos 1 kg de harina, solo bastara llenar el molde, que es permanente, invariable

Ejemplo double PI= 3.1416. Esto define la constante PI, como un numero flotante  double (con parte entera y decimal), que es precisamente 3,1416... De hecho, PI siempre tendrá este valor en las parte del programa donde esta autorizado.

Modificador de Visibilidad: 
Indica las partes del programa donde una variable o constante esta autorizada para ser utilizada, o dicho de otro modo, donde es visible 

public:
Indica que la constante o variable puede ser utilizada por cualquier clase dentro de un mismo paquete

private:  
Indica que la constante o variable puede ser utilizada solo dentro de la clase donde se define 

Volviendo al ejemplo de la fabrica public int X seria similar a un carrito que puede usarse dentro de la fabrica de plasticos y en la empaquetadora de harina, o sea dentro del parque industrial (package). Por otra parte private int X seria similar a un carrito que solo pueda usarse en la empaquetadora de harina (una clase especifica)

Método o función: 
Es un algoritmo, formula, o conjunto de algoritmos y formulas que manipulan determinados datos, constantes y variables para obtener un resultado deseado al que denominamos objeto

En la analogía de la fabrica, los métodos serian las maquinas especificas como una empaquetadora de harina que manipula la materia prima que es la harina (datos), los carritos contenedores (variables) y los moldes (cosntantes), para obtener el producto final, el paquete de harina (objeto) 

El siguiente programa en Java crea un circulo. Los comentarios en Java se indican con // en cada linea, y se usan para explicar los programas. Por claridad los ponemos al final del programa

1. public class Circulo {
2. public static void main(String[] args){
3. final double PI=3.14159265;
4. double radio, área;        
5.             radio = 3.0;
6.             area =  (PI*radio*radio);            
7.       System.out.println(" El Area de un circulo de radio igual a 3 es = " + área);
8. }
9.  }
//Linea 1: Define la clase (class) Circulo
//Linea 2: Define el programa princiapl main, que ademas es publico (public)
// El modificador static indica que el programa main existe antes que se haya creado un //objeto. 
// Y el modificador void  indica que el progrma main, no tendra valores de retorno.
// El programa main puede recibir como argumento una cadena de caracteres lo cual se //indica como String[]
//Linea 3: Se define una constante flotante  double PI por medio de palabra final
//Linea 4: Se definen la variable radio y el método área como flotantes double
// Linea 5: Se define el valor que toma el radio, que en este caso es 3
//Linea 6: Se define el método área 
// Linea 7: Le decimos al programa que imprima una cadena de caracteres por
//la consola con System.out.println Dicha cadena de caracteres es el área.