Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diremos que dos o más clases tienen una relación de asociación cuando una de
ellas tenga que requerir o utilizar alguno de los otros atributos o métodos de las
otras clases.
Fuente: http://www.ciberaula.com/articulo/uml
8.2. Agregación
Es una relación que se derivó de la asociación, por ser igualmente estructural, es
decir, que contiene un atributo que en todos los casos será una colección, es decir,
un Array, Vector, entre otros, además indica que una clase es parte de otra clase.
Los componentes pueden ser compartidos por varios compuestos (de la misma
asociación de agregación o de varias asociaciones de agregación distintas). La
destrucción del compuesto no conlleva la destrucción de los componentes.
8.3. Composición
Es una relación estructural, pero se le suma un método de destrucción de los
objetos.
Composición es una forma fuerte de composición donde la vida de la clase
contenida debe coincidir con la vida de la clase contenedor. Los componentes
constituyen una parte del objeto compuesto. De esta forma, los componentes no
pueden ser compartidos por varios objetos compuestos. La supresión del objeto
compuesto conlleva la supresión de los componentes.
Tabla 4
Para comprender de una mejor manera cómo se comporta o trabaja esta clase, es
necesario darle sentido a la frase que va a contener a la agregación “Usa un”.
Código
Composición
Código
Es una relación de uso entre dos clases (una usa a la otra). Esta relación es las más
básica entre clases y comparada con los demás tipos de relación, la más débil.
Representación UML
Se representa con una flecha discontinua que parte desde una clase y apunta a
otra. El sentido de la flecha nos indica quién usa a quién.
Una clase A usa una clase B cuando no contiene atributos de la clase B pero, o bien
utiliza alguna instancia de la clase B como parámetro en alguno de sus métodos
para realizar una operación, o bien accede a sus atributos (clases con métodos
amigos).
En la práctica este tipo de relación se interpreta como que la Persona hace uso de
la Cédula ya sea instanciándola directamente, o bien, recibiéndola como parámetro
de entrada en uno de sus métodos.
Modelamiento e implementación
Supongamos lo siguiente:
Clase Cedula
Clase Persona
Figura 20. Implementación de la clase Persona.
En funcionamiento
Recursos complementarios
* Video sobre los tipos de relaciones entre clases.
https://www.youtube.com/watch?v=6oXZSnaAxEg
https://es.coursera.org/lecture/introduccion-programacion-java/asociaciones-22Ub9
Bibliografía
Berzal, F. (28 de octubre de 2004). Relaciones entre clases: Diagramas de clases
UML. Obtenido de https://elvex.ugr.es/decsai/java/pdf/3C-Relaciones.pdf
Garro, A. (15 de abril de 2014). Capítulo 17. Otras relaciones entre objetos.
Obtenido de https://www.arkaitzgarro.com/java/capitulo-17.html
Páez, N., Ferretti, N., Yolis, E., Roca, P., Waitoller, I., & Degiovaninni, M. (25 de
marzo de 2010). Guía de ejercicios. Obtenido de
http://materias.fi.uba.ar/7507/content/20101/GuiaEjercicios7507F.pdf
Autoevaluación
1. La figura representa:
A. Composición.
B. Asociación.
C. Agregación.
2. La figura representa:
A. Asociación unidireccional.
A. Composición.
B. Agregación.
C. Dependencia.
4. La figura representa:
A. Composición.
B. Asociación simple.
C. Herencia simple.
A. Cualquiera.
B. 0.1 o 1. n
C. 0.1 o 1
A. Agregación.
B. Dependencia.
C. Composición.
A. Polimorfismo.
B. Multiplicidad simple.
C. Agregación.
9. La figura representa:
A. Asociación unidireccional.
B. Dependencia.
C. Asociación.
10. En el caso Persona -> Cerebro, ¿de qué tipo de asociación se trata?
A. Composición.
B. Agregación.
C. Herencia.
Segundo Parcial
0%
9.1.5. Modelado
9.1.6. Implementación
9.1.1. Herencia
La herencia es específica de la programación orientada a objetos, donde una clase
nueva se crea a partir de una clase existente. La herencia (a la que habitualmente
se denomina subclase) proviene del hecho de que la subclase (la nueva clase
creada) contiene los atributos y métodos de la clase primaria. La principal ventaja de
la herencia es la capacidad para definir atributos y métodos nuevos para la
subclase, que luego se aplican a los atributos y métodos heredados.
Fuente:
https://www.google.com/url?sa=i&source=images&cd=&ved=2ahUKEwi_3MHWq4DkAhUOxVkKHaoZ
BnsQjRx6BAgBEAQ
&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dz2Se29mcocw&psig=AOvVaw3CzwJ
VoD7MnHgYwo9V9gGw&ust=1565802677029754
Ventajas
Nomenclatura
Visibilidad
Reglas
La herencia simple consiste en que una clase hereda a una clase hijo, y a solo una
le hereda sus atributos. Es igual al concepto general de herencia, con la limitante de
solo poder heredar de una clase padre a una clase hijo, y solo a una clase hijo.
Figura 2. Herencia.
Fuente: https://rua.ua.es/dspace/bitstream/10045/15995/1/POO-3-Herencia-10-11.pdf
Ejemplo
Figura 3. Herencia.
Fuente: https://rua.ua.es/dspace/bitstream/10045/15995/1/POO-3-Herencia-10-11.pdf
Refinamiento
Esto implica que la clase derivada aplica una política de refinamiento: añadir
comportamiento al constructor de la clase base.
Figura 4. Herencia.
Fuente: https://rua.ua.es/dspace/bitstream/10045/15995/1/POO-3-Herencia-10-11.pdf
Herencia múltiple
Fuente: https://rua.ua.es/dspace/bitstream/10045/15995/1/POO-3-Herencia-10-11.pdf
Nota
Las dudas con los constructores aparecen ligadas a las jerarquías de clases y a la
palabra super(). Supongamos que tenemos la siguiente jerarquía:
Figura 6. Java constructores y super().
Fuente: https://www.arquitecturajava.com/wp-content/uploads/herencia.png
En este caso podemos tener dos clases con el siguiente código por simplificar al
máximo:
Figuras 7 y 8. Java constructores y super().
Fuente: https://www.arquitecturajava.com/java-constructores-y-super/
Como podemos ver, todos los constructores llaman por defecto al constructor de la
clase superior a través de una llamada a super() (en este caso al constructor por
defecto). Esto es debido a que los constructores no se heredan entre jerarquías de
clases; por lo tanto, la palabra super() siempre es la primera línea de un constructor
e invoca al constructor de la clase superior que comparta el mismo tipo de
parametrización.
Figura 9. Java constructores y super().
Fuente: https://www.arquitecturajava.com/wp-content/uploads/super.png
Aunque nosotros no pongamos la palabra super() esta siempre será añadida salvo
que nosotros la añadamos. Por ejemplo, si nuestros constructores tienen
parámetros, las cláusulas super que deberemos construir serán las siguientes entre
Persona y Deportista para que el código compile:
Figuras 10 y 11. Java constructores y super().
Fuente: https://www.arquitecturajava.com/java-constructores-y-super/
this ()
Fuente: https://www.arquitecturajava.com/java-constructores-y-super/
9.1.5. Modelado
Dentro de UML se representa a la herencia con una flecha que va desde el hijo
hacia el padre, como se puede ver en el siguiente ejemplo:
Figura 13. Análisis y diseño orientado a objetos parte 2 de 2.
Fuente:
https://maritzacondori.wordpress.com/2016/04/23/analisis-y-diseno-orientado-a-objetos-parte-2-de-2/
Donde se puede ver que tanto CANINO como FELINO al ser hijos, su relación de
herencia (en este caso con el método rugir), se ve expresada con una flecha que
sale desde ellos y termina en el padre que es la clase Animal.
9.1.6. Implementación
Aquí se puede ver un ejemplo sobre la base del diagrama anterior.
Para que un código sea fácil de cambiar, se debe tener en cuenta: que las clases y
los métodos sean pequeños y tengan una única responsabilidad, que las clases
tengan una API concisa y clara, que las clases y los métodos sean predecibles y
trabajen como lo esperado, un código fácil de testear y tenga pruebas unitarias, que
los test sean fáciles de entender y cambiar, etc.
Fuente:
http://meridadesignblog.com/solid-principios-de-programacion-orientada-a-objetos-principio-de-la-res
ponsabilidad-unica/
Este principio trata de destinar cada clase a una finalidad sencilla y concreta. En
muchas ocasiones estamos tentados a poner un método reutilizable que no tiene
nada que ver con la clase, simplemente porque lo utiliza y nos pilla más a mano. El
problema surge cuando tenemos la necesidad de utilizar ese mismo método desde
otra clase. Si no se refactoriza en ese momento y se crea una clase destinada para
la finalidad del método, nos toparemos a largo plazo con que las clases realizan
tareas que no deberían ser de su responsabilidad.
Con la anterior mentalidad nos encontraremos, por ejemplo, con un algoritmo de
formateo de números en una clase destinada a leer de la base de datos porque fue
el primer sitio donde se empezó a utilizar. Esto conlleva a tener métodos difíciles de
detectar y encontrar, de manera que el código hay que tenerlo memorizado en la
cabeza.
Ejemplo
Modo incorrecto
Modo correcto
Figuras 18 y 19. Clase Paciente y Enfermedad implementadas correctamente.
O - Abierto/Cerrado (Open/Closed)
Principio atribuido a Bertrand Meyer quien habla de crear clases extensibles sin
necesidad de entrar al código fuente a modificarlo. Es decir, el diseño debe ser
abierto para poderse extender pero cerrado para poderse modificar. Lo complicado
es predecir por dónde se debe extender y que no tengamos que modificarlo.
Ejemplo
Modo incorrecto
Modo correcto
Figuras 22,23 y 24. Clase Libro implementada correctamente, métodos sobrescritos.
Este principio fue creado por Barbara Liskov y habla de la importancia de crear
todas las clases derivadas para que también puedan ser tratadas como la propia
clase base. Cuando creamos clases derivadas debemos asegurarnos de no
reimplementar métodos que hagan que los métodos de la clase base no
funcionasen si se tratasen como un objeto de esa clase base.
Ejemplo
Modo incorrecto
Figuras 25 y 26. Clase Empleado y clase EmpleadoSalarioFijo implementadas incorrectamente.
Modo correcto
Figuras 27, 28 y 29. Clase Empleado y clase EmpleadoSalarioFijo implementadas correctamente,
interface Salario.
Este principio fue formulado por Robert C. Martin. Cuando se definen interfaces
estos deben ser específicos a una finalidad concreta. Por ello, si tenemos que definir
una serie de métodos abstractos que debe utilizar una clase a través de interfaces,
es preferible tener muchos interfaces que definan pocos métodos que tener una
interface con muchos métodos.
Ejemplo
Modo incorrecto
Figuras 30, 31 y 32. Interface Producto, clase Zapatos y clase Chaqueta implementadas
incorrectamente.
Modo correcto
Figuras 33 y 34. Implementación de interfaces, implementación de las clases Zapatos y Chaqueta.
Un código limpio debería cumplir con la regla DRY (Don't Repeat Yourself, o No Te
Repitas). Cuando se aplica correctamente el principio DRY, la modificación de un
único elemento del sistema no requiere cambios en otros elementos que no tengan
relación lógica.
Ejemplo
Modo incorrecto
Figuras 35, 36 y 37. Clases CajaServicio, Sala y TarjetaCredito implementadas incorrectamente.
Modo correcto
Figuras 38. , interface MetodoPago y clase TarjetaCredito.
mypackage, com.company.application.ui
2. Los nombres que representan tipos deben ser sustantivos y escribirse con
mayúsculas y minúsculas, iniciando con mayúscula.
Line, AudioSystem
line, audioSystem
MAX_ITERATIONS, COLOR_RED
5. Los nombres que representan métodos deben ser verbos y escribirse con
mayúsculas y minúsculas iniciando con minúscula.
getName(), computeTotalWidth()
Utilizar todo en mayúsculas para el nombre base entraría en conflicto con las
convenciones anteriores. Una variable de este tipo debería nombrarse dVD, hTML,
etc., lo cual obviamente no es legible. Otro problema se ilustra en el ejemplo
anterior. Cuando el nombre se conecta a otro, se reduce seriamente la legibilidad.
La palabra a continuación del acrónimo no queda como debería.
Fuente: http://www.decodigo.com/2013/04/mejores-practicas.html
Fuente: http://www.decodigo.com/2013/04/mejores-practicas.html
Para hacer una clase inmutable se puede definir su constructor de forma privada y
luego crear un método estático para inicializar al objeto y devolverlo.
Fuente: http://www.decodigo.com/2013/04/mejores-practicas.html
Siempre que sea posible trata de usar tipos primitivos en lugar de las clases
Wrapper
Las clases Wrapper son buenas, pero también son lentas. Los tipos primitivos son
como clases, sin embargo, las clases wrapper almacenan la información completa
acerca de una clase. Algunas veces un programador puede agregar un error en el
código usando una wrapper por un descuido. Por ejemplo:
Figura 43. Uso de clases Wrapper.
Fuente: http://www.decodigo.com/2013/04/mejores-practicas.html
Recursos complementarios
* Imagen sobre cómo la herencia se presenta, en qué condiciones y qué ocasiona
http://www.it.uc3m.es/java/git-gisc/units/oo-herencia/slides/ProgramacionOrientadaAObjetos.pdf
https://www.youtube.com/watch?v=LZPafq9Ve_Q
* Video sobre las características del principio SOLID para un código limpio
https://www.youtube.com/watch?v=lOg2IuQIp-s
* Enlace sobre las diez mejores prácticas en Java para crear un código entendible
http://www.decodigo.com/2013/04/mejores-practicas.html
https://dosideas.com/noticias/desarrollo-de-software/965-las-9-cualidades-del-codigo
-limpio
Biblografía
Novoseltseva, E. (19 de diciembre de 2017). Código limpio: Concepto, beneficios &
libros. Obtenido de
https://apiumhub.com/es/tech-blog-barcelona/codigo-limpio-concepto-beneficios-libr
os/
Rubira, J. (14 de julio de 2011). Solid, cinco principios básicos de diseño de clases.
Obtenido de
https://www.genbeta.com/desarrollo/solid-cinco-principios-basicos-de-diseno-de-clas
es
Autoevaluación
1. El principio de responsabilidad simple se refiere a:
A. exportHtmlSource ();
B. openDvDPlayer ();
C. openDVDPlayer ();
A. Robert C. Martin.
B. Rubira Jans.
C. Bertrand Meyer.
A. Hacerla inmodificable.
B. Hacerla modificable.
A. Object.
B. Wrapper.
C. Rapper.
A. Crear todas las clases derivadas para acceder a todos los atributos.
B. Crear todas las clases derivadas para que puedan tratarse como la clase base.
A. audiosystem.
B. audioBot.
C. audiOSystem.
Segundo Parcial
0%
0%
Gestión de defectos
10.1. Definición
10.2. Verificación y validación
10.2.1. Verificación
10.2.2. Validación
10.3. Pruebas vs. depuración
10.3.1. Pruebas
10.3.2. Depuración
10.4. Pruebas de unidad
10.4.1. Instalación de JUNIT
10.4.2. El proyecto
10.4.3. El código
10.4.4. Paquete de prueba
10.4.5. JUnit
Ejemplo
Recursos complementarios
Bibliografía
Autoevaluación
10.1. Definición
El testing es una actividad desarrollada para evaluar la calidad del producto y para
mejorarlo al identificar defectos y problemas.
Fuente: Ian Sommerville. Software engineering (5th ed.). Addison Wesley Longman Publishing
Como sugiere la figura 1, un sistema complejo suele testearse en varias etapas que
por lo general se ejecutan siguiendo una estrategia bottom-up, aunque el proceso
general es iterativo. Se debe volver a las fases anteriores cada vez que se
encuentra un error en la fase que está siendo ejecutada.
10.2.1. Verificación
¿Estamos construyendo el producto correctamente?
10.2.2. Validación
¿Estamos construyendo el producto concreto?
En la figura 1 se muestra el lugar que ocupan las inspecciones y las pruebas dentro
del proceso de desarrollo de software. Las flechas indican las fases del proceso en
las que se utilizan las técnicas. Las inspecciones de software se pueden utilizar en
todas las etapas del proceso, mientras que las técnicas de prueba solo cuando está
disponible un prototipo o código ejecutable.
Fuente:
https://www.ctr.unican.es/asignaturas/Ingenieria_Software_4_F/Doc/M7_09_VerificacionValidacion-A2
011.pdf
10.3.2. Depuración
10.3.1. Pruebas
Las pruebas que se aplican al programa son de diversa índole y generalmente
dependen del tipo de problema que se está resolviendo. Comúnmente se inicia la
prueba de un programa introduciendo datos válidos, inválidos e incongruentes y
observando cómo reacciona en cada ocasión.
● La lógica del programa está bien, pero hay errores sencillos, los cuales los
corregimos eliminando o modificando algunas instrucciones o incluyendo
nuevas.
● Hay errores ocasionados por fallas en la lógica, lo que nos obliga a regresar a
las fases de Diseño y Codificación para revisión y modificación del diagrama.
● Hay errores muy graves y lo más aconsejable es que regresemos a la fase 2
para analizar nuevamente el problema y repetir todo el proceso.
● No hay errores y los resultados son los esperados. En este caso, guardamos
el programa permanentemente en un medio de almacenamiento.
Fuente:
https://www.ctr.unican.es/asignaturas/Ingenieria_Software_4_F/Doc/M7_09_VerificacionValidacion-20
11.pdf
Fuente: https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
10.4.3. El código
El código que probaremos, lo estudiamos en un post anterior [LINK] donde
realizamos una prueba manual del algoritmo. El algoritmo corresponde al problema
de detectar el número mayor dados tres números.
Figura 8. Molde pseudocódigo.
Fuente: https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
Fuente: https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
Fuente: https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
Fuente: https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
10.4.5. JUnit
Antes de realizar la prueba con JUnit, debemos estudiar un poco el código
generado. En la parte inferior de la clase MiClaseTest encontramos el siguiente
método:
Fuente: https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
Donde:
1) @Test: Los métodos marcados con esta anotación, le indican a JUnit que es
código que queremos que se ejecute. Son estos métodos donde se implementa el
código de pruebas.
6) assertEquals: Es uno de varios métodos con los que cuenta JUnit. Este método
en particular compara si dos objetos son iguales, de no ser así, lanzará una
excepción y la prueba se detiene.
Fuente: https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
Figura 15. Métodos de testeos.
Fuente: https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
Para ejecutar el test con JUnit, damos clic derecho sobre la clase MiClaseTest.java
-> run file
Fuente https://www.jc-mouse.net/java/ejemplo-de-pruebas-unitarias-en-java
Ejemplo
Realice una calculadora básica y haga todos los test de prueba necesarios para
tener una cobertura del 100 % del programa.
Creamos clases de los objetos que existan. En este caso creamos una clase (figura
17) del objeto principal, un número.
Figura 17. Clase Número.
Una vez creados los métodos, vamos a testearlos con ayuda de jUnit como se ve en
las figuras 19 y 20.
Recursos complementarios
* Video sobre el funcionamiento el uso jUnit
https://www.youtube.com/watch?v=fyPfiEXt5i8
* Material de apoyo
Autoevaluación
1. El testing permite:
B. Corregir los errores del sistema operativo, con la finalidad de evitar daños en el
sistema.
C. El uso y la confirmación.
A. Hay errores muy graves y lo más aconsejable es que regresemos a la fase 2 para
analizar nuevamente el problema, y repetir todo el proceso.
C. Análisis de requerimientos.
Segundo Parcial
0Encapsulamiento
11.1. Definición
11.2. Clases internas
11.3. Paquetes
Recursos complementarios
Bibliografía
Autoevaluación
11.1. Definición
La encapsulación es un mecanismo que consiste en organizar datos y métodos de
una estructura, conciliando el modo en que el objeto se implementa, es decir,
evitando el acceso a datos por cualquier otro medio distinto a los especificados; por
lo tanto, la encapsulación garantiza la integridad de los datos que contiene un
objeto.
Figura 1. Destilación y encapsulamiento.
Fuente:
https://www.researchgate.net/figure/228773129_fig30_Figura-38-Destilacion-y-encapsulamiento
Encapsulamiento significa que los datos y las acciones se combinan en una sola
entidad (es decir, un objeto de la clase) y se ocultan los detalles de la
implementación. La programación orientada a objetos (POO) encapsula datos
(atributos) y métodos (comportamientos) en objetos. Los objetos tienen la propiedad
de ocultación de la información. Esta propiedad significa que, aunque los objetos
pueden conocer cómo comunicarse unos con otros a través de interfaces bien
definidas, no pueden conocer cómo están implementados otros objetos (los detalles
de la implementación están ocultos dentro de los propios objetos).
Esta es una situación muy frecuente del mundo real. Es posible conducir con
eficacia un automóvil sin conocer los detalles internos de cómo funciona el motor, el
tren de engranajes o el sistema de frenos. En Java se tiene un gran control sobre el
encapsulamiento de una clase y un objeto. Se consigue aplicando modificadores a
clases, variables de instancia y de clases, y métodos. Algunos de estos
modificadores se refieren al concepto de paquete, que se puede considerar
básicamente como un grupo de clases asociadas.
Modificadores
● Clases
● Variables
● Métodos
1. Modificadores de clase
2. Modificadores de variables
Normalmente es una buena idea imponer tanto encapsulamiento como sea posible.
En consecuencia, debe ocultarse todo lo que se pueda, excepto lo que se desea
hacer visible a otras clases, en cuyo caso se debe permitir la cantidad mínima de
visibilidad.
Nota
3. Modificadores de métodos
Una clase que no se anida dentro de otra se denomina clase de nivel superior. Esto
significa que prácticamente todas las clases utilizadas hasta ahora son clases de
nivel superior.
Las clases internas se definen dentro del ámbito de una clase externa (o de nivel
superior). Estas clases internas se pueden definir dentro de un bloque de sentencias
o (anónimamente) dentro de una expresión.
Figura 7. sambayredes.
Fuente:
http://sambayredes.pbworks.com/w/page/127511381/04_4%20Clases%20internas%20y%20herencia
%20en%20las%20clases
Ejemplos
La clase Empleado tiene dos clases internas que representan una dirección y un
sueldo. El código fuente de la clase Empleado y sus dos clases internas Dirección y
Sueldo son:
Figura 8. Clases Internas.
Las clases internas no se pueden utilizar fuera del ámbito. Por consiguiente, las
clases externas de la clase Empleado no pueden acceder a la clase interna (a
menos que sean subclases o estén en el mismo paquete, dependiendo de la
visibilidad en la definición de la clase).
En la práctica, la clase de nivel superior actúa como un paquete de objetos que
contiene cero o más clases internas. Esto es particularmente útil en desarrollo de
software orientado a objetos. Por otra parte, la capacidad para definir un código
determinado que se puede crear y pasar donde se necesite es muy importante.
● Estáticas Internas
● Clase Interna Miembro
● Clases Internas de Método
● Clases Internas Anónimas
Estáticas Internas
● Se declaran igual que una clase normal, con la diferencia de que le añadimos
la palabra reservada "static" a la clase.
ClaseExterna.ClaseEstaticaInterna nombre=new
ClaseExterna.ClaseEstaticaInterna();
class ClaseInterna{};
● Para acceder a métodos y atributos de esta clase interna desde la clase
externa deberemos de instanciar la clase Interna.
ClaseExterna.ClaseEstaticaInterna nombre=new
ClaseExterna.ClaseEstaticaInterna();
● Siempre debe ser una subclase de otra clase ya existente o bien implementar
alguna interfaz.
11.3. Paquetes
Los paquetes son una forma de organizar grupos de clases. Un paquete contiene un
conjunto de clases relacionadas bien por finalidad, por ámbito o por herencia.
Los paquetes resuelven el problema del conflicto entre los nombres de las clases. Al
crecer el número de clases crece la probabilidad de designar con el mismo nombre
a dos clases diferentes.
Las clases tienen ciertos privilegios de acceso a los miembros dato y a las funciones
miembro de otras clases dentro de un mismo paquete. En el Entorno Integrado de
Desarrollo (IDE) JBuilder de Borland, un proyecto nuevo se crea en un subdirectorio
que tiene el nombre del proyecto. A continuación, se crea la aplicación, un archivo
.java que contiene el código de una clase cuyo nombre es el mismo que el del
archivo. Se pueden agregar nuevas clases al proyecto, todas ellas contenidas en
archivos .java situadas en el mismo subdirectorio. La primera sentencia que
encontramos en el código fuente de las distintas clases que forman el proyecto es
package o el nombre del paquete.
Fuente:
http://lenguajejava.com/producto/acceso-al-curso-de-fundamentos-de-programacion-orientada-a-objet
os-con-java/
Para crear un objeto fuente de la clase Font podemos seguir dos alternativas
1. import java.awt.Font;
import java.awt.*;
//...
}
Panel es una clase que está en el paquete java.awt, y Serializable es una interface
que está en el paquete java.io (2).
Paquete Descripción
Declaración de un paquete
Los nombres de los paquetes deben ser únicos para asegurar que no haya
conflictos de nombres. Java impone un convenio de nombres por el que un nombre
de paquete se construye por un número de componentes separados por un punto
(separador). Estos componentes corresponden a la posición de los archivos.
En el caso siguiente,
Observe que esto supone que todos los archivos asociados con un único paquete
están en el mismo directorio. Cualquier número de archivos se puede convertir en
parte de un paquete, sin embargo, un archivo solo se puede especificar en un único
paquete.
Nota
Recursos complementarios
* Enlaces para reforzar los contenidos analizados
http://cs.uns.edu.ar/~smd/IPOO/downloads/Teorias%20y%20Apuntes/Apunte/Cap%
204%20Encapsulamiento%20y%20Abstraccion.pdf.
http://odin.fi-b.unam.mx/salac/practicasPOO/P05-POO-Encapsulamiento.pdf
https://www.neumoytoraxpanama.org/cloud/resources/documentos/encapsulamiento
-informtica.pdf
https://www.youtube.com/watch?v=RciACIsXTic
Bibliografía
Joyanes, L. (s.f). Java 2. Manual de Programación. Madrid, España: Osborne
McGraw-Hill.
Autoevaluación
1. Un encapsulamiento es:
2. Un paquete es:
3. Java.applet contiene:
A. Clases para crear una aplicación GUI independiente de la plataforma.
B. Clases necesarias para crear applets que se ejecutan en la ventana del navegador.
4. Java.lang contiene:
B. Clases necesarias para crear applets que se ejecutan en la ventana del navegador.
5. Java.awt contiene:
B. Clases necesarias para crear applets que se ejecutan en la ventana del navegador.
6. Java.net:
B. Se usa en combinación con las clases del paquete java.io para leer y escribir datos
en la red.
7. Java.io contiene:
8. Java.util contiene:
Segundo Parcial
0%
0%
Polimorfismo
12.1. Definición y ventajas
12.2. Sobrecarga de métodos
12.3. Sobrecarga escritura de métodos
12.3.1. Conceptos relacionados
Recursos complementarios
Bibliografía
Autoevaluación
Polimorfismo quiere decir "un objeto y muchas formas". Esta propiedad permite que
un objeto presente diferentes comportamientos en función del contexto en que se
encuentre. Por ejemplo, un método puede presentar diferentes implementaciones en
función de los argumentos que recibe, recibir diferentes números de parámetros
para realizar una misma operación y realizar diferentes acciones dependiendo del
nivel de abstracción en que sea llamado.
Figura 1. Tipos de polimorfismo.
Fuente: http://mapaches.itz.edu.mx/~mbarajas/pooisc/poo6.pdf
Ventajas
Las ventajas del polimorfismo son evidentes, pero hay una importante limitación: el
tipo de la referencia (clase abstracta, clase base o interface) limita los métodos que
se pueden utilizar y las variables miembro a las que se pueden acceder.
Tipos de polimorfismo
Figura 2. Tipos de polimorfismo.
Fuente:
https://img-17.ccm2.net/5SQA8xe_1ML1o78keIH88ZCnf8I=/349x/24b04c1ad9174a11a882c852107a9
a0b/ccm-encyclopedia/poo-images-polymorphisme.gif
● Polimorfismo de sobrecarga.
Ocurre cuando las funciones del mismo nombre existen, con función similar, en
clases que son completamente independientes unas de otras.
Fuente: http://mapaches.itz.edu.mx/~mbarajas/pooisc/poo6.pdf
● Polimorfismo paramétrico
Capacidad para definir varias funciones utilizando el mismo nombre, pero usando
parámetros diferentes (nombre y/o tipo). El polimorfismo paramétrico selecciona
automáticamente el método correcto a aplicar en función del tipo de datos pasados
en el parámetro.
Fuente: http://mapaches.itz.edu.mx/~mbarajas/pooisc/poo6.pdf
● Polimorfismo de subtipado
Fuente: http://mapaches.itz.edu.mx/~mbarajas/pooisc/poo6.pdf
Fuente: http://aularagon.catedu.es/materialesaularagon2013/POO-Tecnologia/M3/Modul
o3Herencia-SobreescrituraMetodos.jpg
Ejemplo
Herencia
Una clase se dice que hereda o extiende a otra clase antecesora. La palabra
reservada extends sirve para indicar que una clase extiende a otra. La clase que
extiende a otra hereda todos los atributos y métodos de la clase antecesora que no
sean privados (private). La clase antecesora puede extender a su vez otra clase.
● Sobreescritura
Ejemplo
http://www.itnuevolaredo.edu.mx/takeyas/Apuntes/POO/Apuntes/04.-Polimorfismo.pdf?fbclid=IwAR3
Ck4Jc44plJizDf32VrITmdH34YaQRbuzsXfQytaM4fAUupicWffpWQdA
Bibliografía
Área de Programación y Desarrollo. (17 de julio de 2011). Métodos. Cursos de
iniciación a C. Obtenido de
http://www.mundonet.es/metodos-sobrecarga-de-metodos-argumentos-pasados-por-
valor-y-por-referencia-metodos-static.html?Pg=Entrega6.htm
Belmonte Fernández, O. (2005). Introducción al lenguaje de programación Java.
Una guía básica. Academia.
Autoevaluación
1. ¿Cuál es un tipo de polimorfismo?
A. Sobrecarga.
B. Overflow.
C. Sobrecargado.
A. Polimorfismo paramétrico.
B. Polimorfismo de sobrecarga.
C. Polimorfismo de subtipado.
A. Sobrecarga.
B. Sobreescritura.
5. El polimorfismo permite:
C. Método y variables.
A. Heredado.
B. Configuración y heredado.
C. Destordamiento.
8. El polimorfismo ad hoc se divide en:
A. Heredado.
B. Destordamiento.
C. Configuración y heredado.
C. Desde la mitad.
10. ¿Qué método nos permite redefinir un método que heredamos para que
este funcione de acuerdo con nuestras necesidades y no a lo definido en la
superclase?
A. Sobreescritura.
B. Sobrecarga.
Segundo Parcial
0%
0%
Abstracción, interfaces de programación
13.1. ¿Qué es abstracción?
13.1.1. Sintaxis de un método y una clase abstracta
13.1.2. Ventajas de la abstracción
13.1.3. Modelado de la abstracción
13.2. ¿Qué es la interfaz?
13.2.1. Sintaxis de una interfaz
13.2.2. Ventajas de la interfaz
13.2.3. Modelado de la interfaz
13.2.4. Ejercicio con una interfaz
13.2.5. Resumen de una interfaz
Recursos complementarios
Bibliografía
Autoevaluación
Clase abstracta
● Una clase abstracta es aquella que contiene métodos, pero al menos uno de
ellos debe ser abstracto, es decir, no tiene cuerpo y su implementación está
en otra clase. (Martin Sierra, 2008)
● No puede instanciar objetos.
● Se utiliza solo como superclases.
● Sirve para proporcionar una superclase apropiada a partir de la cual heredan
otras clases.
Método abstracto
Es un método sin cuerpo. El método abstracto nunca será definitivo porque la clase
abstracta debe implementar todos los métodos abstractos. (SlideShare, 2012).
//otros método
Ejemplo
Se requiere modelar con clases y métodos abstractos un ser vivo y sus métodos
serán lo más generales posibles, en este caso se desea modelar la función de
alimentación de los seres vivos.
Figura 14. Aviso por sobre escritura en el método de la superclase desde una clase hija. Autoría
Propia.
Figura 15. Corrección de aviso por sobreescritura en el método de la superclase desde una clase
hija.
De la misma forma se implementan los demás métodos abstractos de las clases que
hereden de la superclase.
Creamos una clase principal donde instanciaremos nuestros objetos:
Figura 16. Clase principal.
Corrida
Obra publicada con Licencia Creative Commons Reconocimiento No comercial Compartir igual 4.0
13.2. ¿Qué es la interfaz?
Según Martin Sierra (2008), la sintaxis para una interfaz se define mediante la
palabra interface, utilizando la siguiente sintaxis:
//otros métodos
Ejemplo
void rotar ( );
String serializar();
//otros métodos
Para el método imprimir declarado en la interface Impresión, se crea otra clase que
lo contenga.
Figura 24. Implementación de la clase imprimir.
Tabla 1
Recursos complementarios
https://www.abrirllave.com/java/clases-abstractas.php
https://elvex.ugr.es/decsai/java/pdf/AC-interfaces.pdf
https://mariocelis.com/java/clases-abstractas/
http://picarcodigo.blogspot.com/2012/10/interfaces.html
Bibliografía
Autoevaluación
1. ¿Qué es abstracción?
A. Interfaz.
B. Interface.
A. Abstract.
Segundo Parcial
0%
0%
Bibliotecas Widget
Fuente: https://www.ntu.edu.sg/home/ehchua/programming/java/J4a_GUI.html
Fuente: https://guru99.es/java-swing-gui/
● JButton
A continuación, esta clase de Java puede instanciar la variable JButton dentro del
método constructor como se muestra a continuación:
Fuente: https://www.javatpoint.com/java-jbutton
JTextField
Fuente: https://www.javatpoint.com/java-jtextfield
JLabel
Un Label o etiqueta puede mostrar texto plano, una imagen o una imagen con un
texto. A continuación, se muestra cómo se crea un JLabel.
JPanel
Fuente: https://jagonzalez.org/mostrar-y-ocultar-jpanel-en-java/
14.2. Formularios
Fuente: https://uh-tis.blogspot.com/2012/07/curso-de-java-como-hacer-un-proyecto-un.html
Ahora se podrá ver en la ventana "Projects" que el formulario fue creado; sin
embargo, se puede observar que automáticamente el IDE Netbeans abre el
formulario creado en la ventana central.
Fuente: https://uh-tis.blogspot.com/2012/07/curso-de-java-como-hacer-un-proyecto-un.html
Fuente: https://uh-tis.blogspot.com/2012/07/curso-de-java-como-hacer-un-proyecto-un.html
Fuente: https://uh-tis.blogspot.com/2012/07/curso-de-java-como-hacer-un-proyecto-un.html
Luego de colocar todos los elementos que se dese al formulario, se tendrá
algo como lo siguiente:
Fuente: https://uh-tis.blogspot.com/2012/07/curso-de-java-como-hacer-un-proyecto-un.html
Fuente: https://uh-tis.blogspot.com/2012/07/curso-de-java-como-hacer-un-proyecto-un.html
Fuente: https://uh-tis.blogspot.com/2012/07/curso-de-java-como-hacer-un-proyecto-un.html
Fuente: https://uh-tis.blogspot.com/2012/07/curso-de-java-como-hacer-un-proyecto-un.html
Ejemplo de aplicación
6. Una vez creados los formularios, crearemos una clase llamada Estudiante
en el paquete principal. En esta clase, crearemos el objeto de tipo Estudiante
que quedará de la siguiente manera (se recuerda al estudiante agregar los
métodos getter y setter).
7. Para este ejemplo, se creará una clase llamada Alumnado que tendrá las
siguientes características:
Figura 23. Clase Alumnado.
Menús
● JMenuBar
● JMenu
● JMenuItem
● JCheckBoxMenuItem
● JRadioButtonMenuItem
Las barras de menús se pueden contemplar como una estructura que soporta
menús.
Una ventana (frame) solo puede tener una barra de menús (objeto ), que
MenuBar
Fuente: https://www.fdi.ucm.es/profesor/jpavon/poo/Tema6resumido.pdf
Ejemplo
Figura 33. Ejemplo de menú.
Fuente: https://www.fdi.ucm.es/profesor/jpavon/poo/Tema6resumido.pdf
Código
Fuente: https://www.fdi.ucm.es/profesor/jpavon/poo/Tema6resumido.pdf
Figuras 35. Ejemplo de menú en código para Java.
Fuente: https://www.fdi.ucm.es/profesor/jpavon/poo/Tema6resumido.pdf
Tablas
Las tablas son uno de los elementos más utilizados dentro de cualquier
lenguaje de programación, se las puede utilizar para desplegar una lista de
datos similares ordenados de una forma específica. Su uso es amplio pues es
bastante versátil.
Tablas en Java
● Inicios
En principio se creó la clase Jtable para constituir una interfaz ligada a bases
de datos a través de "Java Database Connectivity" (JDBC), y así evita la
complejidad que existía para el manejo de datos, dando así al programador
mucha más facilidad a la hora de trabajar con este tipo de información.
● Edición
Recuperado de:
https://4.bp.blogspot.com/-SmpM_g9F9hg/VGISuyI-PII/AAAAAAAADdU/sK1FxWrv3gQ/s1600/J
Table001.png
● Implementación
Cuando el usuario interactúa sobre los diversos componentes del awt, estos
generan eventos. La siguiente tabla muestra los eventos que cada tipo de
componente puede generar y cuándo los genera.
Tabla 1
Componentes de interacción
KeyEvent
El usuario pulsa o suelta una
tecla.
MouseEvent
El usuario selecciona o
ItemEvent deselecciona un elemento de
la lista.
Fuente: http://arquimedes.matem.unam.mx/pasados/java_profundizacion/index4.htm
Para facilitar la tarea del programador se ha creado una serie de interfaces que
deben implementarse cuando se quieren procesar algunos de estos eventos.
La siguiente tabla presenta estas interfaces con sus métodos.
Tabla 2
Interfaces
Interfaz Métodos
ActionListener actionPerformed(ActionEvent)
AdjustmentListener adjustmentValueChanged(AdjustementEvent)
ComponentListener componentHidden(ComponentEvent)
componentMoved(ComponentEvent)
componentResized(ComponentEvent)
componentShown(ComponentEvent)
ContainerListener componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
FocusListener focusGained(FocusEvent)
focusLost(FocusEvent)
ItemListener itemStateChanged(ItemEvent)
KeyListener keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
MouseListener mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
MouseMotionListener mouseDragged(MouseEvent)
mouseMoved(MouseEvent)
TextListener textValueChanged(TextEvent)
WindowListener windowActivated(WindowEvent)
windowClosed(WindowEvent)
windowClosing(WindowEvent)
windowDeactivated(WindowEvent)
windowDeiconified(WindowEvent)
windowIconified(WindowEvent)
windowOpened(WindowEvent)
Fuente: http://arquimedes.matem.unam.mx/pasados/java_profundizacion/index4.htm
Recursos complementarios
* Video sobre la creación de una ventana en Java por medio de código (se
recomienda ver los videos consecutivos al siguiente)
https://www.youtube.com/watch?v=RF7Ko3AgRf8
* Video sobre cómo crear una ventana en Java por medio de las opciones del
IDE NetBeans (se recomienda ver los videos consecutivos al siguiente para
aprender cómo añadir componentes a una ventana de una forma más practica)
https://www.youtube.com/watch?v=inKumOh1QUw
* Enlace sobre todas las librerías de Java así como los paquetes y las clases
existentes, además de sus métodos asociados
https://docs.oracle.com/javase/7/docs/api/
* Video sobre cómo crear menús paso a paso dentro de Java (se recomienda
tomar el video como base para la realización de futuros proyectos)
https://www.youtube.com/watch?v=STCR-_bLDH4
* Enlace sobre los casos que pueden generar los eventos dentro de la interfaz
gráfica de Java
http://arquimedes.matem.unam.mx/pasados/java_profundizacion/index4.htm
Bibliografía
Guru99. (s.f.). Tutorial de Java Swing: ejemplos para crear GUI. Obtenido de
https://guru99.es/java-swing-gui/
Autoevaluación
1. Uno de los objetivos de los Widgets es:
A. Tabla.
B. Panel.
C. Campo de texto.
4. ¿Qué método permite habilitar o deshabilitar un JTextField?
A. JMenuItem.
B. JItem.
C. JItemMenu.
B. JTable.
C. JFrame.
B. Botones de JTable.
A. ComponentEvent.
B. ItemEvent.
C. MouseEvent.