# Programación en Java/Clases
## Introducción

La programación orientada a objetos (POO), se rige por ciertos principios de desarrollo de software que permiten una implementación limpia, segura y entendible de los programas.
Dentro de la limpieza, eficiencia y calidad que exige el desarrollo de software mediante la programación por objetos, se encuentran las Clases. Las Clases comprenden el estilo de diseño e implementación más utilizado en el modelado por objetos, aunque no es el único.
Para empezar a utilizar Clases, entender su funcionamiento y como consecuencia, su utilización e importancia, es necesario recordar algunos principios básico de la Programación en Java.
En el lenguaje Java existen distintos Tipos. Un Tipo es, como su nombre lo indica un "tipo" de elemento programable ya definido dentro del lenguaje.
Los principales Tipos Primitivos de Java son: boolean (falso o verdadero), byte, short, int, float, double, long y char.
Ahora pensemos un momento: ¿qué sucede si necesitamos representar o utilizar en nuestros programas "Tipos" no definidos? ¿qué sucedería si lo que necesito guardar o manipular es la información de una persona? ¿cómo manejo fechas? ¿cómo declaro horarios? ¿cómo represento un auto? Son muchas las preguntas que se responden mediante la implementación de la programación de Clases.

## Definición

Una Clase puede considerarse como la representación programada de un objeto o situación real y existente del mundo cotidiano. Las Clases son la forma abstracta de manejar la información de manera computacional.
Mejor veamos un ejemplo muy sencillo:
Si un programador necesita manejar la información de los clientes de la empresa para la cual trabaja, sería muy incódomo estar declarando, inicializando y manipulando mil nombre, mil apellidos, mil direcciones, mil números de teléfono, mil números de identificación, mil ...
La solución que plantea la POO es la utilización de Clases para representar aquellos elementos o tipos no pertenecientes al lenguaje mismo de programación. Pues de hecho no existe un tipo primitivo que se llame "cliente". La solución exacta que se propone es crear todos los tipos necesarios a partir, o mediante la utilización, de los tipos ya existentes. En este caso en particular, debemos utilizar los tipos primitivos de Java para crear nuestro propio "Tipo" (Clase).
Si desea más información, específicamente técnica, puede visitar el sitio: http://es.wikipedia.org/wiki/Clase_(inform%C3%A1tica)

## Implementación en Java

Ya es momento de ver cómo funcionan las clases en Java. Para nuestra primera implementación vamos a utilizar el ejemplo anterior.
Supóngase que necesitamos manejar la información de n clientes, si tomamos en cuenta que necesitamos n nombres, n apellidos, n edades, y n elementos de cualquier tipo de información que deseemos almacenar o manipular con respecto al cliente, haría muy tedioso y sucio (computacionalmente hablando) el trabajo con la información, las variables, y por ende el programa en general.
1. Primero debemos analizar qué tipo de información queremos manipular con respecto al cliente:
2. Ahora debemos analizar el tipo primitivo o no primitivo que vamos a asignarle a cada elemento de información de nuestro cliente:
3. Ahora pensemos en las funciones (la funcionabilidad) que queremos darle a nuestros clientes, eso es, por ejemplo, que podamos ver su nombre, cambiar el nombre, ver edad, etc:
Todas las funciones en Java siguen el siguiente modelo:
Explicando lo anterior, tenemos que:
tipoFuncion: especifica el grado de encapsulamiento que le vamos a dar a nuestra función, o sea, que tan accesible va a estar para el programa. Existen dos tipos principales de funciones en Java; public, o sea, de acceso público, queriendo decir que puede ser llamada o invocada por cualquier entidad dentro o fuera de la clase. El tipo private indica una exclusividad mayor de funcionabilidad, lo que quiere decir que solamente puede ser invocado, en condiciones normales, dentro de otra función.
tipoValorDevolver: indica el tipo de elemento que deseamos obtener de nuestra funcion. Por ejemplo, si deseamos saber el nombre de un cliente usamos como tipoValorDevolver un String o cadena de caracteres.
nombreFuncion: corresponde al nombre que el programador quiere darle a la funcion.
elementosUtilizadosPorLaFuncion; corresponde a todos los elementos que necesita la función para trabajar adecuadamente. Ejemplo sencillo, para poner el nombre de un cliente necesitamos una String como elementoUtilizadosPorLaFuncion.
operacionesRealizar: corresponde a las operaciones matemáticas, lógicas o computacionales en general que se deseen aplicar a la información de la clase y a su contenido en sí.
4. Definidos los tipos y funciones, pasamos a la declaración e implementación de la Clase: (Recuerden que se utiliza código en Lenguaje Java)