PROGRAMACIÓN ORIENTADA A OBJETOScursos.iplacex.cl/CED/POO2008/S6/ME_6.pdf · 2020. 5. 28. ·...
Transcript of PROGRAMACIÓN ORIENTADA A OBJETOScursos.iplacex.cl/CED/POO2008/S6/ME_6.pdf · 2020. 5. 28. ·...
www.iplacex.cl
PROGRAMACIÓN ORIENTADA A OBJETOS UNIDAD Nº III
Herencia y Colecciones
www.iplacex.cl 2
INTRODUCCIÓN
La intencionalidad de este material, dice relación con proveer los conocimientos y estrategias
elementales para poder desafiar a un problema del mundo real, dispuesto a ser corregido
informáticamente. Establecer los objetos que podrían componer tal sistema. Referir con una
notación precisa el modelo a edificar y formalizar dicho modelo mediante un lenguaje de
programación.
SEMANA 6
www.iplacex.cl 3
IDEAS FUERZA
• Abstracción: En la orientación a objetos es factible partir los problemas en
subproblemas por medio de la abstracción.
• Modularización: En la orientación a objetos los elementos se pueden fraccionar
en cánones autónomos que agrupan elementos únicos extirpados del transcurso
de abstracción.
• Acoplamiento: representa el grado de problema que existe para ejecutar
reformas en la aplicación.
• Cohesión: Cuando nos referimos a un diseño de calidad, se atañe con al
número y la multiplicidad de labores de las que es garante una sola unidad de la
aplicación.
• Encapsulación: Cuando nos referimos a un diseño de calidad, uno de los
principales problemas es el uso de ámbitos públicos, por lo que los campos o
atributos nunca deben ser públicos.
www.iplacex.cl 4
Desarrollo
Organizando la Idea
Herencia y Polimorfismo
Para comprender los conceptos de herencia y polimorfismo, revisaremos primero lo
siguiente:
• Abstracción
• Modularización
• Acoplamiento
• Cohesión
• Encapsulamiento
Como vimos en la semana pasada un buen diseño orientado a objetos debe cumplir
con los diferentes conceptos de abstracción, cohesión, acoplamiento y encapsulación.
• Abstracción: En la orientación a objetos podemos dividir los problemas en
subproblemas mediante la abstracción.
• Modularización: En la orientación a objetos los elementos se pueden dividir en
módulos independientes que agrupan elementos únicos extraídos del proceso
de abstracción.
• Acoplamiento: Cuando nos referimos a un diseño de calidad, acoplamiento
representa el grado de dificultad que tenemos para realizar modificaciones en la
aplicación.
• Cohesión: Cuando nos referimos a un diseño de calidad, se relaciona con el
número y la diversidad de tareas de las que es responsable una sola unidad de
la aplicación.
www.iplacex.cl 5
• Encapsulación: Cuando nos referimos a un diseño de calidad, uno de los
principales problemas es el uso de ámbitos públicos, por lo que los campos o
atributos nunca deben ser públicos.
Uno de los temas a observar en el diseño orientado a objetos como disminuir la
dificultad de modificar, para esto hay que considerar diferentes aspectos en la
determinación de que clases, métodos y atributos realizar en la aplicación.
Encapsulamiento para reducir acoplamiento:
Responsabilidad única:
Localización de cambios:
www.iplacex.cl 6
Acoplamiento implícito:
Métodos:
Clases:
Legibilidad:
www.iplacex.cl 7
Reusabilidad:
Herencia:
En la programación se puede inferir a partir de objetos concretos una superclase que
tiene las características y comportamientos comunes de todos. La experiencia nos
indica que muchas veces cuando tenemos un conjunto de clases que nos permiten
solucionar un problema, de este conjunto de clases podemos extraer características y
comportamientos comunes que permiten conformar una superclase.
Si observamos figuras geométricas podemos encontrar ciertas similitudes, ¿Cuál crees
que serían cosas comunes entre cada figura?
www.iplacex.cl 8
Si observamos a cada figura el cuadrado tiene nombre, color, color de línea, ancho de
línea, lado, entre otras cosas, podríamos también determinar algunos métodos como es
mostrar nombre, dibujar, calcular perímetro y calcular área.
El triángulo por su parte tiene nombre, color, color de línea, ancho de línea, base y
altura, podríamos también determinar algunos métodos como es mostrar nombre,
dibujar, calcular perímetro y calcular área.
www.iplacex.cl 9
El Circulo por su parte tiene nombre, color, color de línea, ancho de línea, radio,
podríamos también determinar algunos métodos como es mostrar nombre, dibujar,
calcular perímetro y calcular área
Al observar las 3 figuras podemos notar que tienen características comunes como lo es
nombre, color, color Línea y ancho Línea.
www.iplacex.cl 10
Como también métodos comunes cuyas tareas hacen lo mismo, aunque nota que
dibujar, calcular perímetro y calcular área hacen tareas distintas en cada figura. Acá si
sabemos que el proceso que se genera de forma interna no es igual para todos,
entonces no debemos pasarlo a la superclase, pues su análisis es distinto y se abarca
de otra forma que no tiene que ver con la herencia.
Dado este análisis podemos determinar que existe un elemento más abstracto que es
la figura, que reúne las características y comportamientos comunes entre las otras
figuras Cuadrado, Triangulo y Circulo, en programación se dice que Cuadrado es una
Figura o Cuadrado es una subclase de Figura, al igual que Triangulo y Circulo.
www.iplacex.cl 11
También es común hacer un análisis léxico del diagrama y tratamos de determinar la
relación “es un tipo de”, es decir en este caso, si podemos afirmar que un círculo “es un
tipo de” figura, entonces tendremos una pista más, respecto a la calidad de nuestro
modelo.
La estructura de la clase padre es la misma que
cualquier clase tiene los atributos, constructores y
métodos.
www.iplacex.cl 12
Cuando necesitamos implementar la herencia por código lo hacemos utilizando la
palabra extends, de esta forma todo lo que habíamos definido en la superclase
(atributos, métodos y constructores) se hereda hacia la clase de nivel inferior. Recuerda
que cuando se hereda sólo se hace desde una clase, es decir no se puede
implementar herencia múltiple.
En el ejemplo
anterior, la clase
Cuadrado hereda
toda la estructura
de la superclase
Figura.
Fíjate en la imagen
que sigue, a veces
la clase subclase
debe de invocar al
constructor de la
superclase, esta
invocación se hace
obligatoria si la superclase contiene un constructor que tiene parámetros. Para hacer la
invocación, del constructor de la superclase, se hace usando la palabra super(). En los
dos casos que están destacados, se invoca primero a un constructor sin parámetros y
luego a un constructor con parámetros, ambos de la superclase.
www.iplacex.cl 13
Si te fijas los atributos nombre, color, color de línea
y ancho de línea, no tienen que repetirse en la clase
cuadrado como también el método del padre
mostrar nombre.
www.iplacex.cl 14
Polimorfismo
Para ejemplificar como es el polimorfismo, vamos a realizar unos ejercicios con un
diagrama de clases que posee polimorfismo.
Un diagrama de clases es una forma gráfica de representar la estructura de un sistema,
con orientación a objetos. De esta manera, podrás observar las clases que tendrá el
sistema, su contenido y sus relaciones con otras clases, antes de comenzar a
programarlo.
www.iplacex.cl 15
Un piano es un tipo de instrumento musical, una guitarra también es un tipo de
instrumento musical, entonces podemos decir que piano y guitarra heredan de
instrumento.
Cuando realizamos la definición de “instrumento” nos podemos encontrar con las
características básicas de él, como el largo y ancho, pero respecto a su
comportamiento como personajes que no somos expertos en música, nos encontramos
que cada instrumento tiene diferentes formas de tocar, por lo que salen diferentes
melodías de él, es por esto que el método tocar es ABSTRACTO, si lo decimos de una
manera más coloquial, ABSTRACTO sería algo que es difícil de entender porque se
encuentra en un estado de esquema, falta el código de él, pero hay otra cosa particular
que tiene, si el método es abstracto o incompleto, podemos decir que la clase también
es incompleta por lo que en JAVA se debe declarar la clase también como abstracta si
posee al menos un método abstracto.
www.iplacex.cl 16
Si esto lo observamos en el diagrama de clases de BlueJ nos encontramos que la clase
instrumento ahora dice <<abstract>>.
Recuerda ir compilando tu proyecto para que quede sin las líneas diagonales en tu
clase y puedas comprobar si tu código está bien.
Pasemos a la clase Piano, al indicarle que la clase piano hereda de instrumento, nos
aparece un error que es común cuando utilizamos alguna clase abstracta, si lo
describimos de manera simple, la clase concreta Piano tiene que completar lo que tiene
incompleto la clase instrumento, que en este caso es el método tocar.
www.iplacex.cl 17
Al agregar el código que le falta, la clase piano deja de tener errores y podemos
codificar una salida con System.out.println, para que muestre Piano tocando.
Al compilar ahora tenemos que la clase piano tiene una flecha hacia arriba cuya punta
es blanca sin completar, este símbolo representa la herencia.
www.iplacex.cl 18
De manera similar completamos el código de Guitarra.
Ahora a probar nuestros instrumentos, para hacerlo, construiremos un programa que
llamaremos AppInstrumento, aquí creamos un piano y lo asignamos al instrumento 1,
creamos una guitarra y los asignamos al instrumento 2.
www.iplacex.cl 19
Podrás ver que tu diagrama queda en esta forma, luego de compilar el código.
www.iplacex.cl 20
CONCLUSIÓN
La experiencia de la Programación orientada a objetos, resulta ser muy positiva en un
paradigma de programación, pues no resulta más difícil para el estudiante, que la
programación estructurada. Esto, es posible gracias a una serie de factores
motivadores tales como que el estudiante pueda aprender un lenguaje que se emplea
en la industria, utilice una versión de herramienta profesional y logre sentirse
especialmente motivado por el propio paradigma.
www.iplacex.cl 21