SlideShare una empresa de Scribd logo
1 de 48
REPÚBLICA BOLIVARIANA DE VENEZUELA
INSTITUTO UNIVERSITARIO POLITÉCNICO
“SANTIAGO MARIÑO”
EXTENSIÓN MATURÍN
Docente: Realizado por:
Ing. Maria Aguilera. Iralix García C:I: 25.782.198
María Castellano C.I: 18.983.058
Maturín, Edo Monagas
PROGRAMACIÓN ORIENTADA A OBJETO, FUNDAMENTOS DE
PROGRAMACIÓN EN JAVA.
(Programación No Numérica I)
PROGRAMACIÓN ORIENTADA A OBJETO
 Orientación a Objeto.
Es una metodología que basa la estructura de los programas en torno a los objetos. Los
lenguajes de POO (programación orientada a objeto) ofrecen medios y herramientas para describir
los objetos manipulados por un programa. Más que describir cada objeto individualmente, estos
lenguajes proveen una construcción (Clase) que describe a un conjunto de objetos que poseen las
mismas propiedades. En esta los programas son representados por un conjunto de objetos que
interactúan. Un objeto engloba datos y operaciones sobre estos datos.
La Programación Orientada a Objetos constituye una buena opción a la hora de resolver un
problema, sobre todo cuando éste es muy extenso. En este enfoque de programación, se facilita
evitar la repetición de código, no sólo a través de la creación de clases que hereden propiedades y
métodos de otras, sino además que el código es reutilizable por sistemas posteriores que tengan
alguna similitud con los ya creados. La (POO) es una metodología de diseño de software y un
paradigma de programación que define los programas en términos de “clases de objetos, objetos
que son entidades que combinan estado (es decir, datos) y comportamiento (esto es, procedimientos
o métodos)
Es un programa con un conjunto de objetos, que se comunican entre ellos para realizar tareas
y que es un modelo que representa un subconjunto del mundo real, tal fielmente como sea posible,
de modo fácil y natural, donde los objetos van a tener características (atributos) y comportamientos
(métodos). Que a diferencia de los lenguajes procedurales, en donde los datos y los procedimientos
se encuentran separados y sin relación alguna. Los lenguajes procedurales, utilizan funciones y
después les pasan datos, en tanto que los lenguajes orientados a objetos definen objetos y después
envían mensajes a los objetos diciendo que realicen alguno de los métodos especificados para el
objeto.
Entre las ventajas de la programación orientada a objetos es que los métodos están
Pensados para hacer programas y módulos más fáciles de escribir, mantener y reutilizar, así como
que sean modulares y reutilizables parte de los códigos de estos programas.
 Objeto.
Es una entidad (tangible o intangible) que posee características y acciones que realiza por sí
solo o interactuando con otros ,Un objeto es una entidad caracterizada por sus atributos propios y
cuyo comportamiento está determinado por las acciones o funciones que pueden modificarlo, así
como también las acciones que requiere de otros objetos. Un objeto tiene identidad e inteligencia
y constituye una unidad que oculta tanto datos como la descripción de su manipulación. Puede ser
definido como una encapsulación y una abstracción: una encapsulación de atributos y servicios, y
una abstracción del mundo real. Para el contexto del Enfoque Orientado a Objetos (EOO) un objeto
es una entidad que encapsula datos (atributos) y acciones o funciones que los manejan (métodos).
También para el EOO un objeto se define como una instancia o particularización de una clase. Los
objetos de interés durante el desarrollo de software no sólo son tomados de la vida real (objetos
visibles o tangibles), también pueden ser abstractos. En general son entidades que juegan un rol
bien definido en el dominio del problema. Un libro, una persona, un carro, un polígono, son apenas
algunos ejemplos de objeto.
Cada objeto puede ser considerado como un proveedor de servicios utilizados por otros objetos que
son sus clientes. Cada objeto puede ser a la vez proveedor y cliente. De allí que un programa pueda
ser visto como un conjunto de relaciones entre proveedores clientes. Los servicios ofrecidos por
los objetos son de dos tipos:
1.- Los datos, que llamamos atributos
2.- Las acciones o funciones, que llamamos métodos
Características Generales Un objeto se identifica por un nombre o un identificador único que
lo diferencia de los demás.
Ejemplo: el objeto
Cuenta de Ahorros número 12345 es diferente al objeto Cuenta de Ahorros número 25789. En
este caso el identificador que los hace únicos es el número de la cuenta.
Un objeto posee estados. El estado de un objeto está determinado por los valores que poseen
sus atributos en un momento dado.
Un objeto tiene un conjunto de métodos. El comportamiento general de los objetos dentro de
un sistema se describe o representa mediante sus operaciones o métodos. Los métodos se utilizarán
para obtener o cambiar el estado de los objetos, así como para proporcionar un medio de
comunicación entre objetos.
Un objeto tiene un conjunto de atributos. Los atributos de un objeto contienen valores que
determinan el estado del objeto durante su tiempo de vida. Se implementan con variables,
constantes y estructuras de datos (similares a los campos de un registro).
Los objetos soportan encapsulamiento
La estructura interna de un objeto normalmente está oculta a los usuarios del mismo. Los datos
del objeto están disponibles solo para ser manipulados por los propios métodos del objeto. El único
mecanismo que lo conecta con el mundo exterior es el paso de mensajes.
Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea y utiliza. Para
ser utilizado en un algoritmo el objeto debe ser creado con una instrucción particular (New ó
Nuevo) y al finalizar su utilización es destruido con el uso de otra instrucción o de manera
automática.
Se pueden definir como las unidades básicas de construcción, para la conceptualización, diseño
o programación, esto es que son instancias agrupadas en clases con características en común y que
son los atributos y procedimientos, conocidos como operaciones o métodos se pueden definir como
las unidades básicas de construcción, para la conceptualización, diseño o programación, esto es
que son instancias agrupadas en clases con características en común y que son los atributos y
procedimientos, conocidos como operaciones o métodos En forma más simple se puede decir que
un objeto es un ente que tiene características y comportamiento.
Los objetos pueden modelar diferentes cosas como; dispositivos, roles, organizaciones,
sucesos, ventanas (de Windows), iconos, etc.
Organización de los Objetos
Los objetos forman siempre una organización jerárquica, existiendo varios tipos de
Jerarquía como los que a continuación se mencionan:
Simples. Cuando su estructura es representada por medio de un árbol (estructura de datos).
Compleja. Cualquier otra diferente a la de árbol. Sea cual fuere la estructura se tienen en ella
los siguientes tres niveles de objetos:
La raíz de la jerarquía. Es un objeto único, está en el nivel más alto de la estructura y se le
conoce como objeto Padre, Raíz o Entidad.
Los objetos intermedios. Son los que descienden directamente de la raíz y que a su vez tienen
descendientes (tienen ascendencia y descendencia) y representan conjuntos de objetos, que pueden
llegar a ser muy generales o muy especializados, de acuerdo a los requerimientos de la aplicación.
Los objetos terminales. Son todos aquellos que tienen ascendencia, pero que no tienen
descendencia.
 Clase.
Es la unidad de modularidad en el EOO. La tendencia natural del individuo es la de clasificar
los objetos según sus características comunes (clase). Por ejemplo, las personas que asisten a la
universidad se pueden clasificar (haciendo abstracción) en estudiante, docente, empleado e
investigador. La clase puede definirse como la agrupación o colección de objetos que comparten
una estructura común y un comportamiento común. Es una plantilla que contiene la descripción
general de una colección de objetos. Consta de atributos y métodos que resumen las características
y el comportamiento comunes de un conjunto de objetos.
Todo objeto (también llamado instancia de una clase), pertenece a alguna clase. Mientras un
objeto es una entidad concreta que existe en el tiempo y en el espacio, una clase representa solo
una abstracción. Todos aquellos objetos que pertenecen a la misma clase son descritos o comparten
el mismo conjunto de atributos y métodos. Todos los objetos de una clase tienen el mismo formato
y comportamiento, son diferentes únicamente en los valores que contienen sus atributos. Todos
ellos responden a los mismos mensajes. Su sintaxis algorítmica es:
Clase
<Nombre de la Clase> Clase
<Nombre de la Clase>;
Características Generales
Una clase es un nivel de abstracción alto. La clase permite describir un conjunto de
características comunes para los objetos que representa. Ejemplo: La clase Avión se puede utilizar
para definir los atributos (tipo de avión, distancia, altura, velocidad de crucero, capacidad, país de
origen, etc.) Y los métodos (calcular posición en el vuelo, calcular velocidad de vuelo, estimar
tiempo de llegada, despegar, aterrizar, volar, etc.) de los objetos particulares Avión que representa.
Un objeto es una instancia de una clase. Cada objeto concreto dentro de un sistema es
miembro de una clase específica y tiene el conjunto de atributos y métodos especificados en la
misma
Las clases se relacionan entre sí mediante una jerarquía. Entre las clases se establecen
diferentes tipos de relaciones de herencia, en las cuales la clase hija (subclase) hereda los atributos
y métodos de la clase padre (superclase), además de incorporar sus propios atributos y métodos.
Ejemplos, Superclase: Clase Avión
Subclases de Avión: Clase Avión Comercial, Avión de Combate, Avión de Transporte
Los nombres o identificadores de las clases deben colocarse en singular (clase Animal, clase
Carro, clase Alumno).Clases, Superclase y Subclase Es la generalización de un tipo específico de
objetos, esto se puede decir como el conjunto de características (atributos) y comportamientos de
todos los objetos que componen a la clase. Por ejemplo la clase plumón tiene todas las
características (tamaño, color, grosor del punto, etc.) y todos los métodos o acciones (pintar,
marcar, subrayar, etc.), que pueden tener todos los plumones existentes en la realidad. Un plumón
en especial como un marcador permanente para discos compactos (CDS) de color negro y punto
fino, es un objeto (o instancia) de la clase plumón.
Se tienen tres tipos de clase que son:
•Abstracta
Es muy general (ejemplo. Animal).
•Común.
Es intermedia (ejemplo. Mamíferos).
•Final.
Es muy específica (ejemplo Gato Siamés).
La herencia (que se detallara más adelante), maneja una estructura jerárquica de clases o
estructura de árbol (Estructura de Datos6), con lo que la POO todas las relaciones entre clase se
ajustan a esta estructura. En esta estructura cada clase tiene una sola clase padre, la cual s e conoce
como superclase y la clase hija de una superclase se conoce como subclase.
La superclase, se puede definir en términos sencillos como la clase padre de alguna clase
específica y puede tener cualquier número de subclases.
La subclase, es la clase hija de alguna clase específica y solo puede tener una superclase
(en JAVA).
 Mensaje.
Es la petición de un objeto a otro para solicitar la ejecución de alguno de sus métodos o para
obtener el valor de un atributo público. Estructuralmente, un mensaje consta de 3 partes:
 Identidad del receptor:
Nombre del objeto que contiene el método a ejecutar.
 Nombre del método a ejecutar:
Solo los métodos declarados públicos.
 Lista de Parámetros
Que recibe el método (cero o más parámetros)
Su sintaxis algorítmica es:
<Variable_Objeto>
<Nombre_Método> ([<Lista de Parámetros> ] );
Cuando el objeto receptor recibe el mensaje, comienza la ejecución del algoritmo contenido dentro
del método invocado, recibiendo y/o devolviendo los valores de los parámetros correspondientes,
si los tiene ya que son opcionales: ( [ ] ) mensajes En la programación orientada a objetos, los
objetos descritos anteriormente se comunican a través de señales o mensajes, siendo estos mensajes
los que hacen que los objetos respondan de diferentes maneras, por ejemplo un objeto en Windows
como una ventana de alguna aplicación , puede cerrarse, maximizarse o restaurarse (métodos) de
acuerdo al mensaje que le sea enviado.
En otras palabras, un mensaje es una comunicación dirigida a un objeto, que le ordena que
ejecute uno de sus métodos pudiendo o no llevar algunos parámetros
.
 Principios que rigen la orientación a objeto.
Los principios fundamentales de la POO son: abstracción, encapsulamiento, herencia y
polimorfismo, los cuales se describirán a continuación.
 Abstracción
“Abstraer es suprimir u ocultar algunos detalles de un proceso o de un elemento, para
resaltar algunos aspectos, detalles o estructuras “Ocultar parte de la información es una omisión
voluntaria de detalles en el desarrollo de un programa o una representación abstracta La abstracción
es la forma en que nuestra mente modela la realidad, formándolos objetos. Por eso se crea objetos
en los programas que simulen los comportamientos de los objetos del mundo real. Nosotros no
pensamos en las cosas que vemos como la unión de sus componentes más pequeños; no vemos un
carro como el conjunto de llantas, motor, asientos, timón, espejos, etc., sino que lo vemos como la
entidad compleja que es, en eso se basa la abstracción. No nos interesa conocer los detalles de cada
uno de sus componentes o qué es lo que hace cada parte, simplemente porque nos basta conocer el
carro o el objeto superficialmente, con tal que podamos interactuar con él y al hacerlo obtengamos
una respuesta para satisfacer nuestra necesidad; como desplazarnos rápidamente de un lugar otro,
ante esta solicitud, el carro responde realizando el movimiento. Cada objeto en el sistema puede
realizar trabajos, informar y "comunicarse “con otros objetos en el sistema sin revelar cómo se está
implementado. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando
lo están, una variedad de técnicas son requeridas para ampliar una abstracción.
La abstracción humana se realiza de manera jerárquica. Cada sistema se va dividiendo en
sistemas más pequeños hasta ir llegando a los niveles más simples, de esta forma se nos presenta
una realidad mucho más ordenada y entendible. Ésta es la forma de pensar de la P.O.O.
Existen niveles en la abstracción, que son:
-Comunidad de objetos que interactúan: Hay líneas de comunicación y cooperación
-Agrupación de objetos que trabajan juntos en una unidad: Se van formando los Paquetes
(en caso de Java)
-Interacción cliente-servidor: Los objetos se proporcionan servicios
Es el proceso de representar entidades reales como elementos internos a un programa,
la abstracción de los datos es tanto en los atributos, como en los métodos de los objetos. Es de
hacer notar que por medio de la abstracción se puede tener una visión global del tema, por ejemplo
en la clase PILA (Estructura de Datos, Ultimas Entradas Primeras Salidas LIFO), se pueden definir
objetos de este tipo, tomando únicamente las propiedades LIFO (del inglés Last Input First Output)
de las PILAS, algunos atributos como lleno, vacío, el tamaño y las operaciones o métodos que se
pueden realizar sobre estos objetos como PUSH (meter un elemento) o POP (retirar un elemento)
y no es necesario que el programador conozca o sea un experto en la Estructura de Datos con la
que se implementa la PILA (como por ejemplo con una organización contigua o simplemente
ligada, ni de los algoritmos que realizan el PUSH y el POP).
Un beneficio de la programación orientada a objetos es que retira al usuario del requisito
de saber cómo funcionan otros códigos. Este beneficio, llamado abstracción, significa que el
usuario implementando un objeto creado por otro programador para realizar una tarea en particular
no necesita saber cómo completa ese objeto su tarea. De esta forma, el usuario se puede concentrar
en sus propios problemas, en lugar de preocuparse por la implementación de un objeto que podría
querer utilizar. Esto permite a los programadores construir software más grandes y más complejos
sobre objetos más pequeños
 Shaw define abstracción como “una descripción simplificada o especificación de un sistema
que enfatiza algunos de los detalles o propiedades del mismo mientras suprime otros. Una buena
abstracción es aquella que enfatiza detalles significativos al lector o usuario y suprime detalles que
son, al menos por el momento, irrelevantes o causa de distracción”.
La abstracciones una técnica de programación que permite definir nuevos tipos de datos por el
usuario. La esencia de la abstracción es similar al uso de un tipo de dato de un lenguaje de
programación, cuyo uso se realiza sin saber cómo está representado o implementado. Una
abstracción se centra en la vista externa de un objeto, de modo que sirva para separar el
comportamiento esencial de un objeto de su implementación. Definir una abstracción significa
describir una entidad del mundo real, no importa lo compleja que pueda ser, y a continuación
utilizar esta descripción en un programa. El uso de un objeto por vía de su especificación como
tipo abstracto o clase abstracta significa que, si su aspecto interno experimenta modificaciones,
otras partes del sistema no se verán afectadas.
Un método abstracto es, como vimos, un método que declara una funcionalidad que debe
ser implementada en todas las clases derivadas de la clase en que se vaya a utilizar. En otras
palabras, a través de un método indicamos lo que deberían poder hacer los objetos de dichas
subclases. No se implementa en la clase base, sino que cada subclase debe tener su propia
implementación
 Encapsulamiento
Cuando se escriben clases, una buena práctica de programación orientada a objetos requiere
que los programadores "encapsulen" datos lejos de usuario del objeto. Esto significa que cualquier
dato o función dentro de una clase no debe estar accesible para el usuario sin una modificación del
programador. Un buen ejemplo son las funciones de "obtener" y "configurar" incluidas en la
mayoría de las clases. Estas funciones controlan la forma en que el usuario puede ingresar a las
variables de datos en un objeto, y aseguran que todos los datos se pueden considerar legitimados
para el uso. Esto limita la preocupación sobre los datos corrompidos, o la manipulación ilegal de
datos por parte del usuario.
 Polimorfismo
El polimorfismo está unido a la herencia, porque es la forma en la que un objeto que hereda
de otro objeto interactúa con ese objeto "base". Por ejemplo, el objeto profesor puede heredar
ciertas funciones de su objeto base (persona), pero cambiar una de ellas. El objeto profesor aún
puede utilizar las funciones de clase base junto con su propia versión de la función que cambia.
Incluso, durante la ejecución de un programa el usuario puede declarar una variable para retener
un objeto de persona, pero posteriormente al programa decide que necesita un objeto profesor más
específicamente. En este caso, la variable separada para el objeto persona puede sostener a un
objeto de profesor, porque el profesor hereda de (o es) un objeto persona.
El polimorfismo consiste en la posibilidad de aplicar una misma operación sobre distintos
objetos, y que esta operación varíe según el objeto al que se le aplique. Esto sucede en tiempo de
ejecución, NO en tiempo de compilación, por lo que el polimorfismo está íntimamente ligado al
enlace dinámico, como se verá a continuación.
La operación suele ser un método. Los objetos a los que se les puede aplicar este método
están limitados por herencia: ese método se define en una clase y es aplicable, con los refinamientos
subsiguientes, a todas sus subclases. Al proceso de seleccionar el método apropiado según la clase
del objeto se llama ligadura o enlace.Si ésta tiene que aplazarse obligatoriamente hasta el tiempo
de ejecución, el mensaje supone un enlace dinámico (también conocido como tardío). Es decir, si
todos los objetos son asociados estáticamente a una clase, y no se tiene en cuenta los posibles
cambios de referencia, el método a aplicar puede determinarse en tiempo de compilación, sin que
el sistema sufra ningún tipo de sobrecarga. Sin embargo, en la mayoría de los casos, es interesante
que los cambios de referencia producidos en tiempo de ejecución influyan en el cómputo.
La ligadura estática significa que se fijan los tipos de todas las variables y expresiones en
tiempo de compilación; la ligadura (o enlace) dinámica (también llamada ligadura tardía) se
produce cuando no es posible conocer la clase del objeto hasta el tiempo de ejecución. La ligadura
dinámica es la capacidad de retrasar hasta el instante de la recepción del mensaje la decisión sobre
la clase del objeto que lo recibe y el método concreto que debe de ejecutarse. Ejemplo de su
estructura:
// ... clases Figura, Rectángulo y Círculo
public class
Ppal {public static void
main(String[] args)
{Figura f; int opcion = pideOpcionAlUsuario();
if ( opcion == 1 )
f = new Rectangulo(5, 10);
else f = new Circulo(5);
// ? (50 o 78,5)
System.out.println( “Área: “ + f.calculaArea() );
}
}
Esta propiedad es una poderosa herramienta para simplificar el diseño de aplicaciones, pero
hay que tratarla con precaución. El error más común provocado por el uso del polimorfismo es que,
en un afán de simplificar, si se utilizan siempre los mismos nombres en las operaciones, se desvirtúa
realmente el nombre del operador. La gran ventaja del polimorfismo es permitir la realización de
las clases que definen un programa de forma totalmente independiente al programa donde se
utilizan. Sólo será necesario definir cuidadosamente las clases abstractas. El polimorfismo facilita
la reutilización de software, haciendo posible implementar software genérico que se pueda aplicar
no sólo a objetos existentes, sino también a objetos que sean añadidos en etapas futuras del
desarrollo
Conceptos erróneos sobre
Polimorfismo En algunos lenguajes OOP esta propiedad es confundida, erróneamente, con
otra conocida como operador overloading (sobrecarga de operadores), que permite la redefinición
de operadores como “+”, “-", ... Otro concepto asociado erróneamente al polimorfismo es la method
overloading o sobrecarga de métodos es decir, varios métodos que tienen el mismo nombre, pero
el número de parámetros o los tipos de la lista de parámetros es distinto. Tanto la sobrecarga de
métodos como de operadores no es más que una riqueza sintáctica extra: en realidad, las llamadas
a los métodos son enlazados en tiempo de compilación (ligadura o enlace estático) al método
concreto que ofrece los argumentos en número y tipo igual a los de la llamada. En cualquier caso,
si se desea considerar como polimorfismo, es un tipo de polimorfismo estático, y no es lo que se
entiende habitualmente por este término
 Herencia.
Otro beneficio de la programación orientada a objetos es la herencia, que también permite
a los programadores construir programas más complejos desde partes más simples. La herencia es
la forma en que los objetos "heredan" su funcionalidad de otros objetos, acomodándolas para sus
necesidades. Por ejemplo, un objeto "profesor" puede heredar su funcionalidad a un objeto
"persona", porque el profesor es una persona y requiere toda la funcionalidad del objeto persona
(junto con las funciones adicionales de un profesor). De esta forma, el programador del objeto
profesor no tiene que volver a reescribir el objeto de persona para utilizarlo, simplemente puede
dejar que el objeto profesor herede sus funciones del objeto de persona.
La herencia designa la facultad de los objetos de compartir propiedades y operaciones entre
ellos. Como la herencia humana, existen unas determinadas clases hijo que heredan las propiedades
y atributos de otras clases padres Desde un punto de vista de implementación, se trata de crear
nuevas clases de objetos a partir de otras ya existentes, es decir, de reutilizar el comportamiento de
una clase en la definición de otras nuevas. Cualquier clase hereda la declaración de los atributos y
los métodos de su superclase, pudiendo estas subclases especializarse añadiendo una declaraciones
de atributos adicionales y declaraciones de métodos propios o incluso cambiando los atributos y
métodos heredados Una de las razones para emplear la herencia es que permite la reutilizacióndel
código de proyectos anteriores, permitiendo la modificación (o especialización) de aquellos
aspectos que no concuerden exactamente con las necesidades de nuestra aplicación.
En las jerarquías que establecen las relaciones de herencia, a medida que descendemos de
nivel, cada nivel aporta un grado más de especialización sobre el nivel inmediatamente superior.
En cambio, si partimos del nivel de clases inferiores hacia los niveles superiores, cada nivel supone
una generalización del nivel inmediatamente inferior.
Herencia Simple
Se produce cuando la clase que recibe la herencia tiene un sólo padre De atributos: Los
atributos de una clase son heredadas automáticamente por todos sus descendientes. Esto quiere
decir que un objeto tiene propiedades de su clase y propiedades de las clases heredadas. Los
atributos deben definirse en las clases tan cercanas a las clases terminales de la jerarquía como sea
posible. En los niveles superiores de la jerarquía normalmente no existe suficiente información
como para que puedan decidirse unos atributos u otros, mientras que las clases terminales ya
representan entidades más concretas. De métodos.
La herencia de los métodos permite aumentar la reutilización de software y simplifica, por
tanto, el diseño. Además, facilita la programación, reduce redundancias y simplifica la corrección
de los programas. Los métodos deben situarse tan elevados en la jerarquía de clases como sea
posible, aunque puedan ser abstractos (es decir, sin incluir código). De esta forma se facilita la
abstracción, al poder establecer métodos comunes a varias clases.ejemplo de su estructura en
lenguaje de programación.
public class Persona {private String nombre; public Persona(String n)
{nombre = n;}public String getNombre() {return nombre;}}
public class Estudiante extends Persona { private String titulacion; public
Estudiante(String n, String t) { super ( n ); // Llama al constructor de Persona titulacion = t;
}publicString getTitulacion(){ return titulacion;}public
String toString(){return
getNombre() + “, “ + titulacion;} }
Un programa en Java en el que la clase estudiante hereda de la clase persona. La herencia
se indica en Java con la palabra clave extensa Aquellas clases que no heredan explícitamente de
ninguna clase lo hacen de Object, ejemplo de cómo seria
public class Ppal {public static void main(String[] args){
Estudiante est1; est1 = new Estudiante(“Paula”,”Ingeniera Informatica”);
System.out.println(est1); // llama a “toString”
System.out.println( est1.getNombre() );}
Herencia Múltiple
Se produce cuando el objeto que hereda tiene más de un padre o alguno de sus antepasados
tiene varios padres. La herencia múltiple ofrece la posibilidad de definir clases híbridas que
comparten los miembros de dos o más clases predefinidas. Es difícil de encontrar en los lenguajes
OO, ya que para determinar si un objeto hereda un miembro puede que haya que seguir caminos
por más de un padre. Pueden darse conflictos debidos a que un objeto herede la misma propiedad
o método de dos objetos situados al mismo nivel o a distinto nivel (colisión de nombres). Este tipo
de situaciones se da cuando una clase hereda 2 o más versiones de un método provenientes de los
distintos ancestros, y es inevitable en el caso de la herencia repetida, que se produce cuando una
clase hereda de otras que a su vez heredan de una clase común.
En cualquier caso, esta herencia suele producir los conflictos conocidos como colisión de
nombres. Sucede cuando el nombre de un método o atributo existe en más de una clase de nivel
superior Java no permite herencia múltiple. La herencia siempre es simple, aunque permite la
implementación de múltiples interfaces. Los interfaces son clases que sólo contienen métodos
abstractos. Se pueden distinguir otros dos tipos de herencia:
Herencia selectiva (o parcial) que permite decidir qué métodos se heredan y cuáles no. Esto
complica sintácticamente la definición de una clase, lo que hace que sean pocos los lenguajes que
la adoptan.
Herencia no selectiva que fuerza a que todos los atributos y métodos sean heredados. Esta
es la más utilizada, incluyendo lenguajes como C++, Java o C#. Ejemplo.
Class Profesor {privateString nombre;
Public Profesor(String n) {nombre = n;}
Public String getNombre(){
Return nombre;}}interface Investigador {
Public String getCampoInvestigacion();}
Class ProfesorUniversitario extends Profesor implements Investigador {
Private String investigacion;
Public ProfesorUniversitario(String n, String i){ super ( n ); // Constructor de Profesor
investigacion = i;}
public String getCampoInvestigacion(){
return investigacion;}}
Fundamentos de programación en Java.
 Historia de Java.
Java Es un lenguaje de programación de alto nivel, orientado a objetos, el cual tiene la
capacidad de ser ejecutado en una gran cantidad de dispositivos y electrodomésticos ya que este
fue el fin para el cual fue creado, en su mayor parte la sintaxis de Java está influenciada por el
popular lenguaje C y por Visual BASIC, aunque deja de lado algunas características de bajo nivel
que tiene C como son el manejo de memoria y los apuntadores (punteros). Para las gestiones de
manejo de memoria Java utiliza Algo llamado Recolector de Basura (garbaje collector) el cual se
encarga de limpiar la memoria.
Java posee todas las características del paradigma de la programación orientada a objetos
herencia, encapsulamiento, abstracción, polimorfismo, modularidad entre otras. Tiene también
todas las estructuras de control y bifurcaciones que poseen la mayoría de lenguajes, while, do while,
if , else-if-else básicamente las posee todas , esto lo veremos con más detalles en los siguientes
post.
Java se creó como una herramienta de programación para ser usada en un proyecto de set-top-
box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991.
El equipo (Green Team), compuesto por trece personas y dirigido por James Gosling, trabajó
durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo. El lenguaje se denominó
inicialmente Oak (por un roble que había fuera de la oficina de Gosling), luego pasó a denominarse
Green tras descubrir que Oak era ya una marca comercial registrada para adaptadores de tarjetas
gráficas y finalmente se renombró a Java.
El término Java fue acuñado en una cafetería frecuentada por algunos de los miembros del
equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría
tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim.
Otros abogan por el siguiente acrónimo, Just Another Vague Acronym (“sólo otro acrónimo
ambiguo más”). La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de café
disponible en la cafetería cercana, de ahí que el icono de java sea una taza de café caliente. Un
pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el número mágico) de los
archivos. class que genera el compilador, son en hexadecimal, 0xCAFEBABE. A pesar de todas
estas teorías, el nombre fue sacado al parecer de una lista aleatoria de palabras.
Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una
estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión maratoniana de tres
días entre John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric Schmidt, el equipo
reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador web Mosaic,
propiciaría que Internet se convirtiese en un medio interactivo, como el que pensaban era la
televisión por cable. Naughton creó entonces un prototipo de navegador, WebRunner, que más
tarde sería conocido como HotJava.
En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos de Sun.
Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23 de mayo de 1995,
durante las conferencias de SunWorld, a que vieran la luz pública Java y HotJava, el navegador
Web. El acontecimiento fue anunciado por John Gage, el Director Científico de Sun Microsystems.
El acto estuvo acompañado por una pequeña sorpresa adicional, el anuncio por parte de Marc
Andreessen, Vicepresidente Ejecutivo de Netscape, de que Java sería soportado en sus
navegadores. El 9 de enero del año siguiente, 1996, Sun fundó el grupo empresarial JavaSoft para
que se encargase del desarrollo tecnológico. Dos semanas más tarde la primera versión de Java
fue publicada.
La promesa inicial de Gosling era Write Once, Run Anywhere (Escríbelo una vez, ejecútalo en
cualquier lugar), proporcionando un lenguaje independiente de la plataforma y un entorno de
ejecución (la JVM) ligero y gratuito para las plataformas más populares de forma que los binarios
(bytecode) de las aplicaciones Java pudiesen ejecutarse en cualquier plataforma. El entorno de
ejecución era relativamente seguro y los principales navegadores web pronto incorporaron la
posibilidad de ejecutar applets Java incrustadas en las páginas web.
Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un
enorme incremento en el número de clases y paquetes que componen la biblioteca estándar.
 JDK.
Java Development Kit o (JDK), es un software que provee herramientas de desarrollo para la
creación de programas en Java. Puede instalarse en una computadora local o en una unidad de red.
es la Plataforma de Desarrollo JAVA. Se trata de la suma de todo lo que contiene la JRE (Java
Runtime Environment) más una serie de herramientas de desarrollo como un compilador,
debugger, compactador, documentador, etc. necesarios para desarrollar applets y aplicaciones de
escritorio. En la JDK también se encuentran herramientas de seguridad y de despliegue de
aplicaciones.
Componentes del JDK
JDK consta de una serie de aplicaciones y componentes, para realizar cada una de las tareas
de las que es capaz de encargarse.
A continuación se explican más en profundidad cada uno de ellos, así como su sintaxis,
indicando entre corchetes aquellos elementos que sean opcionales. Todos los programas permiten
la inclusión de una serie de opciones sobre su ejecución antes del primer argumento. Estas opciones
se indican precedidas de un menos (-):
Programa -opcion1 -opcion2 Parametro1
Todas las opciones que los ejecutables del JDK presentan se muestran llamando al
programa sin parámetros o con las opciones -? o -help:
Programa
programa –help
Programa -?
 JRE.
Java Runtime Environment o JRE es un conjunto de utilidades que permite la ejecución de
programas Java. El JRE es una máquina virtual de Java y su función es hacer de intermediario
entre una aplicación programada en Java y el sistema operativo que se esté usando. De este modo,
cualquier aplicación puede funcionar en cualquier sistema operativo que disponga del JRE. Área
de almacenamiento de la consola de Java que, en ocasiones, se debe borrar de forma manual para
permitir la carga e instalación de la última versión de Java Componentes
En su forma más simple, el entorno en tiempo de ejecución de Java está conformado por
una Máquina Virtual de Java o JVM, un conjunto de bibliotecas Java y otros componentes
necesarios para que una aplicación escrita en lenguaje Java pueda ser ejecutada. El JRE actúa como
un "intermediario" entre el sistema operativo y Java.
La JVM es el programa que ejecuta el código Java previamente compilado (bytecode)
mientras que las librerías de clases estándar son las que implementan el API de Java. Ambas JVM
y API deben ser consistentes entre sí, de ahí que sean distribuidas de modo conjunto.
Un usuario sólo necesita el JRE para ejecutar las aplicaciones desarrolladas en lenguaje
Java, mientras que para desarrollar nuevas aplicaciones en dicho lenguaje es necesario un entorno
de desarrollo, denominado JDK, que además del JRE (mínimo imprescindible) incluye, entre otros,
un compilador para Java.
 Compilador en Java.
Un compilador es un programa informático que traduce un programa escrito en un lenguaje de
programación a otro lenguaje de programación. Usualmente el segundo lenguaje es lenguaje de
máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este
proceso de traducción se conoce como compilación. El primer compilador auto contenido, es decir,
capaz de compilar su propio código fuente fue el creado para Lisp por Hart y Levin en el MIT en
1962. Desde 1970 se ha convertido en una práctica común escribir el compilador en el mismo
lenguaje que este compila, aunque Pascal y C han sido alternativas muy usadas.
La construcción de un compilador involucra la división del proceso en una serie de fases que
variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del
programa fuente y la síntesis del programa objeto.
Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases
correspondientes al Análisis léxico (que consiste en la descomposición del programa fuente en
componentes léxicos), análisis sintáctico (agrupación de los componentes léxicos en frases
gramaticales) y análisis semántico (comprobación de la validez semántica de las sentencias
aceptadas en la fase de análisis sintáctico).
Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar
formado por una o varias combinaciones de fases de generación de código (normalmente se trata
de código intermedio o de código objeto) y de optimización de código (en las que se busca obtener
un código lo más eficiente posible).
Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar
en Front-end y Back-end:
Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol
de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la
plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas
entre el análisis Léxico y la generación de código intermedio.
Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir
de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de
varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el
código fuente de un lenguaje de programación concreto sirva para generar código máquina en
varias plataformas distintas. Suele incluir la generación y optimización del código dependiente de
la máquina.
La función de un compilador es convertir un programa escrito un en lenguaje como Java a
un lenguaje que la computadora pueda entender. Los programas en Java se convierten en códigos
de bytes. El comando para llamar al compilador es: javac MiPrograma.java Donde el nombre del
compilador es javac y MiPrograma.java es el nombre del archivo que contiene el código de nuestro
programa. Al compilar el programa, el compilador verifica que éste obedezca las reglas de
programación en Java, y si algo sale mal, muestra los mensajes de error apropiados. El compilador
crea un archivo con el sufijo .class. Este contiene el código de bytes equivalente a su programa en
Java.
Tipos de compiladores
Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber
compiladores que se adscriban a varias categorías:
Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero
manteniendo la funcionalidad del programa original.
Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del
código fuente.
Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder
producir el código máquina.
Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código
según se necesitan.
Pauta de creación de un compilador: En las primeras épocas de la informática, el software de
los compiladores era considerado como uno de los más complejos existentes.
Los primeros compiladores se realizaron programándolos directamente en lenguaje
máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas
versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese
compilador.
Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó
intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico
a partir de una definición formal del lenguaje de partida, especificada normalmente mediante una
gramática formal y barata, dejando únicamente al programador del compilador la tarea de
programar las acciones semánticas asociadas.
 Máquina Virtual de Java.
La Máquina Virtual Java (JVM) es el entorno en el que se ejecutan los programas Java, su
misión principal es la de garantizar la portabilidad de las aplicaciones Java. Hablábamos que uno
de las principales características de JAVA tuvo con su concepción de “escribir solo una vez y
ejecutar en cualquier lugar” y para lograr esa independencia de los programas Java, sobre el sistema
operativo y el hardware en que se ejecutan es donde toma importancia la Máquina Virtual JAVA
o Java Virtual Machine o simplemente JVM.
Si función es amplia pero podemos señalar que entre sus tareas está proporcionar la vista de un
nivel de abstracción superior, permitiendo la independencia de la plataforma. Se denomina
máquina virtual porque "crea" una computadora virtual que establece las instrucciones (bytecodes)
que esta computadora puede ejecutar. El intérprete Java específico ejecuta las instrucciones que se
guardan en los archivos cuya extensión es .class. Las tareas principales de la JVM son las
siguientes:
Reservar espacio en memoria para los objetos creados
Liberar la memoria no usada (garbage collection).
Asignar variables a registros y pilas
Llamar al sistema huésped para ciertas funciones, como los accesos a los dispositivos
Vigilar el cumplimiento de las normas de seguridad de las aplicaciones Java
La protección de la máquina virtual se realiza por medio del verificador de bytecode, el cual
intenta asegurar el rechazo de aquellos programas en bytecode que no satisfagan las definiciones
asumidas por la optimización de Java, sobre todo en cuanto a direccionamiento. Asimismo, cuando
se trata de proteger el procesador real, el sistema descansa en la posibilidad de traducción hecha
directamente por el ambiente de ejecución de Java, donde se obtiene un código nativo bien definido
para la máquina.
La JVM fue diseñada para proveer ejecutables en un tipo de plataforma ejecutable estándar.
Originalmente fue construida en una sola plataforma - hoy en día varios fabricantes ofrecen
distintas construcciones de la JVM, ver enlaces al final - con lo cual sólo puede ofrecer un tipo de
aplicaciones compiladas en un código nativo. Los beneficios aparecen en la cantidad de
plataformas que ofrecen el ambiente de ejecución Java. Algunas de los ambientes de operación en
los que la JVM y el ambiente de ejecución están disponibles hoy son:
AS/400
AIX
Amiga
FreeBSD
HP
Linux
Macintosh
MP-RAS
NeXT
OS/2
Solaris
Windows 95
Windows NT
Decir que la JVM es un intérprete que convierte el ByteCode compilado de Java en el
código de máquina nativo en que debería ejecutarse no es totalmente falso, pero es más correcto
decir que es un emulador de la ejecución de un código nativo. La tecnología de máquinas virtuales
se ha distinguido de la tecnología de interpretación básicamente por el nivel en que se realiza la
interpretación. Los intérpretes trasladan un "código de bit" nativo directamente a llamadas del
sistema o instrucciones de máquina, pero la emulación consiste en permitir una arquitectura de
máquina intermedia.
La arquitectura de la JVM se basa en el concepto de una implementación que no es
específica de una máquina. Esto es, la arquitectura misma no asume nada acerca de la máquina o
de las características físicas y de construcción sobre la cual es implementada. De esta manera, la
JVM es una entidad autónoma e única que ejecuta los archivos de clases. La JVM se separa en
cinco unidades de funcionalidad distintas, las que se dedican a la tarea de ejecutar los archivos de
clases.
 Anatomía de un Programa en Java.
Un programa describe cómo un ordenador debe interpretar las órdenes del Programador para
que ejecute y realice las instrucciones dadas tal como están escritas. Un programador utiliza los
elementos que ofrece un lenguaje de programación para diseñar programas que resuelvan
problemas concretos o realicen acciones bien definidas. El siguiente programa Java muestra un
Mensaje en la consola con el texto
“Hola Mundo”.
/*
* Este programa escribe el texto "Hola Mundo" en la consola
* utilizando el método System.out.println()
*/
public class HolaMundo {
public static void main (String[] args) {
System.out.println("Hola Mundo");
}
}
La estructura de un programa Java En este programa se pueden identificar los siguientes
elementos del lenguaje Java: comentarios, definiciones de clase, definiciones de método y
sentencias. Comentario. El programa comienza con un comentario. El delimitador de inicio de un
comentario es /* y el delimitador de fin de comentario es */. El texto del primer comentario de este
ejemplo sería: ‘Este programa escribe el texto “Hola Mundo” en la consola utilizando el método
System.out.println()'. Los comentarios son ignorados por el compilador y solo son útiles para el
programador. Los comentarios ayudan a explicar aspectos relevantes de un programa y lo hacen
más legible. En un comentario se puede escribir todo lo que se desee, el texto puede ser de una o
más líneas.
Estructura de un programa Java Definición de clase
. La primera línea del programa, después del primer comentario. Define una clase que se
Llama HolaMundo
. La definición de la clase comienza por el carácter { y termina con el carácter }. El nombre
de la clase lo define el programador.
Definición de método
. Después de la definición de clase se escribe la definición del método main()
. Todos los programas Java deben incluir un método main()
. Este método indica las sentencias a realizar cuando se ejecuta un programa.
Un método es una secuencia de sentencias ejecutables. Las sentencias de un método quedan
delimitadas por los caracteres {y} que indican el inicio y el fin del método, respectivamente.
Sentencia
. Dentro del método main()se incluye una sentencia para mostrar un texto por la consola.
Los textos siempre se escriben entre comillas dobles para diferenciarlos de otros elementos del
lenguaje. Todas las sentencias de un programa Java deben terminar con el símbolo punto y coma.
Este símbolo indica al compilador que ha finalizado una sentencia. Una vez que el programa se ha
editado, es necesario compilarlo y ejecutarlo para comprobar si es correcto. Al finalizar el proceso
de compilación, el compilador indica si hay errores en el código Java, dónde se encuentran y el
tipo de error que ha detectado: léxico, sintáctico o semántico. /* Este programa calcula el perímetro
de una circunferencia */
public class PerimetroCircunferencia {
public static void main (String[] args) {
// declaración de PI y la variables radio y perimetro
final double PI = 3.1415926536;
double radio = 25.0, perimetro;
perimetro = 2.0*PI*radio;
System.out.print("El perimetro de la circunferencia de radio ");
System.out.print(radio);
System.out.print(" es ");
System.out.print(perimetro);
}
}
En un programa Java las sentencias se ejecutan secuencialmente, una detrás de otra en el
orden en que están escritas. En este ejemplo se puede ver que dentro del método main() se incluye
un comentario de una sola línea que comienza con //. A continuación se declaran las variables PI,
radio y perímetro, todas ellas de tipo doubleporque almacenan números reales.
PI representa un valor constante, por lo que es necesario utilizar el delimitador Final y
asignarle el valor 3.1415926536 correspondiente al número pi.
Después de las declaraciones, se asigna el valor 25.0 a la variable radio y se calcula el
Perímetro. Finalmente, se muestra el resultado del cálculo del perímetro para una circunferencia
de radio 25.
En este ejemplo se utilizan variables numéricas de tipo double
. Cada variable almacena un número real. La parte entera del número se separa de los
decimales con un punto, no con una coma. Esta es una característica de Java que se debe tener en
cuenta, de lo contrario, el compilador no entiende que se trata de un número real. El valor 25.0
almacenado en la variable radio es una magnitud para la que no se indican sus unidades. El
programador es responsable de que los cálculos se realicen correctamente y de realizar la
conversión de unidades cuando sea necesario. Para escribir un mensaje por la consola se utilizan
los métodos System.out.print() y System.out.println()
. Para escribir un mensaje sin saltar a la línea siguiente se utiliza System.out.print(),
System.out.println()escribe un mensaje y da un salto de línea. ¿Qué hace el siguiente código Java?
System.out.print("Hola");
System.out.print(" ");
System.out.print("Mundo");
En este ejemplo se escribe el texto “Hola Mundo” en la consola.
Hola Mundo
¿Qué pasaría si se omitiera la segunda línea de código?,
System.out.print("Hola");
System.out.print("Mundo");
En este caso se escribiría “HolaMundo” sin el espacio de separación entre las dos palabras.
HolaMundo Si en vez de utilizar el método System.out.print() se utiliza el método
System.out.println(), entonces el mensaje se escribe en dos líneas distintas.
System.out.println("Hola"); System.out.println("Mundo");
En este ejemplo, se escribiría “Hola” y “Mundo” en dos líneas. Hola
Mundo Combinando el uso de los métodos System.out.print() y System.out.println() se puede
escribir cualquier mensaje en la consola saltando de línea cuando sea necesario. Además, ambos
métodos permiten utilizar el operador + para concatenar textos.
El siguiente código Java escribe “Hola Mundo” en la consola.
System.out.print ("Hola");
System.out.print (" ");
System.out.print ("Mundo");
En este caso se ejecutan tres métodos System.out.print ()
. Este código se puede simplificar utilizando un solo método
System.out.print () y el operador + para concatenar los textos “Hola”, “” y “Mundo”.
System.out.print ("Hola" + " " + "Mundo"); También se puede escribir directamente el mensaje
“Hola Mundo”. El resultado es el mismo y el código es más claro. System.out.print ("Hola
Mundo"); Para mostrar por la consola un texto seguido del valor almacenado de una variable se
puede ejecutar dos veces el método System.out.print ():
System.out.print ("El primero es ");
System.out.print (perimetro);
Este código se puede simplificar utilizando el operador + para concatenar el texto “El
perímetro es” con el valor almacenado en la variable perímetro.
System.out.print ("El perímetro es " + perímetro); En ambos casos el resultado es el mismo. Por
ejemplo, si el valor almacenado en el variable perímetro fuera 157.08 la salida por la consola sería:
El perímetro es 157.08
 Entorno de desarrollo integrado (IDE.)en Java.
Los IDE (Integrated Development Environment) son un conjunto de herramientas para el
programador, que suelen incluir en una misma suite, un buen editor de código, administrador de
proyectos y archivos, enlace transparente a compiladores y debuggers e integración con sistemas
controladores de versiones o repositorios. Un entorno de desarrollo integrado, es un entorno de
programación que ha sido empaquetado como un programa de aplicación, es decir, consiste en un
editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI).
Los IDE proveen un marco de trabajo amigable para la mayoría de los lenguajes de
programación tales como C++, PHP, Python, Java, C#, Delphi, Visual Basic, etc. En algunos
lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en donde se permite
utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a
archivos de texto.
Algunos ejemplos de entornos integrados de desarrollo (IDE) son los siguientes:
Eclipse
NetBeans
IntelliJ IDEA
JBuilder de Borland
JDeveloper de Oracle
KDevelop
Anjunta
Clarion
MS Visual Studio
Visual C++
Los IDE ofrecen un marco de trabajo para la mayoría de los lenguajes de programación
tales como C++, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede
funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de
programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto.
Es posible que un mismo IDE pueda funcionar con varios lenguajes de programación. Este
es el caso de Eclipse, al que mediante plagios se le puede añadir soporte de lenguajes adicionales.
Un IDE debe tener las siguientes características:
Multiplataforma
Soporte para diversos lenguajes de programación
Integración con Sistemas de Control de Versiones
Reconocimiento de Sintaxis
Extensiones y Componentes para el IDE
Integración con Framework populares
Depurador
Importar y Exportar proyectos
Múltiples idiomas
Manual de Usuarios y Ayuda
Existen diferentes versiones de los IDE pero estos son algunos del software que utilizan
IDE, estos son:
a) Eclipse: Software libre. Es uno de los entornos Java más utilizados a nivel profesional.
El paquete básico de Eclipse se puede expandir mediante la instalación de plugins para añadir
funcionalidades a medida que se vayan necesitando.
b) NetBeans: Software libre. Otro de los entornos Java muy utilizados, también expandible
mediante plugins. Facilita bastante el diseño gráfico asociado a aplicaciones Java.
c) BlueJ: Software libre. Es un entorno de desarrollo dirigido al aprendizaje de Java
(entorno académico) y sin uso a nivel profesional. Destaca por ser sencillo e incluir algunas
funcionalidades dirigidas a que las personas que estén aprendiendo tengan mayor facilidad para
comprender aspectos clave de la programación orientada a objetos.
d) JBuilder: Software comercial. Se pueden obtener versiones de prueba o versiones
simplificadas gratuitas en la web, buscando en la sección de productos y desarrollo de aplicaciones.
Permite desarrollos gráficos.
e) JCreator: Software comercial. Se pueden obtener versiones de prueba o versiones
simplificadas gratuitas en la web. Este IDE está escrito en C++ y omite herramientas para
desarrollos gráficos, lo cual lo hace más rápido y eficiente que otros IDE
Ventajas de los IDE
La curva de aprendizaje es muy baja.
Es más ágil y óptimo para los usuarios que no son expertos en manejo de consola.
Formateo de código.
Funciones para renombrar variables, funciones.
Warnings y errores de sintaxis en pantalla de algo que no va a funcionar al interpretar o compilar.
Poder crear proyectos para poder visualizar los archivos de manera gráfica.
Herramientas de refactoring como por ejemplo seria extraer una
Porción de código a un método nuevo.
No es recomendado pero posee un navegador web interno por si queremos probar las cosas
dentro de la IDE.
De acuerdo a todo esto algunos IDE no son gratuitos por el mismo motivo que el software
son utilizados para trabajos mejorados, por tal motivo en los IDE podemos implementar líneas de
código donde podamos resolver algún problema con base al compilador, este es el que nos permitirá
modificar o corregir nuestros errores del programa.
Mi opinión acerca de los IDE es que algunos de estos necesitan muchas aplicaciones para poder
sacar la aplicación y en otros es muy fácil utilizarlos porque al momento de escribir las líneas de
código te corrige tus problemas de la aplicación, de acuerdo a esto en mi punto de vista el IDE que
se pudiera implementar sería el de Creador y Eclipse.
Algunos entornos son compatibles con múltiples lenguajes de programación, como Eclipse
o NetBeans, ambos basados en Java; o MonoDevelop, basado en C#. También puede incorporarse
la funcionalidad para lenguajes alternativos mediante el uso de plugins. Por ejemplo, Eclipse y
NetBeans tienen plugins para C, C++, Ada, Perl, Python, Ruby y PHP, entre otros.
 Elementos de un Programa Java.
A continuación se describe la definición léxica y sintáctica de los elementos de un programa
Java: comentarios, identificadores, variables y valores, Tipos primitivos, literales, operadores,
expresiones y expresiones aritmético-lógicas.
 Comentarios
En un programa Java hay tres tipos de comentarios.
Comentario de bloque: Empieza por /* y termina por */. El compilador ignora todo el texto
contenido dentro del comentario
/* * El programa HolaMundo se utiliza para aplicar los
* Métodos System.out.print() y System.out.println() */
Comentario de documentació: Empieza por /** y termina por */. Java dispone de la
herramienta javadoc para documentar automáticamente los programas. En un comentario de
documentación normalmente se indica el autor y la versión del software.
/**
* Programa HolaMundo
* @author Fundamentos de Informática
* @version 1.0
* @see Referencias
*/
Comentario de línea Empieza con //. El comentario comienza con estos caracteres y
termina al final de la línea. // El método System.out.print() salta la línea El uso de comentarios hace
más claro y legible un programa. En los comentarios se debe decir qué se hace, para qué y cuál es
el fin de nuestro programa. Conviene utilizar comentarios siempre que merezca la pena hacer una
aclaración sobre el programa. Identificadores El programador tiene libertad para elegir el nombre
de las variables, los métodos y de otros elementos de un programa. Existen reglas muy estrictas
 Identificadores
El programador tiene libertad para elegir el nombre de las variables, los métodos y de otros
Elementos de un programa. Existen reglas muy estrictas sobre los nombres que se utilizan como
identificadores de clases, de variables o de métodos.
Todo identificador debe empezar con una letra que puede estar seguida de más letras o
dígitos. Una letra es cualquier símbolo del alfabeto y el carácter ‘_’. Un dígito es cualquier carácter
entre ‘0’ y ‘9’. Los identificadores Hola, hola, número, numeroPar, numeroImpar, numero_impar,
numero_par, nombre, apellido1 y apellido2 son válidos. El identificador 1numerono es válido
porque empieza con un dígito, no con una letra. Cualquier identificador que empiece con una letra
seguida de más letras o dígitos es válido siempre que no forme parte de las palabras reservadas del
lenguaje Java. El lenguaje Java distingue entre letras mayúsculas y minúsculas, esto significa que
los identificadores numeroPar y numeroparson distintos.
Existen unas normas básicas para los identificadores que se deben respetar.
 Los nombres de variables y métodos empiezan con minúsculas. Si se trata de un nombre
compuesto cada palabra debe empezar con mayúscula y no se debe utilizar el guion bajo para
separar las palabras. Por ejemplo, los identificadores calcular Sueldo, setNombre o getNombre
son válidos.
 Los nombres de clases empiezan siempre con mayúsculas. En los nombres compuestos,
cada palabra comienza con mayúscula y no se debe utilizar el guion bajo para separar las palabras.
Por ejemplo, HolaMundo, Perímetro Circunferencia, Alumno o Profesor son nombres válidos.
Los nombres de constantes se escriben en mayúsculas. Para nombres compuestos se utiliza
el guión bajo para separar las palabras. Por ejemplo, PI, MINIMO, Máximo
TOTAL_ELEMENTOS son nombres válidos.
 Variables y valores
Un programa Java utiliza variables para almacenar valores, realizar cálculos, modificar los
valores almacenados, mostrarlos por la consola, almacenarlos en disco, enviarlos por la red, etc.
Una variable almacena un único valor Una variable se define por un nombre, un tipo y el rango de
valores que puede almacenar.
El nombre de una variable permite hacer referencia a ella. Este nombre debe cumplir las reglas
aplicables a los identificadores. El tipo indica el formato de los valores que puede almacenar la
variable: cadenas de caracteres, valores lógicos, números enteros, números reales o tipos de datos
complejos. El rango indica los valores que puede tomar la variable. Por ejemplo, una variable de
tipo número entero, con nombre mes Nacimiento puede almacenar valores positivos y negativos,
lo que no tiene sentido cuando se trata de meses del año. El rango válido para esta variable sería de
1 a 12. Para declarar una variable en Java se indica el tipo y su nombre.
int mesNacimiento;
En este ejemplo se indica que la variable es de tipo entero (int) y su nombre es mesNacimiento
. Una vez declarada una variable, se puede utilizar en cualquier parte del programa
referenciándola por su nombre. Para almacenar un valor en una variable se utiliza el operador de
asignación y a continuación se indica el valor, por ejemplo 2.
mesNacimiento = 2;
A partir de este momento la variable
mesNacimiento almacena el valor 2 y cualquier referencia a ella utiliza este valor. Por
ejemplo, si se imprime el valor de la variable por la consola, muestra el valor 2.
System.out.print(mesNacimiento);
Java permite declarar e inicializar una variable en una sola sentencia.
int diaNacimiento = 20;
int mesNacimiento = 3;
En este ejemplo se declaran las variables diaNacimiento con el valor 20 y mesNacimiento
con valor 3. Si se declara una constante, entonces se debe utilizar el delimitador final y es necesario
indicar su valor. En la siguiente declaración se define el valor de la constante pi de tipo double para
almacenar un número real.
final double PI = 3.1415926536;
Es conveniente utilizar nombres apropiados para las variables. El nombre de una variable
debe indicar para qué sirve. El nombre de una variable debe explicarse por sí mismo para mejorar
la legibilidad del programa. Si se desea declarar más de una variable a la vez se deben separar las
Variables en la sentencia de la declaración.
int dia=20, mes=2, año=2020;
En este ejemplo se declaran las variables enteras dia, mes y año
. La variable día se inicializa con el valor 20, mes con 2 y año con 2020. La siguiente declaración
es equivalente a la anterior.
int dia=20;
int mes=2;
int año=2020;
 Tipos primitivos
Las variables de java pueden ser de un tipo primitivo de datos o una referencia a un
objeto. Los tipos primitivos permiten representar valores básicos. Estos tipos se
clasifican en números enteros, números reales, caracteres y valores booleanos.
Números enteros. Representan números enteros positivos y negativos con distintos
rangos de valores, desde cientos a trillones. Los tipos enteros de Java son byte, int,
Short y long.
Números reales. Existen dos tipos de números reales en Java, float y double. La diferencia
entre ellos está en el número de decimales que tienen capacidad para expresar y en sus rangos de
valores.
Caracteres. El tipo char permite representar cualquier carácter Unicode. Los caracteres
Unicode contienen todos los caracteres del alfabeto de la lengua castellana.
Booleano Se utiliza para representar los valores lógicos verdadero y falso. Solo tiene dos
valores true y false.
 Literales
Se denomina literal a la manera en que se escriben los valores para cada uno de los tipos
primitivos. Números enteros
Un número entero en Java se puede escribir en decimal, octal o en hexadecimal. Cuando se
utiliza el sistema octal es necesario poner el dígito 0 delante del número. Si se utiliza el sistema
hexadecimal se debe poner 0x delante del número. Por ejemplo, el número decimal 10 se puede
escribir 012 en octal y 0xA en hexadecimal. Los números enteros se supone que pertenecen al tipo
int.
Números reales Un número real en Java siempre debe tener un punto decimal o un exponente.
Por ejemplo, el número 0.25 se puede expresar también como 2.5e-1. Los números reales se supone
que pertenecen al tipo double
Booleanos. Los valores lógicos solo pueden ser true y false
Se escriben siempre en minúsculas.
Caracteres Los valores de tipo carácter representan un carácter Unicode. Se escriben
siempre entre comillas simples, por ejemplo 'a', 'A', '0', '9'. En Java un carácter se puede expresar
por su código de la tabla Unicode en octal o en hexadecimal.
 Operadores
Cada tipo puede utilizar determinados operadores para realizar operaciones o cálculos.
Números enteros. Al realizar una operación entre dos números enteros, el resultado siempre
es un número entero. Con los números enteros se pueden realizar operaciones unarias, aditivas,
multiplicativas, de incremento y decremento, relacionales, de igualdad y de asignación.
-Una operación unaria permite poner un signo delante: +5, -2.
-Una operación aditiva se refiere a la suma y la resta: 2+3, 5-2.
-Una operación multiplicativa multiplica o divide dos valores: 5*2, 5/2. El operador % calcula
el resto de la división entera 5%2.
-Un incremento o decremento aumenta o decremento en 1 el valor de una variable: ++número,
número++, --número, número--. Si el operador va antes de la variable, primero se realiza la
operación y se modifica el valor de la variable. Si el operador va después de la variable, su valor
se modifica al final.
-Un operador relacional permiten comparar dos valores: >, <, >= y <=. El resultado de la
comparación es un valor booleano que indica si la relación es verdadera o falsa.
-Un operador de igualdad compara son dos valores son iguales o no. El operador == devuelve
verdadero si los dos valores son iguales, el operador!= devuelve verdadero si son diferentes. El
resultado de la comparación es un valor booleano que indica si la igualdad o desigualdad es
verdadera o falsa.
-Un operador de asignación permite asignar un valor o el resultado de una operación a una
variable: =, +=, -=, *=, /=, %=.
Números reales. Con los números reales se aplican los mismos operadores que con los
números enteros. Si se realizan operaciones unarias, aditivas o multiplicativas, el resultado es un
número real. También se pueden aplicar los operadores relacionales para comparar dos números
reales.
Booleanos. Los operadores que se aplican a los valores lógicos son: negación, Y lógico, O
lógico.
-La negación (!) devuelve truesi el operando es false.
-El Y lógico (&&) devuelve false si uno de los operando es false.
-El O lógico (||) devuelve truesi uno de los operandos es true.
 Expresiones
Una expresión permite realizar operaciones entre valores utilizando distintos operadores. Las
expresiones son útiles para representar las fórmulas matemáticas que se utilizan para realizar
cálculos. En Java se pueden definir expresiones tan complejas como sea necesario. Por ejemplo,
para convertir una temperatura de grados Fahrenheit a Centígrados se utiliza la fórmula:
C = ((F – 32) * 5) / 9
En este ejemplo C representa la temperatura en grados centígrados y F en grados Fahrenheit.
La fórmula en Java, utilizando las variables centígrados y Fahrenheit de tipo doublé
Centígrados = ((fahrenheit – 32.0) * 5.0)) / 9.0;
Toda la expresión se evalúa a un valor. El orden de los cálculos depende del orden de
prioridad de los operadores: primero los operadores unarios, después los multiplicativos, de
izquierda a derecha, después los operadores aditivos, de izquierda a derecha, después los
operadores de relación y por último los operadores de asignación.
Por ejemplo, la expresión x = -3 + 2 * 4 – 12 / 6 + 5 se calcula en el orden siguiente: Primero
se aplica el operador unario (-) a 3 y se obtiene -3. A continuación se evalúan los operadores
multiplicativos de izquierda a derecha. Se calcula el producto de 2 * 4 y se obtiene 8, después se
divide 12 / 6 y se obtiene 2.
Al finalizar estas operaciones la expresión queda x = -3 + 8 – 2 + 5. Por último, se evalúan
los operadores aditivos de izquierda a derecha y se obtiene 8.
Cuando se desea modificar el orden de prioridad de los operadores es necesario utilizar
paréntesis para indicar el orden de evaluación. Por ejemplo, al calcular el valor de y = -3 + 2 * (14
– 2) / 6 + 5 se obtiene 6.
 Expresiones aritmético-lógicas
Una expresión aritmético-lógica devuelve un valor lógico verdadero o falso.
En este tipo de expresiones se utilizan operadores aritméticos, operadores relacionales y de
igualdad. Por ejemplo,
Una expresión lógica puede ser: (10 – 2) > (5 – 3)
En este ejemplo la expresión aritmético-lógica es verdadera porque el lado derecho de la
expresión es mayor que el lado izquierdo. En una expresión aritmético-lógica se pueden combinar
varias expresiones con operadores lógicos. La precedencia de los operadores lógicos es menor que
la de los operadores relacionales, por lo que primero se evalúan las desigualdades y después los
operadores lógicos. El orden de prioridad de los operadores lógicos es el siguiente: primero la
negación, después el Y lógico y por último el O lógico. La prioridad de los operadores de
asignación es la menor de todas.
Por ejemplo, la expresión 3 + 5 < 5 * 2 || 3 > 8 && 7 > 6 – 2 se evalúa en el orden
siguiente.
Primero se evalúan las expresiones aritméticas y se obtiene
la expresión lógica 8 < 10 || 3 > 8 && 7 > 4.
A continuación se evalúan los operadores relacionales y se obtiene true|| false && true
. Ahora se evalúa el operador Y lógico con los operandos false && true y se obtiene false.
Por último, se evalúa el operador O lógico con los operandos true|| falsey se obtiene true,
el valor final de la expresión.
Los operadores lógicos && y || se evalúan por cortocircuito. Esto significa que al evaluar
a && b, si a es falso, no es necesario evaluar b porque la expresión es falsa. De forma similar, al
evaluar a || b, si a es verdadero, no es necesario evaluar b porque la expresión es verdadera.
 Estructura de control.
El cuerpo de un programa se compone de un conjunto de sentencias que especifican las
acciones que se realizan durante su ejecución. Dentro de cualquier programa, se escriben sentencias
que definen la secuencia de acciones a ejecutar. Estas sentencias incluyen acciones de cálculo,
entrada y salida de datos, almacenamiento de datos, etc. Las sentencias se ejecutan una a una en el
orden en el que han sido escritas. Se denomina flujo de un programa al orden de ejecución de las
sentencias que forman parte del cuerpo de un programa. Las estructuras de control son una
característica básica de los lenguajes que se utiliza para modificar el flujo de un programa.
Hay casos en los que el flujo de un programa debe ejecutar determinadas instrucciones solo
cuando se cumple una condición. En otras ocasiones, debe repetir un conjunto de sentencias un
número determinado de veces. Las estructuras de control permiten condicionar el flujo de ejecución
dependiendo del estado de las variables de un programa. Las estructuras de control básicas se
pueden clasificar en estructuras de selección, de repetición y de salto.
 Selección. Permiten decidir si se ejecuta un bloque de sentencias o no.
 Repetición. Permiten ejecutar un bloque de sentencias muchas veces.
 Salto. Permiten dar un salto y continuar la ejecución de un programa en un punto distinto
de la siguiente sentencia en el orden natural de ejecución.
Las estructuras de control se pueden combinar sin ningún tipo de limitación. Cualquier nuevo
bloque de sentencias puede incluir estructuras de control a continuación de otras. Cuando se
incluyen varias estructuras seguidas unas de otras, se dice que son estructuras de control apiladas.
Por otra parte, dentro de un bloque de una estructura de control se puede incluir otra
estructura de control y dentro de este nuevo bloque se puede incluir otra estructura de control y así
sucesivamente. Cuando una estructura contiene otra estructura, se dice que son estructuras de
control anidadas. Es importante destacar que no existe limitación en cuanto al número de
estructuras de control apiladas o anidadas que se pueden utilizar en un programa Java. La única
restricción a tener en cuenta es la claridad y la legibilidad del programa.
Estructuras de selección
Las estructuras de selección permiten modificar el flujo de un programa. La decisión de ejecutar
un bloque de sentencias queda condicionada por el valor de una expresión lógica definida
utilizando variables del programa.
Estructura if
La estructura if se denomina estructura de selección única porque ejecuta un bloque de
sentencias solo cuando se cumple la condición del if. Si la condición es verdadera se ejecuta el
bloque de sentencias. Si la condición es falsa, el flujo del programa continúa en la sentencia
inmediatamente posterior al if.
Una sentencia if tiene la siguiente sintaxis:
if (condicion) {
bloque-de-sentencias
}
La condición es una expresión que evalúa un valor lógico, por lo que el resultado solo puede
ser true o false. La condición siempre se escribe entre paréntesis. La selección se produce sobre el
bloque de sentencias delimitado por llaves. Si el bloque de sentencias solo tiene una sentencia,
entonces se puede escribir sin las llaves, como se muestra a continuación.
if (condicion)
sentencia;
Cuando el flujo de un programa llega a una estructura if, se evalúa la condición y el bloque
de instrucciones se ejecuta si el valor de la condición es true. Si la condición es false, entonces se
ejecuta la sentencia inmediatamente posterior al if.
Por ejemplo, si la calificación de un alumno es 10, entonces se debe mostrar por la consola
un mensaje indicando que tiene una Matrícula de Honor.
La sentencia if considerando que calificación es una variable de tipo int:
if (calificacion == 10) {
System.out.println("Matrícula de Honor");
}
En este ejemplo el mensaje “Matrícula de Honor” solo se muestra cuando el valor de la
calificación es igual a 10.
Estructura if else
La estructura if-else se denomina de selección doble porque selecciona entre dos bloques
de sentencias mutuamente excluyentes. Si se cumple la condición, se ejecuta el bloque de
sentencias asociado al if. Si la condición no se cumple, entonces se ejecuta el bloque de sentencias
asociado al else.
Una sentencia if-else tiene la siguiente sintaxis:
if (condicion) {
bloque-de-sentencias-if
}
else {
bloque-de-sentencias-else
}
Al igual que en el if, la condición se debe escribir entre paréntesis. La selección depende
del resultado de evaluar la condición. Si el resultado es true, se ejecuta el bloque de sentencias del
if, en cualquier otro caso se ejecuta el bloque de instrucciones del else. Después de ejecutar el
bloque de sentencias se ejecuta la sentencia inmediatamente posterior al if-else
Por ejemplo, si se desea mostrar un mensaje por la consola para indicar si un número es par
o impar, basta con calcular el resto de la división del número entre 2 con el operador %. Si el resto
es igual a cero, entonces el número es par, en caso contrario el número es impar. La sentencia if-
else:
if (numero % 2 == 0)
System.out.println("El número es par");
else
System.out.println("El número es impar");
Como se ha comentado antes, los bloques de sentencias son mutuamente excluyentes. Si se
cumple la condición se ejecuta un bloque de sentencias, en caso contrario se ejecuta el otro bloque
de sentencias. Teniendo en cuenta esto, se podría escribir una sentenciaif-else con la condición
contraria y con los bloques de sentencias intercambiados.
if (numero % 2 != 0)
System.out.println("El número es impar");
else
System.out.println("El número es par");
Si fuera necesario evaluar más de una condición, entonces se deben utilizar varias
estructuras de selección anidada
Estructura if else if
La estructura if-else-if se puede aplicar en los mismos casos en que se utiliza un if-else
anidado. Esta estructura permite escribir de forma abreviada las condiciones de un if-else anidado.
Una sentencia if-else-if tiene la siguiente sintaxis:
if (condicion-1) {
bloque-de-sentencias-condicion-1
} else if (condicion-2) {
bloque-de-sentencias-condicion-2
} else {
bloque-de-sentencias-else
}
La sentenciaif-else-if para el ejemplo de las calificaciones:
int calificacion = 7;
if (calificacion == 10) {
System.out.println("Matrícula de Honor");
} else if (calificacion == 9) {
System.out.println("Sobresaliente");
} else if (calificacion >= 7) {
System.out.println("Notable");
} else if (calificacion == 6) {
System.out.println("Bien");
} else if (calificacion == 5) {
System.out.println("Aprobado");
} else {
System.out.println("Suspenso");
}
Estructura switch
La estructura switches una estructura de selección múltiple que permite seleccionar un
bloque de sentencias entre varios casos. En cierto modo, es parecido a una estructura de if-else
anidados. La diferencia está en que la selección del bloque de sentencias depende de la evaluación
de una expresión que se compara por igualdad con cada uno de los casos. La estructura switch
consta de una expresión y una serie de etiquetas case y una opción default. La sentencia break
indica el final de la ejecución del switch.
Una sentencia switch tiene la siguiente sintaxis:
switch (expresion) { case valor-1:
bloque-de-sentencias-1;
break;
case valor-2:
bloque-de-sentencias-2;
break;
case valor-3:
bloque-de-sentencias-3;
break;
case valor-4:
bloque-de-sentencias-4;
break;
case valor-5:
bloque-de-sentencias-5;
break;
default:
bloque-de-sentencias-default;
break;
}
 Entrada y salida.
Los flujos de Java Prácticamente todos los programas deben leer datos del exterior para
procesarlos y después presentar los resultados. La información que necesita un programa
normalmente se obtiene mediante la entrada de datos por el teclado o leyendo un fichero. Los
resultados de la ejecución de un programa se pueden presentar por la consola, la impresora o en un
fichero. El tipo de información que se utiliza tanto en las entradas como en las salidas puede tener
diversos formatos: texto, imagen, sonido, binario, etc. En Java, la entrada de datos se realiza
mediante un flujo de entrada. Para realizar la entrada de datos es necesario abrir el flujo de entrada,
leer la información del flujo hasta el final y por último cerrar el flujo. La salida se hace mediante
un flujo de salida. Para realizar la salida de datos es necesario abrir el flujo de salida y a
continuación se escribe en él toda la información que se desee, por último, se cierra el flujo.
Este esquema de entradas y salidas basadas en un flujo permite que las entradas sean
independientes de la fuente de datos y que las salidas sean independientes del destino de los datos.
Un flujo en Java es un objeto que se utiliza para realizar una entrada o salida de datos. Representa
un canal de información del que se puede leer o escribir datos de forma secuencial. Existen dos
tipos de flujos en Java, los que utilizan bytes y los que utilizan caracteres.
La siguiente tabla muestra los flujos de entrada de datos de Java:
Flujos con bytes Flujos con caracteres
InputStream
ByteArrayInputStream
FileInputStream
FilterInputStream
BufferedInputStream
DataInputStream
LineNumberInputStream
PushBackInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream
Reader
BufferedReader
LineNumberReader
CharArrayReader
FilterReader
PushBackReader
InputStreamReader
FileReader
PipedReader
StringReader
La siguiente tabla muestra los flujos de salida de datos de Java:
Flujos con bytes Flujos con caracteres
OutputStream
ByteArrayOutputStream
FileOutputStream
FilterOutputStream
BufferedOutputStream
DataOutputStream
PrintStream
ObjectOutputStream
PipedOutputStream
Writer
BufferedWriter
CharArrayWriter
FilterWriter
OutputStreamWriter
FileWriter
PipedWriter
PrintWriter
StringWriter
Existen flujos con bytes y flujos con caracteres que se aplican a la misma entrada o salida.
FileInputStream y FileOutputStream son flujos para leer y escribir bytes en un fichero, FileReader
Y FileWriter también son flujos que se aplican a ficheros, pero en este caso para leer y escribir
caracteres.
Entrada de datos desde el teclado
El flujo de entrada System.in lee los datos que se introducen en el teclado. Si este flujo se
pasa como argumento a una instancia de la clase Scanner, permite realizar la lectura de datos del
teclado. Basta con utilizar los métodos next(), nextLine() y nextInt() para leer una palabra, una
línea y un número entero, respectivamente.
A continuación se muestra el uso de la clase Scanner y el flujo de entrada del teclado
System.in. Para utilizar la clase Scanner en un programa Java es necesario importar la librería
java.util.Scanner.
Suponga que se desea realizar un programa que pide un nombre, el día, el mes y el año de la fecha
de nacimiento de una persona. En este programa se declara una instancia de la clase Scanner, con
nombre entradaTeclado que se inicializa con el flujo de entrada del teclado System.in.
Scanner entradaTeclado = new Scanner(System.in);
La clase Scanner ofrece los métodos next(), nextLine() o nextInt(), entre otros. El método
next() lee una palabra, el método nextLine() lee una línea completa y el método nextInt() lee un
número de tipo entero. La variable nombre de tipo String se inicializa con el nombre que se
introduce en el teclado. Como se invoca el método nextLine() de entradaTeclado, se lee toda la
línea, de manera que la variable nombre almacena tanto el nombre como los apellidos de la persona.
System.out.print("¿Cómo te llamas? ");
nombre = entradaTeclado.nextLine();
 tipos de programas que pueden hacerse en JAVA
Los programas en Java suelen estar en una de las siguientes categorías:
• Applets
Los applets son pequeños programas que se incorporan en una página Web y que por lo
tanto, necesitan de un Navegador Web compatible con Java para poder ejecutarse. A menudo los
applets se descargan junto con una página HTML desde un Servidor Web y se ejecutan en la
máquina cliente.
• Aplicaciones
Las aplicaciones son programas standalone de propósito general que normalmente se
ejecutan desde la línea de comandos del sistema operativo. Con Java se puede realizar cualquier
programa que normalmente se crearía con algún otro lenguaje de programación.
• Servlets
Los servlets al contrario de los applets son programas que están pensados para trabajar en
el lado del servidor y desarrollar aplicaciones Web que interactúen con los clientes. Los servlets
son una alternativa de la programación CGI tradicional.
Introducción:
Conclusión.

Más contenido relacionado

La actualidad más candente

Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetoswladimirclipper
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosjuliomancerotroya
 
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900johnny herrera
 
Investigacion objetos unidad 5
Investigacion objetos unidad 5Investigacion objetos unidad 5
Investigacion objetos unidad 5Oliver Choco
 
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a  Programación Orientada a Objetos (OOP): Clases y ObjetosIntroducción a  Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a Programación Orientada a Objetos (OOP): Clases y ObjetosKudos S.A.S
 
Unidad 3. obj 3.2 Programación Orientada a Objetos
Unidad 3. obj 3.2 Programación Orientada a ObjetosUnidad 3. obj 3.2 Programación Orientada a Objetos
Unidad 3. obj 3.2 Programación Orientada a ObjetosAlix Indriago
 
Conceptos básicos de programación orientada a objetos
Conceptos básicos de programación orientada a objetosConceptos básicos de programación orientada a objetos
Conceptos básicos de programación orientada a objetosManuel Murillo
 
Introducción a la Programación Orientada por Objetos con C#
Introducción a la Programación Orientada por Objetos con C#Introducción a la Programación Orientada por Objetos con C#
Introducción a la Programación Orientada por Objetos con C#mateo611
 
Modelo entidad relación
Modelo entidad relaciónModelo entidad relación
Modelo entidad relaciónnatha16853
 
Clase DE INFORMATICA
Clase DE INFORMATICAClase DE INFORMATICA
Clase DE INFORMATICATheBrytoxDD
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetosalexis armas
 

La actualidad más candente (20)

Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Cap3.0
Cap3.0Cap3.0
Cap3.0
 
Java
Java Java
Java
 
Principios poo
Principios pooPrincipios poo
Principios poo
 
Tarea de objeto y clase poo
Tarea de objeto y clase pooTarea de objeto y clase poo
Tarea de objeto y clase poo
 
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
 
Investigacion objetos unidad 5
Investigacion objetos unidad 5Investigacion objetos unidad 5
Investigacion objetos unidad 5
 
B dtrabajo2
B dtrabajo2B dtrabajo2
B dtrabajo2
 
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a  Programación Orientada a Objetos (OOP): Clases y ObjetosIntroducción a  Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
 
Unidad 3. obj 3.2 Programación Orientada a Objetos
Unidad 3. obj 3.2 Programación Orientada a ObjetosUnidad 3. obj 3.2 Programación Orientada a Objetos
Unidad 3. obj 3.2 Programación Orientada a Objetos
 
P.O.O.
P.O.O.P.O.O.
P.O.O.
 
Taller 1 1a
Taller 1 1aTaller 1 1a
Taller 1 1a
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Conceptos básicos de programación orientada a objetos
Conceptos básicos de programación orientada a objetosConceptos básicos de programación orientada a objetos
Conceptos básicos de programación orientada a objetos
 
Introducción a la Programación Orientada por Objetos con C#
Introducción a la Programación Orientada por Objetos con C#Introducción a la Programación Orientada por Objetos con C#
Introducción a la Programación Orientada por Objetos con C#
 
S3-POO-2.1 Conceptos Básicos
S3-POO-2.1 Conceptos BásicosS3-POO-2.1 Conceptos Básicos
S3-POO-2.1 Conceptos Básicos
 
Modelo entidad relación
Modelo entidad relaciónModelo entidad relación
Modelo entidad relación
 
Clase DE INFORMATICA
Clase DE INFORMATICAClase DE INFORMATICA
Clase DE INFORMATICA
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 

Similar a Programación orientada a objetos en Java

Metodología orientada a objetos
Metodología orientada a objetosMetodología orientada a objetos
Metodología orientada a objetosalcrrsc
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosronnyme21
 
Introduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalIntroduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalJose Angel Rodriguez
 
Programación estructurada a objetos.pptm
Programación  estructurada  a objetos.pptmProgramación  estructurada  a objetos.pptm
Programación estructurada a objetos.pptmelvis mendieta
 
Programacion orientada a objetos by Marcos Acosta
Programacion orientada a objetos by Marcos AcostaProgramacion orientada a objetos by Marcos Acosta
Programacion orientada a objetos by Marcos AcostaMarcos Acosta
 
Orientado a objeto
Orientado a objetoOrientado a objeto
Orientado a objetoUnefa
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetosguest160f88
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetosguest160f88
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosalexmoncada21
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosricardoloja
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visualLibertad25
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetoslindacajaperuiz
 
Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetosAngel Ordoñez
 
Unidad 1 Mad IntroduccióN
Unidad 1 Mad IntroduccióNUnidad 1 Mad IntroduccióN
Unidad 1 Mad IntroduccióNSergio Sanchez
 

Similar a Programación orientada a objetos en Java (20)

Java
JavaJava
Java
 
Metodología orientada a objetos
Metodología orientada a objetosMetodología orientada a objetos
Metodología orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Introduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalIntroduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos original
 
Programación estructurada a objetos.pptm
Programación  estructurada  a objetos.pptmProgramación  estructurada  a objetos.pptm
Programación estructurada a objetos.pptm
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion orientada a objetos by Marcos Acosta
Programacion orientada a objetos by Marcos AcostaProgramacion orientada a objetos by Marcos Acosta
Programacion orientada a objetos by Marcos Acosta
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Orientado a objeto
Orientado a objetoOrientado a objeto
Orientado a objeto
 
Conceptos poo
Conceptos pooConceptos poo
Conceptos poo
 
Guía Teórica POO
Guía Teórica POOGuía Teórica POO
Guía Teórica POO
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetos
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visual
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetos
 
Unidad 1 Mad IntroduccióN
Unidad 1 Mad IntroduccióNUnidad 1 Mad IntroduccióN
Unidad 1 Mad IntroduccióN
 

Último

IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAJAMESDIAZ55
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfyoseka196
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIAMayraOchoa35
 
estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdfFlorenciopeaortiz
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestajeffsalazarpuente
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Francisco Javier Mora Serrano
 
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa  tipos y funcionamientoCaldera Recuperadora de químicos en celulosa  tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa tipos y funcionamientoRobertoAlejandroCast6
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptEduardoCorado
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptxGARCIARAMIREZCESAR
 
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfMIGUELANGELCONDORIMA4
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdfFernandaGarca788912
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...SuannNeyraChongShing
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaXjoseantonio01jossed
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCANDECE
 
CICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaCICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaSHERELYNSAMANTHAPALO1
 

Último (20)

IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdf
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
 
estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdf
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuesta
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
 
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa  tipos y funcionamientoCaldera Recuperadora de químicos en celulosa  tipos y funcionamiento
Caldera Recuperadora de químicos en celulosa tipos y funcionamiento
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.ppt
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
 
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdfPresentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
Presentación N° 1 INTRODUCCIÓN Y CONCEPTOS DE GESTIÓN AMBIENTAL.pdf
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdf
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRC
 
CICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaCICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresa
 

Programación orientada a objetos en Java

  • 1. REPÚBLICA BOLIVARIANA DE VENEZUELA INSTITUTO UNIVERSITARIO POLITÉCNICO “SANTIAGO MARIÑO” EXTENSIÓN MATURÍN Docente: Realizado por: Ing. Maria Aguilera. Iralix García C:I: 25.782.198 María Castellano C.I: 18.983.058 Maturín, Edo Monagas PROGRAMACIÓN ORIENTADA A OBJETO, FUNDAMENTOS DE PROGRAMACIÓN EN JAVA. (Programación No Numérica I)
  • 2. PROGRAMACIÓN ORIENTADA A OBJETO  Orientación a Objeto. Es una metodología que basa la estructura de los programas en torno a los objetos. Los lenguajes de POO (programación orientada a objeto) ofrecen medios y herramientas para describir los objetos manipulados por un programa. Más que describir cada objeto individualmente, estos lenguajes proveen una construcción (Clase) que describe a un conjunto de objetos que poseen las mismas propiedades. En esta los programas son representados por un conjunto de objetos que interactúan. Un objeto engloba datos y operaciones sobre estos datos. La Programación Orientada a Objetos constituye una buena opción a la hora de resolver un problema, sobre todo cuando éste es muy extenso. En este enfoque de programación, se facilita evitar la repetición de código, no sólo a través de la creación de clases que hereden propiedades y métodos de otras, sino además que el código es reutilizable por sistemas posteriores que tengan alguna similitud con los ya creados. La (POO) es una metodología de diseño de software y un paradigma de programación que define los programas en términos de “clases de objetos, objetos que son entidades que combinan estado (es decir, datos) y comportamiento (esto es, procedimientos o métodos) Es un programa con un conjunto de objetos, que se comunican entre ellos para realizar tareas y que es un modelo que representa un subconjunto del mundo real, tal fielmente como sea posible, de modo fácil y natural, donde los objetos van a tener características (atributos) y comportamientos (métodos). Que a diferencia de los lenguajes procedurales, en donde los datos y los procedimientos se encuentran separados y sin relación alguna. Los lenguajes procedurales, utilizan funciones y después les pasan datos, en tanto que los lenguajes orientados a objetos definen objetos y después envían mensajes a los objetos diciendo que realicen alguno de los métodos especificados para el objeto. Entre las ventajas de la programación orientada a objetos es que los métodos están
  • 3. Pensados para hacer programas y módulos más fáciles de escribir, mantener y reutilizar, así como que sean modulares y reutilizables parte de los códigos de estos programas.  Objeto. Es una entidad (tangible o intangible) que posee características y acciones que realiza por sí solo o interactuando con otros ,Un objeto es una entidad caracterizada por sus atributos propios y cuyo comportamiento está determinado por las acciones o funciones que pueden modificarlo, así como también las acciones que requiere de otros objetos. Un objeto tiene identidad e inteligencia y constituye una unidad que oculta tanto datos como la descripción de su manipulación. Puede ser definido como una encapsulación y una abstracción: una encapsulación de atributos y servicios, y una abstracción del mundo real. Para el contexto del Enfoque Orientado a Objetos (EOO) un objeto es una entidad que encapsula datos (atributos) y acciones o funciones que los manejan (métodos). También para el EOO un objeto se define como una instancia o particularización de una clase. Los objetos de interés durante el desarrollo de software no sólo son tomados de la vida real (objetos visibles o tangibles), también pueden ser abstractos. En general son entidades que juegan un rol bien definido en el dominio del problema. Un libro, una persona, un carro, un polígono, son apenas algunos ejemplos de objeto. Cada objeto puede ser considerado como un proveedor de servicios utilizados por otros objetos que son sus clientes. Cada objeto puede ser a la vez proveedor y cliente. De allí que un programa pueda ser visto como un conjunto de relaciones entre proveedores clientes. Los servicios ofrecidos por los objetos son de dos tipos: 1.- Los datos, que llamamos atributos 2.- Las acciones o funciones, que llamamos métodos Características Generales Un objeto se identifica por un nombre o un identificador único que lo diferencia de los demás. Ejemplo: el objeto
  • 4. Cuenta de Ahorros número 12345 es diferente al objeto Cuenta de Ahorros número 25789. En este caso el identificador que los hace únicos es el número de la cuenta. Un objeto posee estados. El estado de un objeto está determinado por los valores que poseen sus atributos en un momento dado. Un objeto tiene un conjunto de métodos. El comportamiento general de los objetos dentro de un sistema se describe o representa mediante sus operaciones o métodos. Los métodos se utilizarán para obtener o cambiar el estado de los objetos, así como para proporcionar un medio de comunicación entre objetos. Un objeto tiene un conjunto de atributos. Los atributos de un objeto contienen valores que determinan el estado del objeto durante su tiempo de vida. Se implementan con variables, constantes y estructuras de datos (similares a los campos de un registro). Los objetos soportan encapsulamiento La estructura interna de un objeto normalmente está oculta a los usuarios del mismo. Los datos del objeto están disponibles solo para ser manipulados por los propios métodos del objeto. El único mecanismo que lo conecta con el mundo exterior es el paso de mensajes. Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea y utiliza. Para ser utilizado en un algoritmo el objeto debe ser creado con una instrucción particular (New ó Nuevo) y al finalizar su utilización es destruido con el uso de otra instrucción o de manera automática. Se pueden definir como las unidades básicas de construcción, para la conceptualización, diseño o programación, esto es que son instancias agrupadas en clases con características en común y que son los atributos y procedimientos, conocidos como operaciones o métodos se pueden definir como las unidades básicas de construcción, para la conceptualización, diseño o programación, esto es que son instancias agrupadas en clases con características en común y que son los atributos y procedimientos, conocidos como operaciones o métodos En forma más simple se puede decir que un objeto es un ente que tiene características y comportamiento. Los objetos pueden modelar diferentes cosas como; dispositivos, roles, organizaciones, sucesos, ventanas (de Windows), iconos, etc.
  • 5. Organización de los Objetos Los objetos forman siempre una organización jerárquica, existiendo varios tipos de Jerarquía como los que a continuación se mencionan: Simples. Cuando su estructura es representada por medio de un árbol (estructura de datos). Compleja. Cualquier otra diferente a la de árbol. Sea cual fuere la estructura se tienen en ella los siguientes tres niveles de objetos: La raíz de la jerarquía. Es un objeto único, está en el nivel más alto de la estructura y se le conoce como objeto Padre, Raíz o Entidad. Los objetos intermedios. Son los que descienden directamente de la raíz y que a su vez tienen descendientes (tienen ascendencia y descendencia) y representan conjuntos de objetos, que pueden llegar a ser muy generales o muy especializados, de acuerdo a los requerimientos de la aplicación. Los objetos terminales. Son todos aquellos que tienen ascendencia, pero que no tienen descendencia.  Clase. Es la unidad de modularidad en el EOO. La tendencia natural del individuo es la de clasificar los objetos según sus características comunes (clase). Por ejemplo, las personas que asisten a la universidad se pueden clasificar (haciendo abstracción) en estudiante, docente, empleado e investigador. La clase puede definirse como la agrupación o colección de objetos que comparten una estructura común y un comportamiento común. Es una plantilla que contiene la descripción general de una colección de objetos. Consta de atributos y métodos que resumen las características y el comportamiento comunes de un conjunto de objetos. Todo objeto (también llamado instancia de una clase), pertenece a alguna clase. Mientras un objeto es una entidad concreta que existe en el tiempo y en el espacio, una clase representa solo una abstracción. Todos aquellos objetos que pertenecen a la misma clase son descritos o comparten el mismo conjunto de atributos y métodos. Todos los objetos de una clase tienen el mismo formato
  • 6. y comportamiento, son diferentes únicamente en los valores que contienen sus atributos. Todos ellos responden a los mismos mensajes. Su sintaxis algorítmica es: Clase <Nombre de la Clase> Clase <Nombre de la Clase>; Características Generales Una clase es un nivel de abstracción alto. La clase permite describir un conjunto de características comunes para los objetos que representa. Ejemplo: La clase Avión se puede utilizar para definir los atributos (tipo de avión, distancia, altura, velocidad de crucero, capacidad, país de origen, etc.) Y los métodos (calcular posición en el vuelo, calcular velocidad de vuelo, estimar tiempo de llegada, despegar, aterrizar, volar, etc.) de los objetos particulares Avión que representa. Un objeto es una instancia de una clase. Cada objeto concreto dentro de un sistema es miembro de una clase específica y tiene el conjunto de atributos y métodos especificados en la misma Las clases se relacionan entre sí mediante una jerarquía. Entre las clases se establecen diferentes tipos de relaciones de herencia, en las cuales la clase hija (subclase) hereda los atributos y métodos de la clase padre (superclase), además de incorporar sus propios atributos y métodos. Ejemplos, Superclase: Clase Avión Subclases de Avión: Clase Avión Comercial, Avión de Combate, Avión de Transporte Los nombres o identificadores de las clases deben colocarse en singular (clase Animal, clase Carro, clase Alumno).Clases, Superclase y Subclase Es la generalización de un tipo específico de objetos, esto se puede decir como el conjunto de características (atributos) y comportamientos de todos los objetos que componen a la clase. Por ejemplo la clase plumón tiene todas las características (tamaño, color, grosor del punto, etc.) y todos los métodos o acciones (pintar, marcar, subrayar, etc.), que pueden tener todos los plumones existentes en la realidad. Un plumón en especial como un marcador permanente para discos compactos (CDS) de color negro y punto fino, es un objeto (o instancia) de la clase plumón. Se tienen tres tipos de clase que son: •Abstracta Es muy general (ejemplo. Animal). •Común.
  • 7. Es intermedia (ejemplo. Mamíferos). •Final. Es muy específica (ejemplo Gato Siamés). La herencia (que se detallara más adelante), maneja una estructura jerárquica de clases o estructura de árbol (Estructura de Datos6), con lo que la POO todas las relaciones entre clase se ajustan a esta estructura. En esta estructura cada clase tiene una sola clase padre, la cual s e conoce como superclase y la clase hija de una superclase se conoce como subclase. La superclase, se puede definir en términos sencillos como la clase padre de alguna clase específica y puede tener cualquier número de subclases. La subclase, es la clase hija de alguna clase específica y solo puede tener una superclase (en JAVA).  Mensaje. Es la petición de un objeto a otro para solicitar la ejecución de alguno de sus métodos o para obtener el valor de un atributo público. Estructuralmente, un mensaje consta de 3 partes:  Identidad del receptor: Nombre del objeto que contiene el método a ejecutar.  Nombre del método a ejecutar: Solo los métodos declarados públicos.  Lista de Parámetros Que recibe el método (cero o más parámetros) Su sintaxis algorítmica es: <Variable_Objeto> <Nombre_Método> ([<Lista de Parámetros> ] ); Cuando el objeto receptor recibe el mensaje, comienza la ejecución del algoritmo contenido dentro del método invocado, recibiendo y/o devolviendo los valores de los parámetros correspondientes, si los tiene ya que son opcionales: ( [ ] ) mensajes En la programación orientada a objetos, los objetos descritos anteriormente se comunican a través de señales o mensajes, siendo estos mensajes
  • 8. los que hacen que los objetos respondan de diferentes maneras, por ejemplo un objeto en Windows como una ventana de alguna aplicación , puede cerrarse, maximizarse o restaurarse (métodos) de acuerdo al mensaje que le sea enviado. En otras palabras, un mensaje es una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos pudiendo o no llevar algunos parámetros .  Principios que rigen la orientación a objeto. Los principios fundamentales de la POO son: abstracción, encapsulamiento, herencia y polimorfismo, los cuales se describirán a continuación.  Abstracción “Abstraer es suprimir u ocultar algunos detalles de un proceso o de un elemento, para resaltar algunos aspectos, detalles o estructuras “Ocultar parte de la información es una omisión voluntaria de detalles en el desarrollo de un programa o una representación abstracta La abstracción es la forma en que nuestra mente modela la realidad, formándolos objetos. Por eso se crea objetos en los programas que simulen los comportamientos de los objetos del mundo real. Nosotros no pensamos en las cosas que vemos como la unión de sus componentes más pequeños; no vemos un carro como el conjunto de llantas, motor, asientos, timón, espejos, etc., sino que lo vemos como la entidad compleja que es, en eso se basa la abstracción. No nos interesa conocer los detalles de cada uno de sus componentes o qué es lo que hace cada parte, simplemente porque nos basta conocer el carro o el objeto superficialmente, con tal que podamos interactuar con él y al hacerlo obtengamos una respuesta para satisfacer nuestra necesidad; como desplazarnos rápidamente de un lugar otro, ante esta solicitud, el carro responde realizando el movimiento. Cada objeto en el sistema puede realizar trabajos, informar y "comunicarse “con otros objetos en el sistema sin revelar cómo se está implementado. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción. La abstracción humana se realiza de manera jerárquica. Cada sistema se va dividiendo en sistemas más pequeños hasta ir llegando a los niveles más simples, de esta forma se nos presenta una realidad mucho más ordenada y entendible. Ésta es la forma de pensar de la P.O.O.
  • 9. Existen niveles en la abstracción, que son: -Comunidad de objetos que interactúan: Hay líneas de comunicación y cooperación -Agrupación de objetos que trabajan juntos en una unidad: Se van formando los Paquetes (en caso de Java) -Interacción cliente-servidor: Los objetos se proporcionan servicios Es el proceso de representar entidades reales como elementos internos a un programa, la abstracción de los datos es tanto en los atributos, como en los métodos de los objetos. Es de hacer notar que por medio de la abstracción se puede tener una visión global del tema, por ejemplo en la clase PILA (Estructura de Datos, Ultimas Entradas Primeras Salidas LIFO), se pueden definir objetos de este tipo, tomando únicamente las propiedades LIFO (del inglés Last Input First Output) de las PILAS, algunos atributos como lleno, vacío, el tamaño y las operaciones o métodos que se pueden realizar sobre estos objetos como PUSH (meter un elemento) o POP (retirar un elemento) y no es necesario que el programador conozca o sea un experto en la Estructura de Datos con la que se implementa la PILA (como por ejemplo con una organización contigua o simplemente ligada, ni de los algoritmos que realizan el PUSH y el POP). Un beneficio de la programación orientada a objetos es que retira al usuario del requisito de saber cómo funcionan otros códigos. Este beneficio, llamado abstracción, significa que el usuario implementando un objeto creado por otro programador para realizar una tarea en particular no necesita saber cómo completa ese objeto su tarea. De esta forma, el usuario se puede concentrar en sus propios problemas, en lugar de preocuparse por la implementación de un objeto que podría querer utilizar. Esto permite a los programadores construir software más grandes y más complejos sobre objetos más pequeños  Shaw define abstracción como “una descripción simplificada o especificación de un sistema que enfatiza algunos de los detalles o propiedades del mismo mientras suprime otros. Una buena abstracción es aquella que enfatiza detalles significativos al lector o usuario y suprime detalles que son, al menos por el momento, irrelevantes o causa de distracción”. La abstracciones una técnica de programación que permite definir nuevos tipos de datos por el usuario. La esencia de la abstracción es similar al uso de un tipo de dato de un lenguaje de programación, cuyo uso se realiza sin saber cómo está representado o implementado. Una abstracción se centra en la vista externa de un objeto, de modo que sirva para separar el
  • 10. comportamiento esencial de un objeto de su implementación. Definir una abstracción significa describir una entidad del mundo real, no importa lo compleja que pueda ser, y a continuación utilizar esta descripción en un programa. El uso de un objeto por vía de su especificación como tipo abstracto o clase abstracta significa que, si su aspecto interno experimenta modificaciones, otras partes del sistema no se verán afectadas. Un método abstracto es, como vimos, un método que declara una funcionalidad que debe ser implementada en todas las clases derivadas de la clase en que se vaya a utilizar. En otras palabras, a través de un método indicamos lo que deberían poder hacer los objetos de dichas subclases. No se implementa en la clase base, sino que cada subclase debe tener su propia implementación  Encapsulamiento Cuando se escriben clases, una buena práctica de programación orientada a objetos requiere que los programadores "encapsulen" datos lejos de usuario del objeto. Esto significa que cualquier dato o función dentro de una clase no debe estar accesible para el usuario sin una modificación del programador. Un buen ejemplo son las funciones de "obtener" y "configurar" incluidas en la mayoría de las clases. Estas funciones controlan la forma en que el usuario puede ingresar a las variables de datos en un objeto, y aseguran que todos los datos se pueden considerar legitimados para el uso. Esto limita la preocupación sobre los datos corrompidos, o la manipulación ilegal de datos por parte del usuario.  Polimorfismo El polimorfismo está unido a la herencia, porque es la forma en la que un objeto que hereda de otro objeto interactúa con ese objeto "base". Por ejemplo, el objeto profesor puede heredar ciertas funciones de su objeto base (persona), pero cambiar una de ellas. El objeto profesor aún puede utilizar las funciones de clase base junto con su propia versión de la función que cambia. Incluso, durante la ejecución de un programa el usuario puede declarar una variable para retener un objeto de persona, pero posteriormente al programa decide que necesita un objeto profesor más específicamente. En este caso, la variable separada para el objeto persona puede sostener a un objeto de profesor, porque el profesor hereda de (o es) un objeto persona.
  • 11. El polimorfismo consiste en la posibilidad de aplicar una misma operación sobre distintos objetos, y que esta operación varíe según el objeto al que se le aplique. Esto sucede en tiempo de ejecución, NO en tiempo de compilación, por lo que el polimorfismo está íntimamente ligado al enlace dinámico, como se verá a continuación. La operación suele ser un método. Los objetos a los que se les puede aplicar este método están limitados por herencia: ese método se define en una clase y es aplicable, con los refinamientos subsiguientes, a todas sus subclases. Al proceso de seleccionar el método apropiado según la clase del objeto se llama ligadura o enlace.Si ésta tiene que aplazarse obligatoriamente hasta el tiempo de ejecución, el mensaje supone un enlace dinámico (también conocido como tardío). Es decir, si todos los objetos son asociados estáticamente a una clase, y no se tiene en cuenta los posibles cambios de referencia, el método a aplicar puede determinarse en tiempo de compilación, sin que el sistema sufra ningún tipo de sobrecarga. Sin embargo, en la mayoría de los casos, es interesante que los cambios de referencia producidos en tiempo de ejecución influyan en el cómputo. La ligadura estática significa que se fijan los tipos de todas las variables y expresiones en tiempo de compilación; la ligadura (o enlace) dinámica (también llamada ligadura tardía) se produce cuando no es posible conocer la clase del objeto hasta el tiempo de ejecución. La ligadura dinámica es la capacidad de retrasar hasta el instante de la recepción del mensaje la decisión sobre la clase del objeto que lo recibe y el método concreto que debe de ejecutarse. Ejemplo de su estructura: // ... clases Figura, Rectángulo y Círculo public class Ppal {public static void main(String[] args) {Figura f; int opcion = pideOpcionAlUsuario(); if ( opcion == 1 ) f = new Rectangulo(5, 10); else f = new Circulo(5); // ? (50 o 78,5) System.out.println( “Área: “ + f.calculaArea() ); }
  • 12. } Esta propiedad es una poderosa herramienta para simplificar el diseño de aplicaciones, pero hay que tratarla con precaución. El error más común provocado por el uso del polimorfismo es que, en un afán de simplificar, si se utilizan siempre los mismos nombres en las operaciones, se desvirtúa realmente el nombre del operador. La gran ventaja del polimorfismo es permitir la realización de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan. Sólo será necesario definir cuidadosamente las clases abstractas. El polimorfismo facilita la reutilización de software, haciendo posible implementar software genérico que se pueda aplicar no sólo a objetos existentes, sino también a objetos que sean añadidos en etapas futuras del desarrollo Conceptos erróneos sobre Polimorfismo En algunos lenguajes OOP esta propiedad es confundida, erróneamente, con otra conocida como operador overloading (sobrecarga de operadores), que permite la redefinición de operadores como “+”, “-", ... Otro concepto asociado erróneamente al polimorfismo es la method overloading o sobrecarga de métodos es decir, varios métodos que tienen el mismo nombre, pero el número de parámetros o los tipos de la lista de parámetros es distinto. Tanto la sobrecarga de métodos como de operadores no es más que una riqueza sintáctica extra: en realidad, las llamadas a los métodos son enlazados en tiempo de compilación (ligadura o enlace estático) al método concreto que ofrece los argumentos en número y tipo igual a los de la llamada. En cualquier caso, si se desea considerar como polimorfismo, es un tipo de polimorfismo estático, y no es lo que se entiende habitualmente por este término  Herencia. Otro beneficio de la programación orientada a objetos es la herencia, que también permite a los programadores construir programas más complejos desde partes más simples. La herencia es la forma en que los objetos "heredan" su funcionalidad de otros objetos, acomodándolas para sus necesidades. Por ejemplo, un objeto "profesor" puede heredar su funcionalidad a un objeto "persona", porque el profesor es una persona y requiere toda la funcionalidad del objeto persona (junto con las funciones adicionales de un profesor). De esta forma, el programador del objeto
  • 13. profesor no tiene que volver a reescribir el objeto de persona para utilizarlo, simplemente puede dejar que el objeto profesor herede sus funciones del objeto de persona. La herencia designa la facultad de los objetos de compartir propiedades y operaciones entre ellos. Como la herencia humana, existen unas determinadas clases hijo que heredan las propiedades y atributos de otras clases padres Desde un punto de vista de implementación, se trata de crear nuevas clases de objetos a partir de otras ya existentes, es decir, de reutilizar el comportamiento de una clase en la definición de otras nuevas. Cualquier clase hereda la declaración de los atributos y los métodos de su superclase, pudiendo estas subclases especializarse añadiendo una declaraciones de atributos adicionales y declaraciones de métodos propios o incluso cambiando los atributos y métodos heredados Una de las razones para emplear la herencia es que permite la reutilizacióndel código de proyectos anteriores, permitiendo la modificación (o especialización) de aquellos aspectos que no concuerden exactamente con las necesidades de nuestra aplicación. En las jerarquías que establecen las relaciones de herencia, a medida que descendemos de nivel, cada nivel aporta un grado más de especialización sobre el nivel inmediatamente superior. En cambio, si partimos del nivel de clases inferiores hacia los niveles superiores, cada nivel supone una generalización del nivel inmediatamente inferior. Herencia Simple Se produce cuando la clase que recibe la herencia tiene un sólo padre De atributos: Los atributos de una clase son heredadas automáticamente por todos sus descendientes. Esto quiere decir que un objeto tiene propiedades de su clase y propiedades de las clases heredadas. Los atributos deben definirse en las clases tan cercanas a las clases terminales de la jerarquía como sea posible. En los niveles superiores de la jerarquía normalmente no existe suficiente información como para que puedan decidirse unos atributos u otros, mientras que las clases terminales ya representan entidades más concretas. De métodos. La herencia de los métodos permite aumentar la reutilización de software y simplifica, por tanto, el diseño. Además, facilita la programación, reduce redundancias y simplifica la corrección de los programas. Los métodos deben situarse tan elevados en la jerarquía de clases como sea posible, aunque puedan ser abstractos (es decir, sin incluir código). De esta forma se facilita la
  • 14. abstracción, al poder establecer métodos comunes a varias clases.ejemplo de su estructura en lenguaje de programación. public class Persona {private String nombre; public Persona(String n) {nombre = n;}public String getNombre() {return nombre;}} public class Estudiante extends Persona { private String titulacion; public Estudiante(String n, String t) { super ( n ); // Llama al constructor de Persona titulacion = t; }publicString getTitulacion(){ return titulacion;}public String toString(){return getNombre() + “, “ + titulacion;} } Un programa en Java en el que la clase estudiante hereda de la clase persona. La herencia se indica en Java con la palabra clave extensa Aquellas clases que no heredan explícitamente de ninguna clase lo hacen de Object, ejemplo de cómo seria public class Ppal {public static void main(String[] args){ Estudiante est1; est1 = new Estudiante(“Paula”,”Ingeniera Informatica”); System.out.println(est1); // llama a “toString” System.out.println( est1.getNombre() );} Herencia Múltiple Se produce cuando el objeto que hereda tiene más de un padre o alguno de sus antepasados tiene varios padres. La herencia múltiple ofrece la posibilidad de definir clases híbridas que comparten los miembros de dos o más clases predefinidas. Es difícil de encontrar en los lenguajes OO, ya que para determinar si un objeto hereda un miembro puede que haya que seguir caminos por más de un padre. Pueden darse conflictos debidos a que un objeto herede la misma propiedad o método de dos objetos situados al mismo nivel o a distinto nivel (colisión de nombres). Este tipo de situaciones se da cuando una clase hereda 2 o más versiones de un método provenientes de los distintos ancestros, y es inevitable en el caso de la herencia repetida, que se produce cuando una clase hereda de otras que a su vez heredan de una clase común.
  • 15. En cualquier caso, esta herencia suele producir los conflictos conocidos como colisión de nombres. Sucede cuando el nombre de un método o atributo existe en más de una clase de nivel superior Java no permite herencia múltiple. La herencia siempre es simple, aunque permite la implementación de múltiples interfaces. Los interfaces son clases que sólo contienen métodos abstractos. Se pueden distinguir otros dos tipos de herencia: Herencia selectiva (o parcial) que permite decidir qué métodos se heredan y cuáles no. Esto complica sintácticamente la definición de una clase, lo que hace que sean pocos los lenguajes que la adoptan. Herencia no selectiva que fuerza a que todos los atributos y métodos sean heredados. Esta es la más utilizada, incluyendo lenguajes como C++, Java o C#. Ejemplo. Class Profesor {privateString nombre; Public Profesor(String n) {nombre = n;} Public String getNombre(){ Return nombre;}}interface Investigador { Public String getCampoInvestigacion();} Class ProfesorUniversitario extends Profesor implements Investigador { Private String investigacion; Public ProfesorUniversitario(String n, String i){ super ( n ); // Constructor de Profesor investigacion = i;} public String getCampoInvestigacion(){ return investigacion;}}
  • 16. Fundamentos de programación en Java.  Historia de Java. Java Es un lenguaje de programación de alto nivel, orientado a objetos, el cual tiene la capacidad de ser ejecutado en una gran cantidad de dispositivos y electrodomésticos ya que este fue el fin para el cual fue creado, en su mayor parte la sintaxis de Java está influenciada por el popular lenguaje C y por Visual BASIC, aunque deja de lado algunas características de bajo nivel que tiene C como son el manejo de memoria y los apuntadores (punteros). Para las gestiones de manejo de memoria Java utiliza Algo llamado Recolector de Basura (garbaje collector) el cual se encarga de limpiar la memoria. Java posee todas las características del paradigma de la programación orientada a objetos herencia, encapsulamiento, abstracción, polimorfismo, modularidad entre otras. Tiene también todas las estructuras de control y bifurcaciones que poseen la mayoría de lenguajes, while, do while, if , else-if-else básicamente las posee todas , esto lo veremos con más detalles en los siguientes post. Java se creó como una herramienta de programación para ser usada en un proyecto de set-top- box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991. El equipo (Green Team), compuesto por trece personas y dirigido por James Gosling, trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo. El lenguaje se denominó inicialmente Oak (por un roble que había fuera de la oficina de Gosling), luego pasó a denominarse Green tras descubrir que Oak era ya una marca comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a Java. El término Java fue acuñado en una cafetería frecuentada por algunos de los miembros del equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros abogan por el siguiente acrónimo, Just Another Vague Acronym (“sólo otro acrónimo ambiguo más”). La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de café
  • 17. disponible en la cafetería cercana, de ahí que el icono de java sea una taza de café caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el número mágico) de los archivos. class que genera el compilador, son en hexadecimal, 0xCAFEBABE. A pesar de todas estas teorías, el nombre fue sacado al parecer de una lista aleatoria de palabras. Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión maratoniana de tres días entre John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric Schmidt, el equipo reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador web Mosaic, propiciaría que Internet se convirtiese en un medio interactivo, como el que pensaban era la televisión por cable. Naughton creó entonces un prototipo de navegador, WebRunner, que más tarde sería conocido como HotJava. En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23 de mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz pública Java y HotJava, el navegador Web. El acontecimiento fue anunciado por John Gage, el Director Científico de Sun Microsystems. El acto estuvo acompañado por una pequeña sorpresa adicional, el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo de Netscape, de que Java sería soportado en sus navegadores. El 9 de enero del año siguiente, 1996, Sun fundó el grupo empresarial JavaSoft para que se encargase del desarrollo tecnológico. Dos semanas más tarde la primera versión de Java fue publicada. La promesa inicial de Gosling era Write Once, Run Anywhere (Escríbelo una vez, ejecútalo en cualquier lugar), proporcionando un lenguaje independiente de la plataforma y un entorno de ejecución (la JVM) ligero y gratuito para las plataformas más populares de forma que los binarios (bytecode) de las aplicaciones Java pudiesen ejecutarse en cualquier plataforma. El entorno de ejecución era relativamente seguro y los principales navegadores web pronto incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web. Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un enorme incremento en el número de clases y paquetes que componen la biblioteca estándar.
  • 18.
  • 19.  JDK. Java Development Kit o (JDK), es un software que provee herramientas de desarrollo para la creación de programas en Java. Puede instalarse en una computadora local o en una unidad de red. es la Plataforma de Desarrollo JAVA. Se trata de la suma de todo lo que contiene la JRE (Java Runtime Environment) más una serie de herramientas de desarrollo como un compilador, debugger, compactador, documentador, etc. necesarios para desarrollar applets y aplicaciones de escritorio. En la JDK también se encuentran herramientas de seguridad y de despliegue de aplicaciones. Componentes del JDK JDK consta de una serie de aplicaciones y componentes, para realizar cada una de las tareas de las que es capaz de encargarse. A continuación se explican más en profundidad cada uno de ellos, así como su sintaxis, indicando entre corchetes aquellos elementos que sean opcionales. Todos los programas permiten la inclusión de una serie de opciones sobre su ejecución antes del primer argumento. Estas opciones se indican precedidas de un menos (-): Programa -opcion1 -opcion2 Parametro1 Todas las opciones que los ejecutables del JDK presentan se muestran llamando al programa sin parámetros o con las opciones -? o -help: Programa programa –help Programa -?  JRE. Java Runtime Environment o JRE es un conjunto de utilidades que permite la ejecución de programas Java. El JRE es una máquina virtual de Java y su función es hacer de intermediario entre una aplicación programada en Java y el sistema operativo que se esté usando. De este modo, cualquier aplicación puede funcionar en cualquier sistema operativo que disponga del JRE. Área de almacenamiento de la consola de Java que, en ocasiones, se debe borrar de forma manual para permitir la carga e instalación de la última versión de Java Componentes En su forma más simple, el entorno en tiempo de ejecución de Java está conformado por una Máquina Virtual de Java o JVM, un conjunto de bibliotecas Java y otros componentes
  • 20. necesarios para que una aplicación escrita en lenguaje Java pueda ser ejecutada. El JRE actúa como un "intermediario" entre el sistema operativo y Java. La JVM es el programa que ejecuta el código Java previamente compilado (bytecode) mientras que las librerías de clases estándar son las que implementan el API de Java. Ambas JVM y API deben ser consistentes entre sí, de ahí que sean distribuidas de modo conjunto. Un usuario sólo necesita el JRE para ejecutar las aplicaciones desarrolladas en lenguaje Java, mientras que para desarrollar nuevas aplicaciones en dicho lenguaje es necesario un entorno de desarrollo, denominado JDK, que además del JRE (mínimo imprescindible) incluye, entre otros, un compilador para Java.  Compilador en Java. Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación. El primer compilador auto contenido, es decir, capaz de compilar su propio código fuente fue el creado para Lisp por Hart y Levin en el MIT en 1962. Desde 1970 se ha convertido en una práctica común escribir el compilador en el mismo lenguaje que este compila, aunque Pascal y C han sido alternativas muy usadas. La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto. Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis léxico (que consiste en la descomposición del programa fuente en componentes léxicos), análisis sintáctico (agrupación de los componentes léxicos en frases gramaticales) y análisis semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de análisis sintáctico). Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de generación de código (normalmente se trata
  • 21. de código intermedio o de código objeto) y de optimización de código (en las que se busca obtener un código lo más eficiente posible). Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en Front-end y Back-end: Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas entre el análisis Léxico y la generación de código intermedio. Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End. Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas distintas. Suele incluir la generación y optimización del código dependiente de la máquina. La función de un compilador es convertir un programa escrito un en lenguaje como Java a un lenguaje que la computadora pueda entender. Los programas en Java se convierten en códigos de bytes. El comando para llamar al compilador es: javac MiPrograma.java Donde el nombre del compilador es javac y MiPrograma.java es el nombre del archivo que contiene el código de nuestro programa. Al compilar el programa, el compilador verifica que éste obedezca las reglas de programación en Java, y si algo sale mal, muestra los mensajes de error apropiados. El compilador crea un archivo con el sufijo .class. Este contiene el código de bytes equivalente a su programa en Java. Tipos de compiladores Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías: Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
  • 22. Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original. Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente. Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina. Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan. Pauta de creación de un compilador: En las primeras épocas de la informática, el software de los compiladores era considerado como uno de los más complejos existentes. Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador. Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del lenguaje de partida, especificada normalmente mediante una gramática formal y barata, dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas.  Máquina Virtual de Java. La Máquina Virtual Java (JVM) es el entorno en el que se ejecutan los programas Java, su misión principal es la de garantizar la portabilidad de las aplicaciones Java. Hablábamos que uno de las principales características de JAVA tuvo con su concepción de “escribir solo una vez y ejecutar en cualquier lugar” y para lograr esa independencia de los programas Java, sobre el sistema operativo y el hardware en que se ejecutan es donde toma importancia la Máquina Virtual JAVA o Java Virtual Machine o simplemente JVM. Si función es amplia pero podemos señalar que entre sus tareas está proporcionar la vista de un nivel de abstracción superior, permitiendo la independencia de la plataforma. Se denomina
  • 23. máquina virtual porque "crea" una computadora virtual que establece las instrucciones (bytecodes) que esta computadora puede ejecutar. El intérprete Java específico ejecuta las instrucciones que se guardan en los archivos cuya extensión es .class. Las tareas principales de la JVM son las siguientes: Reservar espacio en memoria para los objetos creados Liberar la memoria no usada (garbage collection). Asignar variables a registros y pilas Llamar al sistema huésped para ciertas funciones, como los accesos a los dispositivos Vigilar el cumplimiento de las normas de seguridad de las aplicaciones Java La protección de la máquina virtual se realiza por medio del verificador de bytecode, el cual intenta asegurar el rechazo de aquellos programas en bytecode que no satisfagan las definiciones asumidas por la optimización de Java, sobre todo en cuanto a direccionamiento. Asimismo, cuando se trata de proteger el procesador real, el sistema descansa en la posibilidad de traducción hecha directamente por el ambiente de ejecución de Java, donde se obtiene un código nativo bien definido para la máquina. La JVM fue diseñada para proveer ejecutables en un tipo de plataforma ejecutable estándar. Originalmente fue construida en una sola plataforma - hoy en día varios fabricantes ofrecen distintas construcciones de la JVM, ver enlaces al final - con lo cual sólo puede ofrecer un tipo de aplicaciones compiladas en un código nativo. Los beneficios aparecen en la cantidad de plataformas que ofrecen el ambiente de ejecución Java. Algunas de los ambientes de operación en los que la JVM y el ambiente de ejecución están disponibles hoy son: AS/400 AIX Amiga FreeBSD HP
  • 24. Linux Macintosh MP-RAS NeXT OS/2 Solaris Windows 95 Windows NT Decir que la JVM es un intérprete que convierte el ByteCode compilado de Java en el código de máquina nativo en que debería ejecutarse no es totalmente falso, pero es más correcto decir que es un emulador de la ejecución de un código nativo. La tecnología de máquinas virtuales se ha distinguido de la tecnología de interpretación básicamente por el nivel en que se realiza la interpretación. Los intérpretes trasladan un "código de bit" nativo directamente a llamadas del sistema o instrucciones de máquina, pero la emulación consiste en permitir una arquitectura de máquina intermedia. La arquitectura de la JVM se basa en el concepto de una implementación que no es específica de una máquina. Esto es, la arquitectura misma no asume nada acerca de la máquina o de las características físicas y de construcción sobre la cual es implementada. De esta manera, la
  • 25. JVM es una entidad autónoma e única que ejecuta los archivos de clases. La JVM se separa en cinco unidades de funcionalidad distintas, las que se dedican a la tarea de ejecutar los archivos de clases.  Anatomía de un Programa en Java. Un programa describe cómo un ordenador debe interpretar las órdenes del Programador para que ejecute y realice las instrucciones dadas tal como están escritas. Un programador utiliza los elementos que ofrece un lenguaje de programación para diseñar programas que resuelvan problemas concretos o realicen acciones bien definidas. El siguiente programa Java muestra un Mensaje en la consola con el texto “Hola Mundo”. /* * Este programa escribe el texto "Hola Mundo" en la consola * utilizando el método System.out.println() */ public class HolaMundo { public static void main (String[] args) { System.out.println("Hola Mundo"); } } La estructura de un programa Java En este programa se pueden identificar los siguientes elementos del lenguaje Java: comentarios, definiciones de clase, definiciones de método y sentencias. Comentario. El programa comienza con un comentario. El delimitador de inicio de un comentario es /* y el delimitador de fin de comentario es */. El texto del primer comentario de este ejemplo sería: ‘Este programa escribe el texto “Hola Mundo” en la consola utilizando el método System.out.println()'. Los comentarios son ignorados por el compilador y solo son útiles para el programador. Los comentarios ayudan a explicar aspectos relevantes de un programa y lo hacen más legible. En un comentario se puede escribir todo lo que se desee, el texto puede ser de una o más líneas. Estructura de un programa Java Definición de clase . La primera línea del programa, después del primer comentario. Define una clase que se Llama HolaMundo
  • 26. . La definición de la clase comienza por el carácter { y termina con el carácter }. El nombre de la clase lo define el programador. Definición de método . Después de la definición de clase se escribe la definición del método main() . Todos los programas Java deben incluir un método main() . Este método indica las sentencias a realizar cuando se ejecuta un programa. Un método es una secuencia de sentencias ejecutables. Las sentencias de un método quedan delimitadas por los caracteres {y} que indican el inicio y el fin del método, respectivamente. Sentencia . Dentro del método main()se incluye una sentencia para mostrar un texto por la consola. Los textos siempre se escriben entre comillas dobles para diferenciarlos de otros elementos del lenguaje. Todas las sentencias de un programa Java deben terminar con el símbolo punto y coma. Este símbolo indica al compilador que ha finalizado una sentencia. Una vez que el programa se ha editado, es necesario compilarlo y ejecutarlo para comprobar si es correcto. Al finalizar el proceso de compilación, el compilador indica si hay errores en el código Java, dónde se encuentran y el tipo de error que ha detectado: léxico, sintáctico o semántico. /* Este programa calcula el perímetro de una circunferencia */ public class PerimetroCircunferencia { public static void main (String[] args) { // declaración de PI y la variables radio y perimetro final double PI = 3.1415926536; double radio = 25.0, perimetro; perimetro = 2.0*PI*radio; System.out.print("El perimetro de la circunferencia de radio "); System.out.print(radio); System.out.print(" es "); System.out.print(perimetro); } } En un programa Java las sentencias se ejecutan secuencialmente, una detrás de otra en el orden en que están escritas. En este ejemplo se puede ver que dentro del método main() se incluye
  • 27. un comentario de una sola línea que comienza con //. A continuación se declaran las variables PI, radio y perímetro, todas ellas de tipo doubleporque almacenan números reales. PI representa un valor constante, por lo que es necesario utilizar el delimitador Final y asignarle el valor 3.1415926536 correspondiente al número pi. Después de las declaraciones, se asigna el valor 25.0 a la variable radio y se calcula el Perímetro. Finalmente, se muestra el resultado del cálculo del perímetro para una circunferencia de radio 25. En este ejemplo se utilizan variables numéricas de tipo double . Cada variable almacena un número real. La parte entera del número se separa de los decimales con un punto, no con una coma. Esta es una característica de Java que se debe tener en cuenta, de lo contrario, el compilador no entiende que se trata de un número real. El valor 25.0 almacenado en la variable radio es una magnitud para la que no se indican sus unidades. El programador es responsable de que los cálculos se realicen correctamente y de realizar la conversión de unidades cuando sea necesario. Para escribir un mensaje por la consola se utilizan los métodos System.out.print() y System.out.println() . Para escribir un mensaje sin saltar a la línea siguiente se utiliza System.out.print(), System.out.println()escribe un mensaje y da un salto de línea. ¿Qué hace el siguiente código Java? System.out.print("Hola"); System.out.print(" "); System.out.print("Mundo"); En este ejemplo se escribe el texto “Hola Mundo” en la consola. Hola Mundo ¿Qué pasaría si se omitiera la segunda línea de código?, System.out.print("Hola"); System.out.print("Mundo"); En este caso se escribiría “HolaMundo” sin el espacio de separación entre las dos palabras. HolaMundo Si en vez de utilizar el método System.out.print() se utiliza el método System.out.println(), entonces el mensaje se escribe en dos líneas distintas. System.out.println("Hola"); System.out.println("Mundo"); En este ejemplo, se escribiría “Hola” y “Mundo” en dos líneas. Hola
  • 28. Mundo Combinando el uso de los métodos System.out.print() y System.out.println() se puede escribir cualquier mensaje en la consola saltando de línea cuando sea necesario. Además, ambos métodos permiten utilizar el operador + para concatenar textos. El siguiente código Java escribe “Hola Mundo” en la consola. System.out.print ("Hola"); System.out.print (" "); System.out.print ("Mundo"); En este caso se ejecutan tres métodos System.out.print () . Este código se puede simplificar utilizando un solo método System.out.print () y el operador + para concatenar los textos “Hola”, “” y “Mundo”. System.out.print ("Hola" + " " + "Mundo"); También se puede escribir directamente el mensaje “Hola Mundo”. El resultado es el mismo y el código es más claro. System.out.print ("Hola Mundo"); Para mostrar por la consola un texto seguido del valor almacenado de una variable se puede ejecutar dos veces el método System.out.print (): System.out.print ("El primero es "); System.out.print (perimetro); Este código se puede simplificar utilizando el operador + para concatenar el texto “El perímetro es” con el valor almacenado en la variable perímetro. System.out.print ("El perímetro es " + perímetro); En ambos casos el resultado es el mismo. Por ejemplo, si el valor almacenado en el variable perímetro fuera 157.08 la salida por la consola sería: El perímetro es 157.08  Entorno de desarrollo integrado (IDE.)en Java. Los IDE (Integrated Development Environment) son un conjunto de herramientas para el programador, que suelen incluir en una misma suite, un buen editor de código, administrador de proyectos y archivos, enlace transparente a compiladores y debuggers e integración con sistemas controladores de versiones o repositorios. Un entorno de desarrollo integrado, es un entorno de programación que ha sido empaquetado como un programa de aplicación, es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI).
  • 29. Los IDE proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++, PHP, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto. Algunos ejemplos de entornos integrados de desarrollo (IDE) son los siguientes: Eclipse NetBeans IntelliJ IDEA JBuilder de Borland JDeveloper de Oracle KDevelop Anjunta Clarion MS Visual Studio Visual C++ Los IDE ofrecen un marco de trabajo para la mayoría de los lenguajes de programación tales como C++, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto. Es posible que un mismo IDE pueda funcionar con varios lenguajes de programación. Este es el caso de Eclipse, al que mediante plagios se le puede añadir soporte de lenguajes adicionales. Un IDE debe tener las siguientes características: Multiplataforma Soporte para diversos lenguajes de programación Integración con Sistemas de Control de Versiones
  • 30. Reconocimiento de Sintaxis Extensiones y Componentes para el IDE Integración con Framework populares Depurador Importar y Exportar proyectos Múltiples idiomas Manual de Usuarios y Ayuda Existen diferentes versiones de los IDE pero estos son algunos del software que utilizan IDE, estos son: a) Eclipse: Software libre. Es uno de los entornos Java más utilizados a nivel profesional. El paquete básico de Eclipse se puede expandir mediante la instalación de plugins para añadir funcionalidades a medida que se vayan necesitando. b) NetBeans: Software libre. Otro de los entornos Java muy utilizados, también expandible mediante plugins. Facilita bastante el diseño gráfico asociado a aplicaciones Java. c) BlueJ: Software libre. Es un entorno de desarrollo dirigido al aprendizaje de Java (entorno académico) y sin uso a nivel profesional. Destaca por ser sencillo e incluir algunas funcionalidades dirigidas a que las personas que estén aprendiendo tengan mayor facilidad para comprender aspectos clave de la programación orientada a objetos. d) JBuilder: Software comercial. Se pueden obtener versiones de prueba o versiones simplificadas gratuitas en la web, buscando en la sección de productos y desarrollo de aplicaciones. Permite desarrollos gráficos. e) JCreator: Software comercial. Se pueden obtener versiones de prueba o versiones simplificadas gratuitas en la web. Este IDE está escrito en C++ y omite herramientas para desarrollos gráficos, lo cual lo hace más rápido y eficiente que otros IDE
  • 31. Ventajas de los IDE La curva de aprendizaje es muy baja. Es más ágil y óptimo para los usuarios que no son expertos en manejo de consola. Formateo de código. Funciones para renombrar variables, funciones. Warnings y errores de sintaxis en pantalla de algo que no va a funcionar al interpretar o compilar. Poder crear proyectos para poder visualizar los archivos de manera gráfica. Herramientas de refactoring como por ejemplo seria extraer una Porción de código a un método nuevo. No es recomendado pero posee un navegador web interno por si queremos probar las cosas dentro de la IDE. De acuerdo a todo esto algunos IDE no son gratuitos por el mismo motivo que el software son utilizados para trabajos mejorados, por tal motivo en los IDE podemos implementar líneas de código donde podamos resolver algún problema con base al compilador, este es el que nos permitirá modificar o corregir nuestros errores del programa. Mi opinión acerca de los IDE es que algunos de estos necesitan muchas aplicaciones para poder sacar la aplicación y en otros es muy fácil utilizarlos porque al momento de escribir las líneas de código te corrige tus problemas de la aplicación, de acuerdo a esto en mi punto de vista el IDE que se pudiera implementar sería el de Creador y Eclipse. Algunos entornos son compatibles con múltiples lenguajes de programación, como Eclipse o NetBeans, ambos basados en Java; o MonoDevelop, basado en C#. También puede incorporarse la funcionalidad para lenguajes alternativos mediante el uso de plugins. Por ejemplo, Eclipse y NetBeans tienen plugins para C, C++, Ada, Perl, Python, Ruby y PHP, entre otros.  Elementos de un Programa Java.
  • 32. A continuación se describe la definición léxica y sintáctica de los elementos de un programa Java: comentarios, identificadores, variables y valores, Tipos primitivos, literales, operadores, expresiones y expresiones aritmético-lógicas.  Comentarios En un programa Java hay tres tipos de comentarios. Comentario de bloque: Empieza por /* y termina por */. El compilador ignora todo el texto contenido dentro del comentario /* * El programa HolaMundo se utiliza para aplicar los * Métodos System.out.print() y System.out.println() */ Comentario de documentació: Empieza por /** y termina por */. Java dispone de la herramienta javadoc para documentar automáticamente los programas. En un comentario de documentación normalmente se indica el autor y la versión del software. /** * Programa HolaMundo * @author Fundamentos de Informática * @version 1.0 * @see Referencias */ Comentario de línea Empieza con //. El comentario comienza con estos caracteres y termina al final de la línea. // El método System.out.print() salta la línea El uso de comentarios hace más claro y legible un programa. En los comentarios se debe decir qué se hace, para qué y cuál es el fin de nuestro programa. Conviene utilizar comentarios siempre que merezca la pena hacer una aclaración sobre el programa. Identificadores El programador tiene libertad para elegir el nombre de las variables, los métodos y de otros elementos de un programa. Existen reglas muy estrictas  Identificadores El programador tiene libertad para elegir el nombre de las variables, los métodos y de otros Elementos de un programa. Existen reglas muy estrictas sobre los nombres que se utilizan como identificadores de clases, de variables o de métodos. Todo identificador debe empezar con una letra que puede estar seguida de más letras o dígitos. Una letra es cualquier símbolo del alfabeto y el carácter ‘_’. Un dígito es cualquier carácter entre ‘0’ y ‘9’. Los identificadores Hola, hola, número, numeroPar, numeroImpar, numero_impar,
  • 33. numero_par, nombre, apellido1 y apellido2 son válidos. El identificador 1numerono es válido porque empieza con un dígito, no con una letra. Cualquier identificador que empiece con una letra seguida de más letras o dígitos es válido siempre que no forme parte de las palabras reservadas del lenguaje Java. El lenguaje Java distingue entre letras mayúsculas y minúsculas, esto significa que los identificadores numeroPar y numeroparson distintos. Existen unas normas básicas para los identificadores que se deben respetar.  Los nombres de variables y métodos empiezan con minúsculas. Si se trata de un nombre compuesto cada palabra debe empezar con mayúscula y no se debe utilizar el guion bajo para separar las palabras. Por ejemplo, los identificadores calcular Sueldo, setNombre o getNombre son válidos.  Los nombres de clases empiezan siempre con mayúsculas. En los nombres compuestos, cada palabra comienza con mayúscula y no se debe utilizar el guion bajo para separar las palabras. Por ejemplo, HolaMundo, Perímetro Circunferencia, Alumno o Profesor son nombres válidos. Los nombres de constantes se escriben en mayúsculas. Para nombres compuestos se utiliza el guión bajo para separar las palabras. Por ejemplo, PI, MINIMO, Máximo TOTAL_ELEMENTOS son nombres válidos.  Variables y valores Un programa Java utiliza variables para almacenar valores, realizar cálculos, modificar los valores almacenados, mostrarlos por la consola, almacenarlos en disco, enviarlos por la red, etc. Una variable almacena un único valor Una variable se define por un nombre, un tipo y el rango de valores que puede almacenar. El nombre de una variable permite hacer referencia a ella. Este nombre debe cumplir las reglas aplicables a los identificadores. El tipo indica el formato de los valores que puede almacenar la variable: cadenas de caracteres, valores lógicos, números enteros, números reales o tipos de datos complejos. El rango indica los valores que puede tomar la variable. Por ejemplo, una variable de tipo número entero, con nombre mes Nacimiento puede almacenar valores positivos y negativos, lo que no tiene sentido cuando se trata de meses del año. El rango válido para esta variable sería de 1 a 12. Para declarar una variable en Java se indica el tipo y su nombre.
  • 34. int mesNacimiento; En este ejemplo se indica que la variable es de tipo entero (int) y su nombre es mesNacimiento . Una vez declarada una variable, se puede utilizar en cualquier parte del programa referenciándola por su nombre. Para almacenar un valor en una variable se utiliza el operador de asignación y a continuación se indica el valor, por ejemplo 2. mesNacimiento = 2; A partir de este momento la variable mesNacimiento almacena el valor 2 y cualquier referencia a ella utiliza este valor. Por ejemplo, si se imprime el valor de la variable por la consola, muestra el valor 2. System.out.print(mesNacimiento); Java permite declarar e inicializar una variable en una sola sentencia. int diaNacimiento = 20; int mesNacimiento = 3; En este ejemplo se declaran las variables diaNacimiento con el valor 20 y mesNacimiento con valor 3. Si se declara una constante, entonces se debe utilizar el delimitador final y es necesario indicar su valor. En la siguiente declaración se define el valor de la constante pi de tipo double para almacenar un número real. final double PI = 3.1415926536; Es conveniente utilizar nombres apropiados para las variables. El nombre de una variable debe indicar para qué sirve. El nombre de una variable debe explicarse por sí mismo para mejorar la legibilidad del programa. Si se desea declarar más de una variable a la vez se deben separar las Variables en la sentencia de la declaración. int dia=20, mes=2, año=2020; En este ejemplo se declaran las variables enteras dia, mes y año . La variable día se inicializa con el valor 20, mes con 2 y año con 2020. La siguiente declaración es equivalente a la anterior. int dia=20; int mes=2;
  • 35. int año=2020;  Tipos primitivos Las variables de java pueden ser de un tipo primitivo de datos o una referencia a un objeto. Los tipos primitivos permiten representar valores básicos. Estos tipos se clasifican en números enteros, números reales, caracteres y valores booleanos. Números enteros. Representan números enteros positivos y negativos con distintos rangos de valores, desde cientos a trillones. Los tipos enteros de Java son byte, int, Short y long. Números reales. Existen dos tipos de números reales en Java, float y double. La diferencia entre ellos está en el número de decimales que tienen capacidad para expresar y en sus rangos de valores. Caracteres. El tipo char permite representar cualquier carácter Unicode. Los caracteres Unicode contienen todos los caracteres del alfabeto de la lengua castellana. Booleano Se utiliza para representar los valores lógicos verdadero y falso. Solo tiene dos valores true y false.  Literales Se denomina literal a la manera en que se escriben los valores para cada uno de los tipos primitivos. Números enteros Un número entero en Java se puede escribir en decimal, octal o en hexadecimal. Cuando se utiliza el sistema octal es necesario poner el dígito 0 delante del número. Si se utiliza el sistema hexadecimal se debe poner 0x delante del número. Por ejemplo, el número decimal 10 se puede escribir 012 en octal y 0xA en hexadecimal. Los números enteros se supone que pertenecen al tipo int. Números reales Un número real en Java siempre debe tener un punto decimal o un exponente. Por ejemplo, el número 0.25 se puede expresar también como 2.5e-1. Los números reales se supone que pertenecen al tipo double
  • 36. Booleanos. Los valores lógicos solo pueden ser true y false Se escriben siempre en minúsculas. Caracteres Los valores de tipo carácter representan un carácter Unicode. Se escriben siempre entre comillas simples, por ejemplo 'a', 'A', '0', '9'. En Java un carácter se puede expresar por su código de la tabla Unicode en octal o en hexadecimal.  Operadores Cada tipo puede utilizar determinados operadores para realizar operaciones o cálculos. Números enteros. Al realizar una operación entre dos números enteros, el resultado siempre es un número entero. Con los números enteros se pueden realizar operaciones unarias, aditivas, multiplicativas, de incremento y decremento, relacionales, de igualdad y de asignación. -Una operación unaria permite poner un signo delante: +5, -2. -Una operación aditiva se refiere a la suma y la resta: 2+3, 5-2. -Una operación multiplicativa multiplica o divide dos valores: 5*2, 5/2. El operador % calcula el resto de la división entera 5%2. -Un incremento o decremento aumenta o decremento en 1 el valor de una variable: ++número, número++, --número, número--. Si el operador va antes de la variable, primero se realiza la operación y se modifica el valor de la variable. Si el operador va después de la variable, su valor se modifica al final. -Un operador relacional permiten comparar dos valores: >, <, >= y <=. El resultado de la comparación es un valor booleano que indica si la relación es verdadera o falsa. -Un operador de igualdad compara son dos valores son iguales o no. El operador == devuelve verdadero si los dos valores son iguales, el operador!= devuelve verdadero si son diferentes. El resultado de la comparación es un valor booleano que indica si la igualdad o desigualdad es verdadera o falsa. -Un operador de asignación permite asignar un valor o el resultado de una operación a una variable: =, +=, -=, *=, /=, %=. Números reales. Con los números reales se aplican los mismos operadores que con los números enteros. Si se realizan operaciones unarias, aditivas o multiplicativas, el resultado es un número real. También se pueden aplicar los operadores relacionales para comparar dos números reales.
  • 37. Booleanos. Los operadores que se aplican a los valores lógicos son: negación, Y lógico, O lógico. -La negación (!) devuelve truesi el operando es false. -El Y lógico (&&) devuelve false si uno de los operando es false. -El O lógico (||) devuelve truesi uno de los operandos es true.  Expresiones Una expresión permite realizar operaciones entre valores utilizando distintos operadores. Las expresiones son útiles para representar las fórmulas matemáticas que se utilizan para realizar cálculos. En Java se pueden definir expresiones tan complejas como sea necesario. Por ejemplo, para convertir una temperatura de grados Fahrenheit a Centígrados se utiliza la fórmula: C = ((F – 32) * 5) / 9 En este ejemplo C representa la temperatura en grados centígrados y F en grados Fahrenheit. La fórmula en Java, utilizando las variables centígrados y Fahrenheit de tipo doublé Centígrados = ((fahrenheit – 32.0) * 5.0)) / 9.0; Toda la expresión se evalúa a un valor. El orden de los cálculos depende del orden de prioridad de los operadores: primero los operadores unarios, después los multiplicativos, de izquierda a derecha, después los operadores aditivos, de izquierda a derecha, después los operadores de relación y por último los operadores de asignación. Por ejemplo, la expresión x = -3 + 2 * 4 – 12 / 6 + 5 se calcula en el orden siguiente: Primero se aplica el operador unario (-) a 3 y se obtiene -3. A continuación se evalúan los operadores multiplicativos de izquierda a derecha. Se calcula el producto de 2 * 4 y se obtiene 8, después se divide 12 / 6 y se obtiene 2. Al finalizar estas operaciones la expresión queda x = -3 + 8 – 2 + 5. Por último, se evalúan los operadores aditivos de izquierda a derecha y se obtiene 8.
  • 38. Cuando se desea modificar el orden de prioridad de los operadores es necesario utilizar paréntesis para indicar el orden de evaluación. Por ejemplo, al calcular el valor de y = -3 + 2 * (14 – 2) / 6 + 5 se obtiene 6.  Expresiones aritmético-lógicas Una expresión aritmético-lógica devuelve un valor lógico verdadero o falso. En este tipo de expresiones se utilizan operadores aritméticos, operadores relacionales y de igualdad. Por ejemplo, Una expresión lógica puede ser: (10 – 2) > (5 – 3) En este ejemplo la expresión aritmético-lógica es verdadera porque el lado derecho de la expresión es mayor que el lado izquierdo. En una expresión aritmético-lógica se pueden combinar varias expresiones con operadores lógicos. La precedencia de los operadores lógicos es menor que la de los operadores relacionales, por lo que primero se evalúan las desigualdades y después los operadores lógicos. El orden de prioridad de los operadores lógicos es el siguiente: primero la negación, después el Y lógico y por último el O lógico. La prioridad de los operadores de asignación es la menor de todas. Por ejemplo, la expresión 3 + 5 < 5 * 2 || 3 > 8 && 7 > 6 – 2 se evalúa en el orden siguiente. Primero se evalúan las expresiones aritméticas y se obtiene la expresión lógica 8 < 10 || 3 > 8 && 7 > 4. A continuación se evalúan los operadores relacionales y se obtiene true|| false && true . Ahora se evalúa el operador Y lógico con los operandos false && true y se obtiene false. Por último, se evalúa el operador O lógico con los operandos true|| falsey se obtiene true, el valor final de la expresión. Los operadores lógicos && y || se evalúan por cortocircuito. Esto significa que al evaluar a && b, si a es falso, no es necesario evaluar b porque la expresión es falsa. De forma similar, al evaluar a || b, si a es verdadero, no es necesario evaluar b porque la expresión es verdadera.  Estructura de control.
  • 39. El cuerpo de un programa se compone de un conjunto de sentencias que especifican las acciones que se realizan durante su ejecución. Dentro de cualquier programa, se escriben sentencias que definen la secuencia de acciones a ejecutar. Estas sentencias incluyen acciones de cálculo, entrada y salida de datos, almacenamiento de datos, etc. Las sentencias se ejecutan una a una en el orden en el que han sido escritas. Se denomina flujo de un programa al orden de ejecución de las sentencias que forman parte del cuerpo de un programa. Las estructuras de control son una característica básica de los lenguajes que se utiliza para modificar el flujo de un programa. Hay casos en los que el flujo de un programa debe ejecutar determinadas instrucciones solo cuando se cumple una condición. En otras ocasiones, debe repetir un conjunto de sentencias un número determinado de veces. Las estructuras de control permiten condicionar el flujo de ejecución dependiendo del estado de las variables de un programa. Las estructuras de control básicas se pueden clasificar en estructuras de selección, de repetición y de salto.  Selección. Permiten decidir si se ejecuta un bloque de sentencias o no.  Repetición. Permiten ejecutar un bloque de sentencias muchas veces.  Salto. Permiten dar un salto y continuar la ejecución de un programa en un punto distinto de la siguiente sentencia en el orden natural de ejecución. Las estructuras de control se pueden combinar sin ningún tipo de limitación. Cualquier nuevo bloque de sentencias puede incluir estructuras de control a continuación de otras. Cuando se incluyen varias estructuras seguidas unas de otras, se dice que son estructuras de control apiladas. Por otra parte, dentro de un bloque de una estructura de control se puede incluir otra estructura de control y dentro de este nuevo bloque se puede incluir otra estructura de control y así sucesivamente. Cuando una estructura contiene otra estructura, se dice que son estructuras de control anidadas. Es importante destacar que no existe limitación en cuanto al número de estructuras de control apiladas o anidadas que se pueden utilizar en un programa Java. La única restricción a tener en cuenta es la claridad y la legibilidad del programa. Estructuras de selección
  • 40. Las estructuras de selección permiten modificar el flujo de un programa. La decisión de ejecutar un bloque de sentencias queda condicionada por el valor de una expresión lógica definida utilizando variables del programa. Estructura if La estructura if se denomina estructura de selección única porque ejecuta un bloque de sentencias solo cuando se cumple la condición del if. Si la condición es verdadera se ejecuta el bloque de sentencias. Si la condición es falsa, el flujo del programa continúa en la sentencia inmediatamente posterior al if. Una sentencia if tiene la siguiente sintaxis: if (condicion) { bloque-de-sentencias } La condición es una expresión que evalúa un valor lógico, por lo que el resultado solo puede ser true o false. La condición siempre se escribe entre paréntesis. La selección se produce sobre el bloque de sentencias delimitado por llaves. Si el bloque de sentencias solo tiene una sentencia, entonces se puede escribir sin las llaves, como se muestra a continuación. if (condicion) sentencia; Cuando el flujo de un programa llega a una estructura if, se evalúa la condición y el bloque de instrucciones se ejecuta si el valor de la condición es true. Si la condición es false, entonces se ejecuta la sentencia inmediatamente posterior al if. Por ejemplo, si la calificación de un alumno es 10, entonces se debe mostrar por la consola un mensaje indicando que tiene una Matrícula de Honor. La sentencia if considerando que calificación es una variable de tipo int: if (calificacion == 10) { System.out.println("Matrícula de Honor"); } En este ejemplo el mensaje “Matrícula de Honor” solo se muestra cuando el valor de la calificación es igual a 10. Estructura if else
  • 41. La estructura if-else se denomina de selección doble porque selecciona entre dos bloques de sentencias mutuamente excluyentes. Si se cumple la condición, se ejecuta el bloque de sentencias asociado al if. Si la condición no se cumple, entonces se ejecuta el bloque de sentencias asociado al else. Una sentencia if-else tiene la siguiente sintaxis: if (condicion) { bloque-de-sentencias-if } else { bloque-de-sentencias-else } Al igual que en el if, la condición se debe escribir entre paréntesis. La selección depende del resultado de evaluar la condición. Si el resultado es true, se ejecuta el bloque de sentencias del if, en cualquier otro caso se ejecuta el bloque de instrucciones del else. Después de ejecutar el bloque de sentencias se ejecuta la sentencia inmediatamente posterior al if-else Por ejemplo, si se desea mostrar un mensaje por la consola para indicar si un número es par o impar, basta con calcular el resto de la división del número entre 2 con el operador %. Si el resto es igual a cero, entonces el número es par, en caso contrario el número es impar. La sentencia if- else: if (numero % 2 == 0) System.out.println("El número es par"); else System.out.println("El número es impar"); Como se ha comentado antes, los bloques de sentencias son mutuamente excluyentes. Si se cumple la condición se ejecuta un bloque de sentencias, en caso contrario se ejecuta el otro bloque de sentencias. Teniendo en cuenta esto, se podría escribir una sentenciaif-else con la condición contraria y con los bloques de sentencias intercambiados. if (numero % 2 != 0) System.out.println("El número es impar"); else
  • 42. System.out.println("El número es par"); Si fuera necesario evaluar más de una condición, entonces se deben utilizar varias estructuras de selección anidada Estructura if else if La estructura if-else-if se puede aplicar en los mismos casos en que se utiliza un if-else anidado. Esta estructura permite escribir de forma abreviada las condiciones de un if-else anidado. Una sentencia if-else-if tiene la siguiente sintaxis: if (condicion-1) { bloque-de-sentencias-condicion-1 } else if (condicion-2) { bloque-de-sentencias-condicion-2 } else { bloque-de-sentencias-else } La sentenciaif-else-if para el ejemplo de las calificaciones: int calificacion = 7; if (calificacion == 10) { System.out.println("Matrícula de Honor"); } else if (calificacion == 9) { System.out.println("Sobresaliente"); } else if (calificacion >= 7) { System.out.println("Notable"); } else if (calificacion == 6) { System.out.println("Bien"); } else if (calificacion == 5) { System.out.println("Aprobado"); } else {
  • 43. System.out.println("Suspenso"); } Estructura switch La estructura switches una estructura de selección múltiple que permite seleccionar un bloque de sentencias entre varios casos. En cierto modo, es parecido a una estructura de if-else anidados. La diferencia está en que la selección del bloque de sentencias depende de la evaluación de una expresión que se compara por igualdad con cada uno de los casos. La estructura switch consta de una expresión y una serie de etiquetas case y una opción default. La sentencia break indica el final de la ejecución del switch. Una sentencia switch tiene la siguiente sintaxis: switch (expresion) { case valor-1: bloque-de-sentencias-1; break; case valor-2: bloque-de-sentencias-2; break; case valor-3: bloque-de-sentencias-3; break; case valor-4: bloque-de-sentencias-4; break; case valor-5: bloque-de-sentencias-5; break; default: bloque-de-sentencias-default; break; }  Entrada y salida.
  • 44. Los flujos de Java Prácticamente todos los programas deben leer datos del exterior para procesarlos y después presentar los resultados. La información que necesita un programa normalmente se obtiene mediante la entrada de datos por el teclado o leyendo un fichero. Los resultados de la ejecución de un programa se pueden presentar por la consola, la impresora o en un fichero. El tipo de información que se utiliza tanto en las entradas como en las salidas puede tener diversos formatos: texto, imagen, sonido, binario, etc. En Java, la entrada de datos se realiza mediante un flujo de entrada. Para realizar la entrada de datos es necesario abrir el flujo de entrada, leer la información del flujo hasta el final y por último cerrar el flujo. La salida se hace mediante un flujo de salida. Para realizar la salida de datos es necesario abrir el flujo de salida y a continuación se escribe en él toda la información que se desee, por último, se cierra el flujo. Este esquema de entradas y salidas basadas en un flujo permite que las entradas sean independientes de la fuente de datos y que las salidas sean independientes del destino de los datos. Un flujo en Java es un objeto que se utiliza para realizar una entrada o salida de datos. Representa un canal de información del que se puede leer o escribir datos de forma secuencial. Existen dos tipos de flujos en Java, los que utilizan bytes y los que utilizan caracteres. La siguiente tabla muestra los flujos de entrada de datos de Java: Flujos con bytes Flujos con caracteres InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream DataInputStream LineNumberInputStream PushBackInputStream ObjectInputStream PipedInputStream SequenceInputStream StringBufferInputStream Reader BufferedReader LineNumberReader CharArrayReader FilterReader PushBackReader InputStreamReader FileReader PipedReader StringReader
  • 45. La siguiente tabla muestra los flujos de salida de datos de Java: Flujos con bytes Flujos con caracteres OutputStream ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream DataOutputStream PrintStream ObjectOutputStream PipedOutputStream Writer BufferedWriter CharArrayWriter FilterWriter OutputStreamWriter FileWriter PipedWriter PrintWriter StringWriter Existen flujos con bytes y flujos con caracteres que se aplican a la misma entrada o salida. FileInputStream y FileOutputStream son flujos para leer y escribir bytes en un fichero, FileReader Y FileWriter también son flujos que se aplican a ficheros, pero en este caso para leer y escribir caracteres. Entrada de datos desde el teclado El flujo de entrada System.in lee los datos que se introducen en el teclado. Si este flujo se pasa como argumento a una instancia de la clase Scanner, permite realizar la lectura de datos del teclado. Basta con utilizar los métodos next(), nextLine() y nextInt() para leer una palabra, una línea y un número entero, respectivamente. A continuación se muestra el uso de la clase Scanner y el flujo de entrada del teclado System.in. Para utilizar la clase Scanner en un programa Java es necesario importar la librería java.util.Scanner. Suponga que se desea realizar un programa que pide un nombre, el día, el mes y el año de la fecha de nacimiento de una persona. En este programa se declara una instancia de la clase Scanner, con nombre entradaTeclado que se inicializa con el flujo de entrada del teclado System.in. Scanner entradaTeclado = new Scanner(System.in);
  • 46. La clase Scanner ofrece los métodos next(), nextLine() o nextInt(), entre otros. El método next() lee una palabra, el método nextLine() lee una línea completa y el método nextInt() lee un número de tipo entero. La variable nombre de tipo String se inicializa con el nombre que se introduce en el teclado. Como se invoca el método nextLine() de entradaTeclado, se lee toda la línea, de manera que la variable nombre almacena tanto el nombre como los apellidos de la persona. System.out.print("¿Cómo te llamas? "); nombre = entradaTeclado.nextLine();  tipos de programas que pueden hacerse en JAVA Los programas en Java suelen estar en una de las siguientes categorías: • Applets Los applets son pequeños programas que se incorporan en una página Web y que por lo tanto, necesitan de un Navegador Web compatible con Java para poder ejecutarse. A menudo los applets se descargan junto con una página HTML desde un Servidor Web y se ejecutan en la máquina cliente. • Aplicaciones Las aplicaciones son programas standalone de propósito general que normalmente se ejecutan desde la línea de comandos del sistema operativo. Con Java se puede realizar cualquier programa que normalmente se crearía con algún otro lenguaje de programación. • Servlets Los servlets al contrario de los applets son programas que están pensados para trabajar en el lado del servidor y desarrollar aplicaciones Web que interactúen con los clientes. Los servlets son una alternativa de la programación CGI tradicional. Introducción:
  • 47.