Está en la página 1de 59

[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS

DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Introducción

En este primer tema veremos cómo podemos desarrollar una aplicación JAVA orientada objetos, así

como sus distintas clases y ejemplos prácticos de cada punto del tema.

es
2.
ca
lifi
ua
l.c
ua
irt
sv
pu
m
ca

campusvirtual.cualifica2.es
1 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Objetivos

Conocer cómo desarrollar una aplicación JAVA.

Aprender a trabajar con aplicaciones JAVA orientada a objetos.

es
2.
ca
lifi
ua
l.c
ua
i rt
sv
pu
m
ca

campusvirtual.cualifica2.es
2 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Mapa Conceptual

[[[Elemento Multimedia]]]

es
2.
ca
lifi
ua
l.c
ua
irt
sv
pu
m
ca

campusvirtual.cualifica2.es
3 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Introducción a la Programación Orientada a Objetos.

Hoy en día el paradigma de orientación a objetos es el más utilizado para programar y

prácticamente lo podemos encontrar en la mayoría de los lenguajes de programación más

utilizados: Java, PHP, C++, etc.

Pero, ¿qué es realmente la orientación a objetos? El paradigma de programación orientada a

objetos es un enfoque para el desarrollo de aplicaciones en el que los datos se estructuran en

es
objetos que realizan determinadas acciones a través de funciones.

2.
En un entorno más clásico de programación el problema o sistema que se está analizando se

ca
divide en funciones, cada función solo operaba con sus parámetros de entrada y no modificaba

información externa a ella.

lifi
Para llevar a cabo el análisis con la programación orientada a objetos hay que tener en cuenta
ua
que los programas se codifican pensando en objetos que interactúan.
l.c

Los objetos tendrán unas determinadas propiedades y serán capaces de hacer ciertas cosas
ua

mediante los métodos (funciones) que se les hayan definido en plantillas denominadas clases.
rt

Si se hace un buen diseño de los objetos y su interacción, se podrán usar en nuevos programas y
i

proyectos fácilmente, favoreciendo la reusabilidad.


sv

Un poco de historia
pu

JAVA fue creado como una herramienta de programación para ser usada en un proyecto de set-top-
m

box en una pequeña operación denominada the Green Project en Sun Microsystems en el año 1991.
ca

El Green Team, el cual está compuesto por 13 personas contando con James Gosling a la cabeza,

trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo.

El lenguaje fue denominado inicialmente como Oak (nombre que fue dado gracias a un roble que

había fuera de la oficina), después cambió su denominación a "Green" tras descubrir que Oak era

una marca comercial de adaptadores de tarjetas gráficas, así que posteriormente cambió su nombre

al de JAVA.

Es frecuentada por algunos de los miembros del equipo. Lo que no está claro es de si se trata de un

campusvirtual.cualifica2.es
4 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

acrónimo o no, aunque hay ciertas fuentes que hacen indicar que son las iniciales de sus

diseñadores: J ames Gosling, A rthur V an Hoff, y A ndy Bechtolsheim. Otros apuestan por el

siguiente acrónimo, J ust A nother V ague A cronym ("solo otro acrónimo ambiguo más"). La

hipótesis que suena con más fuerza es que el nombre de JAVA hace referencia a un tipo de café que

se servía en un bar cercano, de ahí que el icono sea una taza de café desprendiendo vapor. Otra

pista pueden ser los 4 primeros bytes de los archivos .class, bytes que en exadecimal nos dan lo

siguiente 0xCAFEBABE. Y a pesar de todas estas teorías, parece que el nombre fue sacado de una

lista aleatoria.

es
2.
Lo que Gosling pretendía hacer es implementar una máquina virtual (MV) con una estructura y

lenguaje que fuese similar a la de C++. Entre los meses de junio y julio del año 1994, tras una

ca
enorme sesión de varios días de John Gaga, James Gosling, Patrick Naughton, Wayne Rosing y Eric

lifi
Schmidt, el equipo reorientó la plataforma hacia el entorno web. Previeron que la llegada de Mosaic

(un navegador web) haría que internet se convirtiese en un medio interactivo. Naughton se puso
ua
manos a la obra y creo un prototipo de navegador web llamado "WebRunner", al que más tarde se le
l.c

conocería con el nombre de HotJAVA.


ua

Allá por el año 1994 a los altos cargos de Sun se les hizo una demostración de HotJAVA. La primera

versión de JAVA pudo descargarse por primera vez allá por el año 1994, pero no fue hasta el 23 de
rt

mayo del año siguiente cuando se vieron las versiones públicas de JAVA y HotJAVA, el navegador
i
sv

Web. El acontecimiento fue anunciado por John Gage, el Director Científico de Sun Microsystems.

Además, el acto contó con una sorpresa, Marc Andreessen, vicepresidente ejecutivo de Netscape,
pu

anunció que su navegador soportaría JAVA El 9 de enero de 1996, SUN fundó el grupo JavaSoft
m

para encargarse de toda la parte del desarrollo tecnológico. Fue dos semanas más tarde cuando la
ca

primera versión de JAVA fue publicada.

campusvirtual.cualifica2.es
5 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

La promesa inicial, si recordamos era aquella que decía "Write Once, Run Anywhere", haciendo

que el lenguaje de programación sea independiente a la plataforma, y proporcionando una máquina

virtual de ejecución para aquellas plataformas más populares logrando así que el código pudiese ser

ejecutado en cualquier plataforma.

El entorno de ejecución era algo relativamente seguro, así que los principales navegadores

empezaron a dar soporte a la ejecución de applets JAVA dentro de las propias páginas web.

es
Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un gran

incremento en el número de clases y de paquetes que forman la biblioteca base.

2.
Desde la versión J2SE 1.4, todo cambio en el lenguaje ha sido regulada por la "JAVA Community

ca
Process" (JCP), la cual se basa en Java Specification Requests (JSRs) para proponer cambios futuros

lifi
a la plataforma. El lenguaje está especificado en la JLS (la "JAVA Language Specification). Los

cambios en los JLS son gestionados en JSR 901.


ua
l.c

JDK 1.0
ua

JDK 1.0 (23 de enero de 1996) — Primer lanzamiento: y comunicado de prensa


i rt

JDK 1.1
sv

JDK 1.1 (19 de febrero de 1997) — Principales adiciones incluidas: comunicado de prensa
pu
m

una reestructuración intensiva del modelo de eventos AWT (Abstract Windowing


ca

Toolkit)

clases internas (inner classes)

JavaBeans

JDBC (Java Database Connectivity), para la integración de bases de datos

RMI (Remote Method Invocation)

J2SE 1.2

J2SE 1.2 (8 de diciembre de 1998) — Nombre clave Playground. Tanto esta como las

campusvirtual.cualifica2.es
6 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

siguientes versiones fueron recogidas bajo la versión Java 2 y el nombre "J2SE" (Java 2

Platform, Standard Edition), reemplazó a JDK para diferenciar la plataforma base de J2EE

(Java 2 Platform, Enterprise Edition) y la J2ME (Java 2 Platform, Micro Edition). Otras

mejoras añadidas incluían:

la palabra reservada strictfp

reflexión en la programación

una API gráfica denominada Swing, que fue integrada en las clases básicas

es
la máquina virtual (JVM) de Sun que fue equipada con un compilador JIT (Just in Time)

2.
por primera vez

ca
Java Plug-in

Java IDL, una implementación de IDL (Lenguaje de Descripción de Interfaz) para la

lifi
interoperabilidad con CORBA
ua
Colecciones (Collections)
l.c

J2SE 1.3
ua

J2SE 1.3 (8 de mayo de 2000) — Nombre clave Kestrel. Los cambios más destacables fueron:
i rt

la incorporación de la máquina virtual de HotSpot JVM (la cual fue lanzada inicialmente
sv

en abril de 1999, para la JVM de J2SE 1.2)


pu

RMI fue modificado para que se basase en CORBA

JavaSound
m

se insertó el Java Naming and Directory Interface (JNDI) en el paquete que contiene las
ca

bibliotecas principales (la cual estaba disponible anteriormente mediante una

extensión)

Java Platform Debugger Architecture (JPDA)

J2SE 1.4

J2SE 1.4 (6 de febrero de 2002) — Nombre en Clave Merlin. Fue el primer lanzamiento de la

plataforma JAVA desarrollado bajo el control de la comunidad JAVA como JSR 59. Los

campusvirtual.cualifica2.es
7 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

cambios más notables fueron:

LA inserción de la palabra reservada assert (Especificado en JSR 41.)

Expresiones regulares diseñadas al estilo de las expresiones regulares del lenguaje de

programación Perl

Encadenación de excepciones, la cual permite a una excepción encapsular la excepción

de bajo nivel original.

non-blocking NIO (New Input/Output) (Especificado en JSR 51.)

es
Logging API (Specified in JSR 47.)

2.
Una API I/O para lectura y escritura de imágenes en formatos JPEG o PNG

ca
Un "parser" de XML y un procesador XSLT especificado en JSR 5 y JSR 6

Extensiones criptográficas (JCE, JSSE, JAAS) y seguridad integrada

lifi
Java Web Start incluido (El primer lanzamiento se dio lugar en marzo de 2001 para
ua
J2SE 1.3) (Especificado en JSR 56.)
l.c

J2SE 5.0
ua

J2SE 5.0 (30 de septiembre de 2004) — Nombre clave: Tiger. (Originalmente numerado 1.5,
rt

esta notación aún es usada internamente.) Desarrollado bajo JSR 176, Tiger incorporó un
i

gran un número de nuevas características


sv
pu

Plantillas (genéricos) — provee de una conversión de tipos (type safety) durante el

tiempo de compilación para las colecciones y elimina la necesidad de la mayoría de


m

conversión de tipos (type casting). (Especificado por JSR 14.)


ca

Metadatos — también conocidos como anotaciones, concede a estructuras del lenguaje

como puedan ser las clases o los métodos, ser etiquetados con algunos datos

adicionales, que puedan ser procesados posteriormente por utilidades de proceso de

metadatos. (Especificado por JSR 175.)

Autoboxing/unboxing — Conversiones entre tipos primitivos (int) de manera automática

y clases también de envoltura primitiva (Integer). (Especificado por JSR 201.)

Enumeraciones — la palabra reservada 'enum' crea un 'typesafe', una lista ordenada de

valores (Dia.LUNES, Dia.Martes...). "Antiguamente", esto solo podía ser hecho por

campusvirtual.cualifica2.es
8 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

constantes de tipo int o por clases construidas de forma manual (enum pattern).

(Especificado por JSR 201.)

Varargs (número de argumentos variable) — El último parámetro puede ser indicado

mediante el tipo de la variable y usar tres puntos para indicar el nombre de la variable

(p.e. void drawtext(String... lines)). Cuando el método sea llamado con un número

indeterminado de parámetros, dichos parámetros serán almacenados en un array.

Bucle for mejorado — Se ha extendido la sintaxis para el bucle for, de manera que sea

posible iterar sobre cualquier clase que implemente Iterable, como la clase estándar

es
Collection de la siguiente forma:

2.
ca
Java SE 6

lifi
Java SE 6 (11 de diciembre de 2006) — Nombre clave Mustang. Estuvo en desarrollo bajo la

JSR 270. Para esta versión, SUN cambió el nombre "J2SE" por Java SE y eliminó el ".0" del
ua
número de la versión. Los cambios más destacables de esta versión son:
l.c

Incorpora un nuevo marco de trabajo y APIs que hacen posible la combinación de JAVA
ua

con otros lenguajes de programación como puedan ser PHP, Python, Ruby y JavaScript.
rt

También incorpora el motor Rhino, de Mozilla, una implementación de JavaScript


i

dentro de Java.
sv

Incluye por completo un cliente de Servicios Wev y soporta las últimas especificaciones
pu

para los servicios web, como puedan ser JAX-WS 2.0, JAXB 2.0, STAX y JAXP.

Mejoras en la interfaz gráfica y en el rendimiento en general.


m
ca

Java SE 7

Java SE 7 — Nombre clave Dolphin. Aún se encontraba en las primeras etapas de

planificación allá por el año 2006. Su lanzamiento definitivo fue en julio de 2011.

XML soportado en el propio lenguaje.

Un nuevo concepto de "superpaquete".

Soporte para closures.

campusvirtual.cualifica2.es
9 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Anotaciones estándares para detectar fallos del software.

No oficiales:

NIO2.

Java Module System.

Java Kernel.

Una nueva API para poder hacer usos de Días y Fechas, la cual es un reemplazo de las

es
antiguas clases Date y Calendar.

2.
Posibilidad de operar con clases BigDecimal usando operandos.

ca
lifi
Java SE 8

Java SE 8 fue lanzada en marzo de 2014. Cabe resaltar:


ua
l.c

Incorpora de forma completa la librería JavaFX.

Mejoras en seguridad varias.


ua

Mejoras en la concurrencia.
rt

Añade funcionalidad para programación funcional mediante expresiones Lambda.


i

Mejora la integración de JavaScript.


sv

Nuevas API para el manejo de las fechas y del tiempo (date - time).
pu

Java SE 9
m
ca

Java SE 9 se publicó el 21 de septiembre de 2017.

Modularización del JDK bajo Proyecto Jigsaw (Java Platform Module System)

JShell: El Shell de Java

Compilación antes de tiempo (Ahead-of-time)

Catálogos XML

Más actualizaciones de concurrencia

Identificadores variables (variable handles)

jlink: El Java Linker: crea una herramienta que puede ensamblar y optimizar un

campusvirtual.cualifica2.es
10 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

conjunto de módulos y sus dependencias en una imagen personalizada en tiempo de

ejecución. Efectivamente permite producir un ejecutable totalmente utilizable,

incluyendo la JVM para ejecutarlo

JavaDB fue eliminado del JDK

Gráficos HiDPI: escalado y dimensionamiento automáticos

Cadenas compactas

Milling Project Coin

es
Java SE 10

2.
ca
Java SE 10 se publicó el 20 de marzo de 2018.

lifi
Inferencia de tipo en variables locales

Consolidar el bosque JDK en un único repositorio


ua
Interfaz de recolector de elementos no utilizados
l.c

GC completo paralelo para G1

Uso compartido de datos de clase de aplicación


ua

Thread-Local Handshakes
rt

Quitar la herramienta de generación de encabezado nativo (javah)


i

Extensiones adicionales de etiqueta de idioma Unicode


sv

Asignación de montón en dispositivos de memoria alternativos


pu

Compilador JIT experimental basado en Java

Certificados raíz
m

Control de versiones basado en tiempo


ca

JDK 11

JDK 11 fue lanzado el 25 de septiembre de 2018. Al escribir este manual (2021), la versión

está abierta para correcciones de errores. Ofrece LTS (Long Term Support), o soporte a

largo plazo. Entre otros, Java 11 incluye una serie de nuevas características, tales como:

Control de acceso basado en anidamiento

campusvirtual.cualifica2.es
11 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Constantes dinámicas de archivo de clase

Mejorar Aarch64

Epsilon: Un recolector de basura (Garbage Collector) que controle la asignación de

memoria pero no implemente ningún mecanismo de recuperación de memoria real. Una

vez agotado el montón java disponible, la JVM se apagará

Retirar los módulos Java EE y CORBA

Cliente HTTP (estándar)

Sintaxis de variable local para parámetros Lambda

es
Claves para Curve25519 y Curve448

2.
Unicode 10

ca
Flight Recorder

Algoritmos criptográficos ChaCha20 y Poly1305

lifi
Iniciar programas de código fuente de un solo archivo
ua
Perfilado de montón de baja sobrecarga

Seguridad de la capa de transporte (TLS) 1.3


l.c

ZGC: Un recolector de basura escalable de baja latencia (experimental)


ua

Deprecar el motor JavaScript de Nashorn

Deprecar las herramientas y la API de Pack200


i rt
sv

Se descartaron varias características de versiones anteriores; en particular, los applets Java

y Java Web Start ya no están disponibles. Los módulos JavaFX, Java EE y CORBA se han
pu

eliminado del JDK.


m

JDK 12
ca

JDK 12 fue lanzado el 19 de marzo de 2019. Entre otros, Java 12 incluye una serie de nuevas

características, tales como:

Shenandoah: Un recolector de basura de poca pausa (experimental)

Microbenchmark Suite

Switch Expressions (Preview)

JVM Constants API

campusvirtual.cualifica2.es
12 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Un único puerto AArch64

Archivos CDS predeterminados

Colecciones mixtas abortables para G1 (Garbage Collector)

Devolver rápidamente la memoria comprometida no utilizada del G1

JDK 13

JDK 13 fue lanzado el 17 de septiembre de 2019. Java 13 incluye las siguientes

es
características nuevas:

2.
Archivos CDS dinámicos

ca
ZGC: Memoria no comprometida

lifi
Nuevo desarrollo de Legacy Socket API

JEP 354: Expresiones switch


ua
Bloques de texto (vista previa)
l.c
ua

JDK 14

JDK 14 fue lanzado el 17 de marzo de 2020. Java 14 incluye las siguientes características
rt

nuevas, así como "cientos de mejoras más pequeñas y miles de correcciones de errores".
i
sv

Coincidencia de patrones para instanceof


pu

Herramienta de envasado (Incubadora)


m

Asignación de memoria compatible con NUMA para G1


ca

JFR Event Streaming

Búferes de byte mapeados no volátiles

Excepciones NullPointerExceptions más útil

Registros

Expresiones switch

Deprecar los puertos Solaris y SPARC

Retirar el colector de basura de barrido de marcas simultáneas (CMS)

ZGC en macOS

campusvirtual.cualifica2.es
13 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

ZGC en Windows

Deprecar la combinación ParallelScavenge + SerialOld GC

Quitar las herramientas y la API de Pack200

Bloques de texto

API de acceso a memoria externa

JDK 15

es
JDK 15fue lanzado el 15 de septiembre de 2020. Java 15 añade, por ejemplo, compatibilidad

2.
con literales de cadena de varias líneas (también conocidos como bloques de texto). Los

ca
recolectores de basura Shenandoah y Z ya están listos para su uso en producción (es decir,

ya no están marcados como experimentales). Se descarta la compatibilidad con el sistema

lifi
operativo Solaris de Oracle (y las CPU SPARC) (mientras sigue estando disponible en Java

11, por ejemplo). Se elimina el motor JavaScript de Nashorn. También se han eliminado
ua
algunos certificados raíz de CA.
l.c

Algoritmo de firma digital de curva edwards (EdDSA)


ua

Clases selladas
rt

Clases ocultas
i

Retirar el motor JavaScript de Nashorn


sv

Nuevo desarrollo de la API de DatagramSocket heredada


pu

Desactivar y deprecar el bloqueo sesgado

Coincidencia de patrones para instanceof


m

ZGC: un recolector de basura escalable de baja latencia


ca

Bloques de texto

Shenandoah: Un recolector de basura de bajo tiempo de pausa

Retirar los puertos Solaris y SPARC

API de acceso a memoria externa(Segunda incubadora)

Registros

Deprecar la activación RMI para la eliminación

campusvirtual.cualifica2.es
14 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

JDK 16

JDK 16 fue lanzado el 16 de marzo de 2021. Java 16 elimina las opciones de compilación

ahead-of-time (y Graal JIT). La implementación de Java está escrita en C++,mientras que a

partir de Java 16, se utiliza C++14 más reciente (aunque todavía no se utiliza C++17 o

C++20). El código también se movió a GitHub (dejando el sistema de control de código

fuente Mercurial).

es
API vectorial (Incubadora)

Habilitar características lingüísticas de C++14

2.
Migrar de Mercurial a Git

ca
Migrar a GitHub

lifi
ZGC: Procesamiento simultáneo de pila de roscas

Canales de socket de dominio Unix


ua
Alpine Linux Port – aún no estable

Metaespacio elástico
l.c

Puerto Windows/AArch64
ua

API Linker externo (incubadora)

Advertencias para clases basadas en valores


rt

Packaging
i
sv

API de acceso a memoria extranjera (Tercera incubadora)

Coincidencia de patrones para instanceof


pu

Registros
m

Encapsular fuertemente JDK Internals de forma predeterminada


ca

Clases selladas

Comprobar versión de java


Las versiones de java anteriores a la versión 9 simplemente tenían un esquema de nomenclatura

diferente. Por lo tanto, Java 8 también se puede llamar 1.8, Java 5 se puede llamar 1.5, etc. Cuando

se lanza el comando "java -version" con estas versiones, obtenemos un resultado como el siguiente:

$java -version

c:\Program Files\Java\jdk1.8.0_191\bin>java -version

campusvirtual.cualifica2.es
15 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

java version "1.8.0_191" (1)

Java(TM) SE Runtime Environment (build 1.8.0_191-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

Esto simplemente significa Java 8. Con el cambio a versiones basadas en el tiempo con Java 9, el

esquema de nomenclatura también cambió y las versiones Java ya no tienen prefijo 1.x. Ahora, el

número de versión tiene este aspecto:

$java -version

es
openjdk version "11.0.7" 2020-04-14

2.
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.7+10)

OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.7+10, mixed mode)

ca
Diferencia entre JRE y JDK
lifi
ua
Hay que diferenciar entre un JRE (Java Runtime Environment) y un JDK (Java Development Kit).
l.c

Históricamente, se descargaba sólo un JRE si sólo estábamos interesados en ejecutar programas


ua

Java. Un JRE incluye, entre otras cosas, la Máquina Virtual Java (JVM) y la herramienta de línea de
rt

comandos "java".
i
sv

Para desarrollar nuevos programas Java, es necesario descargar un JDK. Un JDK incluye todo lo que
pu

el JRE tiene, así como el compilador javac y un par de otras herramientas como javadoc (generador

de documentación Java) y jdb (Java Debugger).


m

Hasta Java 8, el sitio web de Oracle ofrecía JREs y JDKs como descargas separadas, aunque el JDK
ca

también siempre incluía un JRE en una carpeta independiente. Con Java 9 esa distinción desaparece,

y siempre se descarga un JDK. La estructura de directorios de los JDKs también cambió, ya que ya

no tenía una carpeta JRE explícita.

Por lo tanto, a pesar de que algunas distribuciones todavía ofrecen una descarga JRE separada, la

tendencia es ofrecer sólo un JDK. Por lo tanto, vamos a utilizar Java y JDK indistintamente a partir de

ahora.

Distribuciones de Java

campusvirtual.cualifica2.es
16 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Las distribuciones de Java deben ser compatibles con Java SE (Standard Edition).

Hay una serie de proveedores que crean estas compilaciones, las certifican y después las

distribuyen. Aunque los proveedores no pueden, por ejemplo, eliminar un método de la clase String

antes de producir una nueva compilación java, pueden agregar personalización de marca o agregar

algunas otras utilidades (por ejemplo, CLI Command Line Interface) que consideren útiles. Pero

aparte de eso, el código fuente original es el mismo para todas las distribuciones Java.

es
OpenJDK y Oracle JDK

2.
Uno de los proveedores que crea Java desde el origen es Oracle. Esto implica dos

ca
distribuciones Java diferentes, que pueden ser muy confusas al principio.

lifi
OpenJDK es compilado por Oracle. Estas compilaciones son gratuitas y sin marca, pero
ua
Oracle no lanzará actualizaciones para versiones anteriores, por ejemplo para Java 15, tan

pronto como salga Java 16.


l.c

OracleJDK es una compilación comercial a partir del cambio de licencia en 2019. Lo que
ua

significa que se puede utilizar de forma gratuita durante el desarrollo, pero que deberemos
rt

pagar a Oracle si lo utilizamos en producción. Obtendremos un soporte más largo,


i

actualizaciones de versiones y un número de teléfono de soporte.


sv

Históricamente (anterior a Java 8) había diferencias de origen reales entre las compilaciones
pu

OpenJDK y las compilaciones oracleJDK, donde se podía decir que OracleJDK era "mejor". Pero
m

en la actualidad, ambas versiones son esencialmente las mismas, con diferencias menores.
ca

AdoptOpenJDK

En 2017, un grupo de usuarios, desarrolladores y proveedores de Java (Amazon, Microsoft,

Pivotal, Redhat y otros) iniciaron una comunidad, llamada AdoptOpenJDK.

Proporcionan compilaciones OpenJDK gratuitas y sólidas con disponibilidad y actualizaciones

más largas e incluso le ofrecen la elección de dos máquinas virtuales de Java diferentes:

HotSpot y OpenJ9.

campusvirtual.cualifica2.es
17 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Es muy recomendable si estamos buscando instalar Java.

Otras distribuciones

En el sitio OpenJDK Wikipedia encontraremos una lista completa de las compilaciones de

OpenJDK. Entre ellas se encuentran Azul Zulu, Amazon Corretto y SapMachine, entre otras.

Cada una con diferentes opciones de soporte y garantías de mantenimiento.

es
Qué versión de Java instalar

2.
En la actualidad, Java saca versiones cada seis meses. En general, para asegurarnos de utilizar los

ca
IDEs (entornos de desarrollo integrados), frameworks y herramientas de compilación más recientes

lifi
e iniciar un proyecto completamente nuevo, podemos utilizar una de las últimas versiones.
ua
Sin embargo, muchas empresas siguen ancladas en la versión 8 (la LTS vigente), y aplicaciones

como el servidor web GlassFish trabajando de forma conjunta con el IDE NetBeans, no funcionará a
l.c

no ser que le proporcionemos esta versión.


ua

Por suerte no hay problema en que varias versiones de Java convivan en el mismo equipo, de forma
que en el caso anterior, podríamos por ejemplo tener Java 16 para lanzar nuestras aplicaciones y
rt

Java 8 solamente para nuestro servidor GlassFish.


i

La Especificación de la Máquina Virtual Java la define como:


sv
pu

Una máquina imaginaria implementada mediante la emulación por software en una máquina real. El

código para la máquina virtual Java se almacena en archivos .class, cada uno de los cuales
m

contiene, al menos, el código para una clase pública.


ca

La especificación de la máquina virtual java proporciona las especificaciones de hardware

para las que se compila toda la tecnología java. Esta especificación permite al software en java ser

independiente de la plataforma ya que la compilación se hace para una máquina genérica conocida

como la máquina virtual java (JVM). Esta puede ser emulada por software para poder ser ejecutada

en los diferentes sistemas informáticos existentes, o bien ser implementada en hardware.

A partir del código fuente el compilador genera bytecodes. Estos bytecodes son instrucciones de

código máquina para la JVM. Cada intérprete de java tiene una implementación de la JVM.

campusvirtual.cualifica2.es
18 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

La especificación de la JVM proporciona definiciones muy concretas para la implementación de:

Conjunto de instrucciones (equivalente al de la CPU).

Registros del sistema.

Formato de los archivos de clase.

Pila.

Garbage-collected heap.

Área de memoria.

es
2.
Características de java

ca
Robusto:

lifi
Java realiza verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de
ua
ejecución. En tiempo de compilación no tiene ningún misterio porque todos los lenguajes realizan

esas verificaciones, sin embargo, en tiempo de ejecución, la JVM, que realiza la interpretación de los
l.c

bytecodes, detecta cuando existe algún problema en la ejecución del programa, y lanza excepciones
ua

que pueden ser recogidas por el programador con el propósito de recuperarse de dichos errores.
rt

Arquitectura neutral (multiplataforma):


i
sv

Gracias a que la compilación se realiza a un código objeto independiente de la arquitectura de la

máquina (bytecodes), tan solo necesitamos utilizar el intérprete adecuado para que nuestro
pu

programa funcione sobre cualquier plataforma. El lema de Sun es "escribir una vez, ejecutar en
m

cualquier parte".
ca

Seguro:

Como toda la ejecución la realiza la JVM, los programas Java pueden ser sometidos a muchas

comprobaciones antes de ejecutarse en la máquina. En concreto:

El código se pasa a través de un verificador de ByteCodes que comprueba el formato de los

fragmentos de código y detecta fragmentos de código ilegal (código que falsea punteros, viola

derechos de acceso sobre objetos, etc.).

El cargador de clases separa el espacio de nombres del sistema de ficheros local del de los

campusvirtual.cualifica2.es
19 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

recursos procedentes de la red. Esto limita cualquier aplicación del tipo Caballo de Troya, ya

que las clases se buscan primero entre las locales y luego entre las procedentes del exterior.

Respecto a la seguridad del código fuente, el propio JDK proporciona un desensamblador de

ByteCodes, que hace que cualquier programa pueda ser convertido a código fuente a partir de

sus bytecodes. Utilizando javap no se obtiene el código fuente original, aunque si desmonta el

programa mostrando su estructura. Este problema de seguridad del código fuente es algo

todavía pendiente de subsanar.

es
Portable:

2.
Más allá de la portabilidad básica por ser de arquitectura independiente, Java implementa otros

ca
estándares de portabilidad para facilitar el desarrollo.

lifi
Los enteros son de 32 bits en complemento a 2.
ua
Java construye sus interfaces de usuario a través de un sistema abstracto de ventanas de forma que
l.c

éstas puedan ser implantadas en entornos UNIX, Mac o Pc.


ua

Desarrollo con Java:


rt

Para poder desarrollar software con Java necesitamos una serie de herramientas que nos
i

proporciona Sun a través de su JDK (Java Development Kit).


sv
pu

Al igual que el lenguaje natural que utilizamos para comunicarnos, ya sea de forma oral o por

escrito, cualquier lenguaje de programación dispone de unos elementos y reglas que deben
m

conocerse a la hora de programar.


ca

Los elementos del lenguaje natural nos permiten designar cosas (nombres), expresar cualidades de

esas cosas (adjetivos), expresar acciones (verbos), etc.

Las reglas sintácticas (estructura) y semánticas (significado) permiten el entendimiento entre las

partes que forman la comunicación.

En los lenguajes de programación también encontramos unas reglas sintácticas que debemos

respetar a la hora de confeccionar los programas y una semántica encargada de resolver el

problema que queremos programar.

campusvirtual.cualifica2.es
20 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Elementos y reglas sintácticas de los lenguajes de programación:

Aunque todos los conceptos que aprenderemos a continuación aparecen en todos los lenguajes de

programación existen diferencias en la implementación en cada uno de ellos lo que obliga a un

estudio individual en cada uno de ellos.

Comentarios en los programas:

Un aspecto importante a la hora de confeccionar un programa es comentar lo más detalladamente

es
posible lo que significa cada una de las órdenes que forman parte del programa, con el propósito de

2.
poder recordar en un futuro la función que realiza cada una de ellas, y facilitar su estudio a personas

ajenas al programa.

ca
lifi
Identificadores:
ua
En todo lenguaje de programación surge la necesidad de utilizar una serie de elementos que

debemos designar con algún nombre, por ejemplo:


l.c

ELEMENTO DESCRIPCIÓN
ua

- Elementos utilizados para referenciar posiciones de memoria dónde podremos


Variables
almacenar datos necesarios para el programa.
- Elementos utilizados para referenciar posiciones de memoria dónde reside el código
rt

Funciones
del programa.
i

- Elementos que encapsulan variables (propiedades) y funciones (métodos) de manera


sv

Objetos que resulta más sencillo modelar los problemas que queremos resolver simplificando
el diseño de programas complejos.
pu

- Conforme avancemos iremos conociendo más elementos de los lenguajes de


etc.
programación.
m

A la hora de asignar nombre a todos estos elementos hay que seguir unas reglas.
ca

Tipos de datos básicos:

El modelo mental más sencillo que se puede tener de una aplicación informática es el de una caja

negra que recibe unos datos de entrada, los procesa y entrega unos datos de salida representados de

alguna manera.

Estos datos de entrada, los cuales deben ser albergados en memoria y referenciados mediante

alguna variable, pueden ser de diferente naturaleza (numéricos, alfanuméricos, etc.).

Cada lenguaje de programación dispone de unos tipos de datos básicos a los cuáles nos tenemos que

campusvirtual.cualifica2.es
21 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

amoldar a la hora de realizar el análisis de los datos que necesitamos en nuestra aplicación.

Variables:

Este elemento juega un papel muy importante en el programa porque es el mecanismo que pone a

nuestra disposición el lenguaje de programación para gestionar de una manera sencilla los datos de

la aplicación.

Al declarar una variable en el programa estamos reservando una zona de memoria para

es
posteriormente albergar un dato. Existen lenguajes que necesitan que especifiquemos el tipo de dato

2.
que se va a albergar (java) y otros que no lo necesitan (javascript).

ca
Al asignar un valor a la variable lo que estamos haciendo es almacenar el dato en la posición de

lifi
memoria que se reservó para dicha variable.
ua
En todo momento tenemos que tener presente que al usar la variable realmente estamos usando el

dato al que representa.


l.c

Operadores:
ua

Una de las primeras aplicaciones de los ordenadores fue el cálculo de matemático y, aunque ahora
rt

ha pasado a un segundo plano, los lenguajes de programación ofrecen una serie de elementos que
i
sv

permiten realizar operaciones con los datos.


pu

Estas operaciones no solo se limitan a operaciones aritméticas. Disponemos también de operaciones

lógicas, comparaciones, etc.


m

Sentencias de control:
ca

Sin embargo, la característica que confiere al ordenador su potencia es la capacidad de

procesamiento de la que dispone.

Aunque esto nos pueda asustar, el tipo de procesamiento que puede realizar es muy básico,

limitándose a:

Tomar decisiones sobre la ejecución o no de determinadas tareas en base al cumplimiento o no de

una o varias condiciones (sentencias de decisión). En dichas condiciones siempre estarán implicados

campusvirtual.cualifica2.es
22 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

datos (o si se quiere, sus representantes las variables).

Alterar el flujo de ejecución normal del código del programa (sentencias de salto o bucles). También

estas alteraciones estarán controladas por variables.

La combinación adecuada de este tipo de sentencias es la que definirá la estructura que resuelve un

determinado problema.

Almacenamiento de datos mediante Arrays:

es
Hemos visto el uso de variables como mecanismo básico para almacenar y acceder a datos en

2.
memoria. Sin embargo, en la mayoría de aplicaciones este tipo de almacenamiento de información se

ca
queda corto por ser demasiado simple y necesitamos a sistemas de almacenamiento más complejos

lifi
pero también más potentes.
ua
Uno de estos sistemas, que aparece en todos los lenguajes de programación, es el de los Arrays.

Excepciones:
l.c
ua

Todos los lenguajes de programación avisan de los errores que cometamos en tiempo de

compilación, pero pocos son los que han sido diseñados para seguir avisando de posibles errores en
rt

tiempo de ejecución. Las aplicaciones Java, gracias a que se ejecutan bajo la supervisión de la
i
sv

máquina virtual (JVM), están siendo controladas constantemente. En caso de que ocurra algún error

de ejecución, se lanza una excepción que puede ser recogida y tratada por el programador en su
pu

aplicación. De esta manera, lo que antes solía terminar en una ejecución anormal del programa, con

java puede ser resuelto.


m
ca

Objetos:

Java es un lenguaje de programación orientado a objetos. La importancia de este tema es tal que le

dedicamos el siguiente capítulo entero.

campusvirtual.cualifica2.es
23 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Clases.

Las diferentes tecnologías de programación se diferencian en la manera que ofrecen de estructurar

los datos y el código que forman una aplicación.

A la hora de plantear el análisis del problema que se quiere resolver por software, todas las

tecnologías han optado por dividir dicho problema en parte más pequeñas. La estrategia a seguir es

conseguir una estructura en la que cada una de esas partes realice una tarea única e indivisible,

es
coordinadas por una parte principal que obtiene la información de lo que hay que hacer de su

interacción con el usuario. En la actualidad esta interacción se realiza a través de un entorno gráfico

2.
y las órdenes se generan mediante eventos.

ca
En los lenguajes procedimentales, orientados a funciones, la estructura se realiza tomando como

lifi
referencia el código. Cada una de las partes se denomina subrutina, procedimiento o función
ua
dependiendo del lenguaje en el que nos encontremos, cada una se ejecuta teniendo solo en cuenta

los parámetros de entrada sin modificar nada externo a ella.


l.c

En los lenguajes imperativos, orientados a objetos, la estructura se realiza tomando como referencia
ua

los datos. Los datos se agrupan en función de su naturaleza en componentes denominados objetos.
rt

Para definir qué datos puede contener un objeto y sus acciones utilizamos plantilla que
i

denominamos clase la cual define sus propiedades (datos) y métodos (acciones).


sv

Un objeto, como en la vida real, posee una serie de propiedades. Por ejemplo digamos que
pu

queremos crear un sistema para almacenar y organizar expedientes urbanísticos de obra. En papel
m

un expediente contiene los datos de la persona e información relativa a su solicitud. Dicha persona
ca

puede tener asociados una serie de datos como:

Nombre

Apellidos

DNI

Dirección

Teléfono

.....

campusvirtual.cualifica2.es
24 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Mientras que el expediente en si también tiene varios datos:

Persona solicitante

Fecha presentacion

Fecha notificacion

Motivo

Tipo de obra

Dirección inmueble

es
Identificación catastral

2.
Aceptado/Denegado

ca
.....

lifi
Ademas se pueden realizar ciertas acciones que modifican dichos datos:
ua
Establecer fecha presentacion
l.c

Aceptar

Denegar
ua

......
i rt
sv

Para el diseño de un sistema debemos identificar los datos y agruparlos en objetos, también
pu

necesitamos identificar que acciones puede realizar un objeto y como afectan a otros. En este

ejemplo hemos partido de un conjunto de datos de un formulario para dividirlos en dos objetos cada
m

uno responsable de gestionar dichos datos. Como hemos comentado una clase define un objeto, en
ca

esta se indican el nombre de cada propiedad y de que tipo son como por ejemplo texto, numérico u

otro objeto como en este caso la persona solicitante. También se definen que acciones realiza y estas

pueden modificar los datos de dicha clase.

Comenzar Actividad

Arrastra las palabras de la columna Derecha en la columna Izquierda

campusvirtual.cualifica2.es
25 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

La estructura se realiza tomando como referencia los datos

arrastra...

La estructura se realiza tomando como referencia el código.

arrastra...

Se diferencian en la manera que ofrecen de estructurar los datos y el código que forman una
aplicación.

es
arrastra...

2.
ca
lifi
Los lenguajes imperativos
ua
Las diferentes tecnologías de programación
l.c

Los lenguajes procedimentales


ua
rt

Las diferentes tecnologías de programación se diferencian en la manera que


i
sv

ofrecen de estructurar los datos y el código que forman una aplicación. En los
lenguajes procedimentales, orientados a funciones, la estructura se realiza
tomando como referencia el código. Cada una de las partes se denomina
pu

subrutina, procedimiento o función dependiendo del lenguaje en el que nos


encontremos, cada una se ejecuta teniendo solo en cuenta los parámetros de
m

entrada sin modificar nada externo a ella. En los lenguajes imperativos,


orientados a objetos, la estructura se realiza tomando como referencia los datos.
ca

campusvirtual.cualifica2.es
26 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Creación de una clase.

En Java una clase se suele representar con la siguiente estructura:

public class NombreClase{


// Esto es un comentario
/*
Esto es un comentario con multiples lineas
*/
// Definición de propiedades --> Características del elemento que describimos con la clase.
public int propiedadPublica; //<- Puede acceder cualquiera

es
private int propiedadPrivada; //<- Solo puede la clase
protected int propiedadProtegida; //<- La clase y las que hereden de ella

2.
static int propiedadProtegida; //<- Propiedad estatica accesible por cualquiera
// Definición de los métodos --> Comportamiento y funcionalidades del elemento.

ca
public void hacerAlgo(){//<-funcion publica que devuelve nada
//codigo de la funcion

lifi
}
public int devuelveAlgo(){//<-funcion publica que devuelve un entero
return this.propiedadPrivada;//Devolvemos una propiedad
ua
}

}
l.c

Como se puede ver en Java las clases se definen con la palabra class seguido del nombre por la que
ua

queremos identificarla. Vamos a explicar una serie de palabras usadas junto a las propiedades y

métodos, estas controlan de qué manera se accede a la propiedad que acompañan:


i rt
sv

public: indica que la propiedad es accesible desde fuera, por ejemplo podemos acceder a

propiedades de un objeto desde los métodos de clase pero también desde fuera de la clase
pu

usando la variable del objeto y un punto, por ejemplo perro.colorPelo.


m

protected: esta está relacionada con la herencia de objetos, una clase que herede de otra
ca

puede acceder a esa propiedad pero no desde fuera de la clase padre.

private: las propiedades con private solo son accesibles desde la clase en la que se define, no

pueden acceder clases que heredan ni desde fuera.

static: es una propiedad compartida entre todos los objetos creados a partir de la clase,

además es accesible a través de la propia clase sin requerir un objeto. Se puede usar junto a

public, protected y private.

final: la propiedad no puede ser alterada, en el caso de un tipo primitivo el valor no puede

cambiar, en cambio si posee una referencia a un objeto este sí puede ser alterado pero no se

campusvirtual.cualifica2.es
27 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

permitirá que cambie la referencia a otro objeto. Se puede utilizar junto con public, protected y

private.

Un método o también llamado función se define de manera similar a las propiedades, tiene
limitaciones en el acceso e incluso puede ser static, según el valor u objeto que devuelvan se indica
con un nombre anterior al de la función, en caso de que no devuelvan nada se indica con void.
Hay que tener en cuenta de que la variable de un objeto no es el objeto en sí, sino una referencia, en

caso de que una función devuelva una propiedad privada con referencia a un objeto nos arriesgamos

de que más adelante el objeto pueda ser modificado y dichas modificaciones afecten de manera

es
inesperada al funcionamiento de otros componentes. Para evitar la modificación de un objeto

2.
referenciado por una propiedad privada se debe realizar una copia de dicho objeto y devolverlo, de

ca
esta manera cualquier modificación realizada fuera de la clase no interferirá.

lifi
ua
Indica si la siguiente afirmación es verdadera o falsa: "Un método o también
l.c

llamado función se define de manera contraria a las propiedades, tiene


limitaciones en el acceso e incluso puede ser static".
ua

Verdadero.
rt

Falso.
i
sv
pu

En la anterior página hemos hecho uso de datos primitivos y de tipos, en Java toda variable tiene
m

definido un tipo. Un tipo se puede entender como una identificación de que dato tiene la variable,

una variable puede hacer referencia a un objeto por lo que su tipo es el nombre de dicha clase. Sin
ca

embargo no hay solo objetos en Java, una variable también puede contener un valor de un tipo

concreto, a estos tipos los denominamos primitivos. Java incluye ocho tipos primitivos:

byte: es un número entero que en memoria ocupa 8 bits. Sus valores van de -128 a 127.

short: es un entero de 16 bits. Su valor mínimo es -32,768 y el máximo 32,767.

int: es un entero de 32 bits. Su valor mínimo es -2,147,483,648 y el máximo 2,147,483,647

(inclusive). Es el tipo más usado para números enteros a menos que haya una razón para usar

otro como por ejemplo el ahorro de memoria.

campusvirtual.cualifica2.es
28 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

long: es un entero de 64 bits. Su valor va de -9,223,372,036,854,775,808 a

9,223,372,036,854,775,807. Obviamente se utiliza cuando int no alcanza el valor que se

requiere.

float: es un dato en coma flotante y precisión simple. No entraremos en detalle sobre cómo

funciona pero se utiliza para almacenar valores decimales que no requieran gran precisión ya

que pueden devolver producir cierto grado de error en la parte decimal.

double: dato en coma flotante de 64 bits y precisión doble. Similar a float pero admite un

mayor rango de valores, es comúnmente utilizado al tratar con valores decimales.

es
boolean: solo tiene dos valores posibles true (verdadero) y false (falso).

2.
char: contiene un solo carácter Unicode de 16 bits.

ca
A Java se le considera un lenguaje fuertemente tipado ya que obliga a indicar el tipo de cada

lifi
variable, en el caso de otros lenguajes como PHP se pueden usar tipos pero no es obligatorio.
ua
Aunque puede suponer una carga de trabajo adicional según la situación el uso de tipos ayuda a la

prevención de errores.
l.c

En el siguiente ejemplo podemos ver un fichero en java completo que contiene la definición de una
ua

clase, la clase definida tiene el nombre Coche:


rt

import java.io.BufferedReader;
i
sv

import java.io.InputStreamReader;
import java.io.IOException;
pu

public class Coche {


private boolean estado = false;
private int velocidad = ;
m

public final static int VMAXIMA = 120;


ca

public static void menu() {

System.out.println("1.- Montar en el coche");


System.out.println("2.- Comenzar");
System.out.println("3.- Parar");
System.out.println("4.- Salir del coche");
System.out.println("");
System.out.println("Introduzca una opción");

public void montar() {


if (estado == false) {
System.out.println("Ya estás encima del coche.");
estado = true;

campusvirtual.cualifica2.es
29 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

} else {
System.out.println("Ya estabas arriba, no intentes subir otra vez.");

}
menu();
}

public void comenzar() {


if (estado == false) {
System.out.println("Primero sube al coche");
} else if (velocidad == VMAXIMA) {
System.out.println("Ya no puedes acelerar más");

} else {

es
++velocidad;
System.out.println("Velocidad actual= " + velocidad);
}

2.
menu();
}

ca
public void parar() {

lifi
if (velocidad == ) {
System.out.println("Si estás parado porque frenas");
} else {
ua
System.out.println("El frenado se realiza de golpe");
velocidad = ;
}
l.c

menu();

}
ua

public void salirCoche() {


if (estado == false) {
rt

System.out.println("No te has subido y ya te bajas");


} else if (velocidad != ) {
i

System.out.println("Primero frena y luego baja");


sv

} else {
System.out.println("Acabas de bajar del coche.");
pu

}
menu();
}
m

public int getVelocidad(){


ca

return this.velocidad;
}

public void setVelocidad(int v){


if(Coche.VMAXIMA > v){
this.velocidad = v;
} else{
this.velocidad = v;
}
}
}

Como se puede observar hay una propiedad llamada VMAXIMA establecida como pública, estática y

final esto quiere decir que puede ser accedida desde fuera de la clase, está compartida entre todas

campusvirtual.cualifica2.es
30 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

las instancias y que su valor es final, es decir no podrá ser modificado. Entendemos que la velocidad

máxima es el tope de velocidad que todas las instancias de Coche soportan. No nos interesa que se

supere la velocidad máxima establecida en el vehículo por lo que la declaramos privada y para

modificarla por cualquiera fuera de nuestra clase es necesario pasar por la función setVelocidad.

En la página anterior se ha hecho uso de la declaración import. Antes de nada expliquemos que es

un paquete en Java:

es
En Java un paquete se le conoce como un conjunto de clases y otros paquetes, estos siguen una

estructura jerárquica en carpetas. En la siguiente imagen se puede ver el directorio de un paquete

2.
llamado "ssh_tunnel" que a su vez contiene un paquete denominado "utils". Normalmente en un

ca
paquete se agrupan las clases de una misma aplicación, organización, sistema o que comparten una

serie de funciones similares.

lifi
ua
l.c
ua
i rt
sv
pu
m

Para hacer uso de clases en paquetes externos tenemos que hacer uso de su nombre en una

sentencia import o si es un uso puntual podemos usar el nombre del paquete seguido de la clase
ca

como se ve en el siguiente ejemplo:

frutas.citricos.Limon naranja = new frutas.citricos.Limon();//Usando el nombre completo


import frutas.citricos.Limon; //importamos la clase Limon
import frutas.citricos.*; //lo importamos todo

De las siguientes opciones, ¿Qué tipos primitivos corresponden a Java?

Tera.

campusvirtual.cualifica2.es
31 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Strong.

Byte.

Int.

es
2.
ca
lifi
ua
l.c
ua
irt
sv
pu
m
ca

campusvirtual.cualifica2.es
32 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Objetos.

En ingeniería de software, SOLID (Single responsibility, Open-closed, Liskov substitution,

Interface segregation and Dependency inversion) es un acrónimo mnemónico introducido por

Robert C. Martin a principios de la década de los 2000 que representan cinco principios básicos de

la programación orientada a objetos y el diseño. Cuando estos principios son aplicados como un

conjunto, es más probable que un desarrollador cree un sistema que a lo largo del tiempo sea fácil

de mantener y de ampliar.

es
Los principios SOLID son guías que podemos usar en el desarrollo de un software, que nos ayudará

2.
a eliminar el código sucio provocando que el programador tenga que refactorizar el código fuente

ca
hasta que sea legible. Debería de ser utilizado en el desarrollo guiado por pruebas o TDD, y además

lifi
forma parte de la estrategia global del desarrollo ágil de software y desarrollo adaptativo de

software.
ua
l.c

El principio de responsabilidad única indica que cada módulo o clase de contar con una
ua

responsabilidad sobre una sola parte de la funcionalidad por el software y esta responsabilidad debe
rt

estar encapsulada en su totalidad por la clase. Todos sus servicios deben estar estrechamente
i

alineados con esa responsabilidad. Robert C. Martin expresa dicho principio de la siguiente forma:
sv

Una clase debe tener solo una razón para cambiar.


pu

El principio de abierto/cerrado establece que «una entidad de software (clase, módulo, función, etc.)
m

debe quedarse abierta para su extensión, pero cerrada para su modificación». En otras palabras, se
ca

debe de poder ampliar el comportamiento de la entidad sin tener que modificar su código fuente.

abierto/cerrado es utilizado de dos maneras: las dos se basan en la herencia para poder resolver el

aparente dilema, pero tanto como sus objetos, técnicas y sus resultados son diferentes.

Principio de sustitución de Liskov es un principio de la programación orientada a objetos y puede

definirse como: Es posible usar como su padre cada clase que hereda de otra sin la necesidad de

conocer las diferencias entre ellas.

campusvirtual.cualifica2.es
33 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

En un lenguaje más formal: si S es un subtipo de T, entonces todos los objetos de tipo T en un

programa podrán ser sustituidos por objetos de tipo S (en otras palabras, los objetos de tipo S

pueden sustituir a los de tipo T), sin cambiar ninguna de las propiedades deseables del programa

(como pueda ser la corrección, la tarea que realiza, etc.)

De una manera más formal, el Principio de Sustitución de Liskov (LSP), define de manera particular

una relación de subtipificación, conocida como tipificación del comportamiento, la cual fue

introducida inicialmente por Barbara Liskov en una conferencia allá por el año 1987 llamada "LA

es
Abstracción de Datos y Jerarquía".

2.
ca
lifi
Está más referida a una relación de tipo semántico que a una de tipo sintáctico, ya que tan solo
ua
tiene la intención de garantizar la interoperabilidad semántica de tipos dentro de una jerarquía, los

tipos de objeto en particular. Jeannette Wing y Liskov crearon el principio de manera conjunta en un
l.c

artículo en 1994 que dicta lo siguiente:


ua
i rt
sv
pu

El principio de segregación de la interfaz (ISP, por sus siglas en inglés) establece que los clientes de

un programa dado solo deberían conocer de éste aquellos métodos que realmente usan, y no
m

aquellos que no necesitan usar. El ISP es aplicado a una interfaz amplia y compleja para así
ca

seccionarse en otras más pequeñas y específicas, de tal forma que el cliente use tan solo la que

necesite, pudiendo así ignorar al resto. A este tipo de interfaces reducidas se les llama "interfaces de

rol".

El ISP fue concebido para mantener a un sistema desacoplado de los otros sistemas de los que

depende, y que así resulte más fácil una refactorización, modificarlo y redesplegarlo. El ISP es uno

de los cinco principios S.O.L.I.D. del Diseño Orientado a Objetos, similar al Principio de Alta

Cohesión de GRASP.

campusvirtual.cualifica2.es
34 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

El principio de inversión de dependencias está compuesto por los siguientes dos puntos:

A: Los módulos de alto nivel no deberían depender de los de bajo nivel. Los dos deberían de

depender de las abstracciones.

B: Ninguna abstracción debería depender de ningún detalle. Son los propios detalles los que

deberían de depender de las abstracciones.

En el paradigma de la orientación a objetos, lo más normal es tener una jerarquía de objetos

es
definida, porque los objetos de más alto nivel son los que suelen incluir a los de bajo nivel.

2.
Un bosque contiene árboles, que a su vez contienen hojas, que contienen células…

ca
Por eso se eligió la palabra “inversión”, porque rompe con esta dinámica.

lifi
Los que en principio se pretende es que no exista una necesidad de dependencia entre unos módulos
ua
y otros, sino que dependan de abstracciones. De esta forma, nuestros módulos pueden ser más
l.c

fácilmente reutilizables.
ua

Como ya hemos visto un objeto es una representación abstracta compuesto por propiedades

también llamados atributos y una serie de métodos o funciones para manipular dichas propiedades.
i rt

Podemos considerar las Clases como plantillas de objetos, definen que propiedades tienen y sus
sv

métodos, instancia una clase da como resultado un nuevo objeto. En Java las propiedades de un
pu

objeto pueden ser de tipo primitivo o referencias a otros objetos, en cuanto a esto último

entendemos que un objeto puede estar compuesto por otros, por ejemplo una bicicleta está
m

compuesta por un pedal, manillar, ruedas etc. Cada objeto de una clase puede tener un valor propio
ca

en cada propiedad aunque comparten la misma funcionalidad, cada silla puede ser de un color

distinto pero el hecho de que sirve para sentarse no cambia.

Crear un objeto en Java es simple:

//Un coche rojo con cinco plazas


Coche miCoche = new Coche("rojo", 5);

Declaramos un variable con el nombre de la clase como tipo y la instancia con new. Al hacer esto

se reserva memoria para el objeto y la variable hace referencia a este, en el caso de realizar:

campusvirtual.cualifica2.es
35 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

//¿Estare copiando el objeto?


Coche miPropioCoche = miCoche;

Lo que hacemos es asignar el mismo objeto a las variables miCoche y miPropioCoche, cualquier

modificación como miCoche.setColor("azul") afectara a ambos. Si lo que queremos es una copia hay

algunas soluciones en bibliotecas de terceros pero lo más seguro es que el desarrollador implemente

su propia función para crear duplicados. Por ejemplo a través del método clone o un constructor

con un objeto de la misma clase como parámetro y copiar las primitivas, para propiedades que son

es
referencias a objetos también habría que duplicarlos:

2.
public class Coche{
//.....

ca
public Coche(Coche original){
this.color = original.color;

lifi
this.plazas = original.plazas;
//......
}
ua
public Coche clone(){
//Ya he creado un constructor de copia, me puedo ahorrar repetir el codigo
Coche nuevo = new Coche(this);
l.c

return nuevo;
}
ua
rt

A lo largo del módulo veremos el uso de objetos definidos por la clase String, esta es una clase
i

definida en Java y que permite almacenar y trabajar con cadenas de texto. La peculiaridad de esta
sv

clase es que no permite la modificación del texto que almacena, métodos como split crean un array
pu

con dos nuevas instancias de String cada una con una copia de un fragmento del texto original. Por

ello no hay porque preocuparse de generar copias de propiedades privadas de este objeto ya que por
m

diseño impide su alteración. El texto englobado por comillas dobles es considerado por el compilador
ca

de Java como un objeto String.

Si no estás familiarizado con el concepto de array en Java es un contenedor de objetos, es decir

almacena un número fijo de objetos de un tipo concreto. Su capacidad se define al ser creado:

Coche[] referenciaArray;

// memoria para 15 coches


referenciaArray = new Coche[15];

campusvirtual.cualifica2.es
36 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Comenzar Actividad

Arrastra las palabras de la columna Derecha en la columna Izquierda

Representación abstracta compuesto por propiedades también llamados atributos y una serie de
métodos o funciones.

arrastra...

es
Plantillas de objetos, definen que propiedades tienen y sus métodos, instancia una clase da como
resultado un nuevo objeto.

2.
arrastra...

ca
lifi
Es una clase definida en Java y que permite almacenar y trabajar con cadenas de texto.

arrastra...
ua
l.c
ua

Objeto
rt

Clase string
i
sv

Clases
pu
m

Un objeto es una representación abstracta compuesto por propiedades también


ca

llamados atributos y una serie de métodos o funciones para manipular dichas


propiedades. Podemos considerar las Clases como plantillas de objetos, definen
que propiedades tienen y sus métodos, instancia una clase da como resultado un
nuevo objeto. La clase string es una clase definida en Java y que permite
almacenar y trabajar con cadenas de texto. La peculiaridad de esta clase es que
no permite la modificación del texto que almacena, métodos como split crean un
array con dos nuevas instancias de String cada una con una copia de un
fragmento del texto original.

campusvirtual.cualifica2.es
37 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Ejemplo Práctico con Objetos.

A continuación mostraremos un ejemplo práctico de crear un programa básico en Java. Sera

necesario tener instalado algún kit de desarrollo de java, puede encontrarlo introduciendo en

cualquier buscador la palabra JDK (Java Development Kit). El JDK contiene las herramientas

necesarias para la compilación del código fuente y su ejecución. El compilador incluido esta

desarrollado para usarlo a través de una terminal, en este caso usaremos la consola de comandos de

Windows (CMD) y comando se denomina javac.

es
Asegúrese de descargar la versión apropiada del JDK para su procesador y sistema operativo,

2.
previamente aceptando los términos de la licencia. Una vez descargado la instalación se sigue como

ca
cualquier otro instalador.

lifi
ua
l.c
ua
irt
sv
pu

Como se ha explicado para la creación de un objeto necesitamos de una plantilla denominada clase.
m

Cada clase define que propiedades puede tener un objeto y sus métodos.
ca

A cada clase se le asigna un nombre para identificarla y utilizarla durante el desarrollo de una

aplicación, en el siguiente ejemplo tenemos la clase Factura, la creación de un objeto a partir de una

clase lo denominamos instanciación, todo objeto creado a partir de Factura lo llamaríamos instancia

de Factura.

Vamos a mostrar un ejemplo de clase y su utilización. Crearemos una nueva clase llamada Factura.

Una factura está compuesta por un nombre de titular, un concepto, un precio, el iva y el total de la

factura.

campusvirtual.cualifica2.es
38 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

public class Factura{


public String NombreTitular;
public String ConceptoFactura;
public double Precio;
public double Total;
public double Iva;

Acabamos de crearnos una clase en la que podemos almacenar una serie de datos primitivos en su

conjunto. Dicha clase contiene una serie de miembros que almacenará cada objeto creado a partir de

es
la clase Factura. En el ejemplo podemos observar variables de tipo String, String es una clase

incluida en Java para representar una cadena de texto, dicho texto es inmutable, es decir no se

2.
puede alterar, por ello la clase String implementa una serie de métodos para operaciones como la

ca
concatenación y división de texto que devuelven nuevas instancias.

lifi
ua
Indica si la siguiente afirmación es verdadera o falsa: "Para la creación de un
objeto necesitamos de una plantilla denominada clase. Cada clase define que
propiedades puede tener un objeto y sus métodos.".
l.c

Falso.
ua

Verdadero.
i rt
sv

Cada objeto Factura, es decir cada instancia de la clase, tiene su propia copia de las variables
pu

miembro. Como hemos mencionado las variables propias de una clase (propiedades) pueden ser de

tipos primitivos (boolean, int, long, double...) o referencias a objetos de otra clase (composición).
m
ca

En nuestro ejemplo, hemos creado cinco variables miembro de la clase factura, dichas variables

miembro son elementos que pertenecen a la clase Factura y solo pueden ser utilizadas por objetos

de la clase Factura. Cada Factura que creemos tendrá unos valores diferentes para cada miembro.

public class UtilizacionFactura{

public static void main(String[] args){


Factura f1 = new Factura();
f1.NombreTitular = "Adrian Ramos";
f1.ConceptoFactura = "IPad";
f1.Precio = 540;
f1.Iva = 30;

campusvirtual.cualifica2.es
39 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

f1.Total = 570

System.out.println("Datos de la factura numero 1");


System.out.println("Nombre Titular: " + f1.NombreTitular);

System.out.println("Concepto Factura: " + f1.ConceptoFactura);


System.out.println("Precio: " + f1.Precio);
System.out.println("Iva: " + f1.Iva);
System.out.println("Total: " + f1.Total);
System.out.println("-------------------------------------");

Factura f2 = new Factura();


f2.NombreTitular = "Lucia Serrano";

es
f2.ConceptoFactura = "PSP";
f2.Precio = 169;
f2.Iva = 15;

2.
f2.Total = 184;

ca
System.out.println("Datos de la factura numero 2");
System.out.println("Nombre Titular: " + f2.NombreTitular);

lifi
System.out.println("Concepto Factura: " + f2.ConceptoFactura);
System.out.println("Precio: " + f2.Precio);
System.out.println("Iva: " + f2.Iva);
ua
System.out.println("Total: " + f2.Total);
}
}
l.c

En este ejemplo mostramos otra clase denominada UtilizacionFactura, esta clase no se ha creado
ua

con el fin de crear objetos sino para la ejecución de código, que está contenido en el método main.
rt

Como podemos comprobar, cada objeto referenciado de la clase factura contiene unos datos
i

diferentes para cada elemento. Es decir, cada miembro de la instancia de Factura almacena unos
sv

datos diferentes en cada objeto.


pu

Para compilar el programa partimos de dos ficheros con extensión .java, es importante utilizar un
m

editor de texto plano como el Bloc de Notas o Notepad++. Cada fichero debe tener el nombre de la
ca

clase, en este ejemplo deben resultar como: Factura.java y UtilizacionFactura.java. Para mayor

facilidad las hemos creado en una carpeta en la unidad C:\, para compilar nuestro programa usamos

el comando javac:

campusvirtual.cualifica2.es
40 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Si lo has compilado te habrás dado cuenta de una pequeña errata en nuestro código, para ser

precisos en la línea 9 de UtilizacionFactura.java donde pone "f1.Total = 570" falta un punto y

coma al final:

es
En el comando mostrado compilamos todos los ficheros *.java de la carpeta dando como resultado

2.
ficheros .class que contienes el bytecode de cada clase, para ejecutar nuestro programa debemos

ca
utilizar el nombre de la clase que contiene la función main:

lifi
ua
l.c
ua
irt
sv

Como mencionamos cada objeto Factura tenía un contenido propio y este se ha imprimido
pu

(System.out.println) en la salida del programa.


m
ca

La clase denominada UtilizacionFactura no se ha creado con la finalidad de crear


objetos si no para _______________, que está contenido en un ____________.

Ejecutar un objeto.

Método byte.

Método main.

Ejecutar un código.

campusvirtual.cualifica2.es
41 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Ejemplo Práctico con Objetos II.

Para hacer referencia a los objetos que pertenecen a la clase sobre la que estamos escribiendo se

utiliza la palabra clave this. Dicha palabra hace referencia a cualquier elemento declarado en la

clase.

public class Factura


{
public String NombreTitular;

es
public String ConceptoFactura;
public double Precio;
public double Total;

2.
public double Iva;

ca
//CONSTRUCTOR DE FACTURA
public Factura()

lifi
{
//VAMOS A INICIALIZAR LOS MIEMBROS DE LA CLASE
this.NombreTitular = "sin titular";
ua
this.ConceptoFactura = "sin concepto";
this.Precio = 0.0;
this.Iva = 0.0;
l.c

this.Total = 0.0;
}
}
ua

Podemos observar un método con el mismo nombre que la clase Factura. Este método lo
rt

denominamos constructor y será llamado cada vez que se cree (instanciar) un objeto, su principal
i

función es asignar un valor a cada variable, eso puede incluir nuevas instancias de otras clases.
sv
pu

Si ahora utilizamos un objeto de la clase Factura, solamente instanciando un objeto, los valores

iniciales se han creado desde el constructor.


m
ca

public class UtilizacionFactura{


public static void main(String[] args)
{
Factura f1 = new Factura();

System.out.println("Datos de la factura CONSTRUIDA");


System.out.println("Nombre Titular: " + f1.NombreTitular);
System.out.println("Concepto Factura: " + f1.ConceptoFactura);
System.out.println("Precio: " + f1.Precio);
System.out.println("Iva: " + f1.Iva);
System.out.println("Total: " + f1.Total);
}

campusvirtual.cualifica2.es
42 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Como se puede observar la instanciación se realiza mediante la instrucción new seguido del nombre

de la clase y unos parámetros. En este caso el constructor no recibe ninguno. Como resultado de la

ejecución vemos los valores iniciales creados desde el constructor:

es
2.
ca
lifi
ua
l.c
ua
irt
sv
pu
m
ca

campusvirtual.cualifica2.es
43 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Interacción entre los elementos.

Los objetos intervienen en el comportamiento del sistema interaccionando con otros, por ejemplo en

un coche un objeto pedal interacciona con el objeto freno, esto se produce llamando a un método

público que ofrece el objeto pedal para llevar a cabo dicha acción, como resultado se produce una

reducción de velocidad en el objeto coche. A parte de definir objetos también estamos definiendo sus

relaciones, un objeto delega un trabajo a otro que puede ser parte suya u otro del sistema.

es
Como hemos visto en un objeto se pueden definir una serie de propiedades o métodos de acceso

público, ese conjunto lo denominamos parte publica o interfaz del objeto. Otros objetos no

2.
necesitan saber cómo los demás llevan a cabo sus operaciones, solo que la llamada a un método

ca
público produce un resultado.

lifi
ua
l.c
ua
irt
sv
pu
m
ca

Para el desarrollo de una aplicación que interaccione con el usuario la estrategia básica a seguir es

conseguir una estructura en la que cada una de las partes realice una tarea única e indivisible. Cada

componente estaría coordinado por uno principal que obtiene información a través de su interacción

con el usuario. En la actualidad esta interacción se realiza a través de un entorno gráfico y las

órdenes se generan mediante eventos.

Para el desarrollo de un sistema es importante decidir de antemano como interaccionan los objetos

además de sus datos y responsabilidades. Es buena idea tener en cuenta que para muchos casos ya

se han realizado soluciones que se consideran óptimas o las más apropiadas. Por ello nació el

campusvirtual.cualifica2.es
44 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

concepto de patrones de diseño software. Simplificando, un patrón describe un problema genérico y

su solución, un patrón no tiene por qué ser una solución fija pero ayuda a comprender como

organizar un sistema para que sus partes interaccionen de la mejor manera posible.

Como ejemplo tenemos en la siguiente imagen una representación el patrón de diseño Modelo-

Vista-Controlador o MVC, este patrón surge por la necesidad de separar los datos y la lógica de

negocio de interfaz del usuario. La clase que ocupa el rol de controlador recibe notificaciones de la

vista sobre su interacción con el usuario, como por ejemplo pulsar un botón determinado o la

es
introducción de texto. Cuando el controlador es notificado sobre una acción realiza cambios sobre el

2.
modelo, este se responsabiliza de guardar los datos y los cambios son enviados a la vista.

ca
lifi
ua
l.c
ua
irt
sv
pu
m

Por ejemplo podemos tener una pantalla con los datos de una persona y botones de Siguiente,
ca

Anterior y Guardar. La representación de los datos y la interacción con el usuario es llevado a cabo

por la vista. El usuario pulsa el botón siguiente y el controlador es avisado, entonces hace que la

siguiente bicicleta sea la seleccionada en el modelo y por tanto la vista es notificada con la nueva

información que será mostrada.

Indica si la siguiente afirmación es verdadera o falsa: " En un objeto se pueden


definir una serie de propiedades o métodos de acceso privado, ese conjunto lo
denominamos parte privada o interfaz del objeto.".

campusvirtual.cualifica2.es
45 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Verdadero.

Falso.

es
2.
ca
lifi
ua
l.c
ua
irt
sv
pu
m
ca

campusvirtual.cualifica2.es
46 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Ejemplo Interacción entre elementos.

Vamos a abrir un bloc de notas y escribiremos el código de nuestra primera clase.

Debemos recordar que Java es un lenguaje de programación "Case Sensitive", es decir, diferencia

entre mayúsculas y minúsculas, por lo que escribiremos literalmente el contenido de nuestro

primer ejemplo en el bloc de notas.

A continuación vamos a guardar cada fichero con nuestro bloc de notas con el nombre de la clase

es
seguido por la extensión ".java" en la ubicación que vayamos a probar nuestros ejemplos. Es

recomendable crearnos una carpeta para poder ubicar todas nuestras prácticas. Podemos utilizar

2.
cualquier otro editor de texto, pero es imprescindible que solo almacene texto plano, no nos valdrían

ca
editores de texto del estilo Word o WordPad, ya que almacenan más información además del texto

lifi
escrito, un ejemplo de estos editores puede ser UltraEdit o algún bloc de notas "free" que se

encuentran en internet y que tienen más características que el bloc de notas tradiciones de
ua
Windows.
l.c

Escritor.java:
ua

public class Escritor{


rt

//Parte privada
private String parteTexto1;
i

private String parteTexto2;


sv

private int veces;


private String escribir(){
//Si no hay otra variable que se llame igual this no es necesario
pu

//La clase String tiene un metodo estatico para producir un string a partir de otros tipos
String vecesString = String.valueOf(veces);
return parteTexto1 + veces + parteTexto2;
m

}
ca

//Parte publica, interfaz al exterior


public Escritor(){
this.parteTexto1 = "En un lugar de la mancha de cuyo nombre no quiero acordarme por ";
this.parteTexto2 = "ª vez";
this.veces = ;
}
//En este caso le enviamos al lector un texto a traves de uno de sus metodos
public void enviameTexto(Lector lector){
this.veces++;//Lo incrementamos
lector.enviar(this.escribir());
}
}

Lector.java:

campusvirtual.cualifica2.es
47 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

public class Lector{


public int num;

public void pedirAlEscritor(Escritor escritor){


escritor.enviameTexto(this);//Le pasamos el objeto en si
}

public void enviar(String texto){


System.out.println("Soy el lector nº" + String.valueOf(num) + " y he recibido " + texto);
}
}

Main.java:

es
2.
public class Main{
public static void main(String[] args){

ca
Lector lector1 = new Lector();
Lector lector2 = new Lector();

lifi
lector1.num = 1;
lector2.num = 2;
ua
Escritor cervantes = new Escritor();

lector1.pedirAlEscritor(cervantes);
l.c

lector2.pedirAlEscritor(cervantes);
lector1.pedirAlEscritor(cervantes);
ua

}
}
i rt
sv

Debemos asegurarnos que el nombre de nuestro fichero "java" debe tener el mismo nombre que
pu

nuestra clase, incluida la diferenciación de mayúsculas y minúsculas, en nuestro ejemplo tenemos

Main.java, Escritor.java y Lector.java.


m

Voy a crear una carpeta en la unidad C:\Ejemplo2 y almacenaré las prácticas en dicha ubicación.
ca

En el bloc de notas seleccionaremos como Tipo: "Todos los archivos" y escribiremos la extensión

".java" para nuestra primera clase.

Hemos compilado los ficheros con el comando "javac *.java", y a continuación lo ejecutamos con el

comando "java -cp . Main", ten en cuenta el nombre de la clase que contiene la función main

como aparece en la imagen:

campusvirtual.cualifica2.es
48 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Como podemos ver el objeto Escritor en su parte privada guarda el estado de cuantas veces le han

es
solicitado un texto y este responde en la respuesta mencionando que es la 1ª, 2ª y 3ª vez. El objeto

lector no conoce dicha parte privada y solo interesa la petición de texto que ofrece en su parte

2.
publica. En este caso el objeto escritor también conoce al lector, no usamos una función que

ca
devuelva el texto sino que llama a una función del objeto lector para responder.

lifi
Debido a la simplicidad de este ejemplo hemos usado un editor de texto simple, si se desea también

es posible utilizar un IDE (Integrated Development Environment), que aporta funciones como la
ua
corrección de sintaxis y la compilación y ejecución desde una interfaz gráfica. Ejemplos de IDEs
l.c

libres o gratuitos son Eclipse o Netbeans.


ua

NOTA: Podremos guardar las prácticas en cualquier ubicación, pero es conveniente guardarlas en

alguna "ruta" fácilmente accesible ya que posteriormente tendremos que escribir dicha ruta en
rt

nuestra ventana de comandos de Ms-Dos.


i
sv
pu
m
ca

campusvirtual.cualifica2.es
49 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

1Interfaces II.

Herencia
Antes de hablar de interfaces debemos hablar sobre el concepto de herencia en el paradigma de

orientación a objetos.

Imaginemos que tenemos las instrucciones para construir una silla concreta con unas características

es
y usos concretos, ahora supongamos que queremos crear una silla basada en el diseño original pero

2.
con algunos cambios, como por ejemplo unos reposa muñecas. Como no cobramos por horas no

vamos a escribir unas instrucciones desde cero ya que tenemos los de la silla original, simplemente

ca
copiamos las partes en común de las instrucciones originales y añadimos nuestra parte. Este es un

lifi
ejemplo sobre el concepto de herencia de objetos, tenemos definida una clase y queremos crear una

similar pero con ciertos cambios.


ua
Al heredar de una clase podemos usar los métodos y propiedades definidos como protected o
l.c

public por la clase padre. Desde fuera los objetos creados a partir de la clase hija tendrán serán
ua

como el padre excepto por lo que hallamos añadido o sobrescrito.


irt
sv
pu
m
ca

En este ejemplo consideramos que una "Silla de escritorio" es hija de "Silla común".

campusvirtual.cualifica2.es
50 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Ademas de heredar de una clase normal tenemos el concepto de clase abstracta, esto sería análogo

al concepto abstracto que tenemos de una silla. Las clases abstractas no pueden ser instanciadas

pero poseen una serie de propiedades y métodos comunes a clases que la usan como padre. También

es posible definir métodos abstractos, se escriben como cualquier otro método pero sin el bloque

de código englobado en corchetes. Toda clase que herede de otra con métodos abstractos debe

implementarlos.

Interfaces

es
2.
Ahora que conocemos sobre la herencia podemos hablar del concepto de interfaces.

ca
Un interface o interfaz en español es un conjunto de métodos abstractos y de propiedades finales

lifi
con la finalidad de definir el comportamiento de una clase. Podemos considerar una interfaz como

un "contrato" que debe seguir una clase.


ua
La diferencia entre una interfaz y una clase abstracta es que la interfaz solo define que se debe
l.c

implementar y propiedades constantes mientras que una clase abstracta puede implementar

métodos o definirlos abstractos, la similitud que tienen es que ambas no pueden instanciarse.
ua

Una clase solamente puede derivar/heredar mediante extend de una clase base, pero puede
rt

implementar varias interfaces. Los nombres de las interfaces se indican separados por coma después
i
sv

de la palabra implements.
pu

En Java una interfaz se define con la palabra interface seguido del nombre, también es posible que

una interfaz herede de otra o varias como lo haría una clase mediante extends:
m
ca

En este ejemplo creamos una interface con los métodos que queremos que se implementen.

public interface InterfazCoche extends Vehiculo{


int V_MAXIMA = 120;

public void montar();


void comenzar();
void bajar();
int verVMaxima();
void cambiarVMaxima(int VMAXIMA);
void bajar();
void usar() throws IOException;
void menu();
}

campusvirtual.cualifica2.es
51 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Como se puede ver solo utilizamos el modificador public en una de las funciones, en una interfaz

todo método es implícitamente público, de manera que se puede omitir. Además todas las

propiedades se consideran publicas, estaticas y constantes (public, static y final), de la misma

manera que las funciones, estas pueden ser omitidas.

Implementación de la interfaz

Si una clase quiere implementar una interfaz debe usar la palabra clave implements. Si queremos

es
heredar e implementar al mismo tiempo, debemos colocar primero extends seguido del nombre de la

2.
clase y a continuación implements seguido del nombre de la interfaz.

ca
Sintaxis:

lifi
public class Macarrones extends Pasta implements Alimento, Desechable,... {
ua
//Cuerpo de la clase
}
l.c

public abstract class Fruta implements Alimento{


//..............
}
ua

Si una clase implementa una interfaz podemos usar dicha interfaz como tipo en la variable de los
rt

objetos. Por ejemplo un objeto de Naranja que heredaría de Fruta (código anterior), puede ser
i

asignado a una variable con el tipo Alimento, dicha variable estaría limitada por las funciones y
sv

constantes definidas en la interfaz Alimento. Por ejemplo podemos tener una clase CestaCompra que
pu

contenga una lista del tipo Alimento, de esta manera podemos almacenar y usar objetos en base a

una interfaz aunque sean originalmente instancias de distintas clases.


m
ca

public class Naranja implements Alimento{


//..............
}

public class Galleta implements Alimento{


//..............
}

public class CestaCompra{


private ArrayList<Alimento> alimentos;
//......................

public void meter(Aliemento ali){


this.alimentos.add(ali);
}

campusvirtual.cualifica2.es
52 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Naranja naranja= new Naranja();

Alimento naranjaComoAlimento = naranja; //Desde esta variable se considera alimento


Alimento galleta = new Galleta();
Galleta otraGalleta = new Galleta();

CestaCompra cesta = new CestaCompra();


cesta.meter(naranja);
cesta.meter(galleta);
cesta.meter(otraGalleta);

es
2.
ca
Comenzar Actividad

lifi
Arrastra las palabras de la columna Derecha en la columna Izquierda
ua
Se escriben igual que los otros pero sin el bloque de código englobado en corchetes.
l.c

arrastra...
ua

No pueden ser instanciadas pero poseen una serie de propiedades y métodos comunes a otras que
la usan como padre.
rt

arrastra...
i
sv
pu

Es un conjunto de métodos abstractos y de propiedades finales con la finalidad de definir el


comportamiento de una clase.
m

arrastra...
ca

Métodos abstractos

Interfaces

Clases abstractas

campusvirtual.cualifica2.es
53 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Métodos abstractos: se escriben como cualquier otro método pero sin el bloque
de código englobado en corchetes. Toda clase que herede de otra con métodos
abstractos debe implementarlos.Las clases abstractas no pueden ser instanciadas
pero poseen una serie de propiedades y métodos comunes a clases que la usan
como padre. Un interface o interfaz en español es un conjunto de métodos
abstractos y de propiedades finales con la finalidad de definir el comportamiento
de una clase. Podemos considerar una interfaz como un "contrato" que debe
seguir una clase.

es
2.
ca
lifi
ua
l.c
ua
irt
sv
pu
m
ca

campusvirtual.cualifica2.es
54 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Peculiaridades de Java.

Como hemos visto Java sigue el paradigma de programación orientado a objetos, pero eso no

significa que pueda tener características de otros paradigmas como la programación funcional. Por

ejemplo en la versión 8 se introdujeron conceptos de programación funcional, dirigidos a

ofrecer mejores soluciones a la hora de tratar con grandes volúmenes de datos. Hay que tener en

cuenta que las nuevas características en el lenguaje son incompatibles con versiones anteriores de

la JVM.

es
2.
//Por ejemplo una función que suma uno a cada valor de una lista de enteros
public List<Integer> addOne(List<Integer> numbers) {

ca
return numbers
.stream()
.map(number -> number + 1)

lifi
.collect(Collectors.toList());
}
ua
l.c

Por otra parte antes de explicar el proceso de creación de un programa, conviene explicar que en

Java vamos a manejar tres tipos de aplicaciones:


ua
rt

Aplicación en modo texto: En este tipo de aplicaciones la interacción con el usuario (entrada de
i

datos y presentación de resultados) se realiza en modo texto (no existirán cajas de texto,
sv

botones,...). El ratón no tendrá uso en estas aplicaciones. Son las aplicaciones que realizaremos
pu

en el primer bloque donde nuestro objetivo será aprender los conceptos básicos de Java.

También es interesante cuando realizamos los prototipos de nuestros programas debido a que
m

la depuración es más sencilla.


ca

Aplicación en modo gráfico: En este tipo de aplicaciones la interacción con el usuario se realiza

en modo gráfico. Estas aplicaciones pueden ser de todo tipo y no hay que pensar sólo en

Internet:

Procesador de texto, bases de datos, entorno de programación, tratamiento de

gráficos...

campusvirtual.cualifica2.es
55 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Miniaplicaciones (applets): Pequeños programas que no pueden ejecutarse de forma

independiente sino que necesitan el soporte de un navegador. Estos programas están pensados

para que sean invocados desde una página HTML, viajen a través de la red y se ejecuten en la

máquina del cliente.

es
2.
ca
lifi
ua
l.c
ua
i rt
sv
pu
m
ca

campusvirtual.cualifica2.es
56 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Recuerda

[[[Elemento Multimedia]]]

es
2.
ca
lifi
ua
l.c
ua
irt
sv
pu
m
ca

campusvirtual.cualifica2.es
57 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Autoevaluación

Indica si el siguiente enunciado es verdadero o falso: Hoy en día el paradigma de


orientación a objetos es el más utilizado para el desarrollo.

Falso

es
Verdadero

2.
ca
Indica si el siguiente enunciado es verdadero o falso: Para llevar a cabo el
análisis con la programación orientada a objetos hay que tener en cuenta que los

lifi
programas se codifican pensando en funciones que interactúan.
ua
Falso
l.c
ua

Verdadero
rt

Indica si el siguiente enunciado es verdadero o falso: La estrategia a seguir es


i
sv

conseguir una estructura en la que cada una de esas partes realice una tarea
única e indivisible.
pu
m

Falso
ca

Verdadero

Indica si el siguiente enunciado es verdadero o falso: Al heredar de una clase


podemos acceder a sus propiedades y métodos privados.

Falso

campusvirtual.cualifica2.es
58 / 59
[AFO022366] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA (SECTOR: EMPRESAS DE CONSULTORÍA Y ESTUDIOS
DE ME(...)
[MOD016525] IFCT034PO DESARROLLO DE APLICACIONES CON JAVA
[UDI096114] PROGRAMACIÓN ORIENTADA A OBJETOS.

Verdadero

¿Pueden las clases abstractas ser instanciadas?

SI

es
NO

2.
ca
lifi
ua
l.c
ua
irt
sv
pu
m
ca

campusvirtual.cualifica2.es
59 / 59

También podría gustarte