Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Polimorfismo
Programación
Orientada a
Objetos
1
¿Qué es la Abstracción?
La abstracción es uno La abstracción es la acción o efecto de abstraer o abstraerse (RAE, 2018) y
de los principios más siguiendo con la Real Academia española, abstraerse, es
importantes en la “Separar por medio de una operación intelectual un rasgo o una cualidad d
ingeniería de software e algo para analizarlos aisladamente o considerarlos en su pura esencia o
orientada a objetos y
está estrechamente
noción” (RAE, 2018).
relacionada con varios
otros conceptos La abstracción es el acto de representar características esenciales sin incluir
importantes, como la los detalles o explicaciones de fondo. En el dominio de la informática y la
encapsulación, la ingeniería de software, el principio de abstracción se utiliza para reducir la
herencia y el
polimorfismo.
complejidad y permitir un diseño e implementación eficientes de sistemas
de software complejos.
La abstracción se
aplica en el proceso de Algunas áreas de diseño e implementación de software donde se aplica el
identificación de principio de abstracción incluyen lenguajes de programación
artefactos de software
(objetos) para modelar
(principalmente en lenguajes de programación orientados a objetos),
el dominio del lenguajes de especificación, abstracción de control, abstracción de datos y
problema. Es el la arquitectura de los sistemas de software.
proceso de reducir
estos objetos a su Más precisamente se puede decir que la abstracción es la calidad de tratar
esencia de tal manera
con ideas en lugar de hechos. Por ejemplo, cuando considera el caso del
que solo se
representan los correo electrónico, detalles complejos como lo que sucede tan pronto como
elementos necesarios. envía un correo electrónico, el protocolo que utiliza su servidor de correo
La abstracción define electrónico está oculto para el usuario. Por lo tanto, para enviar un correo
un objeto en términos electrónico, solo necesita escribir el contenido, mencionar la dirección del
de sus propiedades,
destinatario y hacer clic en enviar.
funcionalidad e
interfaz (medios de
comunicación con Del mismo modo, en la programación orientada a objetos, la abstracción es
otros objetos) un proceso de ocultar los detalles de la implementación al usuario, solo se
(Techopedia, 2018). le proporcionará la funcionalidad. En otras palabras, el usuario tendrá la
información sobre lo que hace el objeto en lugar de cómo lo hace.
Clase abstracta
2
Si una clase se declara abstracta con “abstract”, no puede ser instanciada
directamente sino que para usar una clase “abstract”, debe ser heredada de
otra clase, es decir proporcionar implementaciones a los métodos
abstractos en ella.
Ejemplo:
3
}
}
Fuente: elaboración propia
4
return salarioy;
}
Aquí, no puede crear una instancia de la clase Empleado, pero puede crear
una instancia de la clase Salario, y al usar esta instancia puede acceder a los
tres campos y los siete métodos de la clase Empleado como se muestra a
continuación.
5
Esto produce el siguiente resultado:
Construyendo un Empleado
Construyendo un Empleado
Llama a mailCheck con referencia a Salario –
Dentro de mailCheck de la clase Salario
Revision de Mailing para Juan Perez con salario 3600.0
Asi es que la abstracción puede aplicarse creando las clases abstractas y con
el correcto manejo de la herencia podemos aplicar en objetos que recibiran
las definiciones generales para ser implementadas, extendiéndolas en los
objetos.
6
Polimorfismo (más detallado)
Contexto
Para que un objeto use un método de otro objeto, esta comunicación basada
en mensajes debe poder llamar al método adecuado por las características
del mensaje, ya que contiene la signatura o firma del método a ejecutar.
Métodos polimórficos
La acción para escribir dos métodos con el mismo nombre pero diferente
signatura se llama sobrecarga y permite mantener el mismo nombre de
método. Con un cambio en el número, tipo y orden de los parámetros,
podremos escribir la respuesta ajustada a las necesidades del problema. Hay
que aclarar que en caso de funciones que tienen en su declaración el tipo de
dato de retorno no se pueden sobrecargar dos funciones con la misma firma
y diferentes tipos de dato de retorno. Esta situación se llama isomorfismo.
7
permite que haya polimorfismo entre dos o más objetos” (Vivona, 2012, p.
18).
8
funciones que son útiles para manipular caracteres. Estas son usadas a
menudo para convertir caracteres leídos desde el teclado. Las funciones que
escribiremos usan el hecho de que los valores “a” a “z” y “A” a la “Z”
aparecen uno a continuación del otro y en orden. Nuestra primera función
testea si un carácter ingresado es una letra minúscula o no:
Nótese que el cálculo que se hace en la función es igual al que hace la función
entre escrita más arriba. Escribamos ahora una función entre que trabaje en
caracteres:
9
objetos, se deberán escribir varios métodos con el mismo nombre y
diferentes parámetros.
10
El ejemplo anterior muestra que se aplica polimorfismo cuando se necesitan
varios constructores para las distintas situaciónes que debemos atender en
la gestión de los objetos en una aplicación y el despacho dinámico lo
permite.
11
Referencias
Bailey, D. A., y Bailey, D. W. (2000). Methods [Métodos]. En D. A. Bailey, Java
Elements: Principles of Programming in Java [Elementos de Java: Principios de
programación en Java] (pp. 90-101). Boston, MA: Mc Graw Hill.
12
Dos paradigmas
de Programación
(PE y POO)
Programación
Orientada a
Objetos
1
Dos paradigmas de
programación (PE y POO)
Introducción
2
Figura 1: Enfoque top-down de la programacion estructurada
3
Figura 2: Los datos son centralizados y accedidos por programas.
Se podría decir que un lenguaje que permite definir los tipos de datos, las
acciones sobre estos y que se puedan reusar, estaría cumpliendo la idea
central de la POO. La diferencia entre estos lenguajes se puede marcar por
los métodos de instanciación o creación de objetos que usan, por ejemplo,
las clases y, entre otros, los prototipos.
En esta materia estudiaremos, Java que usa a la clase como forma de crear
objetos.
Esta forma de trabajar le permite a Java poder instanciar objetos desde las
clases, crear nuevas clases en base a las clases preexistentes o clases-base y
hasta crear bibliotecas con clases para ser reusadas y que eviten tener que
escribir la solución a un problema ya resuelto.
4
Una clase es un molde, template o plantilla para construir múltiples
instancias de objetos similares que pueden crearse.
En la POO se aplica PE dentro de los métodos de las clases y así convive con
mejorando el paradigma orientado a objetos.
5
Referencias
Lenguajes de programación. (2016). Programación estructurada.
Recuperado de http://www.lenguajes-de-
programacion.com/programacion-estructurada.shtml
6
Lenguajes de
Programación
Programación
Orientada a
Objetos
1
Lenguajes de programación
Las computadoras funcionan por la unión del hardware, es decir, sus
componentes físicos, circuitos, discos, memoria, pantalla, teclado y mouse,
entre otros, con el software, que son los programas que le dan indicaciones
a los anteriores para que funcionen de la manera en que lo hacen. Existen
dintintos tipos de programas que necesitan comunicarse entre sí y para
entenderlos mejor, podemos distinguir entre ellos al sistema operativo, que
es el programa principal que se comunica a traves de los manejadores o
drivers (otro tipo de programa) con los dispositivos físicos, para realizar el
trabajo del todo el sistema completo y con las aplicaciones (otro tipo mas de
software) que el usuario ha determinado ejecutar en la computadora. Así,
sistema operativo, manejadores o drivers, y aplicaciones son los tipos de
programas vistos desde una clasificación inicial del software y que están
escritos en algún lenguaje de programación como C, C++, Java, entre otros.
2
Cuando las computadoras aparecieron
Lenguajes de ensamblaje
3
Los lenguajes de ensamblaje tienen una serie de ventajas en comparación
con el lenguaje de máquina, por que son más fáciles:
4
liberan de preocupaciones acerca de los detalles de máquina de bajo
nivel, como el direccionamiento de memoria y la dependencia de la
máquina;
se pueden ejecutar en diferentes marcas de ordenadores;
son más fáciles de usar que los lenguajes de ensamblaje;
son más fáciles de aprender para los programadores.
El principal problema con la programación en los primeros días fue que era
un trabajo largo y difícil y los programas a menudo no funcionaban. El
creciente reconocimiento del uso potencial de las computadoras en muchos
5
campos llevó a la evolución de los lenguajes de programación modernos,
que se volvieron más fáciles de desarrollar, usar y modificar.
En 1954, John Backus comenzó a dirigir un comité patrocinado por IBM para
desarrollar un nuevo lenguaje de programación científico-matemático. En
1957, este comité introdujo un nuevo lenguaje de alto nivel denominado
FORTRAN (formula translator) para la computadora IBM 704. FORTRAN ganó
amplia aceptación, especialmente entre los científicos y los estadísticos,
debido a su utilidad para expresar las ecuaciones matemáticas. Muchas
versiones de FORTRAN se han desarrollado ha lo largo de los años.
6
Programación estructurada. Una forma de escribir los programas
En 1970, Pascal (nombrado así por el matemático francés del siglo XVII Blaise
Pascal) fue desarrollado por Niklaus Wirth en el Instituto Federal de
Tecnología de Suiza. Uno de los principales beneficios de Pascal sobre BASIC
fue su diseño para apoyar los conceptos de programación estructurada.
7
El término programación estructurada ahora se relaciona no
sólo con la lógica de control del programa, sino con cómo se
diseñan y desarrollan los programas. Hoy en día, las personas
que hablan de programación estructurada, a menudo se
refieren a una forma sistemática de analizar los problemas
informáticos y diseñar soluciones llamadas de arriba a abajo.
En la programación de arriba abajo, el problema se
descompone en una serie de problemas más pequeños, y a
cada uno de ellos se los resuelve. Una vez que se resuelven
los problemas más pequeños, las soluciones se combinan
para resolver el problema más grande. (Patterson Hume y
Stephenson, 2000, p. 9).
8
Figura 2: Línea de tiempo de los lenguajes de programación
9
Programación orientada a objetos
La situación de la notable caída de los costos de equipamiento y una
equivalente subida de los costos de desarrollos de software desataron lo que
se llamó la crisis del software (OTAN, 1968).
10
Referencias
Alvarez, M. (2001) “Qué es la programacion orientada a objetos”
Recuperado de: https://desarrolloweb.com/articulos/499.php
Kimble, Ch. (2016). The Software Crisis. Some Notes on the background and
nature of the software crisis. Recuperado de: http://www.chris-
kimble.com/Courses/World_Med_MBA/Software_Crisis.html
11
Más sobre Clases
y Métodos
Programación
Orientada a
Objetos
1
Más sobre clases
Las clases como forma de encapsular
En Java, las clases son usadas para agrupar y manejar los detalles de
métodos relacionados. Por ejemplo, la clase de sistema provista por el JDK,
java.lang. Math, contiene funciones matemáticas simples y funciones
trigonométricas entre otras. De manera similar, cuando construimos un
programa, escribimos una sola clase que contiene todos los métodos que
sirven para correr nuestro programa.
Una aplicación típica de POO debiera consistir en varias clases y una de ellas,
solo una, contener el único punto de inicio: el método main junto a los
métodos generales, es decir que sirven a toda a la aplicación, por ejemplo,
como un menú de llamada a los distintos métodos ubicados en las restantes
clases de la aplicación. Cuando todos los métodos que necesitamos han sido
escritos, deberán ser convocados desde esta clase principal. Esta clase es
nuestro programa. Las clases, a su vez, pueden estar contenidas en packages
(paquetes). Las clases de sistema, por ejemplo la clase Math mencionada
antes, se encuentra en el package java.lang. A veces, el nombre de la clase
es interpretado como el path de directorios donde está ubicado el package.
La mayoría de los programadores escriben sus clases dentro del directorio
donde están trabajando. Este es llamado el default package (paquete por
defecto). Todas las clases dentro del default package están disponibles para
el programa principal (o la clase donde está el método main). Luego, es
posible que un programa esté compuesto por métodos guardados en
diferentes clases. En un videojuego uno podría imaginar que una clase
contiene todos los métodos que soportan los gráficos, otra guarda los
métodos de puntuación y la última guarda las rutinas relacionadas con el
dispositivo de input (teclado, mouse, etc.). Con esto queda claro que el
método main debe ser declarado public, de otra forma no podríamos correr
el programa.
Nombres de métodos
Los programas grandes conllevan un esfuerzo importante en su
planificación. En la práctica, la construcción de programas no triviales
requiere el uso de un gran número de componentes, usualmente asociados
La estructura de un
a diferentes funciones lógicas o distintos objetos dentro de los programas.
programa debería
modelar la estructura
del problema. En Java este tipo de modularización depende fuertemente del uso de
métodos.
2
Si consideramos que tenemos que realizar las siguientes tareas de
programación:
El cálculo de una lista del primer millón de números primos. Es claro que
un componente de ese programa es calcular si un número es o no primo.
La construcción de un procesador de textos.
El manejo de la ventana de ayuda es una porción lógica aislada del
programa.
El lanzamiento de una nave espacial. Las pruebas previas al vuelo las hace
(en algún nivel) una entidad lógica aislada. A su vez, estas pruebas pueden
estar agrupadas en varios módulos.
La palabra reservada static indica que este método siempre está disponible.
3
Métodos: ¿procedimientos o funciones?
La palabra reservada void indica que, una vez completado, el método no deja
o devuelve nada, los métodos que tienen esta definición se llaman
procedimientos, como veremos enseguida.
4
Como un ejemplo de declaración de un método, consideremos la
declaración del método cos que está dentro de la clase Math. Su declaración
es:
Vale aclarar que estamos viendo declaraciones en sus clases de origen y que
para ser usados, Java debe conocer la clase de origen que lo contiene, en
algún caso con Math.’nombre’ y en otros casos con el prefijo de un objeto
creado a partir de la clase correspondiente.
5
Es claro que este procedimiento tiene un finalidad muy simple. Al usuario (el
programador) no le interesa conocer los detalles de implementación y por
lo tanto, preferirá usar este método. Estos detalles son, por ejemplo, que el
tiempo en Java se mide en milisegundos o que necesitamos un ciclo para
implementar el procedimiento. Para llamar, ejecutar o invocar este
procedimiento, tipeamos el nombre seguido por una lista vacía de
parámetros:
6
Nosotros especificamos el parámetro real cuando llamamos a un
procedimiento.
espereNSegundos(60/5);
7
Referencias
Bailey, D. A., & Bailey, D. W. (2000). “Methods” (pp. en Bailey, D. A. “Java
Elements: Principles of Programming in Java”. Boston, MA: Mc Graw Hill
8
Variables y
Constantes en
Java
Programación
Orientada a
Objetos
1
Variables y constantes en Java
Uso de Java Java es un lenguaje fuertemente tipado, lo que significa que el almacenado
de datos en el programa debe ser en variables previamente declaradas que
"A pesar de ser deben tener algún tipo de dato asignado. Esto permite al compilador
internamente anticipar el uso que le dará a los datos y reservar lugar en la memoria para
complejo, Java tiene ellos. También le permite al compilador controlar que el uso de los datos es
una sensación de
consistente con los tipos que se han declarado.
simplicidad inicial”
(Beneke, 2015,
Como habíamos mencionado, el estado de un programa está determinado
goo.gl/OKF1oc).
por las variables y constantes dentro del programa. Las variables no solo
nos dan el estado inicial y final del programa, sino que van dando, paso a
paso, los estados intermedios por los que el programa pasa.
En esta lectura veremos los tipos de datos primitivos que representan las
formas más simples de datos, incluidos enteros y caracteres.
2
int j,k; //dos variables en una declaración de tipo de datos int.
que es la forma que más se utiliza. También se utiliza una tercera variante
equivalente:
miEdad = 14;
tuEdad = miEdad;
3
Tabla 1 : Operadores Java
int miEdad = 14
4
Inicialice las variables antes de usarlas
5
Tipo de datos entero
Un entero o int, i, mantiene el valor del número entero que debe ser
acumulado a la suma y otro entero, sum, mantiene los valores intermedios
de la suma.
Archivo CalculoSuma.java
// Calcula la suma de los primeros cinco numeros naturales
public class CalculoSuma {
public static void main(String args[])
{
int suma = 0;
int a = 1;
suma = suma + a; // suma vale 1
a = a+1; // a vale 2
suma = suma + i; // suma vale 3
a = a+1; // ahora a vale 3
suma = suma + a; // suma vale 6
a = a+1; // ahora a vale 4
suma = suma + a; // ahora suma vale 10
a = a+1; // ahora a vale 5
suma = suma + a; // ahora suma vale 15
System.out.println(suma); // muestra el valor de suma
}
}
Los enteros de tipo long reciben los valores con una L al final del número,
por ejemplo:
6
final long VELOCIDADLUZ = 300000000L //velocidad de la luz en metros por
segundo
archivo Suma.java
// Calculara la adicion de los primeros cinco números naturales
7
Tipo de datos numéricos de punto flotante
Los números de punto flotante son aquellos que escribimos con decimales.
Aunque nosotros estamos acostumbrados a escribir los decimales después
de una coma, Java usa la convención de escribir los decimales después de
un punto (.). Por ejemplo, nosotros diríamos tres coma veinticinco; en Java
lo escribimos 3.25. Una notación muy usada para escribir números muy
grandes o muy pequeños es la notación científica: los números son
expresados de la forma a × 10n donde a es un decimal y n es un número
entero. Por ejemplo, la luz viaja en el vacío a una velocidad aproximada de
3,00 × 108 metros por segundo. Podemos escribir el número
12/10000000000 como 1,20 × 10−9.
La notación en Java para la cantidad de días que tarda la Tierra en dar una
vuelta alrededor del Sol es 365.2422 o 3.652422E2.
Java provee dos tipos para números decimales, el tipo float y el tipo
double. El tipo float tiene un rango que va desde −3,4028 × 1038 a 3,4028 ×
1038, mientras que en los de tipo doublé, el rango va desde −1,7977 ×
10308 a 1,7977 × 10308. Los números de tipo float permiten escribir
decimales con hasta 45 decimales (y algunos más). Los números de tipo
float deben tener una f o F al final. Los números de tipo double pueden
tener (es optativa) una d o D al final. Veamos algunos ejemplos de
declaraciones de este tipo de números en Java:
double pi = 3.14159265358979323E0D
double DIASDELAÑO = 3.652422e+2
Por supuesto que en estos casos también contamos con los operadores
numéricos habituales: +, -, *, / (aquí / produce el cociente exacto).
8
( <tipo> ) <valor>
Los tipos de dato char nos permiten representar los caracteres simples. Los
valores a, B, 3 y & son todos caracteres válidos. Los valores de los
caracteres siempre aparecerán entre los símbolos y. Luego, a se refiere a
un carácter, mientras que a se podría referir a una constante o una
variable.
har grade;
grade = ’A’;
System.out.println( grade );
imprimirá
9
char firstLetter = ’a’;
System.out.println((int)firstLetter);
System.out.println(firstLetter);
97
a
System.out.print(’n’);
System.out.print(’o’);
Todos los tipos de datos primitivos Java pueden ser comparados usando el
test de igualdad (==) o el de desigualdad (!=). Los tipos numéricos o el tipo
carácter tiene un orden y pueden ser comparados usando relaciones de
orden: < (menor que), <= (menor igual que), > (mayor que), >= (mayor igual
que). Todas las condiciones anteriores devuelven true cuando el test se
verifica, y devuelven false en caso de que no se verifique. Una expresión
10
booleana es una expresión para la cual tiene sentido preguntar si es
verdadera o falsa (por ejemplo, contar < 50). Para declarar expresiones
booleanas, usamos la palabra reservada boolean. El operador unario !
invierte el valor de la expresión booleana, es decir !true es false y
viceversa.
boolean result;
int a, b;
cada una de las siguientes expresiones booleanas hacen que result sea true
11
result = ’a’ == ’A’; //minúscula y mayúscula son
//diferentes
result = !true;
result = true == false;
El resultado es true cuando a es más grande que 100 y más pequeño que
200. Podemos hacer una expresión cuyo valor es false de la siguiente
manera:
Esto no es posible, pues ningún valor puede ser menor que 100 y mayor
que 200. Una expresión que siempre es falsa es llamada una falacia. Una
expresión que siempre es verdadera es llamada una tautología.
entre = 100 < a < 200; // queremos ver si 100 < a y a < 200
12
La forma correcta de escribir esto es la que fue explicada anteriormente.
A menudo, una expresión booleana larga puede ser simplificada con poco
trabajo. Por ejemplo, es importante tener en cuenta que como true es el
elemento neutro del test de igualdad, una expresión del tipo a == true, se
puede reemplazar por a. Por otro lado, la expresión a == false, se puede
reemplazar por !a.
Conclusión:
13
Referencias
Beneke, T. (2015). A conversation with Mark Reinhold. Recuperado de
https://community.oracle.com/docs/DOC-921872
14
Ventajas de
la POO
Programación
Orientada a
Objetos
1
Ventajas de la POO
Las ventajas de la POO
Un paradigma como la POO es una ayuda en la búsqueda de la solución de
un problema. Esto es debido a que ofrece formas predefinidas de
organización de la tarea y modos de escritura que permiten acelerar el
trabajo en pos de construir la solución de software. Así podemos graficar la
obtención de una solución de Software para los problemas que se buscan
resolver:
La programación
orientada a objetos
presenta también
algunas desventajas Figura 1: Esquema del uso del paradigma POO
como pueden ser:
Cambio en la forma de
pensar de la
programación
tradicional a la
orientada a objetos.
La ejecución de
programas orientados
a objetos es más lenta.
La necesidad de
utilizar bibliotecas de
Fuente: Vivona, 2011, p. 26.
clases obliga a su
aprendizaje y
entrenamiento.
(Roldan A., 2016). Definimos las ventajas de la POO, en estas características:
2
Encontramos también el siguiente párrafo de uno de los autores mas
autorizados en la materia, Grady Booch:
La POO domina el mercado desde hace unos años y no parece disminuir, sino
al contrario, si analizamos los nuevos lenguajes y aplicaciones que han
surgido recientemente.
3
“La POO se basa en dos conceptos básicos:
Hay objetos y
Solamente se comunican a través de mensajes.
4
Referencias
Booch, G. (1996). Análisis y diseño orientado a objetos, con aplicaciones. Estados
Unidos: Addison-Wesley Iberoamericana.