You are on page 1of 28

Breve Historia de Java

Surge como un proyecto de Sun Microsystems en 1991 (The Green Project), su creación se le atribuye
a James Gosling. James lo nombró Oak debido a un roble que tenía a la vista desde su ventana en las
oficinas de Sun, pero debido a que ya existía una marca registrada con ese nombre, un grupo de gente
de Sun, en una cafetería local, decidió renombrarlo a Java, que es una variedad de café (Ésta es la
hipótesis que más fuerza tiene y por la que JAVA debe su nombre).

Java es software libre

Java es un lenguaje de programación, creado por la empresa SUN Microsystems, Inc. SUN, ofreció la
mayoría de la tecnología Java, bajo licencia GNU. Esto significa, que cualquiera puede usarla sin pagar.

Las universidades, comunidades de desarrolladores o empresas pueden desarrollar tecnología sin tener
que pagar ni ahora ni en el futuro.

Esto tiene una gran ventaja para el desarrollador. Menos dinero en licencias, es potencialmente más
dinero para el programador. Para darles una idea, los lenguajes Java y C# son similares, pero los
programadores Java, suelen estar mejor pagados.

Java es de código abierto (Open Source)

Mucho del código escrito en java es de código abierto. Esto permite a muchos mejorar el código.

Para ver la importancia del código abierto, pensemos en una librería de código cerrado utilizada por
miles de programadores. Probablemente haya sido vista, revisada y mejorada por uno o unos pocos en
un periodo limitado de tiempo.

Si la librería es de código abierto, muchísimas personas pueden leer el código, corregirlo, actualizarlo y
mejorarlo. En definitiva la librería es de más calidad.

El programador se beneficia por muchas razones:

1. Puedes aprender de los mejores leyendo su código.

2. Si desarrollas usando como pieza crítica un componente de un tercero, si éste falla puedes
arreglarlo en vez de quitar el componente y rehacer todo tu código.

3. Aprender más de las librerías y herramientas te ayuda a entenderlas y usarlas mejor.

Java es multiplataforma
Escribirlo una vez, ejecútalo donde sea (Write once, run anywhere WORA). Así se publicitaba la
capacidad que tiene Java de ejecutarse en cualquier máquina. Aunque esto ha sido muy discutido, es un
hecho que Java es ampliamente usado en la mayoría de las plataformas.

El primer gran éxito de Java, fue en el desarrollo de aplicaciones Web, aunque también es estándar en
muchas otras industrias como medicina, redes y telefonia.

Su último gran salto es el sistema operativo Android para teléfonos inteligentes, tablets y otros gadgets.
Android ya tiene más de un billón de activaciones en su corta vida. Android tiene el potencial de
convertirse en el nuevo sistema operativo más usado, desplazando a Windows. Android usa a Java como
una de sus piezas fundamentales.

El ecosistema Java

Existen muchas empresas, organizaciones y grupos de personas, llamados "comunidades" que aportan
al enriquecimiento y desarrollo de las tecnologías Java. Todos estos entes conforman lo que se conoce
como "el ecosistema Java".

Este ecosistema nos da muchas opciones, por lo que muchas veces nos veremos obligados a tener que
elegir.

Librerías y la Java API (Aplication Program Interface)

Java no es sólo un lenguaje. Es una plataforma de desarrollo de software. Sus distribuciones contienen
múltiples librerías y herramientas.

Cuando se programa en Java no se inicia desde cero. Se utilizan paquetes de clases, creados
previamente conocidos comolibrerías. Java viene con muchas librerías incluidas que se conocen como el
"API Java". El API Java tiene facilidades para; la programación concurrente, manejo de redes y
programación distribuida, seguridad, interfaz gráfica y mucho más.

Antes de programar una funcionalidad es bueno investigar si ya existe una librería que la implemente. Es
sorprendente la cantidad y calidad de librerías gratuitas que hay para Java.

Framework o Marco de Trabajo

Un Framework es un conjunto de librerías y herramientas que nos ayudan a crear software. La elección
del Framework dependerá del tipo, tamaño y requerimientos de aplicación a desarrollar. Los
frameworks suelen estar especializados en resolver los problemas de un tipo específico de aplicaciones.

Spring Framework está especializado en aplicaciones empresariales Web. Libgdx es un framework


especializado para el desarrollo de juegos en la Web y en teléfonos inteligentes.

También es una opción válida no usar ningún framework. Esto suele ser cierto si la aplicación es muy
pequeña o tan específica que no hay framework que se adapte bien.

El costo de elegir la tecnología equivocada

Una vez, hace mucho tiempo, desarrollé un sistema de transmisión de datos entre aplicaciones
Mainframe y aplicaciones Web Windows. Yo elegí usar una librería recomendada por Microsoft. Este
sistema de transmisión era usado por muchas aplicaciones web de un gran banco.
Tiempo después de que las aplicaciones estaban en producción, se descubrió un defecto en esta librería.
La librería tomaba cada vez más memoria haciendo que el servidor Web IIS cayera, afectando a más de
mil usuarios de nuestra aplicación y otras.

Mi empresa tenía contratado el soporte de Microsoft. La respuesta del soporte de Microsoft fue que la
librería había sido discontinuada y que no se prestaba ningún tipo de soporte.

Tuvimos que rehacer la librería y modificar muchas aplicaciones. Incluso para una aplicación muy
costosa de modificar se instruyó a mantenimiento para que reiniciarán el servidor todas las noches.

A partir de ese día empezó mi interés en quién es quién en la industria, los estándares y las interfaces
abiertas. Fue una forma dura de aprender el valor del código abierto (Open Source).

¿Quién es quién en el ecosistema Java?

Hemos mencionado a Apache Software Foundation ASF, que creó Tomcat. ASF es una organización, sin
fines de lucro, que desarrolla software de código abierto para el bien público. Parece utópico, pero en
mi experiencia, no conozco organización más altruista.

Muchos de los proyectos ASF, son piezas fundamentales del ecosistema Java, como; Tomcat, Maven,
Ant, Axis2, Xerces2 y más.

En una segunda categoría, tenemos empresas con fines de lucro comprometidas con estándares y
códigos abiertos. A estas empresas, la comunidad de programadores, les reconoce cierta ética, aunque a
veces es puesta en duda.

Por último tenemos el lado oscuro. Empresas que en su historia y repetidas veces no han tenido dudas
en perjudicar a la comunidad, clientes y competidores por intereses propios. En este grupo destacan
Oracle y Microsoft.

BEA WebLogic era una empresa que competía con Oracle. Oracle la compró, subió el coste de licencias
de todos los clientes de BEA WebLogic y les informó que debían migrar a los productos Oracle ya que
sino perderían el soporte.

Después de adquirir SUN, Oracle demandó a Google por el uso de Java en Android. Para alegría de la
comunidad Java Oracle perdió el juicio. Se entendía que esta demanda ponía en peligro el uso de java en
más de un billón de dispositivos.

¿Por qué aprender Java?

Java es quizás el lenguaje de programación más usado. Es uno de los mejor pagados. Uno de los que
abarca más campos y tipos de dispositivos: web, juegos, teléfonos, televisores, tomógrafos computados,
etc.

Podemos pensar en java, como un lenguaje común entre diferentes sistemas operativos, dispositivos,
industrias y programadores.

Además, es un lenguaje moderno y potente, de alta productividad. Esta productividad, permite a una
sola persona o pequeño grupo, realizar programas que antes sólo podían ser realizados por grandes
compañías.
Java es software libre

Java es un lenguaje de programación, creado por la empresa SUN Microsystems, Inc. SUN, ofreció la
mayoría de la tecnología Java, bajo licencia GNU. Esto significa, que cualquiera puede usarla sin pagar.

Las universidades, comunidades de desarrolladores o empresas pueden desarrollar tecnología sin tener
que pagar ni ahora ni en el futuro.

Esto tiene una gran ventaja para el desarrollador. Menos dinero en licencias, es potencialmente más
dinero para el programador. Para darles una idea, los lenguajes Java y C# son similares, pero los
programadores Java, suelen estar mejor pagados.

Java es de código abierto (Open Source)

Mucho del código escrito en java es de código abierto. Esto permite a muchos mejorar el código.

Para ver la importancia del código abierto, pensemos en una librería de código cerrado utilizada por
miles de programadores. Probablemente haya sido vista, revisada y mejorada por uno o unos pocos en
un periodo limitado de tiempo.

Si la librería es de código abierto, muchísimas personas pueden leer el código, corregirlo, actualizarlo y
mejorarlo. En definitiva la librería es de más calidad.

El programador se beneficia por muchas razones:

1. Puedes aprender de los mejores leyendo su código.

2. Si desarrollas usando como pieza crítica un componente de un tercero, si éste falla puedes
arreglarlo en vez de quitar el componente y rehacer todo tu código.

3. Aprender más de las librerías y herramientas te ayuda a entenderlas y usarlas mejor.

Java es multiplataforma

Escribirlo una vez, ejecútalo donde sea (Write once, run anywhere WORA). Así se publicitaba la
capacidad que tiene Java de ejecutarse en cualquier máquina. Aunque esto ha sido muy discutido, es un
hecho que Java es ampliamente usado en la mayoría de las plataformas.

El primer gran éxito de Java, fue en el desarrollo de aplicaciones Web, aunque también es estándar en
muchas otras industrias como medicina, redes y telefonia.

Su último gran salto es el sistema operativo Android para teléfonos inteligentes, tablets y otros gadgets.
Android ya tiene más de un billón de activaciones en su corta vida. Android tiene el potencial de
convertirse en el nuevo sistema operativo más usado, desplazando a Windows. Android usa a Java como
una de sus piezas fundamentales.

Estructura de java
Explicando lo anterior:
Package: Un package es una agrupación de clases. Es parecido a una "caja"
que contiene las clases que queramos mantener en un solo lugar. También
podría decirse que los packages es el equivalente a las librerías en otros
lenguajes. Esta parte del código no es obligatoria, es sólo si lo necesita usar
nuestro programa.

Import: En ocasiones nuestros programas requerirán utilizar clases


existentes en otros Packages, y esto se puede lograr con Import.

Clases: Java puede crear diferentes tipos de clases: privadas, públicas y


protegidas; y se utilizan de acuerdo a conveniencia de la estructura de
nuestro programa. Sus usos se verán más adelante.

Variables: Java maneja tres tipos de variables: de instancia, de clase y


locales.

Las variables de instancia :Son las que se usan para guardar valores o
atributos de un objeto en particular.

Las variables de clase: Son las que guardan valores o atributos de la clase.

Las variables locales :Son las que se declaran en una función o método y
solamente las puede utilizar esa función o método, de ahí el nombre de
locales.
Constructores: Los constructores son la forma de crear los objetos.

Métodos: En Java los métodos son los que utilizamos para realizar alguna
tarea en específico. Podemos decir que hay dos tipos de métodos en Java: El
primero, que llamaremos set (poner) sirve para manipular y/o fijar valores en
las variables, por ejemplo: cuando especificamos que el balón va a ser color
blanco. El segundo, denominado get (obtener) sirve para obtener un valor de
una variable, por ejemplo: cuando queremos saber la edad de Juan.

Comentarios: Éstos pueden incluirse en cualquier parte del código. Sus


líneas serán completamente ignoradas por el compilador, o sea que no
afectarán para nada nuestro programa.

Estructuralmente, el lenguaje Java comienza con paquetes. Un paquete es el


mecanismo de espacio de nombres del lenguaje Java. Dentro de los
paquetes se encuentran las clases y dentro de las clases se encuentran
métodos, variables, constantes, entre otros.

Otro concepto de paquete en Java es un contenedor de clases que permite


agrupar las distintas partes de un programa y que por lo general tiene una
funcionalidad y elementos comunes, definiendo la ubicación de dichas
clases en un directorio de estructura jerárquica.

Un paquete puede contener:

• Clases
• Interface
Las clases son un pilar fundamental de la programación orientada a objetos. Permiten abstraer los datos
y sus operaciones asociadas al modo de una caja negra. Los lenguajes de programación que soportan
clases difieren sutilmente en su soporte para diversas características relacionadas con clases. La
mayoría soportan diversas formas de herencia. Muchos lenguajes también soportan características para
proporcionar encapsulación, como especificadores de acceso.

Las clases se componen de elementos, llamados: Genéricamente


«miembros», de varios tipos:

campos de datos: almacenan el estado de la clase por medio de variables,


estructuras de datos e incluso otras clases.

métodos: subrutinas de manipulación de dichos datos.

ciertos lenguajes permiten un tercer tipo de miembro: las «propiedades», a


medio camino entre los campos y los métodos.
Utilizando un símil con el lenguaje, si las clases representan sustantivos, los
campos de datos pueden ser sustantivos o adjetivos, y los métodos son los
verbos.

La sintaxis de una clase es por ejemplo:

class Nombre
{
// Variables miembro
miembro_1; //lista de miembros
miembro_2;
miembro_3;

// Funciones o métodos
funcion_miembro_1( ); // funciones miembro conocidas
funcion_miembro_2 ( ); // funciones como métodos

// Propiedades (habitualmente públicas)


propiedad_1;
propiedad_2;
propiedad_3;
propiedad_4;
}

Campos de datos.Los campos de datos se utilizan para contener datos que reflejan el estado de
la clase. Los datos pueden estar almacenados en variables, o estructuras más complejas, como structs,
uniones e incluso otras clases.

Habitualmente, las variables miembros son privadas al objeto (siguiendo las directrices de diseño del
Principio de ocultación) y su acceso se realiza mediante propiedades o métodos que realizan
comprobaciones adicionales.

Métodos en las clases. Los métodos implementan la funcionalidad asociada


al objeto. Los métodos son el equivalente a las funciones en programación
estructurada. Se diferencian de ellos en que es posible acceder a las
variables de la clase de forma implícita.

Cuando se desea realizar una acción sobre un objeto, se dice que se le


manda un mensaje invocando a un método que realizará la acción.

Propiedades. Las propiedades son un tipo especial de métodos. Debido a


que suele ser común que los variables miembros sean privadas para
controlar el acceso y mantener la coherencia, surge la necesidad de permitir
consultar o modificar su valor mediante pares de métodos: GetVariable y
SetVariable.
Los lenguajes orientados a objetos más modernos (por ejemplo, Java o C#)
añaden la construcción de propiedad, que es una sintaxis simplificada para
dichos métodos:

tipo Propiedad

get {

set {

Interfaz. Una interfaz en Java es una colección de métodos abstractos y


propiedades constantes.

En las interfaces se especifica qué se debe hacer, pero no su


implementación. Serán las clases que implementen estas interfaces las que
describan la lógica del comportamiento de los métodos.

La principal diferencia entre interface y abstract es que un interface


proporciona un mecanismo de encapsulación de los protocolos de los
métodos sin forzar al usuario a utilizar la herencia.

Ventajas

El uso de las interfaces Java proporciona las siguientes ventajas:

• Organizar la programación. Permiten declarar constantes que van a


estar disponibles para todas las clases que queramos (implementando
esa interfaz)
• Obligar a que ciertas clases utilicen los mismos métodos (nombres y
parámetros).
• Establecer relaciones entre clases que no estén relacionadas.
Uso .Java proporciona dos palabras reservadas para trabajar con interfaces:
interface e implements.

Para declarar una interfaz se utiliza:

modificador_acceso interface NombreInterfaz

....

Modificador acceso puede ser una clase de objetos que nos permite utilizar
herencia en abstracción constante en las clases en las que se implemente.

Para implementarla en una clase, se utiliza la forma:

modificador_acceso class NombreClase implements NombreInterfaz1 [,


NombreInterfaz2]

Una clase puede implementar varias interfaces de los paquetes que se han
importado dentro del programa, separando los nombres por comas.

Ejemplo

Definición de una interfaz:

interface Nave {

public abstract moverPosicion (int x, int y);

public abstract disparar();


.....

Uso de la interfaz definida:

public class NaveJugador implements Nave {

public void moverPosicion (int x, int y) {

//Implementación del método

posActualx = posActualx - x;

posActualy = posActualy - y;

public void disparar() {

//Implementación del método

...

Uso de paquetes

En los ficheros de código Java se usa la palabra reservada package para


especificar a qué paquete pertenecen. Suele indicarse como primera
sentencia:

package java.awt.event;

Para usar un paquete dentro del código se usa la declaración import. Si sólo
se indica el nombre del paquete, se importarán todas las clases que contiene:
import java.awt.event.*;

Si además del nombre del paquete se especifica una clase, sólo se importa
esa clase:

import java.awt.event.ActionEvent;

Después de añadir alguna de las sentencias anteriores, se puede hacer


referencia a la clase ActionEvent usando su nombre:

ActionEvent myEvent = new ActionEvent();

Si no se hubiera importado la clase o el paquete, cada vez que tuviéramos


que usarla habría que especificarla por su fully qualified class name, que no
es más que el nombre del paquete seguido por el nombre de la clase:

java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();

Si lo que se desea es importar todos los miembros estáticos de una clase,


note la sentencia static despúes de import. (A partir de J2SE 5.0 en adelante)

import static java.awt.Color.*;

Si lo que se desea es importar un sólo miembro estático de una clase. (A


partir de J2SE 5.0 en adelante)

import static java.awt.color.ColorSpace.CS_GRAY*;

Proceso de Instalación de java


Lo primero que tenemos que hacer, es descargar el Java Development
Kit (JDK), que es el set de desarrollo de Java de la página oficial de Oracle.

La JDK incluye la máquina virtual, el compilador y las librerías.

Existen otras distribuciones llamadas JRE Java Runtime Environment, que no


incluyen las herramientas de desarrollo.
Instalar JDK Java Development Kit
Para instalar la JDK, basta con buscar en google “download jdk” y hacer click
en el primer link para llegar al sitio de Oracle. Una vez allí, buscar la última
JDK disponible para nuestro sistema operativo.

Para Windows tenemos dos opciones: i586 y x64. i586 es para las versiones
de windows de 32 bits y el x64 para las de 64 bits. La versión i586, también
funciona con windows 64 bits ya que el sistema operativo mantiene una
compatibilidad con las versiones anteriores.

¿Cual usar? Si tenemos window 64 bits y no usamos ninguna herramienta o


servidor de 32 bits, elegir x64. En otro caso i586.

Descargado el instalador, ejecutarlo y seguir las instrucciones.

Encontrar dónde está instalado el


JDK
Dónde está instalado el JDK depende del instalador, sistema operativo,
versión de java, etc. Lo más probable es que lo encuentren en un lugar
parecido a:

C:\Program Files\Java\jdk1.7.0_79 o C:\Program Files (x86)\Java\jdk1.7.0_79

A este directorio se lo suele llamar “Java Home”. Dentro de Java Home, hay
un directorio bin, que contiene los ejecutables de las herramientas del JDK.

Configurar variables PATH del


sistema operativo
Para trabajar con más comodidad, es conveniente, agregar el directorio donde están las herramientas, a
la lista de directorios de la variable path. Se recomienda agregar el directorio bin, al principio de la lista,
seguido de punto y coma.

• PATH es la variable del sistema que utiliza el sistema operativo para


buscar los ejecutables necesarios desde la línea de comandos o la
ventana Terminal.
• La variable del sistema PATH se puede establecer utilizando
la utilidad de sistema en el panel de control de Windows o en el
archivo de inicio del shell en Linux y Solaris.
• Normalmente no es necesario realizar cambios en la variable PATH
del sistema en computadoras con Windows o Mac OS X.

Windows

Windows 10 y Windows 8

1. En Buscar, busque y seleccione: Sistema (Panel de control)


2. Haga clic en el enlace Configuración avanzada del sistema.
3. Haga clic en Variables de entorno. En la sección Variables del
sistema, busque la variable de entorno PATH y selecciónela. Haga clic
en Editar. Si no existe la variable de entorno PATH, haga clic en Nuevo.
4. En la ventana Editar la variable del sistema (o Nueva variable del
sistema), debe especificar el valor de la variable de entorno PATH.
Haga clic en Aceptar. Cierre todas las demás ventanas haciendo clic
en Aceptar.
5. Vuelva a abrir la ventana del indicador de comandos y ejecute el
código de java.

Windows 7

1. Desde el escritorio, haga clic con el botón derecho del mouse en el


icono de la computadora.
2. Seleccione Propiedades en el menú contextual.
3. Haga clic en el enlace Configuración avanzada del sistema.
4. Haga clic en Variables de entorno. En la sección Variables del
sistema, busque la variable de entorno PATH y selecciónela. Haga clic
en Editar. Si no existe la variable de entorno PATH, haga clic en Nuevo.
5. En la ventana Editar la variable del sistema (o Nueva variable del
sistema), debe especificar el valor de la variable de entorno PATH.
Haga clic en Aceptar. Cierre todas las demás ventanas haciendo clic
en Aceptar.
6. Vuelva a abrir la ventana del indicador de comandos y ejecute el
código de java.

Windows XP

1. Seleccione Inicio y Panel de control. Haga doble clic en Sistema y


seleccione el separador Opciones avanzadas.
2. Haga clic en Variables de entorno. En la sección Variables del
sistema, busque la variable de entorno PATH y selecciónela. Haga clic
en Editar. Si no existe la variable de entorno PATH, haga clic en Nuevo.
3. En la ventana Editar la variable del sistema (o Nueva variable del
sistema), debe especificar el valor de la variable de entorno PATH.
Haga clic en Aceptar. Cierre todas las demás ventanas haciendo clic
en Aceptar.
4. Vuelva a abrir la ventana del indicador de comandos y ejecute el
código de java.

Mac OS X
Para ejecutar una versión de Java distinta, especifique la ruta completa o
utilice la herramienta java_home:

% /usr/libexec/java_home -v 1.8.0_73 --exec javac -version

Solaris y Linux

1. Para ver si la ruta está bien definida:


en una ventana de terminal, introduzca:
% java -version
De esta forma, se imprimirá la versión de la herramienta java, si se
encuentra. Si la versión es antigua o aparece el error de java:
Comando no encontrado, significa que la ruta de acceso no está bien
definida.
2. Determine qué ejecutable de Java es el que se encuentra primero
en PATH
En una ventana de terminal, introduzca:
% which java

Fundamentos de Programación Orientada a Objetos


La Programación Orientada a Objetos: Es un paradigma o un modelo de
programación que utiliza objetos como bloque esencial de construcción. Al
decir que es un paradigma nos referimos a que son una serie de pautas y un
estilo para que sigan los programadores, así como la Programación
Estructurada tiene sus pautas.

Es una serie de normas de realizar las cosas de manera que otras personas
puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el
código se pueda reutilizar.

Existen diferentes enfoques a la hora de la tarea de programar. El modelo al


cuál estábamos acostumbrados era el de Programación Estructurada, el cual
funcionaba bien para nuestros programas pequeños y poco complejos; pero
el siguiente paso o siguiente enfoque es el orientado a objetos, la que toma y
re-potencia muchos conceptos del enfoque estructurado. Es una manera
distinta de pensar en la programación, acercándonos más a cómo son las
cosas en la vida real. De esta forma nuestra lógica para desarrollar los
programas es más sencilla, vamos juntando los objetos como bloques
esenciales de construcción para edificar un edificio, los cuales colaboran
entre ellos para realizar tareas. Si en la Programación Estructurada se
mantiene separados los datos y procedimientos, en cambio en la P.O.O.
éstos se encuentran íntimamente relacionados bajo el concepto de los
“objetos”. Éstos se asemejan más a la forma de pensar del hombre y no al de
la máquina, debido a la forma racional de pensar de los hombres y sus
procesos como las abstracciones que hacen en su mente; el hombre puede
conocer muchos objetos que están a su alrededor e utilizarlos, sin necesidad
de saber exactamente que es lo que sucede dentro de ellos para obtener los
resultados que busca. Es un paradigma que facilita la creación de buen
software, ya que se presta a un buen mantenimiento, se pueden hacer
programas de gran extensión, y se reutiliza el software. Los programas son
escritos en términos de objetos, propiedades y comportamientos. Por mucho
tiempo los programadores creaban software muy parecido uno de otro que
resolvían los mismos problemas repetitivamente. Para que el esfuerzo de un
programador pueda ser usado por otra persona es que se utiliza la
Programación Orientada a Objetos. Son normas para programar de manera
que otras personas puedan usar nuestro código, haciendo más fácil su
trabajo y dándole la característica de reutilizable al código.

El elemento básico de este paradigma no es la función (elemento básico dela


programación estructurada), sino un ente denominado objeto.” Cada objeto
proporciona un servicio o realiza una acción que es usada por otros objetos
Se podría ver a los objetos como veíamos a los métodos en la Programación
Estructurada, como pequeñas partes del programa que van dando
solución situaciones y que se van conectando para formar el programa en
sí, sólo que los objetos tienen otras propiedades y se prestan más para las
abstracciones y otras cosas. Para tener una imagen de a qué se refiere la
Programación Orientada a Objetos pensemos en nuestros cuerpos. Veamos
el cuerpo humano como el conjunto de órganos que lo conforman, a los
cuales podemos llamar objetos. Cada uno realiza sus características o sus
atributos, por ejemplo un órgano puede tener color rojizo, ser grande o
pequeño, estar enfermo, etc; y a la vez cada uno tiene sus propias funciones
o comportamientos como respirar en el caso de los pulmones o generar
movimiento en el caso de los músculos. Los órganos se encuentran
relacionados para cumplir con las funciones del cuerpo. Nosotros sabemos
qué es lo que hacen estos objetos, pero no sabemos cómo lo hacen (sin
referirnos a los conceptos de biología que se puedan tener), aún así podemos
usar estos objetos mandando mensajes desde nuestra cabeza; como cuando
queremos caminar, le decimos a los músculos de nuestras piernas que se
muevan, y nos hacen caso, más no nos preocupamos por cuales músculos
se contraen, cuales se relajan, por cuánto tiempo, etc., esas funciones son
propias del objeto y no necesitamos conocerlas (de otra forma sería un
verdadero problema caminar, con todas las acciones que tendríamos que
calcular). Además sabemos que el cuerpo humano está compuesto por
células en sus niveles más bajos, las cuales son objetos más pequeños,
también con sus funciones propias y atributos, que al juntarse van a ir
formando los órganos. Puede parecer un poco confuso pero la Programación
Orientada a Objetos trabaja de esta forma. Un programa está hecho de
muchos componentes u objetos, cada uno jugando un rol diferente en el
programa y que se pueden interrelacionar entre ellos.

VENTAJAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS

Entre las ventajas que presenta el paradigma de la P.O.O. tenemos:

• Uniformidad: Representar los objetos implica un análisis, diseño y


codificación de los mismos.
• Comprensión: Los datos de los objetos, así como sus procedimientos
están agrupados en clases, correspondiendo con las estructuras de
información del programa, haciendo un modelo ordenado y jerárquico.
• Flexibilidad: Como los procedimientos manipulan los datos, los
cambios que realicen a éstos puede afectar cualquier parte del
programa donde estos datos aparezcan.
• Estabilidad: Hay partes del programa que permanecen inalterable, ya
que hay objetos que permanecen constantes y otros que cambian
frecuentemente, para eso se aíslan los que cambien frecuentemente.
• Reusabilidad: Está basado en la reutilización de código. Se trata de
usar las definiciones de objeto de otros programas, si son compatibles
en su uso. Desde este punto de vista, el desarrollo de un programa
puede ser una simple combinación de objetos, los cuales se pueden
relacionar.
Un objeto es una encapsulación abstracta de información, junto con los métodos o procedimientos para
manipularla. Un objeto contiene operaciones que definen su comportamiento y variables que definen su
estado entre las llamadas a las operaciones.

Una clase equivale a la generalización o abstracción de un tipo específico de


objetos.

Un mensaje representa una acción a tomar por un determinado objeto.

Una instancia es la concrección de una clase.

Un método consiste en la implementación en una clase de un protocolo de


respuesta a los mensajes dirigidos a los objetos de la misma. La respuesta a
tales mensajes puede incluir el envío por el método de mensajes al propio
objeto y aun a otros, también como el cambio del estado interno del objeto.

Características:
La abstracción: Consiste en la generalización conceptual de un determinado
conjunto de objetos y de sus atributos y propiedades, dejando en un segundo
término los detalles concretos de cada objeto. ¿Qué se consigue con la
abstracción? Bueno, básicamente pasar del plano material (cosas que se
tocan) al plano mental (cosas que se piensan).

Clases Abstractas.

La abstracción permite resaltar la parte mas representativa de algo,


ignorando detalles para centrarse en lo principal.

La imagen es muy fácil de identificar, con base a ella podemos crear una
clase persona, o la

clase hombre, humano entre otras, pero obviamente vemos que la imagen no
tiene elementos como ojos, nariz, boca, rostro en general, ni dedos, pies,
manos o cuello....... pero entonces porque decimos que es una
persona?.........Precisamente aquí estamos aplicando el concepto de
abstracción, ya que nos fijamos en lo mas representativo de algo, en este
caso vemos que se tiene una cabeza, tronco, brazos y pies, con esto es
suficiente para saber que es una persona sin fijarnos en los detalles
mencionados anteriormente.

Las clases abstractas permiten crear métodos generales con un


comportamiento común para otras clases concretas sin importar sus
características ni el comportamiento que usen para dichos métodos.

La Abstracción en java solo tiene lógica mediante la Herencia, ya que una


clase abstracta posee al menos un método abstracto el cual no tiene
implementación, el comportamiento de estos métodos lo definen las clases
concretas que lo hereden.
Podemos usarlos cuando existan varias clases con características o acciones
comunes pero con diferentes comportamientos..............mediante el uso de la
herencia y componentes abstractos hacemos mas óptima y organizada
nuestra aplicación. (hay que tener en cuenta que a diferencia de las clases
concretas, las clases abstractas no se pueden instanciar).
La encapsulación: Es el proceso de almacenar en una misma sección los
elementos de una abstracción que constituyen su estructura y su
comportamiento; sirve para separar el interfaz contractual de una abstracción
y su implantación.

Existen tres niveles de acceso para el encapsulamiento, los cuales son:


Público (Public): Todos pueden acceder a los datos o métodos de una clase que se definen con este
nivel, este es el nivel más bajo, esto es lo que tu quieres que la parte externa vea.

Protegido (Protected): Podemos decir que estás no son de acceso público, solamente son accesibles
dentro de su clase y por subclases.

Privado (Private): En este nivel se puede declarar miembros accesibles sólo para la propia clase.

La herencia: Se aplica sobre las clases. O sea, de alguna forma las clases
pueden tener descendencia, y ésta heredará algunas características de las
clases "padres". Si disponemos las clases con un formato de árbol
genealógico, tenderemos lo que se denomina una estructura jerarquizada de
clases.
La herencia se implementa mediante un mecanismo que se denomina
derivación de clases: las superclases pasan a llamarse clases base, mientras
que las subclases se constituyen en clases derivadas. El mecanismo de
herencia está fuertemente entroncado con la reutilización del código en OOP.
Una clase derivada posibilita, el fácil uso de código ya creado en cualquiera
de las clases base ya existentes.

Para declarar la herencia en Java usamos la palabra clave extends. Ejemplo:


public class MiClase2 extends Miclase1. Para familiarizarte con la herencia te
proponemos que escribas y estudies un pequeño programa donde se hace
uso de ella.

Polimorfismo: Esta propiedad, como su mismo nombre sugiere múltiples


formas, se refiere a la posibilidad de acceder a un variado rango de funciones
distintas a través del mismo interfaz. O sea, que, en la práctica, un mismo
identificador puede tener distintas formas (distintos cuerpos de función,
distintos comportamientos) dependiendo, en general, del contexto en el que
se halle inserto.

El polimorfismo se puede establecer mediante la sobrecarga de


identificadores y operadores, la ligadura dinámica y las funciones virtuales. El
término sobrecarga se refiere al uso del mismo identificador u operador en
distintos contextos y con distintos significados.

La sobrecarga de funciones conduce a que un mismo nombre pueda


representar distintas funciones con distinto tipo y número de argumentos. En
el ámbito de la OOP, la sobrecarga de funciones equivale a que un mismo
mensaje puede ser enviado a objetos de diferentes clases de forma que cada
objeto respondería al mensaje apropiadamente.

La sobrecarga de operadores permite, por otro lado, el desarrollo de un


código más coherente, como especialización de la sobrecarga de funciones,
posibilitando la re-definición (para tipos de datos definidos-por-el-usuario) de
las operaciones realizadas por éstos (+, -, *, >, etc.). Esto es, ocurre lo mismo
que en la sobrecarga de funciones, pero aquí, en vez de identificadores de
funciones, tenemos operadores.

TIPOS DE DATOS (VARIABLES) EN JAVA.

Los primeros lenguajes de programación no usaban objetos, solo variables.


Una variable podríamos decir que es un espacio de la memoria del
ordenador a la que asignamos un contenido que puede ser un valor
numérico (sólo números, con su valor de cálculo) o de tipo carácter o cadena
de caracteres (valor alfanumérico que constará sólo de texto o de texto
mezclado con números).

Como ejemplo podemos definir una variable a que contenga 32 y esto lo


escribimos como a = 32. Posteriormente podemos cambiar el valor de a y
hacer a = 78. O hacer “a” equivalente al valor de otra variable “b” así: a = b.

Dado que antes hemos dicho que un objeto también ocupa un espacio de
memoria: ¿en qué se parecen y en qué se diferencia un objeto de una
variable? Consideraremos que las variables son entidades elementales: un
número, un carácter, un valor verdadero o falso… mientras que los objetos
son entidades complejas que pueden estar formadas por la agrupación de
muchas variables y métodos. Pero ambas cosas ocupan lo mismo: un
espacio de memoria (que puede ser más o menos grande).

En los programas en Java puede ser necesario tanto el uso de datos


elementales como de datos complejos. Por eso en Java se usa el término
“Tipos de datos” para englobar a cualquier cosa que ocupa un espacio de
memoria y que puede ir tomando distintos valores o características durante la
ejecución del programa. Es decir, en vez de hablar de tipos de variables o de
tipos de objetos, hablaremos simplemente de tipos de datos. Sin embargo, a
veces “coloquialmente” no se utiliza la terminología de forma estricta: puedes
encontrarte textos o páginas web donde se habla de una variable en alusión a
un objeto.

En Java diferenciamos dos tipos de datos: por un lado, los tipos primitivos,
que se corresponden con los tipos de variables en lenguajes como C y que
son los datos elementales que hemos citado. Por otro lado, los tipos objeto
(que normalmente incluyen métodos).

Veamos los tipos de datos en Java sobre un esquema de síntesis:

Esquema de síntesis de tipos de datos en Java

Este esquema no es necesario aprendérselo de memoria en todos sus


detalles, aunque sí lo iremos memorizando poco a poco a medida que lo
utilicemos, por lo menos hasta tener en nuestra cabeza los nombres de todos
los tipos primitivos y envoltorio y sus características (si son objetos o no y su
rango aproximado). A continuación mostramos el mismo esquema en formato
de tabla:

RANGO
NOMBRE TIPO OCUPA
APROXIMADO
byte Entero 1 byte -128 a 127
short Entero 2 bytes -32768 a 32767

TIPOS int Entero 4 bytes 2*109


PRIMITIVOS long Entero 8 bytes Muy grande
(sin métodos; Decimal
float 4 bytes Muy grande
TIPOS no son objetos; simple
DE no necesitan Decimal
DATOS una invocación double doble
8 bytes Muy grande
EN para ser
JAVA creados) Carácter
char 2 bytes ---
simple
Valor true
boolean 1 byte ---
o false

Tipos de la String (cadenas de texto)


TIPOS
biblioteca
OBJETO Muchos otros (p.ej. Scanner, TreeSet,
estándar de
Java ArrayList…)
(con métodos, Tipos definidos
necesitan una por el Cualquiera que se nos ocurra, por
invocación para programador / ejemplo Taxi, Autobus, Tranvia
ser creados) usuario
Serie de elementos o formación tipo
vector o matriz. Lo consideraremos un
arrays
objeto especial que carece de
métodos.
Byte
Short
Tipos envoltorio Integer
o wrapper
(Equivalentes a Long
los tipos Float
primitivos pero
como objetos.) Double
Character
Boolean

Vamos a comentar distintas cuestiones:

1. Un objeto es una cosa distinta a un tipo primitivo, aunque “porten” la


misma información. Tener siempre presente que los objetos en Java tienen
un tipo de tratamiento y los tipos primitivos, otro. Que en un momento dado
contengan la misma información no significa en ningún caso que sean lo
mismo. Iremos viendo las diferencias entre ambos poco a poco. De momento,
recuerda que el tipo primitivo es algo elemental y el objeto algo complejo.
Supón una cesta de manzanas en la calle: algo elemental. Supón una cesta
de manzanas dentro de una nave espacial (considerando el conjunto nave +
cesta): algo complejo. La información que portan puede ser la misma, pero no
son lo mismo.

2. ¿Para qué tener esa aparente duplicidad entre tipos primitivos y tipos
envoltorio? Esto es una cuestión que atañe a la concepción del lenguaje de
programación. Tener en cuenta una cosa: un tipo primitivo es un dato
elemental y carece de métodos, mientras que un objeto es una entidad
compleja y dispone de métodos. Por otro lado, de acuerdo con la
especificación de Java, es posible que necesitemos utilizar dentro de un
programa un objeto que “porte” como contenido un número entero. Desde el
momento en que sea necesario un objeto habremos de pensar en un
envoltorio, por ejemplo Integer. Inicialmente nos puede costar un poco
distinguir cuándo usar un tipo primitivo y cuándo un envoltorio en situaciones
en las que ambos sean válidos. Seguiremos esta regla: usaremos por norma
general tipos primitivos. Cuando para la estructura de datos o el proceso a
realizar sea necesario un objeto, usaremos un envoltorio.

3. Los nombres de tipos primitivos y envoltorio se parecen mucho. En


realidad, excepto entre int e Integer y char y Character, la diferencia se limita
a que en un caso la inicial es minúscula (por ejemplo double) y en el otro es
mayúscula (Double). Esa similitud puede confundirnos inicialmente, pero
hemos de tener muy claro qué es cada tipo y cuándo utilizar cada tipo.

4. Una cadena de caracteres es un objeto. El tipo String en Java nos


permite crear objetos que contienen texto (palabras, frases, etc.). El texto
debe ir siempre entre comillas. Muchas veces se cree erróneamente que el
tipo String es un tipo primitivo por analogía con otros lenguajes donde String
funciona como una variable elemental. En Java no es así.

5. Hay distintos tipos primitivos enteros. ¿Cuál usar? Por norma general
usaremos el tipo int. Para casos en los que el entero pueda ser muy grande
usaremos el tipo long. Los tipos byte y short los usaremos cuando tengamos
un mayor dominio del lenguaje.

6. ¿Cuántos tipos de la biblioteca estándar de Java hay? Cientos o miles.


Es imposible conocerlos todos.

7. ¿Un array es un objeto? Los arrays los consideraremos objetos


especiales, los únicos objetos en Java que carecen de métodos.

Concepto de array: serie de elementos, cada uno de los cuales lleva asociado
un índice numérico 0, 1, 2, 3, … , n-1

You might also like